Files
eamco_office_api/app/promo/views.py
2026-01-28 21:55:10 -05:00

194 lines
4.9 KiB
Python

import logging
from flask import request, jsonify
import decimal
from datetime import datetime
from app.promo import promo
from app import db
from app.classes.promo import (
Promo_Promo,
Promo_Promo_schema)
from app.classes.delivery import (Delivery_Delivery,
Delivery_Delivery_schema,
Delivery_Notes_Driver,
)
logger = logging.getLogger(__name__)
def convert_to_decimal(text):
try:
number = float(text)
return round(number, 2)
except ValueError:
return "0"
@promo.route("/<int:promo_id>", methods=["GET"])
def get_promo(promo_id):
"""
"""
logger.info(f"GET /promo/{promo_id} - Fetching promo")
get_promo_data = (db.session
.query(Promo_Promo)
.filter(Promo_Promo.id == promo_id)
.first())
query_schema = Promo_Promo_schema(many=False)
return jsonify(query_schema.dump(get_promo_data))
@promo.route("/promoprice/<int:delivery_id>", methods=["GET"])
def get_promo_price(delivery_id):
"""
"""
logger.info(f"GET /promo/promoprice/{delivery_id} - Calculating promo price")
get_delivery = (db.session
.query(Delivery_Delivery)
.filter(Delivery_Delivery.id == delivery_id)
.first())
price = get_delivery.customer_price - get_delivery.promo_money_discount
price = convert_to_decimal(price)
return jsonify({
"ok": True,
"price": price,
}), 200
@promo.route("/all", methods=["GET"])
def get_all_promo():
"""
"""
logger.info("GET /promo/all - Fetching all promos")
get_promo_data = (db.session
.query(Promo_Promo)
.all())
query_schema = Promo_Promo_schema(many=True)
return jsonify(query_schema.dump(get_promo_data))
@promo.route("/delete/<int:promo_id>", methods=["DELETE"])
def delete_a_promo(promo_id):
"""
"""
logger.info(f"DELETE /promo/delete/{promo_id} - Deleting promo")
get_promo_data = (db.session
.query(Promo_Promo)
.filter(Promo_Promo.id == promo_id)
.first())
db.session.delete(get_promo_data)
db.session.commit()
return jsonify({
"ok": True,
}), 200
@promo.route("/create", methods=["POST"])
def create_promo():
"""
"""
logger.info("POST /promo/create - Creating new promo")
date_created = datetime.utcnow()
name_of_promotion = request.json["name_of_promotion"]
money_off_delivery = request.json["money_off_delivery"]
description = request.json["description"]
text_on_ticket = request.json["text_on_ticket"]
# see if it exists
amount_off = convert_to_decimal(money_off_delivery)
new_promo = Promo_Promo(
name_of_promotion = name_of_promotion,
money_off_delivery = amount_off,
description = description,
date_created = date_created,
text_on_ticket=text_on_ticket
)
db.session.add(new_promo)
db.session.commit()
return jsonify({
"ok": True,
'promo_id':new_promo.id,
}), 200
@promo.route("/edit/<int:promo_id>", methods=["PUT"])
def edit_promo(promo_id):
"""
"""
logger.info(f"PUT /promo/edit/{promo_id} - Editing promo")
get_promo_data = (db.session
.query(Promo_Promo)
.filter(Promo_Promo.id == promo_id)
.first())
text_on_ticket = request.json["text_on_ticket"]
name_of_promotion = request.json["name_of_promotion"]
money_off_delivery = request.json["money_off_delivery"]
description = request.json["description"]
amount_off = convert_to_decimal(money_off_delivery)
get_promo_data.text_on_ticket = text_on_ticket
get_promo_data.description = description
get_promo_data.name_of_promotion = name_of_promotion
get_promo_data.money_off_delivery = amount_off
db.session.add(get_promo_data)
db.session.commit()
return jsonify({
"ok": True,
'promo_id':get_promo_data.id,
}), 200
@promo.route("/on/<int:promo_id>", methods=["PATCH"])
def turn_on_promo(promo_id):
"""
"""
logger.info(f"PATCH /promo/on/{promo_id} - Activating promo")
get_promo_data = (db.session
.query(Promo_Promo)
.filter(Promo_Promo.id == promo_id)
.first())
get_promo_data.active = True
db.session.add(get_promo_data)
db.session.commit()
return jsonify({
"ok": True,
'promo_id':get_promo_data.id,
}), 200
@promo.route("/off/<int:promo_id>", methods=["PATCH"])
def turn_off_promo(promo_id):
"""
"""
logger.info(f"PATCH /promo/off/{promo_id} - Deactivating promo")
get_promo_data = (db.session
.query(Promo_Promo)
.filter(Promo_Promo.id == promo_id)
.first())
get_promo_data.active = False
db.session.add(get_promo_data)
db.session.commit()
return jsonify({
"ok": True,
'promo_id':get_promo_data.id,
}), 200