Compare commits

...

2 Commits

Author SHA1 Message Date
ca518af9e8 Small issue 2024-03-12 18:31:08 -04:00
001b8218bd Office driver api get data works 2024-03-12 18:28:22 -04:00
17 changed files with 344 additions and 34 deletions

4
.dockerignore Executable file
View File

@@ -0,0 +1,4 @@
local_settings.py
.git
.gitignore
githubtoken.txt

135
.gitignore vendored Executable file
View File

@@ -0,0 +1,135 @@
# Created by .ignore support plugin (hsz.mobi)
### Python template
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
*.idea
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
*.iml
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
db.sqlite3
# Flask stuff:
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# celery beat schedule file
celerybeat-schedule
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
venvwindows/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
app/package.json
app/package-lock.json
.vscode/
clearnet.ini
rsync_svg.txt
setup/
word_seeds.txt
workspace.code-workspace
app/static/bootstrap
/app/static/images/
/app/static/fonts/
/app/static/css/
/app/static/js/
/app/static/javascriptaddons/
.idea
/config.py
instance/config.py
.idea/
/passwords.py
config.py
crons.txt
getnewitems.py
helperfunctions/
test.py
tools/
nginx.txt
app/node_modules/

18
Dockerfile Executable file
View File

@@ -0,0 +1,18 @@
FROM python:3.12-bullseye
ENV PYTHONFAULTHANDLER=1
ENV PYTHONUNBUFFERED=1
RUN mkdir -p /app
COPY requirements.txt /app
WORKDIR /app
RUN pip3 install -r requirements.txt
COPY . /app
CMD ["python", "app.py", "--host", "0.0.0.0"]

View File

@@ -180,6 +180,9 @@ app.register_blueprint(delivery_blueprint, url_prefix='/delivery')
from .delivery_data import delivery_data as delivery_data_blueprint from .delivery_data import delivery_data as delivery_data_blueprint
app.register_blueprint(delivery_data_blueprint, url_prefix='/deliverydata') app.register_blueprint(delivery_data_blueprint, url_prefix='/deliverydata')
from .delivery_status import deliverystatus as delivery_status_blueprint
app.register_blueprint(delivery_status_blueprint, url_prefix='/deliverystatus')
from .search import search as search_blueprint from .search import search as search_blueprint
app.register_blueprint(search_blueprint, url_prefix='/search') app.register_blueprint(search_blueprint, url_prefix='/search')

View File

@@ -18,11 +18,13 @@ def create_oil_price():
price_from_supplier = request.json["price_from_supplier"] price_from_supplier = request.json["price_from_supplier"]
price_for_customer = request.json["price_for_customer"] price_for_customer = request.json["price_for_customer"]
price_for_employee = request.json["price_for_employee"] price_for_employee = request.json["price_for_employee"]
price_same_day = request.json["price_same_day"]
new_admin_oil_price = Pricing_Oil_Oil( new_admin_oil_price = Pricing_Oil_Oil(
price_from_supplier=price_from_supplier, price_from_supplier=price_from_supplier,
price_for_customer=price_for_customer, price_for_customer=price_for_customer,
price_for_employee=price_for_employee, price_for_employee=price_for_employee,
price_same_day=price_same_day,
date=now, date=now,
) )
@@ -41,11 +43,14 @@ def create_service_price():
Changes general labor rates prices Changes general labor rates prices
""" """
now = datetime.utcnow() now = datetime.utcnow()
price_service_hour = request.json["price_service_hour"] price_service_hour = request.json["price_service_hour"]
price_emergency_service_hourly_rate = request.json["price_emergency_service_hour"] price_emergency_service_hourly_rate = request.json["price_emergency_service_hour"]
price_emergency_call = request.json["price_emergency_call"] price_emergency_call = request.json["price_emergency_call"]
price_out_of_oil = request.json["price_out_of_oil"] price_out_of_oil = request.json["price_out_of_oil"]
price_prime = request.json["price_prime"] price_prime = request.json["price_prime"]
price_cleaning = request.json["price_cleaning"]
price_service = Pricing_Service_General( price_service = Pricing_Service_General(
price_service_hour=price_service_hour, price_service_hour=price_service_hour,
@@ -53,6 +58,7 @@ def create_service_price():
price_emergency_service_hour=price_emergency_service_hourly_rate, price_emergency_service_hour=price_emergency_service_hourly_rate,
price_prime=price_prime, price_prime=price_prime,
price_emergency_call=price_emergency_call, price_emergency_call=price_emergency_call,
price_cleaning=price_cleaning,
date=now, date=now,
) )

