major update

This commit is contained in:
2024-10-17 17:01:24 -04:00
parent 8cee9dc5bf
commit 5649294be0
11 changed files with 354 additions and 91 deletions

View File

@@ -192,6 +192,9 @@ app.register_blueprint(query_blueprint, url_prefix='/query')
from .payment import payment as payment_blueprint
app.register_blueprint(payment_blueprint, url_prefix='/payment')
from .money import money as money_blueprint
app.register_blueprint(money_blueprint, url_prefix='/money')
from .auth import auth as auth_blueprint
app.register_blueprint(auth_blueprint, url_prefix='/auth')

View File

@@ -98,3 +98,32 @@ class Customer_Description(db.Model):
class Customer_Description_schema(ma.SQLAlchemyAutoSchema):
class Meta:
model = Customer_Description
class Customer_Property_schema(ma.SQLAlchemyAutoSchema):
class Meta:
model = Customer_Property
class Customer_Tank_Inspection(db.Model):
__tablename__ = 'customer_tank'
__table_args__ = {"schema": "public"}
id = db.Column(db.Integer,
primary_key=True,
autoincrement=True,
unique=False)
customer_id = db.Column(db.INTEGER)
last_tank_inspection = db.Column(db.DATE())
tank_status = db.Column(db.BOOLEAN)
outside_or_inside = db.Column(db.BOOLEAN)
tank_size = db.Column(db.INTEGER)
class Customer_Tank_Inspection_schema(ma.SQLAlchemyAutoSchema):
class Meta:
model = Customer_Tank_Inspection

View File

