1038 lines
32 KiB
Python
Executable File
1038 lines
32 KiB
Python
Executable File
from flask import request, jsonify
|
|
from flask_login import current_user
|
|
from datetime import date, datetime, timedelta
|
|
from app.delivery import delivery
|
|
from app import db
|
|
from sqlalchemy import or_
|
|
from app.classes.customer import (Customer_Customer)
|
|
from app.classes.delivery import (Delivery_Delivery,
|
|
Delivery_Delivery_schema,
|
|
Delivery_Notes_Driver,
|
|
)
|
|
from app.classes.employee import Employee_Employee
|
|
from app.classes.cards import Card_Card
|
|
from app.classes.pricing import Pricing_Oil_Oil
|
|
from app.classes.auth import Auth_User
|
|
from app.classes.promo import Promo_Promo
|
|
from app.classes.stats_customer import Stats_Customer
|
|
|
|
|
|
@delivery.route("/updatestatus", methods=["GET"])
|
|
def move_deliveries():
|
|
"""
|
|
This will get deliveries not done
|
|
"""
|
|
counter = 0
|
|
today = date.today()
|
|
deliveries_today = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.delivery_status != 10)
|
|
.filter(Delivery_Delivery.delivery_status != 5)
|
|
.filter(Delivery_Delivery.delivery_status != 1)
|
|
.filter(Delivery_Delivery.expected_delivery_date == today)
|
|
.all())
|
|
for f in deliveries_today:
|
|
if f.delivery_status != 2:
|
|
f.delivery_status = 2
|
|
db.session.add(f)
|
|
counter = counter + 1
|
|
|
|
tomm = date.today() + timedelta(days=1)
|
|
deliveries_tom = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.delivery_status != 10)
|
|
.filter(Delivery_Delivery.delivery_status != 5)
|
|
.filter(Delivery_Delivery.delivery_status != 1)
|
|
.filter(Delivery_Delivery.expected_delivery_date == tomm)
|
|
.all())
|
|
for g in deliveries_tom:
|
|
if g.delivery_status != 3:
|
|
g.delivery_status = 3
|
|
db.session.add(g)
|
|
counter = counter + 1
|
|
|
|
|
|
|
|
deliveries_waiting = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.delivery_status != 10)
|
|
.filter(Delivery_Delivery.delivery_status != 5)
|
|
.filter(Delivery_Delivery.delivery_status != 1)
|
|
.filter(Delivery_Delivery.expected_delivery_date != tomm)
|
|
.filter(Delivery_Delivery.expected_delivery_date > today)
|
|
.all())
|
|
for r in deliveries_waiting:
|
|
if r.delivery_status != 0:
|
|
r.delivery_status = 0
|
|
db.session.add(r)
|
|
counter = counter + 1
|
|
|
|
|
|
deliveries_pending = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.delivery_status != 10)
|
|
.filter(Delivery_Delivery.delivery_status != 5)
|
|
.filter(Delivery_Delivery.delivery_status != 1)
|
|
.filter(Delivery_Delivery.expected_delivery_date < today)
|
|
.all())
|
|
for t in deliveries_pending:
|
|
if t.delivery_status != 9:
|
|
t.delivery_status = 9
|
|
db.session.add(t)
|
|
counter = counter + 1
|
|
|
|
|
|
if counter > 0:
|
|
db.session.commit()
|
|
return jsonify({
|
|
"ok": True,
|
|
'update': True,
|
|
}), 200
|
|
|
|
return jsonify({"ok": True}), 200
|
|
|
|
|
|
|
|
@delivery.route("/<int:delivery_id>", methods=["GET"])
|
|
def get_a_delivery(delivery_id):
|
|
"""
|
|
"""
|
|
get_delivery = db.session\
|
|
.query(Delivery_Delivery)\
|
|
.filter(Delivery_Delivery.id == delivery_id)\
|
|
.first()
|
|
|
|
return jsonify({
|
|
"ok": True,
|
|
'delivery': {
|
|
'id': get_delivery.id,
|
|
'customer_id': get_delivery.customer_id,
|
|
'delivery_expected_delivery_date': str(get_delivery.expected_delivery_date),
|
|
'delivery_asked_for_fill': get_delivery.customer_asked_for_fill,
|
|
'delivery_gallons_ordered': get_delivery.gallons_ordered,
|
|
'dispatcher_notes_taken': get_delivery.dispatcher_notes,
|
|
'delivery_prime': get_delivery.prime,
|
|
'delivery_emergency': get_delivery.emergency,
|
|
'delivery_same_day': get_delivery.same_day,
|
|
'when_ordered': str(get_delivery.when_ordered),
|
|
'customer_price': get_delivery.customer_price,
|
|
'delivery_status': get_delivery.delivery_status,
|
|
'payment_type': get_delivery.payment_type,
|
|
'payment_card_id': get_delivery.payment_card_id,
|
|
'driver_employee_id': get_delivery.driver_employee_id,
|
|
'driver_first_name': get_delivery.driver_first_name,
|
|
'driver_last_name': get_delivery.driver_last_name,
|
|
'promo_id': get_delivery.promo_id,
|
|
'promo_money_discount': get_delivery.promo_money_discount,
|
|
|
|
},
|
|
}), 200
|
|
|
|
|
|
|
|
@delivery.route("/past1/<int:customer_id>", methods=["GET"])
|
|
def get_customer_past_delivery1(customer_id):
|
|
|
|
get_customer_past_delivery = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.customer_id == customer_id)
|
|
.limit(5))
|
|
|
|
delivery_schema = Delivery_Delivery_schema(many=True)
|
|
return jsonify(delivery_schema.dump(get_customer_past_delivery))
|
|
|
|
|
|
@delivery.route("/past2/<int:customer_id>", methods=["GET"])
|
|
def get_customer_past_delivery2(customer_id):
|
|
|
|
get_customer_past_delivery = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.customer_id == customer_id)
|
|
.offset(5)
|
|
.limit(5))
|
|
|
|
delivery_schema = Delivery_Delivery_schema(many=True)
|
|
return jsonify(delivery_schema.dump(get_customer_past_delivery))
|
|
|
|
|
|
@delivery.route("/order/<int:delivery_id>", methods=["GET"])
|
|
def get_a_specific_delivery(delivery_id):
|
|
|
|
get_delivery = db.session\
|
|
.query(Delivery_Delivery)\
|
|
.filter(Delivery_Delivery.id == delivery_id)\
|
|
.first()
|
|
delivery_schema = Delivery_Delivery_schema(many=False)
|
|
return jsonify(delivery_schema.dump(get_delivery))
|
|
|
|
|
|
|
|
|
|
@delivery.route("/cash/<int:delivery_id>/<int:type_of_payment>", methods=["PUT"])
|
|
def update_a_delivery_payment(delivery_id, type_of_payment):
|
|
"""
|
|
This update a delivery for example if user updates to a fill
|
|
"""
|
|
|
|
get_delivery = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.id == delivery_id)
|
|
.first())
|
|
|
|
get_delivery.payment_type = type_of_payment
|
|
|
|
db.session.add(get_delivery)
|
|
db.session.commit()
|
|
|
|
return jsonify({"ok": True}), 200
|
|
|
|
|
|
|
|
@delivery.route("/all/<int:page>", methods=["GET"])
|
|
def get_deliveries_all(page):
|
|
"""
|
|
This will get deliveries not done
|
|
"""
|
|
per_page_amount = 50
|
|
if page is None:
|
|
offset_limit = 0
|
|
elif page == 1:
|
|
offset_limit = 0
|
|
else:
|
|
offset_limit = (per_page_amount * page) - per_page_amount
|
|
|
|
|
|
deliveries = (db.session
|
|
.query(Delivery_Delivery)
|
|
.order_by(Delivery_Delivery.id.desc())
|
|
.limit(per_page_amount).offset(offset_limit))
|
|
|
|
|
|
customer_schema = Delivery_Delivery_schema(many=True)
|
|
return jsonify(customer_schema.dump(deliveries))
|
|
|
|
|
|
|
|
@delivery.route("/customer/<int:customer_id>/<int:page>", methods=["GET"])
|
|
def get_deliveries_from_customer(customer_id, page):
|
|
"""
|
|
This will get deliveries not done
|
|
"""
|
|
|
|
per_page_amount = 50
|
|
if page is None:
|
|
offset_limit = 0
|
|
elif page == 1:
|
|
offset_limit = 0
|
|
else:
|
|
offset_limit = (per_page_amount * page) - per_page_amount
|
|
|
|
deliveries = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.customer_id == customer_id)
|
|
.order_by(Delivery_Delivery.id.desc())
|
|
.limit(per_page_amount).offset(offset_limit))
|
|
|
|
customer_schema = Delivery_Delivery_schema(many=True)
|
|
return jsonify(customer_schema.dump(deliveries))
|
|
|
|
|
|
|
|
@delivery.route("/all/order/<int:page>", methods=["GET"])
|
|
def get_deliveries_not_delivered(page):
|
|
|
|
"""
|
|
This will get deliveries not done
|
|
"""
|
|
per_page_amount = 50
|
|
if page is None:
|
|
offset_limit = 0
|
|
elif page == 1:
|
|
offset_limit = 0
|
|
else:
|
|
offset_limit = (per_page_amount * page) - per_page_amount
|
|
|
|
deliveries = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.delivery_status != 10)
|
|
.order_by(Delivery_Delivery.when_ordered.desc())
|
|
.limit(per_page_amount).offset(offset_limit))
|
|
|
|
customer_schema = Delivery_Delivery_schema(many=True)
|
|
return jsonify(customer_schema.dump(deliveries))
|
|
|
|
|
|
|
|
@delivery.route("/waiting/<int:page>", methods=["GET"])
|
|
def get_deliveries_waiting(page):
|
|
"""
|
|
This will get deliveries not done
|
|
"""
|
|
per_page_amount = 50
|
|
if page is None:
|
|
offset_limit = 0
|
|
elif page == 1:
|
|
offset_limit = 0
|
|
else:
|
|
offset_limit = (per_page_amount * page) - per_page_amount
|
|
|
|
deliveries = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(or_(Delivery_Delivery.delivery_status == 0,
|
|
)
|
|
)
|
|
.filter(Delivery_Delivery.expected_delivery_date != date.today())
|
|
.order_by(Delivery_Delivery.when_ordered.desc())
|
|
.limit(per_page_amount).offset(offset_limit))
|
|
|
|
customer_schema = Delivery_Delivery_schema(many=True)
|
|
return jsonify(customer_schema.dump(deliveries))
|
|
|
|
|
|
|
|
|
|
@delivery.route("/pending/<int:page>", methods=["GET"])
|
|
def get_deliveries_pending(page):
|
|
"""
|
|
"""
|
|
per_page_amount = 50
|
|
if page is None:
|
|
offset_limit = 0
|
|
elif page == 1:
|
|
offset_limit = 0
|
|
else:
|
|
offset_limit = (per_page_amount * page) - per_page_amount
|
|
|
|
deliveries = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.delivery_status == 9)
|
|
.order_by(Delivery_Delivery.delivery_status.asc())
|
|
.limit(per_page_amount).offset(offset_limit))
|
|
|
|
customer_schema = Delivery_Delivery_schema(many=True)
|
|
return jsonify(customer_schema.dump(deliveries))
|
|
|
|
@delivery.route("/outfordelivery/<int:page>", methods=["GET"])
|
|
def get_deliveries_outfordelivery(page):
|
|
"""
|
|
"""
|
|
per_page_amount = 50
|
|
if page is None:
|
|
offset_limit = 0
|
|
elif page == 1:
|
|
offset_limit = 0
|
|
else:
|
|
offset_limit = (per_page_amount * page) - per_page_amount
|
|
|
|
deliveries = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.delivery_status == 2)
|
|
.order_by(Delivery_Delivery.delivery_status.asc())
|
|
.limit(per_page_amount).offset(offset_limit))
|
|
|
|
customer_schema = Delivery_Delivery_schema(many=True)
|
|
return jsonify(customer_schema.dump(deliveries))
|
|
|
|
|
|
|
|
@delivery.route("/tommorrow/<int:page>", methods=["GET"])
|
|
def get_deliveries_tommorrow(page):
|
|
"""
|
|
This will get deliveries not done
|
|
"""
|
|
tomm = date.today() + timedelta(days=1)
|
|
per_page_amount = 50
|
|
if page is None:
|
|
offset_limit = 0
|
|
elif page == 1:
|
|
offset_limit = 0
|
|
else:
|
|
offset_limit = (per_page_amount * page) - per_page_amount
|
|
|
|
deliveries = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.delivery_status == 3)
|
|
.order_by(Delivery_Delivery.when_ordered.desc())
|
|
.limit(per_page_amount).offset(offset_limit))
|
|
|
|
|
|
customer_schema = Delivery_Delivery_schema(many=True)
|
|
return jsonify(customer_schema.dump(deliveries))
|
|
|
|
|
|
|
|
@delivery.route("/finalized/<int:page>", methods=["GET"])
|
|
def get_deliveries_finalized(page):
|
|
"""
|
|
This will get deliveries not done
|
|
"""
|
|
per_page_amount = 50
|
|
if page is None:
|
|
offset_limit = 0
|
|
elif page == 1:
|
|
offset_limit = 0
|
|
else:
|
|
offset_limit = (per_page_amount * page) - per_page_amount
|
|
|
|
deliveries = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.delivery_status == 10)
|
|
.order_by(Delivery_Delivery.when_ordered.desc())
|
|
.limit(per_page_amount).offset(offset_limit))
|
|
|
|
customer_schema = Delivery_Delivery_schema(many=True)
|
|
return jsonify(customer_schema.dump(deliveries))
|
|
|
|
|
|
|
|
@delivery.route("/cancelled/<int:page>", methods=["GET"])
|
|
def get_deliveries_cancelled(page):
|
|
"""
|
|
This will get deliveries not done
|
|
"""
|
|
per_page_amount = 50
|
|
if page is None:
|
|
offset_limit = 0
|
|
elif page == 1:
|
|
offset_limit = 0
|
|
else:
|
|
offset_limit = (per_page_amount * page) - per_page_amount
|
|
|
|
deliveries = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.delivery_status == 1)
|
|
.order_by(Delivery_Delivery.when_ordered.desc())
|
|
.limit(per_page_amount).offset(offset_limit))
|
|
|
|
customer_schema = Delivery_Delivery_schema(many=True)
|
|
return jsonify(customer_schema.dump(deliveries))
|
|
|
|
|
|
|
|
@delivery.route("/partialdelivery/<int:page>", methods=["GET"])
|
|
def get_deliveries_partial(page):
|
|
"""
|
|
This will get deliveries not done
|
|
"""
|
|
per_page_amount = 50
|
|
if page is None:
|
|
offset_limit = 0
|
|
elif page == 1:
|
|
offset_limit = 0
|
|
else:
|
|
offset_limit = (per_page_amount * page) - per_page_amount
|
|
|
|
deliveries = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.delivery_status == 4)
|
|
.order_by(Delivery_Delivery.when_ordered.desc())
|
|
.limit(per_page_amount).offset(offset_limit))
|
|
|
|
customer_schema = Delivery_Delivery_schema(many=True)
|
|
return jsonify(customer_schema.dump(deliveries))
|
|
|
|
|
|
|
|
@delivery.route("/issue/<int:page>", methods=["GET"])
|
|
def get_deliveries_issue(page):
|
|
"""
|
|
This will get deliveries not done
|
|
"""
|
|
per_page_amount = 50
|
|
if page is None:
|
|
offset_limit = 0
|
|
elif page == 1:
|
|
offset_limit = 0
|
|
else:
|
|
offset_limit = (per_page_amount * page) - per_page_amount
|
|
|
|
deliveries = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.delivery_status == 5)
|
|
.order_by(Delivery_Delivery.when_ordered.desc())
|
|
.limit(per_page_amount).offset(offset_limit))
|
|
|
|
customer_schema = Delivery_Delivery_schema(many=True)
|
|
return jsonify(customer_schema.dump(deliveries))
|
|
|
|
|
|
|
|
@delivery.route("/time/today", methods=["GET"])
|
|
def get_deliveries_today():
|
|
"""
|
|
This will get today's deliveries
|
|
"""
|
|
|
|
deliveries = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.delivery_status == 2)
|
|
.all())
|
|
|
|
customer_schema = Delivery_Delivery_schema(many=True)
|
|
return jsonify(customer_schema.dump(deliveries))
|
|
|
|
|
|
|
|
@delivery.route("/edit/<int:delivery_id>", methods=["POST"])
|
|
def edit_a_delivery(delivery_id):
|
|
"""
|
|
This will edit a delivery using a delivery id
|
|
"""
|
|
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_today_price = db.session\
|
|
.query(Pricing_Oil_Oil)\
|
|
.order_by(Pricing_Oil_Oil.id.desc())\
|
|
.first()
|
|
|
|
if not get_delivery:
|
|
return jsonify({"error": False}), 200
|
|
else:
|
|
gallons_ordered = request.json["gallons_ordered"]
|
|
delivery_status = request.json["delivery_status"]
|
|
when_to_deliver = request.json["expected_delivery_date"]
|
|
when_ordered = request.json["created_delivery_date"]
|
|
customer_wants_fill = request.json["customer_asked_for_fill"]
|
|
card_payment = request.json["credit"]
|
|
cash_payment = request.json["cash"]
|
|
emergency_info = request.json["emergency"]
|
|
dispatcher_notes = request.json["dispatcher_notes_taken"]
|
|
|
|
delivery_driver_id = request.json["driver_employee_id"]
|
|
|
|
get_driver = (db.session
|
|
.query(Employee_Employee)
|
|
.filter(Employee_Employee.id == delivery_driver_id)
|
|
.first())
|
|
|
|
## promo
|
|
|
|
try:
|
|
if request.json["promo_id"]:
|
|
promo_id = request.json["promo_id"]
|
|
else:
|
|
promo_id = None
|
|
except:
|
|
promo_id = None
|
|
|
|
if promo_id is not None:
|
|
get_promo_data = (db.session
|
|
.query(Promo_Promo)
|
|
.filter(Promo_Promo.id == promo_id)
|
|
.first())
|
|
promo_id_get_delivery =get_promo_data.id,
|
|
promo_money_discount_get_delivery = get_promo_data.money_off_delivery
|
|
else:
|
|
promo_id_get_delivery =None
|
|
promo_money_discount_get_delivery = None
|
|
|
|
|
|
|
|
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_payment is True and card_payment is False:
|
|
delivery_payment_method = 0
|
|
|
|
elif card_payment is True and cash_payment is False:
|
|
delivery_payment_method = 1
|
|
|
|
elif card_payment is True and cash_payment is True:
|
|
delivery_payment_method = 2
|
|
else:
|
|
delivery_payment_method = 3
|
|
|
|
if customer_wants_fill is True:
|
|
customer_wants_fill = 1
|
|
gallons_ordered = 250
|
|
else:
|
|
customer_wants_fill = 0
|
|
|
|
same_day_info = request.json["same_day"]
|
|
if same_day_info is True:
|
|
same_day_info = 1
|
|
else:
|
|
same_day_info = 0
|
|
|
|
if emergency_info is True:
|
|
emergency_asked = 1
|
|
else:
|
|
emergency_asked = 0
|
|
|
|
prime_info = request.json["prime"]
|
|
if prime_info is True:
|
|
prime_info = 1
|
|
else:
|
|
prime_info = 0
|
|
|
|
# Pricing
|
|
|
|
if customer_wants_fill == 1:
|
|
# Fill
|
|
precharge_amount = (250 * get_today_price.price_for_customer)
|
|
else:
|
|
# Gallons
|
|
precharge_amount = int(gallons_ordered) * get_today_price.price_for_customer
|
|
|
|
|
|
# if prime/emergency/sameday
|
|
if same_day_info == 1 and prime_info == 0:
|
|
total_precharge_amount = precharge_amount + get_today_price.price_same_day
|
|
|
|
elif prime_info == 1 and same_day_info == 0:
|
|
total_precharge_amount = precharge_amount + get_today_price.price_prime
|
|
|
|
elif emergency_asked == 1:
|
|
total_precharge_amount = precharge_amount + get_today_price.price_emergency
|
|
|
|
else:
|
|
total_precharge_amount = precharge_amount + get_today_price.price_prime + get_today_price.price_same_day
|
|
|
|
|
|
|
|
get_delivery.dispatcher_notes = dispatcher_notes
|
|
get_delivery.delivery_status = delivery_status
|
|
get_delivery.gallons_ordered = gallons_ordered
|
|
get_delivery.customer_asked_for_fill = customer_wants_fill
|
|
get_delivery.expected_delivery_date = when_to_deliver
|
|
get_delivery.when_ordered = when_ordered
|
|
get_delivery.prime = prime_info
|
|
get_delivery.same_day = same_day_info
|
|
get_delivery.gallons_ordered = gallons_ordered
|
|
get_delivery.payment_type = delivery_payment_method
|
|
get_delivery.payment_card_id = card_id_from_customer
|
|
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
|
|
get_delivery.promo_id = promo_id_get_delivery
|
|
get_delivery.promo_money_discount = promo_money_discount_get_delivery
|
|
|
|
get_delivery.pre_charge_amount = total_precharge_amount
|
|
get_delivery.total_price = precharge_amount
|
|
|
|
db.session.add(get_delivery)
|
|
db.session.commit()
|
|
|
|
return jsonify({
|
|
"ok": True,
|
|
'customer': {
|
|
'user_id': get_customer.id,
|
|
},
|
|
}), 200
|
|
|
|
|
|
@delivery.route("/create/<int:user_id>", methods=["POST"])
|
|
def create_a_delivery(user_id):
|
|
"""
|
|
This will create a delivery using a customer id
|
|
"""
|
|
get_customer = db.session\
|
|
.query(Customer_Customer)\
|
|
.filter(Customer_Customer.id == user_id)\
|
|
.first()
|
|
|
|
get_today_price = db.session\
|
|
.query(Pricing_Oil_Oil)\
|
|
.order_by(Pricing_Oil_Oil.id.desc())\
|
|
.first()
|
|
|
|
|
|
if not get_customer:
|
|
return jsonify({"ok": False}), 200
|
|
else:
|
|
|
|
gallons_ordered = request.json["gallons_ordered"]
|
|
customer_wants_fill = request.json["customer_asked_for_fill"]
|
|
when_to_deliver = request.json["expected_delivery_date"]
|
|
dispatcher_notes_taken = request.json["dispatcher_notes_taken"]
|
|
prime_info = request.json["prime"]
|
|
same_day_info = request.json["same_day"]
|
|
emergency_info = request.json["emergency"]
|
|
delivery_driver_id = request.json["driver_employee_id"]
|
|
|
|
|
|
card_payment = request.json["credit"]
|
|
cash_payment = request.json["cash"]
|
|
check_payment = request.json["check"]
|
|
other_payment = request.json["other"]
|
|
|
|
## promo
|
|
try:
|
|
if request.json["promo_id"]:
|
|
promo_id = request.json["promo_id"]
|
|
else:
|
|
promo_id = None
|
|
except:
|
|
promo_id = None
|
|
if promo_id is not None:
|
|
get_promo_data = (db.session
|
|
.query(Promo_Promo)
|
|
.filter(Promo_Promo.id == promo_id)
|
|
.first())
|
|
promo_id_get_delivery =get_promo_data.id,
|
|
promo_money_discount_get_delivery = get_promo_data.money_off_delivery
|
|
else:
|
|
promo_id_get_delivery =None
|
|
promo_money_discount_get_delivery = None
|
|
|
|
|
|
# 0 = cash only
|
|
# 1 = credit only
|
|
# 2 = credit /cash
|
|
# 3 = check
|
|
# 4 = other
|
|
# 5 = unknown
|
|
|
|
if cash_payment is True:
|
|
delivery_payment_method = 0
|
|
if card_payment is True:
|
|
delivery_payment_method = 1
|
|
if check_payment is True:
|
|
delivery_payment_method = 3
|
|
if other_payment is True:
|
|
delivery_payment_method = 4
|
|
|
|
|
|
get_driver = (db.session
|
|
.query(Employee_Employee)
|
|
.filter(Employee_Employee.id == delivery_driver_id)
|
|
.first())
|
|
|
|
driver_l_name = get_driver.employee_last_name
|
|
driver_f_name = get_driver.employee_first_name
|
|
driver_emp_id = get_driver.id
|
|
|
|
try:
|
|
if request.json["credit_card_id"]:
|
|
card_payment_id = request.json["credit_card_id"]
|
|
else:
|
|
card_payment_id = None
|
|
except:
|
|
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 customer_wants_fill is True:
|
|
customer_fill_up = 1
|
|
gallons_ordered = 250
|
|
else:
|
|
customer_fill_up = 0
|
|
gallons_ordered = request.json["gallons_ordered"]
|
|
|
|
if emergency_info is True:
|
|
emergency_asked = 1
|
|
else:
|
|
emergency_asked = 0
|
|
|
|
if prime_info is True:
|
|
prime_asked = 1
|
|
else:
|
|
prime_asked = 0
|
|
|
|
if same_day_info is True:
|
|
same_day_asked = 1
|
|
else:
|
|
same_day_asked = 0
|
|
|
|
|
|
customer_filled_name = get_customer.customer_first_name + ' ' + get_customer.customer_last_name
|
|
now = datetime.utcnow()
|
|
|
|
|
|
# Pricing
|
|
|
|
if customer_fill_up == 1:
|
|
# Fill
|
|
precharge_amount = (250 * get_today_price.price_for_customer)
|
|
else:
|
|
# Gallons
|
|
precharge_amount = int(gallons_ordered) * get_today_price.price_for_customer
|
|
|
|
|
|
# if prime/emergency/sameday
|
|
if same_day_asked == 1 and prime_asked == 0:
|
|
total_precharge_amount = precharge_amount + get_today_price.price_same_day
|
|
|
|
elif prime_asked == 1 and same_day_asked == 0:
|
|
total_precharge_amount = precharge_amount + get_today_price.price_prime
|
|
|
|
elif emergency_asked == 1:
|
|
total_precharge_amount = precharge_amount + get_today_price.price_emergency
|
|
|
|
else:
|
|
total_precharge_amount = precharge_amount + get_today_price.price_prime + get_today_price.price_same_day
|
|
|
|
|
|
new_delivery = Delivery_Delivery(
|
|
customer_id=get_customer.id,
|
|
customer_address=get_customer.customer_address,
|
|
customer_name=customer_filled_name,
|
|
customer_town=get_customer.customer_town,
|
|
customer_state=get_customer.customer_state,
|
|
customer_zip=get_customer.customer_zip,
|
|
gallons_ordered=gallons_ordered,
|
|
customer_asked_for_fill=customer_fill_up,
|
|
gallons_delivered=0,
|
|
customer_filled=0,
|
|
delivery_status=0,
|
|
when_ordered=now,
|
|
when_delivered=None,
|
|
expected_delivery_date=when_to_deliver,
|
|
automatic=get_customer.customer_automatic,
|
|
automatic_id=None,
|
|
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=dispatcher_notes_taken,
|
|
prime=prime_asked,
|
|
same_day=same_day_asked,
|
|
emergency=emergency_asked,
|
|
payment_type=delivery_payment_method,
|
|
payment_card_id=card_id_from_customer,
|
|
pre_charge_amount=total_precharge_amount,
|
|
total_price=precharge_amount,
|
|
final_price=0,
|
|
driver_last_name=driver_l_name,
|
|
driver_first_name=driver_f_name,
|
|
driver_employee_id=driver_emp_id,
|
|
promo_id=promo_id_get_delivery,
|
|
promo_money_discount=promo_money_discount_get_delivery
|
|
|
|
)
|
|
|
|
get_stats_customer = (db.session
|
|
.query(Stats_Customer)
|
|
.filter(Stats_Customer.customer_id == get_customer.id)
|
|
.first())
|
|
|
|
new_calls = int(get_stats_customer.total_calls) + 1
|
|
get_stats_customer.total_calls = new_calls
|
|
|
|
|
|
db.session.add(get_stats_customer)
|
|
|
|
db.session.add(new_delivery)
|
|
db.session.commit()
|
|
|
|
return jsonify({
|
|
"ok": True,
|
|
'delivery_id': new_delivery.id,
|
|
}), 200
|
|
|
|
|
|
|
|
@delivery.route("/cancel/<int:delivery_id>", methods=["POST"])
|
|
def cancel_a_delivery(delivery_id):
|
|
"""
|
|
This will cancel a delivery
|
|
"""
|
|
get_delivery = db.session\
|
|
.query(Delivery_Delivery)\
|
|
.filter(Delivery_Delivery.id == delivery_id)\
|
|
.first()
|
|
|
|
get_delivery.delivery_status = 1
|
|
db.session.add(get_delivery)
|
|
db.session.commit()
|
|
|
|
return jsonify({"ok": True}), 200
|
|
|
|
|
|
@delivery.route("/delivered/<int:delivery_id>", methods=["POST"])
|
|
def mark_as_delivered(delivery_id):
|
|
"""
|
|
This will mark the delivery as delivered
|
|
"""
|
|
# how many gallons delivered
|
|
gallons_put_into_tank = request.json["gallons_put_into_tank"]
|
|
# was the tank full or not
|
|
was_it_filled = request.json["filled"]
|
|
|
|
get_delivery = db.session\
|
|
.query(Delivery_Delivery)\
|
|
.filter(Delivery_Delivery.id == delivery_id)\
|
|
.first()
|
|
|
|
get_delivery.delivery_status = 1
|
|
get_delivery.gallons_delivered = gallons_put_into_tank
|
|
get_delivery.customer_filled = was_it_filled
|
|
|
|
db.session.add(get_delivery)
|
|
db.session.commit()
|
|
|
|
return jsonify({"ok": True}), 200
|
|
|
|
|
|
@delivery.route("/partial/<int:delivery_id>", methods=["POST"])
|
|
def partial_delivery(delivery_id):
|
|
"""
|
|
This will mark the delivery as delivered
|
|
"""
|
|
# how many gallons delivered
|
|
gallons_put_into_tank = request.json["gallons_put_into_tank"]
|
|
|
|
get_delivery = db.session\
|
|
.query(Delivery_Delivery)\
|
|
.filter(Delivery_Delivery.id == delivery_id)\
|
|
.first()
|
|
|
|
get_delivery.delivery_status = 4
|
|
get_delivery.gallons_delivered = gallons_put_into_tank
|
|
get_delivery.customer_filled = 0
|
|
|
|
db.session.add(get_delivery)
|
|
db.session.commit()
|
|
|
|
return jsonify({"ok": True}), 200
|
|
|
|
|
|
@delivery.route("/note/technician/<int:delivery_id>", methods=["PUT"])
|
|
def delivery_note_driver(delivery_id):
|
|
|
|
"""
|
|
Update a service call diagnosis
|
|
"""
|
|
#
|
|
driver_notes = request.json["driver_notes"]
|
|
now = datetime.utcnow()
|
|
|
|
user = (db.session
|
|
.query(Auth_User)
|
|
.filter(Auth_User.id == current_user.id)
|
|
.first())
|
|
|
|
get_delivery = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.id == delivery_id)
|
|
.first())
|
|
|
|
create_new_note = Delivery_Notes_Driver(
|
|
delivery_id=get_delivery.id,
|
|
driver_comments=driver_notes,
|
|
time_added=now,
|
|
driver_id=user.id,
|
|
driver_name=user.user,
|
|
)
|
|
|
|
db.session.add(create_new_note)
|
|
db.session.commit()
|
|
|
|
return jsonify({"ok": True}), 200
|
|
|
|
|
|
@delivery.route("/delete/<int:delivery_id>", methods=["DELETE"])
|
|
def delete_call(delivery_id):
|
|
"""
|
|
delete a delivery call
|
|
"""
|
|
get_call_to_delete = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.id == delivery_id)
|
|
.first())
|
|
db.session.delete(get_call_to_delete)
|
|
db.session.commit()
|
|
|
|
return jsonify({"ok": True}), 200
|
|
|
|
|
|
|
|
|
|
@delivery.route("/total/<int:delivery_id>", methods=["GET"])
|
|
def calculate_total(delivery_id):
|
|
"""
|
|
This will get deliveries not done
|
|
"""
|
|
|
|
|
|
get_delivery = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.id == delivery_id)
|
|
.first())
|
|
if get_delivery.promo_id:
|
|
get_promo_data = (db.session
|
|
.query(Promo_Promo)
|
|
.filter(Promo_Promo.id == get_delivery.promo_id)
|
|
.first())
|
|
discount_gallon_price = get_delivery.customer_price - get_promo_data.money_off_delivery
|
|
|
|
total_amount_after_discount = (get_delivery.gallons_ordered * discount_gallon_price)
|
|
|
|
|
|
discount = (get_delivery.gallons_ordered * get_delivery.customer_price) - total_amount_after_discount
|
|
|
|
else:
|
|
discount = 0
|
|
total_amount_after_discount = 0
|
|
get_price_query = (db.session
|
|
.query(Pricing_Oil_Oil)
|
|
.order_by(Pricing_Oil_Oil.date.desc())
|
|
.first())
|
|
|
|
if get_delivery.prime == 1:
|
|
priceprime = float(get_price_query.price_prime)
|
|
else:
|
|
priceprime = 0
|
|
|
|
if get_delivery.emergency == 1:
|
|
priceemergency = float(get_price_query.price_emergency)
|
|
else:
|
|
priceemergency = 0
|
|
|
|
if get_delivery.same_day == 1:
|
|
pricesameday = float(get_price_query.price_same_day)
|
|
else:
|
|
pricesameday = 0
|
|
|
|
total = float(get_delivery.total_price) + float(priceprime) + float(pricesameday) + float(priceemergency)
|
|
priceprime = round(priceprime, 2)
|
|
pricesameday = round(pricesameday, 2)
|
|
priceemergency = round(priceemergency, 2)
|
|
priceprime = round(priceprime, 2)
|
|
total_amount_after_discount = round(total_amount_after_discount, 2)
|
|
discount = round(discount, 2)
|
|
total = round(total, 2)
|
|
|
|
|
|
return jsonify({
|
|
"ok": True,
|
|
'priceprime': priceprime,
|
|
'pricesameday': pricesameday,
|
|
'priceemergency': priceemergency,
|
|
'total_amount':total,
|
|
'discount': discount,
|
|
'total_amount_after_discount':total_amount_after_discount,
|
|
}), 200 |