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) .filter(Delivery.delivery_status == 0) .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", status_code=200) def get_delivery_customers(): auto = ( session.query(Auto_Delivery) .order_by(Auto_Delivery.estimated_gallons_left.desc()) .first() ) auto.id = auto.id session.add(auto) session.commit() 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") 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()) count = 0 for f in list_added_tickets: count =+ 1 get_auto_delivery = (session.query(Auto_Delivery) .filter(Auto_Delivery.id == f) .first()) get_auto_delivery.auto_status = 1 session.add(get_auto_delivery) 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()) see_if_delivery_exists = (session.query(Delivery) .filter(Delivery.driver_employee_id == get_driver.id) .filter(Delivery.automatic_id == get_auto_delivery.id) .filter(Delivery.delivery_status == 0) .first()) if see_if_delivery_exists is None: 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, automatic_id=get_auto_delivery.id, 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() return ({ "ok": True, 'count': count, })