From 6fab39bf860a76d6c91ac4c459424d4d9609d854 Mon Sep 17 00:00:00 2001 From: Anekdotin Date: Fri, 29 Mar 2024 19:56:59 -0400 Subject: [PATCH] working money and delivery dates --- app/__init__.py | 1 + app/classes/company.py | 4 +- app/classes/money.py | 6 +-- app/classes/taxes.py | 16 ++++++++ app/delivery/views.py | 76 ++++++++++++++++++++++++++++++++---- app/delivery_data/views.py | 50 ++++++++++-------------- app/delivery_status/views.py | 3 +- app/employees/views.py | 26 +++++++++--- app/info/views.py | 21 ++++++++-- app/query/views.py | 50 ++++++++++++------------ app/stats/views.py | 29 +++++++++++++- 11 files changed, 202 insertions(+), 80 deletions(-) create mode 100644 app/classes/taxes.py diff --git a/app/__init__.py b/app/__init__.py index 8b31aa9..fd3beef 100755 --- a/app/__init__.py +++ b/app/__init__.py @@ -206,6 +206,7 @@ from .stats import stats as stats_blueprint app.register_blueprint(stats_blueprint, url_prefix='/stats') with app.app_context(): + db.configure_mappers() db.create_all() db.session.commit() diff --git a/app/classes/company.py b/app/classes/company.py index 362bac5..c0a398b 100755 --- a/app/classes/company.py +++ b/app/classes/company.py @@ -15,8 +15,8 @@ class Company_Company(db.Model): company_dba_name = db.Column(db.VARCHAR(250)) company_llc_name = db.Column(db.VARCHAR(250)) company_town = db.Column(db.VARCHAR(140)) - company_state = db.Column(db.VARCHAR(140)) - company_zip = db.Column(db.INTEGER) + company_state = db.Column(db.INTEGER) + company_zip = db.Column(db.VARCHAR(25)) class Company_Company_schema(ma.SQLAlchemyAutoSchema): diff --git a/app/classes/money.py b/app/classes/money.py index f17e611..1d7d129 100644 --- a/app/classes/money.py +++ b/app/classes/money.py @@ -13,7 +13,7 @@ class Money_delivery(db.Model): unique=False) delivery_id = db.Column(db.INTEGER) - time_added = db.Column(db.TIMESTAMP(), datetime.now(timezone.utc).replace(tzinfo=None)) + time_added = db.Column(db.TIMESTAMP(), default=datetime.utcnow()) gallons_delivered = db.Column(db.DECIMAL(50, 2)) supplier_price = db.Column(db.DECIMAL(50, 2)) customer_price = db.Column(db.DECIMAL(50, 2)) @@ -23,7 +23,7 @@ class Money_delivery(db.Model): total_amount_same_day = db.Column(db.DECIMAL(50, 2)) total_amount_fee = db.Column(db.DECIMAL(50, 2)) total_amount = db.Column(db.DECIMAL(50, 2)) - + total_profit_oil = db.Column(db.DECIMAL(50, 2)) taxes_paid = db.Column(db.DECIMAL(50, 2)) total_profit = db.Column(db.DECIMAL(50, 2)) @@ -39,7 +39,7 @@ class Pricing_Taxes(db.Model): __bind_key__ = 'eamco' __table_args__ = {"schema": "public"} - id = db.Column(dn.Integer, + id = db.Column(db.Integer, primary_key=True, autoincrement=True, unique=False) diff --git a/app/classes/taxes.py b/app/classes/taxes.py new file mode 100644 index 0000000..67358e4 --- /dev/null +++ b/app/classes/taxes.py @@ -0,0 +1,16 @@ +from app import db, ma +from datetime import datetime + + +class Pricing_Taxes(db.Model): + __tablename__ = 'taxes_pricing' + __bind_key__ = 'eamco' + __table_args__ = {"schema": "public"} + + id = db.Column(db.Integer, + primary_key=True, + autoincrement=True, + unique=False) + state_id = db.Column(db.Integer) + taxes_oil = db.Column(db.DECIMAL(50, 2)) + taxes_other = db.Column(db.DECIMAL(50, 2)) diff --git a/app/delivery/views.py b/app/delivery/views.py index a991727..6f6127c 100755 --- a/app/delivery/views.py +++ b/app/delivery/views.py @@ -12,7 +12,7 @@ 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.money import Money_delivery @@ -24,6 +24,7 @@ def get_a_delivery(delivery_id): .query(Delivery_Delivery)\ .filter(Delivery_Delivery.id == delivery_id)\ .first() + get_taxes = db.session.query(Money_delivery).all() return jsonify({ "ok": True, 'delivery': { @@ -111,7 +112,8 @@ def get_deliveries_from_customer(customer_id, page): deliveries = (db.session .query(Delivery_Delivery) - .filter(Delivery_Delivery.customer_id == customer_id) + .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) @@ -200,7 +202,7 @@ def get_deliveries_outfordelivery(page): deliveries = (db.session .query(Delivery_Delivery) .filter(Delivery_Delivery.delivery_status == 2) - .order_by(Delivery_Delivery.when_ordered.desc()) + .order_by(Delivery_Delivery.delivery_status.asc()) .limit(per_page_amount).offset(offset_limit)) customer_schema = Delivery_Delivery_schema(many=True) @@ -348,10 +350,6 @@ def edit_a_delivery(delivery_id): .filter(Delivery_Delivery.id == delivery_id) \ .first() - get_today_price = (db.session - .query(Pricing_Oil_Oil) - .order_by(Pricing_Oil_Oil.id.desc()) - .first()) get_customer = db.session \ .query(Customer_Customer) \ @@ -705,4 +703,66 @@ def service_delete_call(delivery_id): db.session.delete(get_call_to_delete) db.session.commit() - return jsonify({"ok": True}), 200 \ No newline at end of file + return jsonify({"ok": True}), 200 + + +@delivery.route("/updatestatus/outfordelivery", methods=["GET"]) +def move_waiting_to_outtodelivery(): + """ + This will get deliveries not done + """ + counter = 0 + + deliveries = (db.session + .query(Delivery_Delivery) + .filter(Delivery_Delivery.delivery_status == 0) + .filter(Delivery_Delivery.expected_delivery_date == date.today()) + .all()) + for f in deliveries: + print(f.id) + f.delivery_status = 2 + db.session.add(f) + counter = counter + 1 + if counter > 0: + db.session.commit() + return jsonify({ + "ok": True, + 'update': True, + }), 200 + + return jsonify({"ok": True}), 200 + + +@delivery.route("/total/", 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()) + get_price_query = (db.session + .query(Pricing_Oil_Oil) + .order_by(Pricing_Oil_Oil.date.desc()) + .first()) + + + if get_delivery.prime == 1: + priceprime = get_price_query.price_prime + else: + priceprime = 0 + if get_delivery.same_day == 1: + pricesameday = get_price_query.price_prime + else: + pricesameday = 0 + + total = float(get_delivery.total_price) + float(priceprime) + float(pricesameday) + return jsonify({ + "ok": True, + 'priceprime': priceprime, + 'pricesameday': pricesameday, + 'total_amount':total + }), 200 \ No newline at end of file diff --git a/app/delivery_data/views.py b/app/delivery_data/views.py index 2357f45..cb973ab 100755 --- a/app/delivery_data/views.py +++ b/app/delivery_data/views.py @@ -5,8 +5,7 @@ from app.classes.customer import Customer_Customer from app.classes.delivery import Delivery_Delivery 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.stats_employee import Stats_Employee_Oil +from app.classes.stats_employee import Stats_Employee_Oil, Stats_Employee_Office @@ -25,11 +24,6 @@ def office_finalize_delivery(delivery_id): .filter(Delivery_Delivery.id == delivery_id) \ .first() - get_today_price = db.session \ - .query(Pricing_Oil_Oil) \ - .order_by(Pricing_Oil_Oil.id.desc()) \ - .first() - get_customer = db.session \ .query(Customer_Customer) \ .filter(Customer_Customer.id == get_delivery.customer_id) \ @@ -65,7 +59,6 @@ def office_finalize_delivery(delivery_id): else: delivery_payment_method = 3 - same_day_info = request.json["same_day"] if same_day_info is True: same_day_info = 1 @@ -107,33 +100,31 @@ def driver_finalize_delivery(delivery_id): """ Finalizes a delivery from office """ + print(request.json) get_delivery = (db.session .query(Delivery_Delivery) .filter(Delivery_Delivery.id == delivery_id) .first()) - get_today_price = (db.session - .query(Pricing_Oil_Oil) - .order_by(Pricing_Oil_Oil.id.desc()) - .first()) - + print(get_delivery.id) get_stats = (db.session .query(Stats_Employee_Oil) - .filter(Stats_Employee_Oil == get_delivery.driver_employee_id) + .filter(Stats_Employee_Oil.employee_id == get_delivery.driver_employee_id) .first()) - + + gallons_delivered = request.json["gallons_delivered"] - if request.json["driver_employee_id"]: - delivery_driver_id = request.json["delivery_driver_id"] - get_driver = (db.session - .query(Employee_Employee) - .filter(Employee_Employee.id == delivery_driver_id) - .first()) - same_driver = False - else: - same_driver = True - + + + delivery_driver_id = request.json["driver_employee_id"] + + get_driver = (db.session + .query(Employee_Employee) + .filter(Employee_Employee.id == delivery_driver_id) + .first()) + + customer_filled = request.json["customer_filled"] if customer_filled is True: customer_filled = 1 @@ -160,10 +151,10 @@ def driver_finalize_delivery(delivery_id): get_delivery.customer_filled = customer_filled get_delivery.cash_recieved = cash_amount - if same_driver == False: - 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.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 @@ -174,7 +165,6 @@ def driver_finalize_delivery(delivery_id): get_stats.total_gallons_delivered = current_gallons_delivered - # update delivery status to delivered if get_delivery.payment_type == 0: get_delivery.delivery_status = 10 diff --git a/app/delivery_status/views.py b/app/delivery_status/views.py index 614dd24..ed80d0f 100755 --- a/app/delivery_status/views.py +++ b/app/delivery_status/views.py @@ -1,10 +1,9 @@ from flask import jsonify - from datetime import date, timedelta from app.delivery_status import deliverystatus from app import db from sqlalchemy import or_ -from datetime import datetime + from app.classes.delivery import (Delivery_Delivery, Delivery_Delivery_schema, ) diff --git a/app/employees/views.py b/app/employees/views.py index f956e2e..28a9f05 100755 --- a/app/employees/views.py +++ b/app/employees/views.py @@ -1,13 +1,12 @@ from flask import request, jsonify -from flask_login import current_user + from sqlalchemy import or_ -from datetime import date, timedelta + from flask_login import login_required from app.employees import employees from app import db -from datetime import datetime from app.classes.employee import Employee_Employee, Employee_Employee_schema - +from app.classes.stats_employee import Stats_Employee_Oil, Stats_Employee_Office @employees.route("/", methods=["GET"]) @login_required @@ -132,8 +131,25 @@ def employee_create(): employee_phone_number=e_phone_number, ) + db.session.add(new_employee) - db.session.commit() + db.session.flush() + + new_stats_office = Stats_Employee_Office( + employee_id = new_employee.id, + total_orders = 0, + total_credit_cards_proccessed = 0, + ) + db.session.add(new_stats_office) + + new_stats_oil = Stats_Employee_Oil( + employee_id = new_employee.id, + total_deliveries = 0, + total_gallons_delivered = 0, + total_primes = 0, + oil_total_profit_delivered = 0, + ) + db.session.add(new_stats_oil) return jsonify({"ok": True, 'user_id': new_employee.id, diff --git a/app/info/views.py b/app/info/views.py index f7a2dde..da25ac0 100755 --- a/app/info/views.py +++ b/app/info/views.py @@ -1,21 +1,36 @@ from flask import jsonify from app.info import info from app import db -from app.classes.pricing import Pricing_Oil_Oil +from app.classes.pricing import Pricing_Oil_Oil, Pricing_Oil_Oil_schema from app.classes.admin import Admin_Company @info.route("/price/oil", methods=["GET"]) -def get_oil_price(): +def get_oil_price_today(): get_price_query = (db.session .query(Pricing_Oil_Oil) .order_by(Pricing_Oil_Oil.date.desc()) .first()) return jsonify({"ok": True, - 'price': get_price_query.price_for_customer, + 'price_from_supplier': get_price_query.price_from_supplier, + 'price_for_customer': get_price_query.price_for_customer, + 'price_for_employee': get_price_query.price_for_employee, + 'price_same_day': get_price_query.price_same_day, + 'price_prime': get_price_query.price_prime, }), 200 +@info.route("/price/oil/table", methods=["GET"]) +def get_pricing(): + get_price_query = (db.session + .query(Pricing_Oil_Oil) + .order_by(Pricing_Oil_Oil.date.desc()) + .first()) + delivery_schema = Pricing_Oil_Oil_schema(many=False) + return jsonify(delivery_schema.dump(get_price_query)) + + + @info.route("/company", methods=["GET"]) diff --git a/app/query/views.py b/app/query/views.py index 81f0437..81a6e6b 100755 --- a/app/query/views.py +++ b/app/query/views.py @@ -1,20 +1,28 @@ -from flask import request, jsonify -from flask_login import current_user -from datetime import date, timedelta +from flask import jsonify from app.query import query from app import db -from datetime import datetime -from app.classes.query import Query_StateList, \ - Query_DeliveryStatusList, \ - Query_DeliveryStatusList_Schema, \ - Query_StateList_Schema, \ - Query_CustomerTypeList, \ - Query_CustomerTypeList_Schema,\ - Query_EmployeeTypeList, \ - Query_EmployeeTypeList_Schema,\ - Query_ServiceTypeList,\ - Query_ServiceTypeList_Schema +from app.classes.admin import Admin_Company +from app.classes.query import (Query_StateList, + Query_DeliveryStatusList, + Query_DeliveryStatusList_Schema, + Query_StateList_Schema, + Query_CustomerTypeList, + Query_CustomerTypeList_Schema, + Query_EmployeeTypeList, + Query_EmployeeTypeList_Schema) +@query.route("/company/", methods=["GET"]) +def get_company(company_id): + """ + This will get the company from env variable + """ + + query_data = (db.session + .query(Admin_Company) + .filter(Admin_Company.id == company_id) + .first()) + delivery_schema = Query_DeliveryStatusList_Schema(many=False) + return jsonify(delivery_schema.dump(query_data)) @query.route("/states", methods=["GET"]) def get_state_list(): @@ -43,17 +51,6 @@ def get_customer_type_list(): return jsonify(customer_schema.dump(query_data)) -@query.route("/servicetype", methods=["GET"]) -def get_service_type_list(): - """ - This will get types of service - """ - - query_data = db.session \ - .query(Query_ServiceTypeList) \ - .all() - customer_schema = Query_ServiceTypeList_Schema(many=True) - return jsonify(customer_schema.dump(query_data)) @query.route("/employeetype", methods=["GET"]) @@ -80,3 +77,6 @@ def get_delivery_status_list(): .all() delivery_schema = Query_DeliveryStatusList_Schema(many=True) return jsonify(delivery_schema.dump(query_data)) + + + diff --git a/app/stats/views.py b/app/stats/views.py index a0d23ec..780ca31 100755 --- a/app/stats/views.py +++ b/app/stats/views.py @@ -1,5 +1,5 @@ from flask import jsonify -from sqlalchemy import func +from sqlalchemy import func, or_ from datetime import date from app.stats import stats from app import db @@ -23,9 +23,9 @@ def total_gallons_delivered_driver(driver_id): 'data': sum_of_gallons, }), 200 + @stats.route("/delivery/total/", methods=["GET"]) def total_deliveries_driver(driver_id): - print(driver_id) total_stops = (db.session .query(Delivery_Delivery) .filter(Delivery_Delivery.driver_employee_id == driver_id) @@ -34,3 +34,28 @@ def total_deliveries_driver(driver_id): 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()) + print(total_stops) + 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(or_(Delivery_Delivery.delivery_status == 1),(Delivery_Delivery.delivery_status == 10) + .count())) + print(total_stops) + return jsonify({"ok": True, + 'data': total_stops, + }), 200