View File

@@ -94,16 +94,8 @@ def login():
.filter_by(username=username)\ .filter_by(username=username)\
.first() .first()
if not bcrypt.check_password_hash(user.password_hash, password): if not bcrypt.check_password_hash(user.password_hash, password):
current_fails = int(user.fails)
new_fails = current_fails + 1
user.fails = new_fails
db.session.add(user)
db.session.commit()
return jsonify({"error": True}), 200 return jsonify({"error": True}), 200
user.locked = 0
user.fails = 0
db.session.add(user) db.session.add(user)
db.session.commit() db.session.commit()

View File

@@ -59,7 +59,7 @@ class Delivery_Delivery(db.Model):
payment_type = db.Column(db.INTEGER) payment_type = db.Column(db.INTEGER)
payment_card_id = db.Column(db.INTEGER) payment_card_id = db.Column(db.INTEGER)
driver_employee_id = db.Column(db.VARCHAR(140)) driver_employee_id = db.Column(db.INTEGER)
driver_first_name = db.Column(db.VARCHAR(140)) driver_first_name = db.Column(db.VARCHAR(140))
driver_last_name = db.Column(db.VARCHAR(140)) driver_last_name = db.Column(db.VARCHAR(140))

View File

@@ -17,7 +17,6 @@ class Pricing_Service_General(db.Model):
price_emergency_call = db.Column(db.DECIMAL(50, 2)) price_emergency_call = db.Column(db.DECIMAL(50, 2))
price_out_of_oil = db.Column(db.DECIMAL(50, 2)) price_out_of_oil = db.Column(db.DECIMAL(50, 2))
price_prime = db.Column(db.DECIMAL(50, 2)) price_prime = db.Column(db.DECIMAL(50, 2))
price_same_day = db.Column(db.DECIMAL(50, 2))
price_cleaning = db.Column(db.DECIMAL(50, 2)) price_cleaning = db.Column(db.DECIMAL(50, 2))
date = db.Column(db.TIMESTAMP(), default=datetime.utcnow()) date = db.Column(db.TIMESTAMP(), default=datetime.utcnow())
@@ -40,6 +39,8 @@ class Pricing_Oil_Oil(db.Model):
price_from_supplier = db.Column(db.DECIMAL(50, 2)) price_from_supplier = db.Column(db.DECIMAL(50, 2))
price_for_customer = db.Column(db.DECIMAL(50, 2)) price_for_customer = db.Column(db.DECIMAL(50, 2))
price_for_employee = db.Column(db.DECIMAL(50, 2)) price_for_employee = db.Column(db.DECIMAL(50, 2))
price_same_day = db.Column(db.DECIMAL(50, 2))
price_prime = db.Column(db.DECIMAL(50, 2))
date = db.Column(db.TIMESTAMP(), default=datetime.utcnow()) date = db.Column(db.TIMESTAMP(), default=datetime.utcnow())

View File

