From 7c6846dd999c4292e29d4318e2458599c02d1320 Mon Sep 17 00:00:00 2001 From: Jadowyne Ulve Date: Sat, 31 May 2025 21:08:42 -0500 Subject: [PATCH] Migrated addConversion to new api schema --- application/database_payloads.py | 13 +++++++++ application/items/database_items.py | 44 ++++++++++++++++++++++++++++- application/items/items_API.py | 43 ++++++++++++++++++++++------ 3 files changed, 91 insertions(+), 9 deletions(-) diff --git a/application/database_payloads.py b/application/database_payloads.py index ac03ff1..0828559 100644 --- a/application/database_payloads.py +++ b/application/database_payloads.py @@ -411,6 +411,19 @@ class SKUPrefixPayload: self.description ) +@dataclass +class ConversionPayload: + item_id: int + uom_id: int + conv_factor: float + + def payload(self): + return ( + self.item_id, + self.uom_id, + self.conv_factor + ) + @dataclass class SiteManager: site_name: str diff --git a/application/items/database_items.py b/application/items/database_items.py index b373edb..1eb854d 100644 --- a/application/items/database_items.py +++ b/application/items/database_items.py @@ -823,7 +823,7 @@ def insertItemTuple(site, payload, convert=True, conn=None): except Exception as error: raise postsqldb.DatabaseError(error, payload, sql) -def insertSKUPrefixtuple(site, payload, convert=True, conn=None): +def insertSKUPrefixtuple(site:str, payload:tuple, convert=True, conn=None): """insert payload into zones table of site Args: @@ -864,7 +864,49 @@ def insertSKUPrefixtuple(site, payload, convert=True, conn=None): return prefix except Exception as error: raise postsqldb.DatabaseError(error, payload, sql) + +def insertConversionTuple(site: str, payload: list, convert=True, conn=None): + """insert into recipes table for site + + Args: + conn (_T_connector@connect): Postgresql Connector + site (stre): + payload (tuple): (item_id, uom_id, conversion_factor) + convert (bool, optional): Determines if to return tuple as a dictionary. Defaults to False. + + Raises: + DatabaseError: + + Returns: + tuple or dict: inserted tuple + """ + record = () + self_conn = False + with open(f"sql/INSERT/insertConversionsTuple.sql", "r+") as file: + sql = file.read().replace("%%site_name%%", site) + try: + if not conn: + database_config = config.config() + conn = psycopg2.connect(**database_config) + conn.autocommit = True + self_conn = True + + with conn.cursor() as cur: + cur.execute(sql, payload) + rows = cur.fetchone() + if rows and convert: + record = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + record = rows + + if self_conn: + conn.commit() + conn.close() + + return record + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) def postDeleteCostLayer(site_name, payload, convert=True, conn=None): """ diff --git a/application/items/items_API.py b/application/items/items_API.py index 3b6008d..213d985 100644 --- a/application/items/items_API.py +++ b/application/items/items_API.py @@ -687,20 +687,47 @@ def addSKUPrefix(): @items_api.route('/addConversion', methods=['POST']) def addConversion(): + """ POST new conversion to the system given a item_id, uom_id, conv_factor + --- + parameters: + - in: header + name: item_id + schema: + type: integer + default: 1 + required: true + description: item_id the conversion applies to + - in: header + name: uom_id + schema: + type: integer + default: 1 + required: true + description: uom_id to match item_id uom to convert to + - in: header + name: conv_factor + schema: + type: float + default: 1 + required: true + description: item_id.uom -> uom_id amount + responses: + 200: + description: Prefix added successfully. + """ if request.method == "POST": item_id = request.get_json()['parent_id'] uom_id = request.get_json()['uom_id'] conv_factor = request.get_json()['conv_factor'] - - database_config = config() site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - conversion = db.ConversionsTable.Payload( - item_id, uom_id, conv_factor - ) - db.ConversionsTable.insert_tuple(conn, site_name, conversion.payload()) + + conversion = dbPayloads.ConversionPayload( + item_id, uom_id, conv_factor + ) + + database_items.insertConversionTuple(site_name, conversion.payload()) - return jsonify(error=False, message="Conversion was added successfully") + return jsonify(error=False, message="Conversion was added successfully") return jsonify(error=True, message="Unable to save this conversion, ERROR!") @items_api.route('/deleteConversion', methods=['POST'])