diff --git a/app/models/auto.py b/app/models/auto.py index 92f412d..12a7aa7 100644 --- a/app/models/auto.py +++ b/app/models/auto.py @@ -59,11 +59,12 @@ class Auto_Delivery(Base): tank_size = Column(VARCHAR(25)) house_factor = Column(DECIMAL(5, 2)) auto_status = Column(INTEGER()) + open_ticket_id = Column(Integer, nullable=True) class Tickets_Auto_Delivery(Base): __tablename__ = 'auto_tickets' - + id = Column(Integer, primary_key=True, autoincrement=True, @@ -76,7 +77,6 @@ class Tickets_Auto_Delivery(Base): customer_address = Column(VARCHAR(1000)) customer_zip = Column(VARCHAR(25)) customer_full_name = Column(VARCHAR(250)) - customer_zip = Column(VARCHAR(25)) oil_prices_id = Column(INTEGER()) fill_date = Column(DATE()) @@ -84,3 +84,7 @@ class Tickets_Auto_Delivery(Base): price_per_gallon = Column(DECIMAL(6, 2)) total_amount_customer = Column(DECIMAL(6, 2)) + + payment_type = Column(Integer, nullable=True) + payment_card_id = Column(Integer, nullable=True) + payment_status = Column(Integer, nullable=True) diff --git a/app/routers/confirm.py b/app/routers/confirm.py index 18ff681..ab67483 100644 --- a/app/routers/confirm.py +++ b/app/routers/confirm.py @@ -25,20 +25,20 @@ async def update_auto(autoid: int, request: Request): gallons_delivered = request_body['gallons_delivered'] gallons_delivered = Decimal(gallons_delivered) - - get_auto_delivery = (session - .query(Auto_Delivery) - .filter(Auto_Delivery.id == autoid) + get_auto_delivery = (session + .query(Auto_Delivery) + .filter(Auto_Delivery.id == autoid) .first()) - + gallons_put_in_home = Decimal(gallons_delivered) + customer_home_factor = get_auto_delivery.house_factor new_home_factor = calc_home_factor(gallons_put_in_home = gallons_put_in_home, current_house_factor=customer_home_factor) - + gallons_left_buffer = int(get_auto_delivery.tank_size) - 30 @@ -50,10 +50,21 @@ async def update_auto(autoid: int, request: Request): get_auto_delivery.auto_status = 1 get_auto_delivery.days_since_last_fill = 0 + # Update the associated ticket if it exists + if get_auto_delivery.open_ticket_id is not None: + get_ticket = (session + .query(Tickets_Auto_Delivery) + .filter(Tickets_Auto_Delivery.id == get_auto_delivery.open_ticket_id) + .first()) + if get_ticket: + get_ticket.gallons_delivered = gallons_delivered + get_ticket.total_amount_customer = get_ticket.price_per_gallon * gallons_delivered + session.add(get_ticket) + session.add(get_auto_delivery) session.commit() - + return ({"ok": True}), 200 @@ -61,11 +72,14 @@ async def update_auto(autoid: int, request: Request): @router.post("/auto/create/{autoid}") async def create_auto_ticket(autoid: int, request: Request): - + request_body = await request.json() gallons_delivered = request_body['gallons_delivered'] gallons_delivered = Decimal(gallons_delivered) + payment_type = request_body.get('payment_type') + payment_card_id = request_body.get('payment_card_id') + payment_status = request_body.get('payment_status') get_auto_delivery = (session @@ -92,15 +106,60 @@ async def create_auto_ticket(autoid: int, request: Request): price_per_gallon = get_todays_price.price_for_customer, total_amount_customer = total_amount, fill_date = date.today(), + payment_type = payment_type, + payment_card_id = payment_card_id, + payment_status = payment_status, ) session.add(create_new_ticket) + session.flush() # Generate the ID for create_new_ticket + + # Update the auto_delivery with the open ticket id + get_auto_delivery.open_ticket_id = create_new_ticket.id + session.add(get_auto_delivery) + + session.commit() # Commit all changes in one transaction - session.commit() - return ({ "ok": True, "auto_ticket_id":create_new_ticket.id }), 200 + +@router.put("/auto/close_ticket/{ticket_id}") +async def close_ticket(ticket_id: int): + """ + Close an auto ticket by updating payment_status to 3 and setting open_ticket_id to None on the auto delivery. + """ + ticket = session.query(Tickets_Auto_Delivery).filter(Tickets_Auto_Delivery.id == ticket_id).first() + if ticket: + ticket.payment_status = 3 + session.add(ticket) + + delivery = session.query(Auto_Delivery).filter(Auto_Delivery.open_ticket_id == ticket_id).first() + if delivery: + delivery.open_ticket_id = None + session.add(delivery) + + session.commit() + return {"ok": True}, 200 + + +@router.delete("/auto/delete_ticket/{ticket_id}") +async def delete_ticket(ticket_id: int): + """ + Delete an auto ticket and remove its reference from the associated auto delivery. + Used when authorization fails and the ticket needs to be cleaned up. + """ + ticket = session.query(Tickets_Auto_Delivery).filter(Tickets_Auto_Delivery.id == ticket_id).first() + if ticket: + session.delete(ticket) + + delivery = session.query(Auto_Delivery).filter(Auto_Delivery.open_ticket_id == ticket_id).first() + if delivery: + delivery.open_ticket_id = None + session.add(delivery) + + session.commit() + return {"ok": True}, 200 diff --git a/app/routers/delivery.py b/app/routers/delivery.py index 110f30a..8fd7235 100644 --- a/app/routers/delivery.py +++ b/app/routers/delivery.py @@ -21,7 +21,7 @@ def get_delivery_customers(): automatics = ( session.query(Auto_Delivery) - .filter(Auto_Delivery.auto_status == 1) + .filter(Auto_Delivery.auto_status.in_([1, 3])) .order_by(Auto_Delivery.estimated_gallons_left.asc()) .all() ) @@ -42,23 +42,38 @@ def get_delivery_for_specific_driver(driver_employee_id: int): return JSONResponse(content=jsonable_encoder(automatics), status_code=200) - -@router.get("/{auto_id}", status_code=200) -def get_auto(auto_id): - +@router.get("/delivery/{ticket_id}", status_code=200) +def get_delivery_by_openticket(ticket_id): + print("here") get_delivery = ( session.query(Auto_Delivery) - .filter(Auto_Delivery.id == auto_id) + .filter(Auto_Delivery.id == ticket_id) .first() ) + + return JSONResponse(content=jsonable_encoder(get_delivery), status_code=200) + +@router.get("/finddelivery/{ticket_id}", status_code=200) +def get_delivery_by_openticket(ticket_id): + print("here") + get_delivery = ( + session.query(Auto_Delivery) + .filter(Auto_Delivery.open_ticket_id == ticket_id) + .first() + ) + return JSONResponse(content=jsonable_encoder(get_delivery), status_code=200) -@router.get("/delivery/{delivery_id_order}", status_code=200) -def get_delivery(delivery_id_order): - +@router.get("/autoticket/{delivery_id_order}", status_code=200) +def get_auto_by_ticket(delivery_id_order): + print("here1") + print(delivery_id_order) + print(delivery_id_order) + print(delivery_id_order) + print(delivery_id_order) get_delivery = ( session.query(Tickets_Auto_Delivery) .filter(Tickets_Auto_Delivery.id == delivery_id_order) @@ -77,5 +92,20 @@ def get_autos_customers(customer_id): .order_by(Tickets_Auto_Delivery.id.desc()) .all() ) - - return JSONResponse(content=jsonable_encoder(get_delivery), status_code=200) \ No newline at end of file + + return JSONResponse(content=jsonable_encoder(get_delivery), status_code=200) + + +@router.put("/update_status/{auto_id}", status_code=200) +def update_auto_status(auto_id: int): + update_status = ( + session.query(Auto_Delivery) + .filter(Auto_Delivery.id == auto_id) + .first() + ) + + if update_status: + update_status.auto_status = 3 + session.commit() + return {"message": "Auto status updated to 3"} + return {"error": "Auto delivery not found"}