375 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			375 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| from flask import request, jsonify
 | |
| from datetime import datetime
 | |
| from decimal import Decimal
 | |
| from app.delivery_data import delivery_data
 | |
| from app import db
 | |
| from app.classes.customer import Customer_Customer, Customer_Description
 | |
| from app.classes.delivery import Delivery_Delivery
 | |
| from app.classes.employee import Employee_Employee
 | |
| from app.classes.cards import Card_Card
 | |
| from app.classes.stats_employee import Stats_Employee_Oil
 | |
| from app.classes.auto import Auto_Delivery
 | |
| from app.classes.stats_customer import Stats_Customer
 | |
| 
 | |
| @delivery_data.route("/finalize/<int:delivery_id>", methods=["PUT"])
 | |
| def office_finalize_delivery(delivery_id):
 | |
|     """
 | |
|     This will make a delivery finalized from the driver
 | |
|     """
 | |
| 
 | |
|     """
 | |
|     Finalizes a delivery from office
 | |
|     """
 | |
|     now = datetime.utcnow()
 | |
|     get_delivery = db.session \
 | |
|         .query(Delivery_Delivery) \
 | |
|         .filter(Delivery_Delivery.id == delivery_id) \
 | |
|         .first()
 | |
| 
 | |
|     get_customer = db.session \
 | |
|         .query(Customer_Customer) \
 | |
|         .filter(Customer_Customer.id == get_delivery.customer_id) \
 | |
|         .first()
 | |
|     
 | |
|     get_customer_description = db.session \
 | |
|         .query(Customer_Description) \
 | |
|         .filter(Customer_Description.customer_id == get_delivery.customer_id) \
 | |
|         .first()
 | |
|     if get_customer_description is None:
 | |
|         new_customer_desc = Customer_Description(
 | |
|             customer_id = get_customer.id,
 | |
|             account_number =get_customer.account_number,
 | |
|             company_id = get_customer.company_id,
 | |
|             fill_location = None,
 | |
|             description = None,
 | |
|         )
 | |
|         db.session.add(new_customer_desc)
 | |
|         db.session.commit()
 | |
|         get_customer_description = db.session \
 | |
|             .query(Customer_Description) \
 | |
|             .filter(Customer_Description.customer_id == get_delivery.customer_id) \
 | |
|             .first()
 | |
|     delivery_driver_id = request.json["driver_employee_id"]
 | |
|     if delivery_driver_id is None:
 | |
|         delivery_driver_id = 2
 | |
|     if delivery_driver_id == 0:
 | |
|         delivery_driver_id = 2
 | |
|    
 | |
|     get_driver = (db.session
 | |
|                     .query(Employee_Employee)
 | |
|                     .filter(Employee_Employee.id == delivery_driver_id)
 | |
|                     .first())
 | |
|     
 | |
|     get_stats_employee = (db.session
 | |
|                  .query(Stats_Employee_Oil)
 | |
|                  .filter(Stats_Employee_Oil.employee_id == get_delivery.driver_employee_id)
 | |
|                  .first())
 | |
|     
 | |
|     get_stats_customer = (db.session
 | |
|                 .query(Stats_Customer)
 | |
|                 .filter(Stats_Customer.customer_id == get_customer.id)
 | |
|                 .first())
 | |
|     if get_stats_customer is None:
 | |
|         create_stats_customer = Stats_Customer(
 | |
|             customer_id = get_customer.id,
 | |
|             total_calls = 1,
 | |
|             service_calls_total = 0,
 | |
|             service_calls_total_spent = 0,
 | |
|             service_calls_total_profit = 0,
 | |
|             oil_deliveries = 1,
 | |
|             oil_total_gallons = 0,
 | |
|             oil_total_spent = 0,
 | |
|             oil_total_profit = 0,
 | |
|     
 | |
|         )
 | |
|         db.session.add(create_stats_customer)
 | |
|         db.session.flush()
 | |
