199 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			199 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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
 | |
| 
 |