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 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 router = APIRouter( prefix="/delivery", tags=["delivery"], 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) .filter(Delivery.id == delivery_id_order) .first()) get_money_delivery = (session.query(MoneyDelivery) .filter(MoneyDelivery.delivery_id == get_delivery.id) .first()) print(get_money_delivery) 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): now = datetime.now(timezone.utc).replace(tzinfo=None) get_delivery = (session.query(Delivery) .filter(Delivery.id == delivery_id_order) .first()) get_current_prices = (session.query(Pricing_Oil_Oil) .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 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)) # calculate prime if deliverydata.prime: prime_price = get_current_prices.price_prime else: prime_price = 0 # calculate same day if deliverydata.same_day: same_day_price = get_current_prices.price_same_day else: same_day_price = 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) new_money = MoneyDelivery( delivery_id = get_delivery.id, time_added=now, gallons_delivered=deliverydata.gallons_delivered, supplier_price=get_delivery.supplier_price, customer_price=get_delivery.customer_price, total_amount_oil=calc_total_oil, total_amount_prime=prime_price, total_amount_same_day=same_day_price, total_amount_fee= total_amount_fees_from_delivery, total_amount=total_amount_delivery, taxes_paid=total_taxes, total_profit_oil=profit_from_oil, total_profit=profit_from_stop, ) session.add(new_money) session.commit() return {"delivery_id": delivery_id_order}