@@ -53,7 +53,6 @@ def get_a_customer(customer_id):
.query(Customer_Customer) .query(Customer_Customer)
.filter(Customer_Customer.id == customer_id) .filter(Customer_Customer.id == customer_id)
.first()) .first())
print(get_customer)
customer_schema = Customer_Customer_schema(many=False) customer_schema = Customer_Customer_schema(many=False)
return jsonify(customer_schema.dump(get_customer)) return jsonify(customer_schema.dump(get_customer))
@@ -186,7 +185,6 @@ def delete_customer(customer_id):
db.session.delete(get_customer) db.session.delete(get_customer)
db.session.commit() db.session.commit()
print("deleted")
return jsonify({ return jsonify({
"ok": True, "ok": True,
'user': { 'user': {

View File

@@ -1,9 +1,8 @@
from flask import request, jsonify from flask import request, jsonify
from flask_login import current_user from flask_login import current_user
from datetime import date from datetime import date, datetime, timedelta
from app.delivery import delivery from app.delivery import delivery
from app import db from app import db
from datetime import datetime
from app.classes.customer import Customer_Customer from app.classes.customer import Customer_Customer
from app.classes.delivery import (Delivery_Delivery, from app.classes.delivery import (Delivery_Delivery,
Delivery_Delivery_schema, Delivery_Delivery_schema,
@@ -11,6 +10,7 @@ from app.classes.delivery import (Delivery_Delivery,
Delivery_Payment, Delivery_Payment,
Delivery_Payment_schema, Delivery_Payment_schema,
) )
from app.classes.employee import Employee_Employee
from app.classes.cards import Card_Card from app.classes.cards import Card_Card
from app.classes.pricing import Pricing_Oil_Oil from app.classes.pricing import Pricing_Oil_Oil
from app.classes.auth import Auth_User from app.classes.auth import Auth_User
@@ -20,12 +20,10 @@ from app.classes.pricing import Pricing_Service_General
def get_a_delivery(delivery_id): def get_a_delivery(delivery_id):
""" """
""" """
get_delivery = db.session\ get_delivery = db.session\
.query(Delivery_Delivery)\ .query(Delivery_Delivery)\
.filter(Delivery_Delivery.id == delivery_id)\ .filter(Delivery_Delivery.id == delivery_id)\
.first() .first()
return jsonify({ return jsonify({
"ok": True, "ok": True,
'delivery': { 'delivery': {
@@ -42,10 +40,14 @@ def get_a_delivery(delivery_id):
'delivery_status': get_delivery.delivery_status, 'delivery_status': get_delivery.delivery_status,
'payment_type': get_delivery.payment_type, 'payment_type': get_delivery.payment_type,
'payment_card_id': get_delivery.payment_card_id, '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,
}, },
}), 200 }), 200
@delivery.route("/order/<int:delivery_id>", methods=["GET"]) @delivery.route("/order/<int:delivery_id>", methods=["GET"])
def get_a_specific_delivery(delivery_id): def get_a_specific_delivery(delivery_id):
@@ -362,13 +364,16 @@ def edit_a_delivery(delivery_id):
delivery_status = request.json["delivery_status"] delivery_status = request.json["delivery_status"]
when_to_deliver = request.json["expected_delivery_date"] when_to_deliver = request.json["expected_delivery_date"]
dispatcher_notes_taken = request.json["dispatcher_notes_taken"] dispatcher_notes_taken = request.json["dispatcher_notes_taken"]
customer_wants_fill = request.json["customer_asked_for_fill"] customer_wants_fill = request.json["customer_asked_for_fill"]
card_payment = request.json["credit"] card_payment = request.json["credit"]
cash_payment = request.json["cash"] cash_payment = request.json["cash"]
delivery_driver_id = request.json["driver_employee_id"]
get_driver = (db.session
.query(Employee_Employee)
.filter(Employee_Employee.id == delivery_driver_id)
.first())
if request.json["credit_card_id"]: if request.json["credit_card_id"]:
card_payment_id = request.json["credit_card_id"] card_payment_id = request.json["credit_card_id"]
else: else:
@@ -423,6 +428,10 @@ def edit_a_delivery(delivery_id):
get_delivery.payment_type = delivery_payment_method get_delivery.payment_type = delivery_payment_method
get_delivery.payment_card_id = card_id_from_customer 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
db.session.add(get_delivery) db.session.add(get_delivery)
db.session.commit() db.session.commit()
@@ -465,6 +474,18 @@ def create_a_delivery(user_id):
card_payment = request.json["credit"] card_payment = request.json["credit"]
cash_payment = request.json["cash"] cash_payment = request.json["cash"]
delivery_driver_id = request.json["driver_employee_id"]
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: try:
if request.json["credit_card_id"]: if request.json["credit_card_id"]:
card_payment_id = request.json["credit_card_id"] card_payment_id = request.json["credit_card_id"]
@@ -522,13 +543,13 @@ def create_a_delivery(user_id):
precharge_amount = int(gallons_ordered) * get_today_price.price_for_customer precharge_amount = int(gallons_ordered) * get_today_price.price_for_customer
if same_day_asked == 1 and prime_asked == 0: if same_day_asked == 1 and prime_asked == 0:
total_precharge_amount = precharge_amount + get_service_prices.price_same_day total_precharge_amount = precharge_amount + get_today_price.price_same_day
elif prime_asked == 1 and same_day_asked == 0: elif prime_asked == 1 and same_day_asked == 0:
total_precharge_amount = precharge_amount + get_service_prices.price_prime total_precharge_amount = precharge_amount + get_today_price.price_prime
else: else:
total_precharge_amount = precharge_amount + get_service_prices.price_prime + get_service_prices.price_same_day total_precharge_amount = precharge_amount + get_today_price.price_prime + get_today_price.price_same_day
new_delivery = Delivery_Delivery( new_delivery = Delivery_Delivery(
@@ -559,6 +580,9 @@ def create_a_delivery(user_id):
pre_charge_amount=total_precharge_amount, pre_charge_amount=total_precharge_amount,
total_price=precharge_amount, total_price=precharge_amount,
final_price=0, final_price=0,
driver_last_name = driver_l_name,
driver_first_name = driver_f_name,
driver_employee_id= driver_emp_id,
) )

View File

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

View File

@@ -0,0 +1,62 @@
from flask import request, jsonify
from flask_login import current_user
from datetime import date, timedelta, time
from app.delivery_status import deliverystatus
from app import db
from datetime import datetime
from app.classes.customer import Customer_Customer
from app.classes.delivery import (Delivery_Delivery,
Delivery_Delivery_schema,
Delivery_Notes_Driver,
Delivery_Payment,
Delivery_Payment_schema,
)
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.pricing import Pricing_Service_General
@deliverystatus.route("/today/driver/<int:user_id>", methods=["GET"])
def get_deliveries_driver_day(user_id):
"""
Get deliveries for driver that day
"""
get_delivery = (db.session
.query(Delivery_Delivery)
.filter(Delivery_Delivery.driver_employee_id == user_id)
.filter(Delivery_Delivery.expected_delivery_date == date.today())
.all())
delivery_schema = Delivery_Delivery_schema(many=True)
return jsonify(delivery_schema.dump(get_delivery))
@deliverystatus.route("/tommorrow/driver/<int:user_id>", methods=["GET"])
def get_deliveries_driver_tommorrow(user_id):
"""
Get deliveries for driver tommrrow
"""
tomm = datetime.now() + timedelta(days=1)
get_delivery = (db.session
.query(Delivery_Delivery)
.filter(Delivery_Delivery.driver_employee_id == user_id)
.filter(Delivery_Delivery.expected_delivery_date == tomm)
.all())
delivery_schema = Delivery_Delivery_schema(many=True)
return jsonify(delivery_schema.dump(get_delivery))
@deliverystatus.route("/waiting/driver/<int:user_id>", methods=["GET"])
def get_deliveries_driver_waiting(user_id):
"""
waiting deliveries scheduled out
"""
get_delivery = (db.session
.query(Delivery_Delivery)
.filter(Delivery_Delivery.driver_employee_id == user_id)
.filter(Delivery_Delivery.delivery_status == 1)
.all())
delivery_schema = Delivery_Delivery_schema(many=True)
return jsonify(delivery_schema.dump(get_delivery))

View File

@@ -12,6 +12,7 @@ from app.classes.employee import Employee_Employee, Employee_Employee_schema
@employees.route("/<int:userid>", methods=["GET"]) @employees.route("/<int:userid>", methods=["GET"])
@login_required @login_required
def get_specific_employee(userid): def get_specific_employee(userid):
print(userid)
employee = db.session \ employee = db.session \
.query(Employee_Employee) \ .query(Employee_Employee) \
.filter(Employee_Employee.id == userid) \ .filter(Employee_Employee.id == userid) \
@@ -27,7 +28,6 @@ def get_specific_employee_user_id(userid):
.query(Employee_Employee) \ .query(Employee_Employee) \
.filter(Employee_Employee.user_id == userid) \ .filter(Employee_Employee.user_id == userid) \
.first() .first()
# print(employee.id)
employee_schema = Employee_Employee_schema(many=False) employee_schema = Employee_Employee_schema(many=False)
return jsonify(employee_schema.dump(employee)) return jsonify(employee_schema.dump(employee))
@@ -69,9 +69,11 @@ def all_employees():
def all_employees_drivers(): def all_employees_drivers():
employee_list = db.session \ employee_list = db.session \
.query(Employee_Employee) \ .query(Employee_Employee) \
.filter(Employee_Employee.employee_type == 4) \ .filter(or_(Employee_Employee.employee_type == 4,
Employee_Employee.employee_type == 8)) \
.all() .all()
customer_schema = Employee_Employee_schema(mwany=True)
customer_schema = Employee_Employee_schema(many=True)
return jsonify(customer_schema.dump(employee_list)) return jsonify(customer_schema.dump(employee_list))
@@ -152,7 +154,7 @@ def employee_edit(employee_id):
e_type = request.json["employee_type"] e_type = request.json["employee_type"]
e_start_date = request.json["employee_start_date"] e_start_date = request.json["employee_start_date"]
e_end_date = request.json["employee_end_date"] e_end_date = request.json["employee_end_date"]
print(request.json["employee_end_date"])
get_employee = db.session \ get_employee = db.session \
.query(Employee_Employee) \ .query(Employee_Employee) \

View File

@@ -24,7 +24,6 @@ def get_service_price():
.first()) .first())
return jsonify({"ok": True, return jsonify({"ok": True,
'same_day': get_price_query.price_same_day,
'price_hourly': get_price_query.price_service_hour, 'price_hourly': get_price_query.price_service_hour,
'emergency_fee': get_price_query.price_emergency_call, 'emergency_fee': get_price_query.price_emergency_call,
'emergency_rate': get_price_query.price_emergency_service_hour, 'emergency_rate': get_price_query.price_emergency_service_hour,

View File

@@ -14,21 +14,15 @@ def set_card_main(user_id):
.query(Card_Card) \ .query(Card_Card) \
.filter(Card_Card.user_id == user_id) \ .filter(Card_Card.user_id == user_id) \
.count() .count()
print(get_card_count)
if get_card_count > 0: if get_card_count > 0:
print("true")
get_old_card = db.session \ get_old_card = db.session \
.query(Card_Card) \ .query(Card_Card) \
.filter(Card_Card.main_card == True) \ .filter(Card_Card.main_card == True) \
.filter(Card_Card.user_id == user_id) \ .filter(Card_Card.user_id == user_id) \
.first() .first()
print(get_old_card.id)
get_old_card.main_card = False get_old_card.main_card = False
db.session.add(get_old_card) db.session.add(get_old_card)
db.session.commit() db.session.commit()

54
local_settings.py Executable file
View File

@@ -0,0 +1,54 @@
import redis
class ApplicationConfig:
"""
Basic Configuration for a generic User
"""
CURRENT_SETTINGS = 'LOCAL'
# databases info
POSTGRES_USERNAME = 'postgres'
POSTGRES_PW = 'password'
POSTGRES_SERVER = '192.168.1.204:5432'
POSTGRES_DBNAME00 = 'eamco'
SQLALCHEMY_DATABASE_URI = "postgresql+psycopg2://{}:{}@{}/{}".format(POSTGRES_USERNAME,
POSTGRES_PW,
POSTGRES_SERVER,
POSTGRES_DBNAME00
)
SQLALCHEMY_BINDS = {'eamco': SQLALCHEMY_DATABASE_URI}
# sqlalchemy config
SQLALCHEMY_TRACK_MODIFICATIONS = False
TRAP_HTTP_EXCEPTIONS = True
PROPAGATE_EXCEPTIONS = True
DEBUG = True
UPLOADED_FILES_DEST_ITEM = '/data/item'
# file uploads
UPLOADED_FILES_ALLOW = ['png', 'jpeg', 'jpg', 'png', 'gif']
MAX_CONTENT_LENGTH = 5 * 2500 * 2500
ALLOWED_EXTENSIONS = ['png', 'jpeg', 'jpg', 'png', 'gif']
# secret keys
SECRET_KEY = "youwillneverguessthiskeycia"
# sessions
SESSION_COOKIE_NAME = "eamco_session"
SESSION_COOKIE_SECURE = False
SESSION_COOKIE_HTTPONLY = True
REMEMBER_COOKIE_HTTPONLY = True
SESSION_COOKIE_SAMESITE = "Strict"
SESSION_PERMANENT = False
SESSION_USE_SIGNER = True
# CORS
ORIGIN_URL = "*"
CORS_SEND_WILDCARD = False
CORS_SUPPORT_CREDENTIALS = True
CORS_EXPOSE_HEADERS = None
CORS_ALLOW_HEADERS = "*"
CORS_ORIGIN_WHITELIST = ['http://localhost:5173', '*']

11
runProduction.py Executable file
View File

@@ -0,0 +1,11 @@
# coding=utf-8
from app import app
PORT = 6000
HOST = '0.0.0.0'
if __name__ == '__main__':
app.run(
host=HOST,
port=PORT,
threaded=True
)