|         get_stats_customer = (db.session
 | |
|                     .query(Stats_Customer)
 | |
|                     .filter(Stats_Customer.customer_id == get_customer.id)
 | |
|                     .first())
 | |
|         
 | |
|     if get_stats_employee is None:
 | |
|         create_stats = Stats_Employee_Oil(
 | |
|             employee_id = get_delivery.driver_employee_id,
 | |
|             total_deliveries = 0,
 | |
|             total_gallons_delivered = 0,
 | |
|             total_primes = 0,
 | |
|             oil_total_profit_delivered = 0,
 | |
|         )
 | |
|         db.session.add(create_stats)
 | |
|         db.session.flush()
 | |
| 
 | |
|         get_stats_employee = (db.session
 | |
|                  .query(Stats_Employee_Oil)
 | |
|                  .filter(Stats_Employee_Oil.employee_id == get_delivery.driver_employee_id)
 | |
|                  .first())
 | |
|         
 | |
| 
 | |
|  
 | |
|     customer_filled = request.json["customer_filled"]
 | |
|     if customer_filled is True:
 | |
|         customer_filled = 1
 | |
|     else:
 | |
|         customer_filled = 0
 | |
| 
 | |
|         
 | |
| 
 | |
|     if request.json["cash_recieved"]:
 | |
|         cash_amount = request.json["cash_recieved"]
 | |
|     else:
 | |
|         cash_amount = None
 | |
| 
 | |
| 
 | |
|     prime_info = request.json["prime"]
 | |
|     if prime_info is True:
 | |
|         prime_info = 1
 | |
|         current_primes = get_stats_employee.total_primes
 | |
|         newprimes = current_primes + 1
 | |
|         get_stats_employee.total_primes = newprimes
 | |
|     else:
 | |
|         prime_info = 0
 | |
| 
 | |
| 
 | |
|     gallons_delivered = request.json["gallons_delivered"]
 | |
|     cash = request.json["cash"]
 | |
|     card_payment = request.json["card"]
 | |
|     check_payment = request.json["check"]
 | |
|     other_payment = request.json["other"]
 | |
|     check_number = request.json["other"]
 | |
| 
 | |
| 
 | |
|     if request.json["credit_card_id"]:
 | |
|         card_payment_id = request.json["credit_card_id"]
 | |
|     else:
 | |
|         card_payment_id = None
 | |
| 
 | |
|     if card_payment_id is not None:
 | |
|         get_card = (db.session
 | |
|                     .query(Card_Card)
 | |
|                     .filter(Card_Card.id == card_payment_id)
 | |
|                     .filter(Card_Card.user_id == get_customer.id)
 | |
|                     .first())
 | |
|         card_id_from_customer = get_card.id
 | |
|     else:
 | |
|         card_id_from_customer = None
 | |
| 
 | |
| 
 | |
|     if cash is True and card_payment is False:
 | |
|         delivery_payment_method = 0
 | |
|     elif card_payment is True and cash is False:
 | |
|         delivery_payment_method = 1
 | |
|     elif card_payment is True and cash is True:
 | |
|         delivery_payment_method = 2
 | |
|     elif check_payment is True :
 | |
|         delivery_payment_method = 3
 | |
|     elif other_payment is True :
 | |
|         delivery_payment_method = 4
 | |
|     else:
 | |
|         delivery_payment_method = 4
 | |
| 
 | |
| 
 | |
|     same_day_info = request.json["same_day"]
 | |
|     if same_day_info is True:
 | |
|         same_day_info = 1
 | |
|     else:
 | |
|         same_day_info = 0
 | |
| 
 | |
| 
 | |
|     emergency_info = request.json["emergency"]
 | |
|     if emergency_info is True:
 | |
|         emergency_info = 1
 | |
|     else:
 | |
|         emergency_info = 0
 | |
| 
 | |
|     fill_location = request.json["fill_location"]
 | |
| 
 | |
| 
 | |
| 
 | |
