pantry-track/application/meal_planner/meal_planner_processes.py
2025-09-07 16:34:05 -05:00

84 lines
3.0 KiB
Python

import datetime
import psycopg2
from application.meal_planner import meal_planner_database
from application import postsqldb, database_payloads
import config
def selectPlanEventsByMonth(site_name, year, month):
events = ()
events = meal_planner_database.selectPlanEventsByMonth(site_name, (year, month))
for event in events:
event['has_missing_ingredients'] = False
for recipe_item in event['recipe_items']:
if recipe_item['item_uom'] != None and recipe_item['ingrediant_uom'] != recipe_item['item_uom']:
conversion = meal_planner_database.selectConversionsTuple(site_name, (recipe_item['item_id'], recipe_item['ingrediant_uom']))
conv_factor = conversion.get('conv_factor', 1)
qty = float(recipe_item['qty']) / float(conv_factor)
recipe_item['qty'] = qty
if float(qty) > float(recipe_item['quantity_on_hand']):
event['has_missing_ingredients'] = True
return events
def addTakeOutEvent(site, data, user_id, conn=None):
event_date_start = datetime.datetime.strptime(data['event_date_start'], "%Y-%m-%d")
event_date_end = datetime.datetime.strptime(data['event_date_end'], "%Y-%m-%d")
vendor_id = data['vendor_id']
self_conn = False
if not conn:
database_config = config.config()
conn = psycopg2.connect(**database_config)
conn.autocommit = False
self_conn = True
receipt_id = meal_planner_database.requestNextReceiptID(site, conn=conn)
receipt_payload = database_payloads.ReceiptPayload(
receipt_id=f"TOR-{receipt_id}",
receipt_status="Unresolved",
submitted_by=user_id,
vendor_id=vendor_id
)
receipt = meal_planner_database.insertReceiptsTuple(site, receipt_payload.payload(), conn=conn)
print(receipt)
attendees = data['attendees']
cost = float(data['cost'])/int(attendees)
receipt_item = database_payloads.ReceiptItemPayload(
type = data['event_type'],
receipt_id=receipt['id'],
barcode="",
item_uuid=None,
name=data['event_shortname'],
qty=data['attendees'],
uom=1,
data={'cost': cost, 'expires': False}
)
receipt_item = meal_planner_database.insertReceiptItemsTuple(site, receipt_item.payload(), conn=conn)
trimmed = data['event_shortname'][:32] # TODO: this shortens the name but i should use a a large character limit
event_payload = database_payloads.PlanEventPayload(
plan_uuid=None,
event_shortname=str(trimmed),
event_description=data['event_description'],
event_date_start=event_date_start,
event_date_end=event_date_end,
created_by=user_id,
recipe_uuid=data['recipe_uuid'],
receipt_uuid=receipt['receipt_uuid'],
event_type=data['event_type']
)
event = meal_planner_database.insertPlanEventTuple(site, event_payload.payload(), conn=conn)
if self_conn:
conn.commit()
conn.close()
return False
return True