@@ -8,7 +8,9 @@ from app.classes.customer import \
Customer_Customer, \
Customer_Customer_schema,\
Customer_Description, \
Customer_Description_schema
Customer_Description_schema,\
Customer_Tank_Inspection_schema,\
Customer_Tank_Inspection
from app.classes.admin import Admin_Company
from app.classes.auto import Auto_Delivery
from app.classes.stats_customer import Stats_Customer
@@ -98,6 +100,38 @@ def get_a_customer_description(customer_id):
customer_schema = Customer_Description_schema(many=False)
return jsonify(customer_schema.dump(get_customer_description))
@customer.route("/tank/<int:customer_id>", methods=["GET"])
def get_a_customer_tank(customer_id):
"""
"""
get_customer_tank = (db.session
.query(Customer_Tank_Inspection)
.filter(Customer_Tank_Inspection.customer_id == customer_id)
.first())
if get_customer_tank is None:
new_tank = Customer_Tank_Inspection(
customer_id = customer_id,
last_tank_inspection = None,
tank_status = False,
outside_or_inside = True,
tank_size = 275,
)
db.session.add(new_tank)
db.session.commit()
get_customer_tank = (db.session
.query(Customer_Tank_Inspection)
.filter(Customer_Tank_Inspection.customer_id == customer_id)
.first())
customer_schema = Customer_Tank_Inspection_schema(many=False)
return jsonify(customer_schema.dump(get_customer_tank))
@customer.route("/create", methods=["POST"])
@login_required
def create_customer():
@@ -105,11 +139,22 @@ def create_customer():
"""
now = datetime.utcnow()
get_company = db.session.query(Admin_Company).filter(Admin_Company.id == 1).first()
last_customer = (db.session.query(Customer_Customer).order_by(Customer_Customer.id.desc()).first())
new_customer_id = last_customer.id + 1
if len(str(new_customer_id)) == 2:
new_customer_id = '000' + str(new_customer_id)
if len(str(new_customer_id)) == 3:
new_customer_id = '00' + str(new_customer_id)
if len(str(new_customer_id)) == 4:
new_customer_id = '0' + str(new_customer_id)
starter_digits = str(get_company.account_prefix) + '-' + str(new_customer_id)
starter_digits = str(get_company.account_prefix) + '-' + id_generator()
made_account_number = starter_digits
response_customer_last_name = request.json["customer_last_name"]
response_customer_first_name = request.json["customer_first_name"]
response_customer_town = request.json["customer_town"]
@@ -173,6 +218,15 @@ def create_customer():
)
db.session.add(new_description)
new_tank = Customer_Tank_Inspection(
customer_id = new_customer.id,
last_tank_inspection=None,
tank_status = False,
outside_or_inside = True,
tank_size=275,
)
db.session.add(new_tank)
new_auto = Auto_Delivery(
customer_id = new_customer.id,
account_number = made_account_number,
@@ -202,6 +256,63 @@ def create_customer():
},
}), 200
@customer.route("/edit/tank/<int:customer_id>", methods=["PUT"])
@login_required
def edit_customer_tank(customer_id):
"""
"""
get_customer = (db.session
.query(Customer_Customer)
.filter(Customer_Customer.id == customer_id)
.first())
get_customer_description = (db.session
.query(Customer_Description)
.filter(Customer_Description.customer_id == customer_id)
.first())
get_customer_tank = (db.session
.query(Customer_Tank_Inspection)
.filter(Customer_Tank_Inspection.customer_id == customer_id)
.first())
response_tank_status = request.json["tank_status"]
if response_tank_status == 'true':
get_customer_tank.tank_status = True
elif response_tank_status == 'false':
get_customer_tank.outside_or_inside = False
else:
pass
response_outside_or_inside = request.json["outside_or_inside"]
if response_outside_or_inside == 'true':
get_customer_tank.outside_or_inside = True
elif response_outside_or_inside == 'false':
get_customer_tank.outside_or_inside = False
else:
pass
response_last_tank_inspection = request.json["last_tank_inspection"]
response_tank_size = request.json["tank_size"]
response_customer_fill_location = request.json["fill_location"]
get_customer_tank.last_tank_inspection = response_last_tank_inspection
get_customer_tank.tank_size = response_tank_size
get_customer_description.fill_location = response_customer_fill_location
db.session.add(get_customer_description)
db.session.add(get_customer)
db.session.commit()
return jsonify({
"ok": True,
}), 200
@customer.route("/edit/<int:customer_id>", methods=["PUT"])
@login_required
@@ -229,7 +340,7 @@ def edit_customer(customer_id):
response_customer_description = request.json["customer_description"]
response_customer_fill_location = request.json["customer_fill_location"]
@@ -265,7 +376,7 @@ def edit_customer(customer_id):
auto = 0
if get_customer_description is not None:
get_customer_description.description = response_customer_description
get_customer_description.fill_location = response_customer_fill_location
db.session.add(get_customer_description)
@@ -360,40 +471,6 @@ def customer_automatic_status(customer_id):
}), 200
@customer.route("/description/<int:customer_id>", methods=["GET"])
@login_required
def customer_description(customer_id):
"""
"""
get_customer = (db.session
.query(Customer_Customer)
.filter(Customer_Customer.id == customer_id)
.first())
get_customer_description = (db.session
.query(Customer_Description)
.filter(Customer_Description.customer_id == customer_id)
.first())
if get_customer_description is None:
new_description = Customer_Description(
customer_id = get_customer.id,
account_number = get_customer.account_number,
description = None,
fill_location=None,
company_id=1,
)
db.session.add(new_description)
db.session.commit()
get_customer_description = (db.session
.query(Customer_Description)
.filter(Customer_Description.customer_id == customer_id)
.first())
customer_schema = Customer_Description_schema(many=False)
return jsonify(customer_schema.dump(get_customer_description))
@customer.route("/automatic/assign/<int:customer_id>", methods=["GET"])

View File

@@ -13,6 +13,8 @@ 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("/<int:delivery_id>", methods=["GET"])
def get_a_delivery(delivery_id):
@@ -35,7 +37,7 @@ def get_a_delivery(delivery_id):
'delivery_prime': get_delivery.prime,
'delivery_emergency': get_delivery.emergency,
'delivery_same_day': get_delivery.same_day,
'when_ordered': get_delivery.when_ordered,
'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,
@@ -418,7 +420,7 @@ def edit_a_delivery(delivery_id):
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"]
dispatcher_notes_taken = request.json["dispatcher_notes_taken"]
customer_wants_fill = request.json["customer_asked_for_fill"]
card_payment = request.json["credit"]
@@ -504,6 +506,7 @@ def edit_a_delivery(delivery_id):
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.dispatcher_notes = dispatcher_notes_taken
get_delivery.prime = prime_info
get_delivery.same_day = same_day_info
@@ -715,6 +718,17 @@ def create_a_delivery(user_id):
)
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()

View File

@@ -217,8 +217,7 @@ def office_finalize_delivery(delivery_id):
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

View File

@@ -1,6 +1,9 @@
from flask import jsonify, Response, request
from flask import jsonify, Response, request, url_for
from app import app, WHITE
@app.route("/favicon.ico")
def favicon():
return url_for('static', filename='data:,')
@app.route('/robots.txt')

8
app/money/__init__.py Normal file
View File

@@ -0,0 +1,8 @@
# coding=utf-8
from flask import Blueprint
money = Blueprint('money', __name__)
from . import views

83
app/money/views.py Normal file
View File

@@ -0,0 +1,83 @@
from flask import jsonify
from app.money import money
from app import db
import datetime
from datetime import date
from app.classes.money import Money_delivery, Money_delivery_schema
from app.classes.delivery import Delivery_Delivery, Delivery_Delivery_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
@money.route("/profit/week", methods=["GET"])
def total_profit_week():
# Get today's date
total_profit = 0
total_deliveries = 0
today = datetime.date.today()
# Get the date of the Monday for today
monday = get_monday_date(today)
get_total = (db.session
.query(Money_delivery)
.filter(Money_delivery.time_added >= monday)
.filter(Money_delivery.time_added <= today)
.all())
for f in get_total:
total_profit = total_profit + f.total_profit
total_deliveries = total_deliveries + 1
return jsonify({"ok": True,
'total_profit': total_profit,
'total_deliveries': total_deliveries
}), 200
@money.route("/profit/year", methods=["GET"])
def total_profit_year():
# Get today's date
total_profit = 0
first_of_year = date(date.today().year, 1, 1)
last_of_year = date(date.today().year, 12, 31)
# Get the date of the Monday for today
get_total = (db.session
.query(Money_delivery)
.filter(Money_delivery.time_added >= first_of_year)
.filter(Money_delivery.time_added <= last_of_year)
.all())
for f in get_total:
total_profit = total_profit + f.total_profit
return jsonify({"ok": True,
'total': total_profit
}), 200
@money.route("/<int:delivery_id>", methods=["GET"])
def get_money_delivery(delivery_id):
"""
"""
profit = (db.session
.query(Money_delivery)
.filter(Money_delivery.delivery_id == delivery_id)
.first())
money_schema = Money_delivery_schema(many=False)
return jsonify(money_schema.dump(profit))

View File

@@ -53,10 +53,10 @@ def get_user_cards(user_id):
"""
gets all cards of a user
"""
get_u_cards = db.session \
.query(Card_Card) \
.filter(Card_Card.user_id == user_id) \
.all()
get_u_cards = (db.session
.query(Card_Card)
.filter(Card_Card.user_id == user_id)
.all())
card_schema = Card_Card_schema(many=True)
return jsonify(card_schema.dump(get_u_cards))
@@ -68,10 +68,10 @@ def get_user_cards_count(user_id):
gets all cards of a user
"""
get_u_cards = db.session \
.query(Card_Card) \
.filter(Card_Card.user_id == user_id) \
.count()
get_u_cards = (db.session
.query(Card_Card)
.filter(Card_Card.user_id == user_id)
.count())
return jsonify({
"ok": True,
@@ -85,10 +85,10 @@ def get_user_specific_card(card_id):
gets a specific card of a user
"""
get_user_card = db.session \
.query(Card_Card) \
.filter(Card_Card.id == card_id) \
.first()
get_user_card = (db.session
.query(Card_Card)
.filter(Card_Card.id == card_id)
.first())
card_schema = Card_Card_schema(many=False)
return jsonify(card_schema.dump(get_user_card))
@@ -100,10 +100,10 @@ def create_user_card(user_id):
adds a card of a user
"""
get_customer = db.session \
.query(Customer_Customer) \
.filter(Customer_Customer.id == user_id) \
.first()
get_customer = (db.session
.query(Customer_Customer)
.filter(Customer_Customer.id == user_id)
.first())
name_on_card = request.json["card_name"]
expiration_month = request.json["expiration_month"]
@@ -148,17 +148,18 @@ def set_main_card(user_id, card_id):
updates a card of a user
"""
get_new_main_card = db.session \
.query(Card_Card) \
.filter(Card_Card.user_id == user_id) \
.filter(Card_Card.id == card_id) \
.first()
get_new_main_card = (db.session
.query(Card_Card)
.filter(Card_Card.user_id == user_id)
.filter(Card_Card.id == card_id)
.first())
get_other_card = db.session \
.query(Card_Card) \
.filter(Card_Card.main_card == True) \
.filter(Card_Card.user_id == user_id) \
.first()
get_other_card = (db.session
.query(Card_Card)
.filter(Card_Card.main_card == True)
.filter(Card_Card.user_id == user_id)
.first())
if get_other_card is not None:
get_other_card.main_card = False
db.session.add(get_other_card)
@@ -176,15 +177,17 @@ def update_user_card(card_id):
edits a card
"""
get_card = db.session \
.query(Card_Card) \
.filter(Card_Card.id == card_id) \
.first()
get_card = (db.session
.query(Card_Card)
.filter(Card_Card.id == card_id)
.first())
get_customer = (db.session
.query(Customer_Customer)
.filter(Customer_Customer.id == get_card.user_id)
.first())
get_customer = db.session \
.query(Customer_Customer) \
.filter(Customer_Customer.id == get_card.user_id) \
.first()
name_on_card = request.json["card_name"]
expiration_month = request.json["expiration_month"]
expiration_year = request.json["expiration_year"]
@@ -219,10 +222,10 @@ def remove_user_card(card_id):
removes a card
"""
get_card = db.session \
.query(Card_Card) \
.filter(Card_Card.id == card_id) \
.first()
get_card = (db.session
.query(Card_Card)
.filter(Card_Card.id == card_id)
.first())
db.session.delete(get_card)
db.session.commit()

View File

@@ -1,14 +1,8 @@
from flask import request, jsonify
from flask_login import current_user
from sqlalchemy.sql import func
from datetime import date, timedelta
from app.search import search
from app import db
from datetime import datetime
from app.classes.auth import Auth_User
from app.classes.customer import Customer_Customer, Customer_Customer_schema
from app.classes.employee import Employee_Employee
from app.classes.delivery import Delivery_Delivery, Delivery_Delivery_schema
@@ -24,6 +18,7 @@ def search_customers():
search = search.replace("!", "")
search = search.replace("#", "")
search = search.replace("@", "")
search = search.replace("$", "")
# search by last name
if search_type == '@':
search = search[1:]
@@ -31,7 +26,7 @@ def search_customers():
.query(Customer_Customer)
.filter(Customer_Customer.customer_last_name.ilike(search))
.all())
# Customer Address
elif search_type == '!':
search = search[::1]
@@ -46,6 +41,15 @@ def search_customers():
.query(Customer_Customer)
.filter(Customer_Customer.customer_phone_number.ilike(search))
.all())
# Account Number
elif search_type == '$':
search = search[::1]
customer_list = (db.session
.query(Customer_Customer)
.filter(Customer_Customer.account_number.ilike(search))
.order_by(Customer_Customer.account_number.asc())
.all())
else:
customer_list = (db.session

View File

@@ -1,12 +1,30 @@
from flask import jsonify
from sqlalchemy import func, or_
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
@@ -149,4 +167,26 @@ def get_user_last_delivery(user_id):
date_delivered = "no deliveries on record"
return jsonify({"ok": True,
'date': date_delivered,
}), 200
}), 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