|     # update driver 
 | |
|     get_delivery.driver_last_name = get_driver.employee_last_name
 | |
|     get_delivery.driver_first_name = get_driver.employee_first_name
 | |
|     get_delivery.driver_employee_id = get_driver.id
 | |
| 
 | |
|     # update delivery
 | |
|     get_delivery.when_delivered = now
 | |
|     get_delivery.gallons_delivered = gallons_delivered
 | |
|     get_delivery.prime = prime_info
 | |
|     get_delivery.emergency = emergency_info
 | |
|     get_delivery.same_day = same_day_info
 | |
|     get_delivery.payment_type = delivery_payment_method
 | |
|     get_delivery.payment_card_id = card_id_from_customer
 | |
|     get_delivery.cash_recieved = cash_amount
 | |
|     get_delivery.check_number = check_number
 | |
|     get_delivery.delivery_status = 10
 | |
|     
 | |
|     # update stats employee
 | |
|     current_deliveres = get_stats_employee.total_deliveries + 1
 | |
|     get_stats_employee.total_deliveries = current_deliveres
 | |
|     
 | |
|     current_gallons_delivered = Decimal(get_stats_employee.total_gallons_delivered) + Decimal(gallons_delivered)
 | |
|     get_stats_employee.total_gallons_delivered = current_gallons_delivered
 | |
| 
 | |
|     # update stats customer
 | |
|     current_deliveres = int(get_stats_customer.oil_deliveries) + 1
 | |
|     get_stats_customer.oil_deliveries = current_deliveres
 | |
| 
 | |
|     new_gallons = Decimal(get_stats_customer.oil_total_gallons) + Decimal(gallons_delivered)
 | |
|     get_stats_customer.oil_total_gallons = new_gallons
 | |
| 
 | |
|     new_calls = int(get_stats_customer.total_calls) + 1
 | |
|     get_stats_customer.total_calls = new_calls
 | |
| 
 | |
| 
 | |
|     # update fill location
 | |
|     get_customer_description.fill_location = fill_location
 | |
| 
 | |
|     db.session.add(get_customer_description)
 | |
|     db.session.add(get_stats_customer)
 | |
|     db.session.add(get_stats_employee)
 | |
|     db.session.add(get_delivery)
 | |
| 
 | |
|     db.session.commit()
 | |
| 
 | |
| 
 | |
|     return jsonify({
 | |
|         "ok": True,
 | |
|         'delivery': {
 | |
|             'id': get_delivery.id,
 | |
|         },
 | |
|     }), 200
 | |
| 
 | |
| 
 | |
| 
 | |
| @delivery_data.route("/driver/finalize/<int:delivery_id>", methods=["PUT"])
 | |
| def driver_finalize_delivery(delivery_id):
 | |
|     """
 | |
|     This will make a delivery finalized from the driver
 | |
|     """
 | |
| 
 | |
|     """
 | |
|     Finalizes a delivery from office
 | |
|     """
 | |
| 
 | |
| 
 | |
|     get_delivery = (db.session 
 | |
|         .query(Delivery_Delivery) 
 | |
|         .filter(Delivery_Delivery.id == delivery_id) 
 | |
|         .first())
 | |
| 
 | |
|     get_stats = (db.session
 | |
|                  .query(Stats_Employee_Oil)
 | |
|                  .filter(Stats_Employee_Oil.employee_id == get_delivery.driver_employee_id)
 | |
|                  .first())
 | |
|   
 | |
|     if get_stats is None:
 | |
|         create_stats = Stats_Employee_Oil(
 | |
|             employee_id = get_delivery.driver_employee_id,
 | |
|             total_deliveries = 0,
 | |
|             total_gallons_delivered = 0,
 | |
|             total_primes = 0,
 | |
|             oil_total_profit_delivered = 0,
 | |
|         )
 | |
|         db.session.add(create_stats)
 | |
|         db.session.flush()
 | |
| 
 | |
| 
 | |
