Files
eamco_money_api/app/routers/delivery.py
2024-07-15 18:00:33 -04:00

106 lines
3.8 KiB
Python

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}