from fastapi import APIRouter, Request from fastapi.responses import JSONResponse from fastapi.encoders import jsonable_encoder from datetime import datetime from database import session from pyowm import OWM from decimal import Decimal from app.models.auto import Auto_Delivery from app.models.delivery import Delivery from app.models.pricing import Pricing_Oil_Oil from app.models.cards import Card_Card from app.models.employee import Employee_Employee router = APIRouter( prefix="/delivery", tags=["delivery"], responses={404: {"description": "Not found"}}, ) @router.get("/driver/{driver_employee_id}", status_code=200) def get_delivery_for_specific_driver(driver_employee_id: int): automatics = ( session.query(Delivery) .filter(Delivery.driver_employee_id == driver_employee_id) .filter(Delivery.automatic == 1) .all() ) return JSONResponse(content=jsonable_encoder(automatics), status_code=200) @router.get("/{delivery_id_order}", status_code=200) def get_delivery(delivery_id_order): get_delivery = ( session.query(Auto_Delivery) .filter(Auto_Delivery.id == delivery_id_order) .first() ) return JSONResponse(content=jsonable_encoder(get_delivery), status_code=200) @router.get("/all/customers") def get_delivery_customers(): automatics = ( session.query(Auto_Delivery) .order_by(Auto_Delivery.estimated_gallons_left.desc()) .all() ) return JSONResponse(content=jsonable_encoder(automatics), status_code=200) @router.post("/create/delivery") async def create_delivery_from_automatic(request: Request): # client_host = await request.body() # body_text = client_host.decode("utf-8") # print(body_text) list_added_tickets = [] now = datetime.utcnow() request_body = await request.json() for f in request_body['values']: list_added_tickets.append(f) driver_id = request_body['driver_employee_id'] get_today_price = session\ .query(Pricing_Oil_Oil)\ .order_by(Pricing_Oil_Oil.id.desc())\ .first() precharge_amount = (250 * get_today_price.price_for_customer) get_driver = (session.query(Employee_Employee) .filter(Employee_Employee.id == driver_id) .first()) for f in list_added_tickets: get_auto_delivery = (session.query(Auto_Delivery) .filter(Auto_Delivery.id == f) .first()) get_main_credit_card = (session.query(Card_Card) .filter(Card_Card.user_id == get_auto_delivery.customer_id) .filter(Card_Card.main_card == True) .first()) get_auto_delivery.auto_status = 1 session.add(get_auto_delivery) new_delivery = Delivery( customer_id=get_auto_delivery.customer_id, customer_address=get_auto_delivery.customer_address, customer_name=get_auto_delivery.customer_full_name, customer_town=get_auto_delivery.customer_town, customer_state=get_auto_delivery.customer_state, customer_zip=get_auto_delivery.customer_zip, gallons_ordered=250, customer_asked_for_fill=1, gallons_delivered=0, customer_filled=0, delivery_status=0, when_ordered=now, when_delivered=None, expected_delivery_date=None, automatic=1, oil_id=get_today_price.id, supplier_price=get_today_price.price_from_supplier, customer_price=get_today_price.price_for_customer, customer_temperature=None, dispatcher_notes=None, prime=0, same_day=0, payment_type=1, payment_card_id=get_main_credit_card.id, pre_charge_amount=precharge_amount, total_price=precharge_amount, final_price=0, driver_last_name=get_driver.employee_last_name, driver_first_name=get_driver.employee_first_name, driver_employee_id=get_driver.id, ) session.add(new_delivery) session.commit() {"ok": True, "status": 200} @router.put("/add/delivery") async def add_delivery(request: Request): now = datetime.utcnow request_body = await request.json() gallons_delivered = request_body['gallons'] gallons_delivered = Decimal(gallons_delivered) delivery_id = request_body['delivery_id'] get_delivery = (session .query(Delivery) .filter(Delivery.id == delivery_id) .first()) get_auto_delivery = (session .query(Auto_Delivery) .filter(Auto_Delivery.customer_id == get_delivery.customer_id) .first()) customer_home_factor = get_auto_delivery.house_factor if gallons_delivered == 150: get_auto_delivery.house_factor = customer_home_factor elif 200.01 >= gallons_delivered: get_auto_delivery.house_factor = customer_home_factor + 1 elif 170.01 <= gallons_delivered <= 200: get_auto_delivery.house_factor = customer_home_factor + 1.5 elif 150.01 <= gallons_delivered <= 199: get_auto_delivery.house_factor = customer_home_factor + 1.25 elif 120.01 <= gallons_delivered <= 150: get_auto_delivery.house_factor = customer_home_factor - .25 elif 90.01 <= gallons_delivered <= 120: get_auto_delivery.house_factor = customer_home_factor - .50 elif 0.01 <= gallons_delivered <= 90: get_auto_delivery.house_factor = customer_home_factor - .75 else: get_auto_delivery.house_factor = customer_home_factor get_auto_delivery.tank_height = 'Full' get_auto_delivery.last_fill = now get_auto_delivery.estimated_gallons_left = 240 get_auto_delivery.estimated_gallons_left_prev_day = 240 session.add(get_auto_delivery) return ({"ok": True}), 200