added promo

This commit is contained in:
2024-10-07 17:35:09 -04:00
parent 033a751441
commit 726f71aed0
4 changed files with 135 additions and 72 deletions

View File

@@ -2,15 +2,15 @@ from typing import Annotated
from datetime import datetime, timezone
from fastapi.responses import JSONResponse
from fastapi.encoders import jsonable_encoder
from fastapi import APIRouter, Form, Body
from fastapi import APIRouter
from database import session
from app.schema.delivery import DeliverPricing
from app.models.delivery import Delivery
from app.models.money import MoneyDelivery
from app.models.pricing import Pricing_Oil_Oil, Pricing_Taxes
from app.models.pricing import Pricing_Oil_Oil
from app.models.promo import Promo_Promo
router = APIRouter(
prefix="/delivery",
@@ -18,6 +18,7 @@ router = APIRouter(
responses={404: {"description": "Not found"}},
)
@router.get("/order/money/{delivery_id_order}", status_code=201)
async def add_delivery(delivery_id_order):
get_delivery = (session.query(Delivery)
@@ -26,14 +27,13 @@ async def add_delivery(delivery_id_order):
get_money_delivery = (session.query(MoneyDelivery)
.filter(MoneyDelivery.delivery_id == get_delivery.id)
.first())
return JSONResponse(content=jsonable_encoder(get_money_delivery), status_code=200)
@router.post("/add/{delivery_id_order}", status_code=201)
async def add_delivery(delivery_id_order, deliverydata: DeliverPricing):
async def calculate_delivery_final(delivery_id_order):
now = datetime.now(timezone.utc).replace(tzinfo=None)
@@ -45,46 +45,54 @@ async def add_delivery(delivery_id_order, deliverydata: DeliverPricing):
.order_by(Pricing_Oil_Oil.id.desc())
.first())
get_current_taxes = (session.query(Pricing_Taxes)
.filter(Pricing_Taxes.state_id == get_delivery.customer_state)
.order_by(Pricing_Taxes.id.desc())
.first())
get_promo_data = (session
.query(Promo_Promo)
.filter(Promo_Promo.id == get_delivery.promo_id)
.first())
# get total amount for just oil delivered
calc_total_oil = (float(deliverydata.gallons_delivered) * float(get_delivery.customer_price))
calc_total_oil_supplier = (float(deliverydata.gallons_delivered) * float(get_delivery.supplier_price))
calc_total_oil = (float(get_delivery.gallons_delivered) * float(get_delivery.customer_price))
calc_total_oil_supplier = (float(get_delivery.gallons_delivered) * float(get_delivery.supplier_price))
# calculate prime
if deliverydata.prime:
if get_delivery.prime:
prime_price = get_current_prices.price_prime
else:
prime_price = 0
# calculate same day
if deliverydata.same_day:
if get_delivery.same_day:
same_day_price = get_current_prices.price_same_day
else:
same_day_price = 0
# promotion
if get_delivery.promo_id is not None:
get_promo_amount = (float(get_delivery.gallons_delivered)) *(float(get_promo_data.money_off_delivery))
discount = (float(calc_total_oil)) - (float(get_promo_amount))
else:
discount = 0
# calculate fees
total_amount_fees_from_delivery = (float(same_day_price) + float(prime_price))
# total amount
total_amount_delivery = (float(same_day_price) + float(prime_price) +float(calc_total_oil))
# calculate taxes
tax_oil = (float(get_current_taxes.taxes_oil) * float(deliverydata.gallons_delivered))
tax_other = (float(get_current_taxes.taxes_oil) * float(total_amount_fees_from_delivery))
total_taxes = (float(tax_oil) + float(tax_other))
# calculate profit
profit_from_oil = float(calc_total_oil) - float(calc_total_oil_supplier)
profit_from_stop = (float(profit_from_oil) + float(total_amount_fees_from_delivery)) - float(total_taxes)
# add it all together
profit_from_stop = float(profit_from_oil) + float(total_amount_fees_from_delivery) - float(discount)
new_money = MoneyDelivery(
delivery_id = get_delivery.id,
time_added=now,
gallons_delivered=deliverydata.gallons_delivered,
gallons_delivered=get_delivery.gallons_delivered,
supplier_price=get_delivery.supplier_price,
customer_price=get_delivery.customer_price,
total_amount_oil=calc_total_oil,
@@ -92,7 +100,9 @@ async def add_delivery(delivery_id_order, deliverydata: DeliverPricing):
total_amount_same_day=same_day_price,
total_amount_fee= total_amount_fees_from_delivery,
total_amount=total_amount_delivery,
taxes_paid=total_taxes,
taxes_paid=None,
total_discount_amount=get_promo_data.money_off_delivery,
total_discount_total=discount,
total_profit_oil=profit_from_oil,
total_profit=profit_from_stop,
)