|         get_stats = (db.session
 | |
|                  .query(Stats_Employee_Oil)
 | |
|                  .filter(Stats_Employee_Oil.employee_id == get_delivery.driver_employee_id)
 | |
|                  .first())
 | |
|     gallons_delivered = request.json["gallons_delivered"]
 | |
| 
 | |
|     gallons_delivered = Decimal(gallons_delivered)
 | |
|       
 | |
|     delivery_driver_id = request.json["driver_employee_id"]
 | |
| 
 | |
|     get_driver = (db.session
 | |
|                     .query(Employee_Employee)
 | |
|                     .filter(Employee_Employee.id == delivery_driver_id)
 | |
|                     .first())
 | |
| 
 | |
|     if get_delivery.automatic == 0:
 | |
|         customer_filled = request.json["customer_filled"]
 | |
|         if customer_filled is True:
 | |
|             customer_filled = 1
 | |
|         else:
 | |
|             customer_filled = 0
 | |
|     else:
 | |
|         customer_filled = 1
 | |
|         
 | |
| 
 | |
|     if request.json["cash_amount"]:
 | |
|         cash_amount = request.json["cash_amount"]
 | |
|     else:
 | |
|         cash_amount = None
 | |
| 
 | |
| 
 | |
| 
 | |
|     prime_info = request.json["prime"]
 | |
|     if prime_info is True:
 | |
|         prime_info = 1
 | |
|         current_primes = get_stats.total_primes
 | |
|         newprimes = current_primes + 1
 | |
|         get_stats.total_primes = newprimes
 | |
|     else:
 | |
|         prime_info = 0
 | |
| 
 | |
| 
 | |
| 
 | |
|     ## AUTOMATIC
 | |
|     if get_delivery.automatic == 1:
 | |
|         get_auto_delivery = (db.session 
 | |
|             .query(Auto_Delivery) 
 | |
|             .filter(Auto_Delivery.customer_id == get_delivery.customer_id) 
 | |
|             .first())
 | |
|         
 | |
|         get_auto_delivery.auto_status = 2
 | |
|         db.session.add(get_auto_delivery)
 | |
| 
 | |
|     get_delivery.gallons_delivered = gallons_delivered
 | |
|     
 | |
|     get_delivery.prime = prime_info
 | |
|     get_delivery.customer_filled = customer_filled
 | |
|     get_delivery.cash_recieved = cash_amount
 | |
|     
 | |
| 
 | |
|     get_delivery.driver_last_name = get_driver.employee_last_name
 | |
|     get_delivery.driver_first_name = get_driver.employee_first_name
 | |
|     get_delivery.driver_employee_id = get_driver.id
 | |
|         
 | |
|         
 | |
|     # update stats
 | |
|     current_deliveres = get_stats.total_deliveries + 1
 | |
|     get_stats.total_deliveries = current_deliveres
 | |
|     
 | |
|     current_gallons_delivered = get_stats.total_gallons_delivered + gallons_delivered
 | |
|     get_stats.total_gallons_delivered = current_gallons_delivered
 | |
|         
 | |
|     
 | |
|     # update delivery status to delivered
 | |
|     if get_delivery.automatic == 0:
 | |
|         if get_delivery.payment_type == 0:
 | |
|             get_delivery.delivery_status = 10
 | |
|         else:
 | |
|             #office needs to confirm credit card
 | |
|             get_delivery.delivery_status = 1
 | |
|     else:
 | |
|         get_delivery.delivery_status = 1
 | |
| 
 | |
| 
 | |
|     db.session.add(get_stats)
 | |
|     db.session.add(get_delivery)
 | |
| 
 | |
|     db.session.commit()
 | |
| 
 | |
| 
 | |
|     return jsonify({
 | |
|         "ok": True,
 | |
|         'delivery': {
 | |
|             'id': get_delivery.id,
 | |
|         },
 | |
|     }), 200
 | |
| 
 | |
| 
 |