219 lines
7.0 KiB
Python
Executable File
219 lines
7.0 KiB
Python
Executable File
from flask import jsonify
|
|
from datetime import date
|
|
from app.stats import stats
|
|
import datetime
|
|
from app import db
|
|
from app.classes.delivery import Delivery_Delivery
|
|
from app.classes.stats_company import Stats_Company, Stats_Company_schema
|
|
from app.classes.stats_customer import Stats_Customer, Stats_Customer_schema
|
|
|
|
|
|
def get_monday_date(date_object):
|
|
"""Gets the date of the Monday for the given date."""
|
|
|
|
# Get the day of the week as an integer (0 = Monday, 6 = Sunday)
|
|
day_of_week = date_object.weekday()
|
|
|
|
# Calculate the number of days to subtract to get to Monday
|
|
days_to_monday = day_of_week - 0 # Monday is 0
|
|
|
|
# Subtract the days from the given date to get Monday's date
|
|
monday_date = date_object - datetime.timedelta(days=days_to_monday)
|
|
|
|
return monday_date
|
|
|
|
|
|
|
|
|
|
@stats.route("/calls/add", methods=["PUT"])
|
|
def total_calls_post():
|
|
total_calls_today = (db.session
|
|
.query(Stats_Company)
|
|
.filter(Stats_Company.expected_delivery_date == date.today())
|
|
.first())
|
|
current_call_count = total_calls_today.total_calls
|
|
new_call = current_call_count + 1
|
|
total_calls_today.total_calls = new_call
|
|
|
|
db.session.add(total_calls_today)
|
|
db.session.commit()
|
|
|
|
|
|
return jsonify({"ok": True,}), 200
|
|
|
|
|
|
@stats.route("/calls/count/today", methods=["GET"])
|
|
def total_calls_today():
|
|
total_calls_today = (db.session
|
|
.query(Stats_Company)
|
|
.filter(Stats_Company.expected_delivery_date == date.today())
|
|
.count())
|
|
|
|
return jsonify({"ok": True,
|
|
'data': total_calls_today,
|
|
}), 200
|
|
|
|
|
|
@stats.route("/gallons/total/<int:driver_id>", methods=["GET"])
|
|
def total_gallons_delivered_driver(driver_id):
|
|
gallons_list = []
|
|
|
|
total_gallons = db.session\
|
|
.query(Delivery_Delivery)\
|
|
.filter(Delivery_Delivery.driver_employee_id == driver_id)\
|
|
.all()
|
|
|
|
for f in total_gallons:
|
|
gallons_list.append(f.gallons_delivered)
|
|
sum_of_gallons = (sum(gallons_list))
|
|
|
|
return jsonify({"ok": True,
|
|
'data': sum_of_gallons,
|
|
}), 200
|
|
|
|
|
|
@stats.route("/delivery/total/<int:driver_id>", methods=["GET"])
|
|
def total_deliveries_driver(driver_id):
|
|
total_stops = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.driver_employee_id == driver_id)
|
|
.count())
|
|
return jsonify({"ok": True,
|
|
'data': total_stops,
|
|
}), 200
|
|
|
|
|
|
@stats.route("/primes/total/<int:driver_id>", methods=["GET"])
|
|
def total_primes_driver(driver_id):
|
|
total_stops = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.driver_employee_id == driver_id)
|
|
.filter(Delivery_Delivery.prime == 1)
|
|
.count())
|
|
|
|
|
|
return jsonify({"ok": True,
|
|
'data': total_stops,
|
|
}), 200
|
|
|
|
@stats.route("/delivery/count/today", methods=["GET"])
|
|
def total_deliveries_today():
|
|
total_stops = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.expected_delivery_date == date.today())
|
|
.count())
|
|
return jsonify({"ok": True,
|
|
'data': total_stops,
|
|
}), 200
|
|
|
|
|
|
@stats.route("/delivery/count/delivered/today", methods=["GET"])
|
|
def total_deliveries_today_finished():
|
|
total_stops = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.expected_delivery_date == date.today())
|
|
.filter((Delivery_Delivery.delivery_status == 10))
|
|
.count())
|
|
|
|
return jsonify({"ok": True,
|
|
'data': total_stops,
|
|
}), 200
|
|
|
|
|
|
@stats.route("/user/<int:user_id>", methods=["GET"])
|
|
def get_user_stats(user_id):
|
|
"""
|
|
gets stats of user
|
|
"""
|
|
get_user = db.session \
|
|
.query(Stats_Customer) \
|
|
.filter(Stats_Customer.customer_id == user_id) \
|
|
.first()
|
|
if get_user is None:
|
|
new_stats = Stats_Customer(
|
|
customer_id = user_id,
|
|
total_calls = 1,
|
|
service_calls_total = 0,
|
|
service_calls_total_spent = 0,
|
|
service_calls_total_profit = 0,
|
|
oil_deliveries = 0,
|
|
oil_total_gallons = 0,
|
|
oil_total_spent = 0,
|
|
oil_total_profit = 0,
|
|
)
|
|
db.session.add(new_stats)
|
|
db.session.commit()
|
|
get_user = db.session \
|
|
.query(Stats_Customer) \
|
|
.filter(Stats_Customer.customer_id == user_id) \
|
|
.first()
|
|
|
|
user_schema = Stats_Customer_schema(many=False)
|
|
return jsonify(user_schema.dump(get_user))
|
|
|
|
|
|
@stats.route("/user/lastdelivery/<int:user_id>", methods=["GET"])
|
|
def get_user_last_delivery(user_id):
|
|
"""
|
|
gets users last delivery. used on profile page
|
|
"""
|
|
get_delivery= db.session \
|
|
.query(Delivery_Delivery) \
|
|
.filter(Delivery_Delivery.customer_id == user_id) \
|
|
.filter(Delivery_Delivery.delivery_status == 10) \
|
|
.order_by(Delivery_Delivery.id.desc())\
|
|
.first()
|
|
if get_delivery:
|
|
date_delivered = get_delivery.when_delivered
|
|
else:
|
|
date_delivered = "no deliveries on record"
|
|
return jsonify({"ok": True,
|
|
'date': str(date_delivered),
|
|
}), 200
|
|
|
|
|
|
@stats.route("/gallons/week", methods=["GET"])
|
|
def total_gallons_delivered_this_week():
|
|
# Get today's date
|
|
total_gallons = 0
|
|
|
|
today = datetime.date.today()
|
|
|
|
# Get the date of the Monday for today
|
|
monday = get_monday_date(today)
|
|
get_total = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.when_delivered >= monday)
|
|
.filter(Delivery_Delivery.when_delivered <= today)
|
|
.all())
|
|
for f in get_total:
|
|
total_gallons = total_gallons + f.gallons_delivered
|
|
return jsonify({"ok": True,
|
|
'total': total_gallons,
|
|
}), 200
|
|
|
|
@stats.route("/gallons/check/total/<int:user_id>", methods=["GET"])
|
|
def calculate_gallons_user(user_id):
|
|
# Get today's date
|
|
total_gallons = 0
|
|
|
|
|
|
# Get the date of the Monday for today
|
|
|
|
get_total = (db.session
|
|
.query(Delivery_Delivery)
|
|
.filter(Delivery_Delivery.customer_id == user_id)
|
|
.all())
|
|
get_user = db.session \
|
|
.query(Stats_Customer) \
|
|
.filter(Stats_Customer.customer_id == user_id) \
|
|
.first()
|
|
for f in get_total:
|
|
total_gallons = total_gallons + f.gallons_delivered
|
|
get_user.oil_total_gallons = total_gallons
|
|
db.session.add(get_user)
|
|
db.session.commit()
|
|
return jsonify({"ok": True,
|
|
}), 200
|
|
|