187 lines
7.1 KiB
Python
187 lines
7.1 KiB
Python
import psycopg2
|
|
|
|
from application.shoppinglists import shoplist_database
|
|
from application import postsqldb, database_payloads
|
|
import config
|
|
|
|
def addRecipeItemsToList(site:str, data:dict, user_id: int, conn=None):
|
|
"""data = {'recipe_uuid', 'sl_id'}"""
|
|
|
|
self_conn=False
|
|
|
|
if not conn:
|
|
database_config = config.config()
|
|
conn = psycopg2.connect(**database_config)
|
|
conn.autocommit = False
|
|
self_conn = True
|
|
|
|
recipe_items = shoplist_database.getRecipeItemsByUUID(site, (data['recipe_uuid'],), conn=conn)
|
|
|
|
|
|
# for each item build a new item payload
|
|
for recipe_item in recipe_items:
|
|
# add item to the table pointing to the list_uuid
|
|
new_sl_item = database_payloads.ShoppingListItemPayload(
|
|
list_uuid = data['list_uuid'],
|
|
item_type='recipe',
|
|
item_name=recipe_item['item_name'],
|
|
uom=recipe_item['uom'],
|
|
qty=recipe_item['qty'],
|
|
item_uuid=recipe_item['item_uuid'],
|
|
links=recipe_item['links']
|
|
)
|
|
shoplist_database.insertShoppingListItemsTuple(site, new_sl_item.payload(), conn=conn)
|
|
|
|
|
|
if self_conn:
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
def postNewGeneratedList(site: str, data: dict, user_id: int, conn=None):
|
|
"""data={'list_type', 'list_name', 'list_description', 'custom_items', 'uncalculated_items', 'calculated_items', 'recipes', 'full_system_calculated', 'shopping_lists'}"""
|
|
list_type: str = data['list_type']
|
|
list_name: str = data['list_name']
|
|
list_description: str = data['list_description']
|
|
custom_items: list = data['custom_items']
|
|
uncalculated_items: list = data['uncalculated_items']
|
|
calculated_items: list = data['calculated_items']
|
|
recipes: list = data['recipes']
|
|
full_system_calculated: list = data['full_system_calculated']
|
|
shopping_lists: list = data['shopping_lists']
|
|
|
|
|
|
self_conn=False
|
|
|
|
if not conn:
|
|
database_config = config.config()
|
|
conn = psycopg2.connect(**database_config)
|
|
conn.autocommit = False
|
|
self_conn = True
|
|
|
|
shopping_list = database_payloads.ShoppingListPayload(
|
|
name=list_name,
|
|
description=list_description,
|
|
author=int(user_id),
|
|
sub_type="plain",
|
|
list_type=list_type
|
|
)
|
|
shopping_list = shoplist_database.insertShoppingListsTuple(site, shopping_list.payload(), conn=conn)
|
|
|
|
items_to_add_to_system = []
|
|
# start by checcking if i should iterate full sku calc
|
|
if full_system_calculated:
|
|
safety_stock_items = shoplist_database.getItemsSafetyStock(site, conn=conn)
|
|
for item in safety_stock_items:
|
|
qty = float(item['item_info']['safety_stock']-float(item['total_sum']))
|
|
temp_item = database_payloads.ShoppingListItemPayload(
|
|
list_uuid=shopping_list['list_uuid'],
|
|
item_type='calculated sku',
|
|
item_name=item['item_name'],
|
|
uom=item['item_info']['uom'],
|
|
qty=qty,
|
|
item_uuid=item['item_uuid'],
|
|
links=item['links']
|
|
)
|
|
items_to_add_to_system.append(temp_item)
|
|
|
|
if calculated_items and not full_system_calculated:
|
|
for item_uuid in calculated_items:
|
|
item = shoplist_database.getItemByUUID(site, {'item_uuid': item_uuid}, conn=conn)
|
|
qty = float(item['item_info']['safety_stock']-float(item['total_sum']))
|
|
temp_item = database_payloads.ShoppingListItemPayload(
|
|
list_uuid=shopping_list['list_uuid'],
|
|
item_type='calculated sku',
|
|
item_name=item['item_name'],
|
|
uom=item['item_info']['uom'],
|
|
qty=qty,
|
|
item_uuid=item['item_uuid'],
|
|
links=item['links']
|
|
)
|
|
items_to_add_to_system.append(temp_item)
|
|
|
|
|
|
if custom_items:
|
|
for item in custom_items:
|
|
temp_item = database_payloads.ShoppingListItemPayload(
|
|
list_uuid=shopping_list['list_uuid'],
|
|
item_type='custom',
|
|
item_name=item['item_name'],
|
|
uom=item['uom'],
|
|
qty=float(item['qty']),
|
|
item_uuid=None,
|
|
links={'main': item['link']}
|
|
)
|
|
items_to_add_to_system.append(temp_item)
|
|
|
|
if uncalculated_items:
|
|
for item in uncalculated_items:
|
|
temp_item = database_payloads.ShoppingListItemPayload(
|
|
list_uuid=shopping_list['list_uuid'],
|
|
item_type='uncalculated sku',
|
|
item_name=item['item_name'],
|
|
uom=item['uom'],
|
|
qty=float(item['qty']),
|
|
item_uuid=None,
|
|
links={'main': item['link']}
|
|
)
|
|
items_to_add_to_system.append(temp_item)
|
|
|
|
|
|
if recipes:
|
|
for recipe_uuid in recipes:
|
|
recipe_items = shoplist_database.getRecipeItemsByUUID(site, (recipe_uuid,), conn=conn)
|
|
for item in recipe_items:
|
|
temp_item = database_payloads.ShoppingListItemPayload(
|
|
list_uuid=shopping_list['list_uuid'],
|
|
item_type='recipe',
|
|
item_name=item['item_name'],
|
|
uom=item['uom'],
|
|
qty=float(item['qty']),
|
|
item_uuid=item['item_uuid'],
|
|
links=item['links']
|
|
)
|
|
items_to_add_to_system.append(temp_item)
|
|
|
|
if shopping_lists:
|
|
for shopping_list_uuid in shopping_lists:
|
|
shopping_list_items = shoplist_database.getShoppingList(site, (shopping_list_uuid,), conn=conn)['sl_items']
|
|
for item in shopping_list_items:
|
|
temp_item = database_payloads.ShoppingListItemPayload(
|
|
list_uuid=shopping_list['list_uuid'],
|
|
item_type=item['item_type'],
|
|
item_name=item['item_name'],
|
|
uom=item['uom']['id'],
|
|
qty=float(item['qty']),
|
|
item_uuid=item['item_uuid'],
|
|
links=item['links']
|
|
)
|
|
items_to_add_to_system.append(temp_item)
|
|
|
|
|
|
if items_to_add_to_system:
|
|
for item in items_to_add_to_system:
|
|
shoplist_database.insertShoppingListItemsTuple(site, item.payload(), conn=conn)
|
|
|
|
if self_conn:
|
|
conn.commit()
|
|
conn.close()
|
|
|
|
def deleteShoppingList(site: str, data: dict, user_id: int, conn=None):
|
|
shopping_list_uuid = data['shopping_list_uuid']
|
|
self_conn=False
|
|
|
|
if not conn:
|
|
database_config = config.config()
|
|
conn = psycopg2.connect(**database_config)
|
|
conn.autocommit = False
|
|
self_conn = True
|
|
|
|
shopping_list_items = shoplist_database.getShoppingList(site, (shopping_list_uuid, ), conn=conn)['sl_items']
|
|
shopping_list_items = [item['list_item_uuid'] for item in shopping_list_items]
|
|
|
|
shoplist_database.deleteShoppingListsTuple(site, (shopping_list_uuid,), conn=conn)
|
|
shoplist_database.deleteShoppingListItemsTuple(site, shopping_list_items, conn=conn)
|
|
|
|
if self_conn:
|
|
conn.commit()
|
|
conn.close() |