From 8273f063edf1bb5d55ff732a5bcf64ee3375a507 Mon Sep 17 00:00:00 2001 From: Edwin Eames Date: Wed, 24 Jul 2024 17:22:14 -0400 Subject: [PATCH] Updated auto pre testing --- app/models/auto.py | 3 +- app/models/cards.py | 30 ++++++++ app/models/employee.py | 30 ++++++++ app/routers/delivery.py | 166 ++++++++++++++++++++++++++++++++++++++-- app/routers/main.py | 12 +-- 5 files changed, 229 insertions(+), 12 deletions(-) create mode 100644 app/models/cards.py create mode 100644 app/models/employee.py diff --git a/app/models/auto.py b/app/models/auto.py index a19d989..2846868 100644 --- a/app/models/auto.py +++ b/app/models/auto.py @@ -46,4 +46,5 @@ class Auto_Delivery(Base): estimated_gallons_left_prev_day = Column(INTEGER()) tank_height = Column(VARCHAR(25)) tank_size = Column(VARCHAR(25)) - house_factor = Column(DECIMAL(5, 2)) \ No newline at end of file + house_factor = Column(DECIMAL(5, 2)) + auto_status = Column(INTEGER()) \ No newline at end of file diff --git a/app/models/cards.py b/app/models/cards.py new file mode 100644 index 0000000..de40f06 --- /dev/null +++ b/app/models/cards.py @@ -0,0 +1,30 @@ + +from sqlalchemy import (Column, Integer, + DECIMAL, Text, BOOLEAN, + VARCHAR, TIMESTAMP, + Date, INTEGER) +from datetime import datetime, timezone +from database import Base + + +class Card_Card(Base): + __tablename__ = 'card_card' + __bind_key__ = 'eamco' + __table_args__ = {"schema": "public"} + + id = Column(Integer, + primary_key=True, + autoincrement=True, + unique=False) + date_added = Column(TIMESTAMP(), default=datetime.utcnow()) + user_id = Column(INTEGER()) + card_number = Column(VARCHAR(50)) + last_four_digits = Column(INTEGER()) + name_on_card = Column(VARCHAR(500)) + expiration_month = Column(INTEGER()) + expiration_year = Column(INTEGER()) + type_of_card = Column(VARCHAR(500)) + security_number = Column(INTEGER()) + accepted_or_declined = Column(INTEGER()) + main_card = Column(BOOLEAN()) + \ No newline at end of file diff --git a/app/models/employee.py b/app/models/employee.py new file mode 100644 index 0000000..350d74c --- /dev/null +++ b/app/models/employee.py @@ -0,0 +1,30 @@ +from sqlalchemy import (Column, INTEGER, + DECIMAL, TEXT, + VARCHAR, TIMESTAMP, DATE) +import datetime +from database import Base + + +class Employee_Employee(Base): + __tablename__ = 'employee_employee' + __bind_key__ = 'eamco' + __table_args__ = {"schema": "public"} + + id = Column(INTEGER, + primary_key=True, + autoincrement=True, + unique=False) + + user_id = Column(INTEGER) + employee_first_name = Column(VARCHAR(250)) + employee_last_name = Column(VARCHAR(250)) + employee_apt = Column(VARCHAR(250)) + employee_address = Column(VARCHAR(1000)) + employee_town = Column(VARCHAR(140)) + employee_state = Column(VARCHAR(140)) + employee_zip = Column(VARCHAR(25)) + employee_birthday = Column(DATE()) + employee_type = Column(INTEGER) + employee_phone_number = Column(VARCHAR(25)) + employee_start_date = Column(DATE()) + employee_end_date = Column(DATE(), default=None) diff --git a/app/routers/delivery.py b/app/routers/delivery.py index d76fae0..b3e7230 100644 --- a/app/routers/delivery.py +++ b/app/routers/delivery.py @@ -1,10 +1,16 @@ -from fastapi import APIRouter +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( @@ -13,8 +19,20 @@ router = APIRouter( 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() + ) -@router.get("/{delivery_id_order}", status_code=201) + 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 = ( @@ -22,7 +40,6 @@ def get_delivery(delivery_id_order): .filter(Auto_Delivery.id == delivery_id_order) .first() ) - return JSONResponse(content=jsonable_encoder(get_delivery), status_code=200) @@ -37,6 +54,145 @@ def get_delivery_customers(): .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 + diff --git a/app/routers/main.py b/app/routers/main.py index 7af6969..87da09d 100644 --- a/app/routers/main.py +++ b/app/routers/main.py @@ -1,10 +1,10 @@ -from fastapi import APIRouter - +from fastapi import APIRouter, Request +from datetime import datetime from database import session from pyowm import OWM from app.models.auto import Auto_Delivery, Auto_Temp - +from app.models.delivery import Delivery router = APIRouter( prefix="/main", @@ -14,10 +14,10 @@ router = APIRouter( -@router.route("/update", methods=["GET"]) + +@router.get("/update", status_code=200) def update_auto_customers(): - today_temp = session\ .query(Auto_Temp)\ .order_by(Auto_Temp.id.desc())\ @@ -63,7 +63,7 @@ def update_auto_customers(): return ({"ok": True}), 200 -@router.get("/temp") +@router.get("/temp", status_code=200) def update_temp(): temps = []