diff --git a/.gitignore b/.gitignore index b14bd21..09fffde 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ static/css/uikit-rtl.css static/css/uikit-rtl.min.css static/css/uikit.css static/css/uikit.min.css -instance/application.cfg.py \ No newline at end of file +instance/application.cfg.py +test.py \ No newline at end of file diff --git a/application/__pycache__/database_payloads.cpython-313.pyc b/application/__pycache__/database_payloads.cpython-313.pyc index 9b6c2c1..3ac6fb9 100644 Binary files a/application/__pycache__/database_payloads.cpython-313.pyc and b/application/__pycache__/database_payloads.cpython-313.pyc differ diff --git a/application/__pycache__/postsqldb.cpython-313.pyc b/application/__pycache__/postsqldb.cpython-313.pyc index f88743f..8c75ecb 100644 Binary files a/application/__pycache__/postsqldb.cpython-313.pyc and b/application/__pycache__/postsqldb.cpython-313.pyc differ diff --git a/application/administration/sql/CREATE/barcodes.sql b/application/administration/sql/CREATE/barcodes.sql new file mode 100644 index 0000000..1403f8c --- /dev/null +++ b/application/administration/sql/CREATE/barcodes.sql @@ -0,0 +1,6 @@ +CREATE TABLE IF NOT EXISTS %%site_name%%_barcodes ( + barcode VARCHAR(32) PRIMARY KEY, + item_uuid UUID, + in_exchange FLOAT, + out_exchange FLOAT +); \ No newline at end of file diff --git a/application/administration/sql/CREATE/item.sql b/application/administration/sql/CREATE/item.sql index 0384621..b83b617 100644 --- a/application/administration/sql/CREATE/item.sql +++ b/application/administration/sql/CREATE/item.sql @@ -1,5 +1,6 @@ CREATE TABLE IF NOT EXISTS %%site_name%%_items( id SERIAL PRIMARY KEY, + item_uuid UUID, barcode VARCHAR(255) NOT NULL, item_name VARCHAR(255) NOT NULL, brand INTEGER, @@ -12,7 +13,7 @@ CREATE TABLE IF NOT EXISTS %%site_name%%_items( row_type VARCHAR(255) NOT NULL, item_type VARCHAR(255) NOT NULL, search_string TEXT NOT NULL, - UNIQUE(barcode, item_info_id), + UNIQUE(item_uuid, barcode, item_info_id), CONSTRAINT fk_item_info FOREIGN KEY(item_info_id) REFERENCES %%site_name%%_item_info(id) diff --git a/application/administration/sql/CREATE/logins.sql b/application/administration/sql/CREATE/logins.sql index 908fa04..fadc842 100644 --- a/application/administration/sql/CREATE/logins.sql +++ b/application/administration/sql/CREATE/logins.sql @@ -17,6 +17,8 @@ CREATE TABLE IF NOT EXISTS logins( system_admin BOOLEAN DEFAULT FALSE, flags JSONB DEFAULT '{}', row_type VARCHAR(50), + profile_pic_url VARCHAR(255), + login_type VARCHAR(32), UNIQUE(username), CHECK (email ~* '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$') ); diff --git a/application/administration/sql/DROP/barcodes.sql b/application/administration/sql/DROP/barcodes.sql new file mode 100644 index 0000000..20ebf18 --- /dev/null +++ b/application/administration/sql/DROP/barcodes.sql @@ -0,0 +1 @@ +DROP TABLE %%site_name%%_barcodes CASCADE; \ No newline at end of file diff --git a/application/database_payloads.py b/application/database_payloads.py index f37113a..f6a3e76 100644 --- a/application/database_payloads.py +++ b/application/database_payloads.py @@ -2,6 +2,21 @@ from dataclasses import dataclass, field import json, datetime from database import lst2pgarr +@dataclass +class BarcodesPayload: + barcode: str + item_uuid: str + in_exchange: float + out_exchange: float + + def payload(self): + return ( + self.barcode, + self.item_uuid, + self.in_exchange, + self.out_exchange + ) + @dataclass class LogisticsInfoPayload: barcode: str diff --git a/application/items/sql/selectItemByBarcode.sql b/application/items/sql/selectItemByBarcode.sql new file mode 100644 index 0000000..84d40e5 --- /dev/null +++ b/application/items/sql/selectItemByBarcode.sql @@ -0,0 +1,4 @@ +SELECT barcodes.*, row_to_json(items.*) as item +FROM %%site_name%%_barcodes barcodes +LEFT JOIN %%site_name%%_items items ON barcodes.item_uuid = items.item_uuid +WHERE barcodes.barcode = %s; \ No newline at end of file diff --git a/application/poe/__pycache__/poe_api.cpython-313.pyc b/application/poe/__pycache__/poe_api.cpython-313.pyc index 0b9c63c..c221478 100644 Binary files a/application/poe/__pycache__/poe_api.cpython-313.pyc and b/application/poe/__pycache__/poe_api.cpython-313.pyc differ diff --git a/application/poe/__pycache__/poe_database.cpython-313.pyc b/application/poe/__pycache__/poe_database.cpython-313.pyc index d00e690..b98ba08 100644 Binary files a/application/poe/__pycache__/poe_database.cpython-313.pyc and b/application/poe/__pycache__/poe_database.cpython-313.pyc differ diff --git a/application/poe/poe_api.py b/application/poe/poe_api.py index a11eab5..71fdbb9 100644 --- a/application/poe/poe_api.py +++ b/application/poe/poe_api.py @@ -38,8 +38,7 @@ def getItemBarcode(): if request.method == "GET": item_barcode = f"%{str(request.args.get('barcode', 1))}%" site_name = session['selected_site'] - record = poe_database.selectItemAllByBarcode(site_name, (item_barcode,)) - print(record) + record = poe_database.selectItemByBarcode(site_name, (item_barcode,)) if record == {} or record == (): return jsonify({"item":None, "error":True, "message":"Item either does not exist or there was a larger problem!"}) else: @@ -50,11 +49,13 @@ def getItemBarcode(): @access_api.login_required def post_transaction(): if request.method == "POST": + print(request.get_json()) result = poe_processes.postTransaction( site_name=session['selected_site'], user_id=session['user_id'], data=dict(request.json) ) + print(result) return jsonify(result) return jsonify({"error":True, "message":"There was an error with this POST statement"}) diff --git a/application/poe/poe_database.py b/application/poe/poe_database.py index 6d69a23..07544ac 100644 --- a/application/poe/poe_database.py +++ b/application/poe/poe_database.py @@ -174,6 +174,37 @@ def selectItemAllByID(site, payload, convert=True, conn=None): except (Exception, psycopg2.DatabaseError) as error: raise postsqldb.DatabaseError(error, payload, getItemAllByID_sql) +def selectItemByBarcode(site, payload, convert=True, conn=None): + item = () + self_conn = False + + if convert: + item = {} + + if not conn: + database_config = config.config() + conn = psycopg2.connect(**database_config) + conn.autocommit = True + self_conn = True + + with open(f"application/poe/sql/scanner/selectItemByBarcode.sql", "r+") as file: + selectItemByBarcode_sql = file.read().replace("%%site_name%%", site) + + try: + with conn.cursor() as cur: + cur.execute(selectItemByBarcode_sql, payload) + rows = cur.fetchone() + if rows and convert: + item = postsqldb.tupleDictionaryFactory(cur.description, rows) + if rows and not convert: + item = rows + + if self_conn: + conn.close() + return item + except (Exception, psycopg2.DatabaseError) as error: + raise postsqldb.DatabaseError(error, payload, selectItemByBarcode_sql) + def selectItemAllByBarcode(site, payload, convert=True, conn=None): item = () self_conn = False diff --git a/application/poe/sql/getItemAllByBarcode.sql b/application/poe/sql/getItemAllByBarcode.sql index b2c4b8d..62163c8 100644 --- a/application/poe/sql/getItemAllByBarcode.sql +++ b/application/poe/sql/getItemAllByBarcode.sql @@ -1,4 +1,6 @@ -WITH passed_id AS (SELECT id AS passed_id FROM %%site_name%%_items WHERE barcode=%s), +WITH passed_id AS (SELECT items.id AS passed_id FROM %%site_name%%_barcodes barcodes + LEFT JOIN %%site_name%%_items items ON items.item_uuid = barcodes.item_uuid + WHERE barcodes.barcode=%s), logistics_id AS (SELECT logistics_info_id FROM %%site_name%%_items WHERE id=(SELECT passed_id FROM passed_id)), info_id AS (SELECT item_info_id FROM %%site_name%%_items WHERE id=(SELECT passed_id FROM passed_id)), cte_item_info AS ( diff --git a/application/poe/sql/scanner/selectItemByBarcode.sql b/application/poe/sql/scanner/selectItemByBarcode.sql new file mode 100644 index 0000000..3e53268 --- /dev/null +++ b/application/poe/sql/scanner/selectItemByBarcode.sql @@ -0,0 +1,39 @@ +/* +id +logistics_info_id +barcode +item_name +logistics_info.primary_location.id +logistics_info.auto_issue_location.id +item_info.uom_quantity +item_info.cost + + +*/ +WITH passed_id AS (SELECT items.id AS passed_id, barcodes.barcode AS passed_barcode FROM %%site_name%%_barcodes barcodes + LEFT JOIN %%site_name%%_items items ON items.item_uuid = barcodes.item_uuid + WHERE barcodes.barcode=%s), + cte_item_locations AS ( + SELECT %%site_name%%_locations.uuid AS location_uuid, %%site_name%%_locations.id AS location_id FROM %%site_name%%_item_locations + LEFT JOIN %%site_name%%_locations ON %%site_name%%_locations.id = %%site_name%%_item_locations.location_id + WHERE part_id = (SELECT passed_id FROM passed_id) + ) + +SELECT barcodes.*, + item.id as item_id, + item.logistics_info_id as logistics_info_id, + item.item_name as item_name, + primary_location.id as primary_location_id, + primary_location.uuid as primary_location_uuid, + auto_issue_location.id as auto_issue_location_id, + auto_issue_location.uuid as auto_issue_location_uuid, + item_info.cost as cost, + item_info.uom_quantity as uom_quantity, + (SELECT COALESCE(array_agg(row_to_json(ils)), '{}') FROM cte_item_locations ils) AS item_locations +FROM %%site_name%%_barcodes barcodes +LEFT JOIN %%site_name%%_items item ON barcodes.item_uuid = item.item_uuid +LEFT JOIN %%site_name%%_item_info as item_info ON item_info.id = item.item_info_id +LEFT JOIN %%site_name%%_logistics_info logistics_info ON logistics_info.id = item.logistics_info_id +LEFT JOIN %%site_name%%_locations primary_location ON logistics_info.primary_location = primary_location.id +LEFT JOIN %%site_name%%_locations auto_issue_location ON logistics_info.auto_issue_location = auto_issue_location.id +WHERE barcodes.barcode = (SELECT passed_barcode FROM passed_id); \ No newline at end of file diff --git a/application/poe/static/js/transactionHandler.js b/application/poe/static/js/transactionHandler.js index 59162ad..b1a98c8 100644 --- a/application/poe/static/js/transactionHandler.js +++ b/application/poe/static/js/transactionHandler.js @@ -31,6 +31,7 @@ async function addToQueue(event) { if (event.key == "Enter"){ let data = await getItemBarcode(document.getElementById('barcode-scan').value) let scannedItem = data.item + console.log(scannedItem) if(data.error){ UIkit.notification({ message: data.message, @@ -68,14 +69,14 @@ async function submitScanTransaction(scannedItem) { let comparator = 0 if (trans_type === "Adjust In"){ - comparator = scannedItem.logistics_info.primary_location.id + comparator = scannedItem.primary_location_id } else if (trans_type === "Adjust Out"){ - comparator = scannedItem.logistics_info.auto_issue_location.id + comparator = scannedItem.auto_issue_location_id } for (let i = 0; i < scannedItem.item_locations.length; i++){ if (scannedItem.item_locations[i].location_id === comparator){ - scan_transaction_item_location_id = scannedItem.item_locations[i].id + scan_transaction_item_location_id = scannedItem.item_locations[i].location_id } } const response = await fetch(`/poe/postTransaction`, { @@ -84,14 +85,14 @@ async function submitScanTransaction(scannedItem) { 'Content-Type': 'application/json', }, body: JSON.stringify({ - item_id: scannedItem.id, + item_id: scannedItem.item_id, logistics_info_id: scannedItem.logistics_info_id, barcode: scannedItem.barcode, item_name: scannedItem.item_name, transaction_type: document.getElementById('scan_trans_type').value, - quantity: scannedItem.item_info.uom_quantity, + quantity: scannedItem.uom_quantity, description: "", - cost: parseFloat(scannedItem.item_info.cost), + cost: parseFloat(scannedItem.cost), vendor: 0, expires: null, location_id: scan_transaction_item_location_id @@ -138,9 +139,9 @@ async function replenishScanTable() { typeCell.innerHTML = reversedScannedItems[i].type let locationCell = document.createElement('td') if (reversedScannedItems[i].type === "Adjust In"){ - locationCell.innerHTML = reversedScannedItems[i].item.logistics_info.primary_location.uuid + locationCell.innerHTML = reversedScannedItems[i].item.primary_location_uuid } else { - locationCell.innerHTML = reversedScannedItems[i].item.logistics_info.auto_issue_location.uuid + locationCell.innerHTML = reversedScannedItems[i].item.auto_issue_location_uuid } tableRow.append(statusCell, barcodeCell, nameCell, typeCell, locationCell) diff --git a/application/postsqldb.py b/application/postsqldb.py index 43706dd..dae0f88 100644 --- a/application/postsqldb.py +++ b/application/postsqldb.py @@ -5,6 +5,15 @@ from dataclasses import dataclass, field import random import string import config +import uuid + + +def validateUUID(uuid_string, version): + try: + u = uuid.UUID(uuid_string, version=version) + return u.version == version + except ValueError: + return False class DatabaseError(Exception): def __init__(self, message, payload=[], sql=""): diff --git a/application/receipts/__pycache__/receipts_api.cpython-313.pyc b/application/receipts/__pycache__/receipts_api.cpython-313.pyc index 1caddb0..6970a56 100644 Binary files a/application/receipts/__pycache__/receipts_api.cpython-313.pyc and b/application/receipts/__pycache__/receipts_api.cpython-313.pyc differ diff --git a/application/receipts/receipts_api.py b/application/receipts/receipts_api.py index 0c6867d..2d8ccee 100644 --- a/application/receipts/receipts_api.py +++ b/application/receipts/receipts_api.py @@ -263,7 +263,6 @@ def getFile(file_name): @access_api.login_required def getPreview(file_name): path_ = current_app.config['FILES_FOLDER'] + "/receipts/previews" - print(path_) return send_from_directory(path_, file_name) @receipt_api.route('/api/checkAPI', methods=["POST"]) diff --git a/application/receipts/static/js/receiptHandler.js b/application/receipts/static/js/receiptHandler.js index e3b1e05..0d8addf 100644 --- a/application/receipts/static/js/receiptHandler.js +++ b/application/receipts/static/js/receiptHandler.js @@ -215,12 +215,8 @@ async function replenishFilesCards(files) { let card_div = document.createElement('div') card_div.setAttribute('class', 'uk-card uk-card-default uk-card-small') - console.log(files[key]) - let baseStaticUrl = `/receipts/api/getPreview/`; let imgSrc = `${baseStaticUrl}${files[key].preview_image}`; - - console.log(imgSrc) let media_div = document.createElement('div') media_div.setAttribute('class', 'uk-card-media-top') diff --git a/logs/database.log b/logs/database.log index 4b21554..a9f57ba 100644 --- a/logs/database.log +++ b/logs/database.log @@ -1,4 +1,22 @@ 2025-08-03 08:25:07.786121 --- ERROR --- DatabaseError(message=''int' object does not support indexing', payload=1, - sql='SELECT * FROM logins WHERE id=%s;') \ No newline at end of file + sql='SELECT * FROM logins WHERE id=%s;') +2025-08-05 15:17:02.305813 --- ERROR --- DatabaseError(message='column "id" does not existLINE 1: WITH passed_id AS (SELECT id AS passed_id FROM test_barcodes... ^', + payload=('%01231003%',), + sql='WITH passed_id AS (SELECT id AS passed_id FROM test_barcodes WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_id)), info_id AS (SELECT item_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_id)), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom FROM test_item_info LEFT JOIN units ON test_item_info.uom = units.id WHERE test_item_info.id = (SELECT item_info_id FROM info_id) ), cte_groups AS ( SELECT test_groups.*, test_group_items.uuid, test_group_items.item_type, test_group_items.qty FROM test_groups JOIN test_group_items ON test_groups.id = test_group_items.gr_id WHERE test_group_items.item_id = (SELECT passed_id FROM passed_id) ), cte_shopping_lists AS ( SELECT test_shopping_lists.*, test_shopping_list_items.uuid, test_shopping_list_items.item_type, test_shopping_list_items.qty FROM test_shopping_lists JOIN test_shopping_list_items ON test_shopping_lists.id = test_shopping_list_items.sl_id WHERE test_shopping_list_items.item_id = (SELECT passed_id FROM passed_id) ), cte_itemlinks AS ( SELECT * FROM test_itemlinks WHERE link=(SELECT passed_id FROM passed_id) ), cte_item_locations AS ( SELECT * FROM test_item_locations LEFT JOIN test_locations ON test_locations.id = test_item_locations.location_id WHERE part_id = (SELECT passed_id FROM passed_id) ), cte_logistics_info AS ( SELECT li.*, row_to_json(pl) AS primary_location, row_to_json(ail) AS auto_issue_location, row_to_json(pz) AS primary_zone, row_to_json(aiz) AS auto_issue_zone FROM test_logistics_info AS li LEFT JOIN test_locations AS pl ON li.primary_location = pl.id LEFT JOIN test_locations AS ail ON li.auto_issue_location = ail.id LEFT JOIN test_zones AS pz ON li.primary_zone = pz.id LEFT JOIN test_zones AS aiz ON li.auto_issue_zone = aiz.id WHERE li.id=(SELECT logistics_info_id FROM logistics_id) )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_items.*, (SELECT COALESCE(row_to_json(logis), '{}') FROM cte_logistics_info logis) AS logistics_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (SELECT COALESCE(row_to_json(ii), '{}') FROM cte_item_info ii) AS item_info, (SELECT COALESCE(array_agg(row_to_json(g)), '{}') FROM cte_groups g) AS item_groups, (SELECT COALESCE(array_agg(row_to_json(sl)), '{}') FROM cte_shopping_lists sl) AS item_shopping_lists, (SELECT COALESCE(array_agg(row_to_json(il)), '{}') FROM cte_itemlinks il) AS linked_items, (SELECT COALESCE(array_agg(row_to_json(ils)), '{}') FROM cte_item_locations ils) AS item_locationsFROM test_items LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN test_food_info ON test_items.food_info_id = test_food_info.id LEFT JOIN test_brands ON test_items.brand = test_brands.id LEFT JOIN units ON test_item_info.uom = units.id LEFT JOIN cte_groups ON test_items.id = cte_groups.id LEFT JOIN cte_shopping_lists ON test_items.id = cte_shopping_lists.idWHERE test_items.id=(SELECT passed_id FROM passed_id)GROUP BY test_items.id, test_item_info.id, test_food_info.id, test_brands.id;') +2025-08-05 15:19:02.753652 --- ERROR --- DatabaseError(message='tuple index out of range', + payload=('%01231003%',), + sql='WITH item_uuid AS (SELECT item_uuid AS item_uuid FROM test_barcodes WHERE barcode=%s), passed_id As (SELECT id AS passed_id FROM test_items WHERE item_uuid=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_id)), info_id AS (SELECT item_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_id)), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom FROM test_item_info LEFT JOIN units ON test_item_info.uom = units.id WHERE test_item_info.id = (SELECT item_info_id FROM info_id) ), cte_groups AS ( SELECT test_groups.*, test_group_items.uuid, test_group_items.item_type, test_group_items.qty FROM test_groups JOIN test_group_items ON test_groups.id = test_group_items.gr_id WHERE test_group_items.item_id = (SELECT passed_id FROM passed_id) ), cte_shopping_lists AS ( SELECT test_shopping_lists.*, test_shopping_list_items.uuid, test_shopping_list_items.item_type, test_shopping_list_items.qty FROM test_shopping_lists JOIN test_shopping_list_items ON test_shopping_lists.id = test_shopping_list_items.sl_id WHERE test_shopping_list_items.item_id = (SELECT passed_id FROM passed_id) ), cte_itemlinks AS ( SELECT * FROM test_itemlinks WHERE link=(SELECT passed_id FROM passed_id) ), cte_item_locations AS ( SELECT * FROM test_item_locations LEFT JOIN test_locations ON test_locations.id = test_item_locations.location_id WHERE part_id = (SELECT passed_id FROM passed_id) ), cte_logistics_info AS ( SELECT li.*, row_to_json(pl) AS primary_location, row_to_json(ail) AS auto_issue_location, row_to_json(pz) AS primary_zone, row_to_json(aiz) AS auto_issue_zone FROM test_logistics_info AS li LEFT JOIN test_locations AS pl ON li.primary_location = pl.id LEFT JOIN test_locations AS ail ON li.auto_issue_location = ail.id LEFT JOIN test_zones AS pz ON li.primary_zone = pz.id LEFT JOIN test_zones AS aiz ON li.auto_issue_zone = aiz.id WHERE li.id=(SELECT logistics_info_id FROM logistics_id) )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_items.*, (SELECT COALESCE(row_to_json(logis), '{}') FROM cte_logistics_info logis) AS logistics_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (SELECT COALESCE(row_to_json(ii), '{}') FROM cte_item_info ii) AS item_info, (SELECT COALESCE(array_agg(row_to_json(g)), '{}') FROM cte_groups g) AS item_groups, (SELECT COALESCE(array_agg(row_to_json(sl)), '{}') FROM cte_shopping_lists sl) AS item_shopping_lists, (SELECT COALESCE(array_agg(row_to_json(il)), '{}') FROM cte_itemlinks il) AS linked_items, (SELECT COALESCE(array_agg(row_to_json(ils)), '{}') FROM cte_item_locations ils) AS item_locationsFROM test_items LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN test_food_info ON test_items.food_info_id = test_food_info.id LEFT JOIN test_brands ON test_items.brand = test_brands.id LEFT JOIN units ON test_item_info.uom = units.id LEFT JOIN cte_groups ON test_items.id = cte_groups.id LEFT JOIN cte_shopping_lists ON test_items.id = cte_shopping_lists.idWHERE test_items.id=(SELECT passed_id FROM passed_id)GROUP BY test_items.id, test_item_info.id, test_food_info.id, test_brands.id;') +2025-08-05 15:21:40.124158 --- ERROR --- DatabaseError(message='column reference "barcode" is ambiguousLINE 1: ...t_items.item_uuid = test_barcodes.item_uuid WHERE barcode='%... ^', + payload=('%01231003%',), + sql='WITH passed_id AS (SELECT id AS passed_id FROM test_barcodes LEFT JOIN test_items ON test_items.item_uuid = test_barcodes.item_uuid WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_id)), info_id AS (SELECT item_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_id)), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom FROM test_item_info LEFT JOIN units ON test_item_info.uom = units.id WHERE test_item_info.id = (SELECT item_info_id FROM info_id) ), cte_groups AS ( SELECT test_groups.*, test_group_items.uuid, test_group_items.item_type, test_group_items.qty FROM test_groups JOIN test_group_items ON test_groups.id = test_group_items.gr_id WHERE test_group_items.item_id = (SELECT passed_id FROM passed_id) ), cte_shopping_lists AS ( SELECT test_shopping_lists.*, test_shopping_list_items.uuid, test_shopping_list_items.item_type, test_shopping_list_items.qty FROM test_shopping_lists JOIN test_shopping_list_items ON test_shopping_lists.id = test_shopping_list_items.sl_id WHERE test_shopping_list_items.item_id = (SELECT passed_id FROM passed_id) ), cte_itemlinks AS ( SELECT * FROM test_itemlinks WHERE link=(SELECT passed_id FROM passed_id) ), cte_item_locations AS ( SELECT * FROM test_item_locations LEFT JOIN test_locations ON test_locations.id = test_item_locations.location_id WHERE part_id = (SELECT passed_id FROM passed_id) ), cte_logistics_info AS ( SELECT li.*, row_to_json(pl) AS primary_location, row_to_json(ail) AS auto_issue_location, row_to_json(pz) AS primary_zone, row_to_json(aiz) AS auto_issue_zone FROM test_logistics_info AS li LEFT JOIN test_locations AS pl ON li.primary_location = pl.id LEFT JOIN test_locations AS ail ON li.auto_issue_location = ail.id LEFT JOIN test_zones AS pz ON li.primary_zone = pz.id LEFT JOIN test_zones AS aiz ON li.auto_issue_zone = aiz.id WHERE li.id=(SELECT logistics_info_id FROM logistics_id) )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_items.*, (SELECT COALESCE(row_to_json(logis), '{}') FROM cte_logistics_info logis) AS logistics_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (SELECT COALESCE(row_to_json(ii), '{}') FROM cte_item_info ii) AS item_info, (SELECT COALESCE(array_agg(row_to_json(g)), '{}') FROM cte_groups g) AS item_groups, (SELECT COALESCE(array_agg(row_to_json(sl)), '{}') FROM cte_shopping_lists sl) AS item_shopping_lists, (SELECT COALESCE(array_agg(row_to_json(il)), '{}') FROM cte_itemlinks il) AS linked_items, (SELECT COALESCE(array_agg(row_to_json(ils)), '{}') FROM cte_item_locations ils) AS item_locationsFROM test_items LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN test_food_info ON test_items.food_info_id = test_food_info.id LEFT JOIN test_brands ON test_items.brand = test_brands.id LEFT JOIN units ON test_item_info.uom = units.id LEFT JOIN cte_groups ON test_items.id = cte_groups.id LEFT JOIN cte_shopping_lists ON test_items.id = cte_shopping_lists.idWHERE test_items.id=(SELECT passed_id FROM passed_id)GROUP BY test_items.id, test_item_info.id, test_food_info.id, test_brands.id;') +2025-08-05 15:21:59.561578 --- ERROR --- DatabaseError(message='column reference "barcode" is ambiguousLINE 1: ...t_items.item_uuid = test_barcodes.item_uuid WHERE barcode='%... ^', + payload=('%01231003%',), + sql='WITH passed_id AS (SELECT test_items.id AS passed_id FROM test_barcodes LEFT JOIN test_items ON test_items.item_uuid = test_barcodes.item_uuid WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_id)), info_id AS (SELECT item_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_id)), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom FROM test_item_info LEFT JOIN units ON test_item_info.uom = units.id WHERE test_item_info.id = (SELECT item_info_id FROM info_id) ), cte_groups AS ( SELECT test_groups.*, test_group_items.uuid, test_group_items.item_type, test_group_items.qty FROM test_groups JOIN test_group_items ON test_groups.id = test_group_items.gr_id WHERE test_group_items.item_id = (SELECT passed_id FROM passed_id) ), cte_shopping_lists AS ( SELECT test_shopping_lists.*, test_shopping_list_items.uuid, test_shopping_list_items.item_type, test_shopping_list_items.qty FROM test_shopping_lists JOIN test_shopping_list_items ON test_shopping_lists.id = test_shopping_list_items.sl_id WHERE test_shopping_list_items.item_id = (SELECT passed_id FROM passed_id) ), cte_itemlinks AS ( SELECT * FROM test_itemlinks WHERE link=(SELECT passed_id FROM passed_id) ), cte_item_locations AS ( SELECT * FROM test_item_locations LEFT JOIN test_locations ON test_locations.id = test_item_locations.location_id WHERE part_id = (SELECT passed_id FROM passed_id) ), cte_logistics_info AS ( SELECT li.*, row_to_json(pl) AS primary_location, row_to_json(ail) AS auto_issue_location, row_to_json(pz) AS primary_zone, row_to_json(aiz) AS auto_issue_zone FROM test_logistics_info AS li LEFT JOIN test_locations AS pl ON li.primary_location = pl.id LEFT JOIN test_locations AS ail ON li.auto_issue_location = ail.id LEFT JOIN test_zones AS pz ON li.primary_zone = pz.id LEFT JOIN test_zones AS aiz ON li.auto_issue_zone = aiz.id WHERE li.id=(SELECT logistics_info_id FROM logistics_id) )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_items.*, (SELECT COALESCE(row_to_json(logis), '{}') FROM cte_logistics_info logis) AS logistics_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (SELECT COALESCE(row_to_json(ii), '{}') FROM cte_item_info ii) AS item_info, (SELECT COALESCE(array_agg(row_to_json(g)), '{}') FROM cte_groups g) AS item_groups, (SELECT COALESCE(array_agg(row_to_json(sl)), '{}') FROM cte_shopping_lists sl) AS item_shopping_lists, (SELECT COALESCE(array_agg(row_to_json(il)), '{}') FROM cte_itemlinks il) AS linked_items, (SELECT COALESCE(array_agg(row_to_json(ils)), '{}') FROM cte_item_locations ils) AS item_locationsFROM test_items LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN test_food_info ON test_items.food_info_id = test_food_info.id LEFT JOIN test_brands ON test_items.brand = test_brands.id LEFT JOIN units ON test_item_info.uom = units.id LEFT JOIN cte_groups ON test_items.id = cte_groups.id LEFT JOIN cte_shopping_lists ON test_items.id = cte_shopping_lists.idWHERE test_items.id=(SELECT passed_id FROM passed_id)GROUP BY test_items.id, test_item_info.id, test_food_info.id, test_brands.id;') +2025-08-05 15:24:44.958603 --- ERROR --- DatabaseError(message='column reference "barcode" is ambiguousLINE 3: WHERE barcode='%041789001314%'), ^', + payload=('%041789001314%',), + sql='WITH passed_id AS (SELECT test_items.id AS passed_id FROM test_barcodes LEFT JOIN test_items ON test_items.item_uuid = test_barcodes.item_uuid WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_id)), info_id AS (SELECT item_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_id)), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom FROM test_item_info LEFT JOIN units ON test_item_info.uom = units.id WHERE test_item_info.id = (SELECT item_info_id FROM info_id) ), cte_groups AS ( SELECT test_groups.*, test_group_items.uuid, test_group_items.item_type, test_group_items.qty FROM test_groups JOIN test_group_items ON test_groups.id = test_group_items.gr_id WHERE test_group_items.item_id = (SELECT passed_id FROM passed_id) ), cte_shopping_lists AS ( SELECT test_shopping_lists.*, test_shopping_list_items.uuid, test_shopping_list_items.item_type, test_shopping_list_items.qty FROM test_shopping_lists JOIN test_shopping_list_items ON test_shopping_lists.id = test_shopping_list_items.sl_id WHERE test_shopping_list_items.item_id = (SELECT passed_id FROM passed_id) ), cte_itemlinks AS ( SELECT * FROM test_itemlinks WHERE link=(SELECT passed_id FROM passed_id) ), cte_item_locations AS ( SELECT * FROM test_item_locations LEFT JOIN test_locations ON test_locations.id = test_item_locations.location_id WHERE part_id = (SELECT passed_id FROM passed_id) ), cte_logistics_info AS ( SELECT li.*, row_to_json(pl) AS primary_location, row_to_json(ail) AS auto_issue_location, row_to_json(pz) AS primary_zone, row_to_json(aiz) AS auto_issue_zone FROM test_logistics_info AS li LEFT JOIN test_locations AS pl ON li.primary_location = pl.id LEFT JOIN test_locations AS ail ON li.auto_issue_location = ail.id LEFT JOIN test_zones AS pz ON li.primary_zone = pz.id LEFT JOIN test_zones AS aiz ON li.auto_issue_zone = aiz.id WHERE li.id=(SELECT logistics_info_id FROM logistics_id) )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_items.*, (SELECT COALESCE(row_to_json(logis), '{}') FROM cte_logistics_info logis) AS logistics_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (SELECT COALESCE(row_to_json(ii), '{}') FROM cte_item_info ii) AS item_info, (SELECT COALESCE(array_agg(row_to_json(g)), '{}') FROM cte_groups g) AS item_groups, (SELECT COALESCE(array_agg(row_to_json(sl)), '{}') FROM cte_shopping_lists sl) AS item_shopping_lists, (SELECT COALESCE(array_agg(row_to_json(il)), '{}') FROM cte_itemlinks il) AS linked_items, (SELECT COALESCE(array_agg(row_to_json(ils)), '{}') FROM cte_item_locations ils) AS item_locationsFROM test_items LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN test_food_info ON test_items.food_info_id = test_food_info.id LEFT JOIN test_brands ON test_items.brand = test_brands.id LEFT JOIN units ON test_item_info.uom = units.id LEFT JOIN cte_groups ON test_items.id = cte_groups.id LEFT JOIN cte_shopping_lists ON test_items.id = cte_shopping_lists.idWHERE test_items.id=(SELECT passed_id FROM passed_id)GROUP BY test_items.id, test_item_info.id, test_food_info.id, test_brands.id;') +2025-08-05 15:25:24.830194 --- ERROR --- DatabaseError(message='invalid reference to FROM-clause entry for table "test_items"LINE 1: WITH passed_id AS (SELECT test_items.id AS passed_id FROM te... ^HINT: Perhaps you meant to reference the table alias "items".', + payload=('%041789001314%',), + sql='WITH passed_id AS (SELECT test_items.id AS passed_id FROM test_barcodes barcodes LEFT JOIN test_items items ON items.item_uuid = barcodes.item_uuid WHERE barcodes.barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_id)), info_id AS (SELECT item_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_id)), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom FROM test_item_info LEFT JOIN units ON test_item_info.uom = units.id WHERE test_item_info.id = (SELECT item_info_id FROM info_id) ), cte_groups AS ( SELECT test_groups.*, test_group_items.uuid, test_group_items.item_type, test_group_items.qty FROM test_groups JOIN test_group_items ON test_groups.id = test_group_items.gr_id WHERE test_group_items.item_id = (SELECT passed_id FROM passed_id) ), cte_shopping_lists AS ( SELECT test_shopping_lists.*, test_shopping_list_items.uuid, test_shopping_list_items.item_type, test_shopping_list_items.qty FROM test_shopping_lists JOIN test_shopping_list_items ON test_shopping_lists.id = test_shopping_list_items.sl_id WHERE test_shopping_list_items.item_id = (SELECT passed_id FROM passed_id) ), cte_itemlinks AS ( SELECT * FROM test_itemlinks WHERE link=(SELECT passed_id FROM passed_id) ), cte_item_locations AS ( SELECT * FROM test_item_locations LEFT JOIN test_locations ON test_locations.id = test_item_locations.location_id WHERE part_id = (SELECT passed_id FROM passed_id) ), cte_logistics_info AS ( SELECT li.*, row_to_json(pl) AS primary_location, row_to_json(ail) AS auto_issue_location, row_to_json(pz) AS primary_zone, row_to_json(aiz) AS auto_issue_zone FROM test_logistics_info AS li LEFT JOIN test_locations AS pl ON li.primary_location = pl.id LEFT JOIN test_locations AS ail ON li.auto_issue_location = ail.id LEFT JOIN test_zones AS pz ON li.primary_zone = pz.id LEFT JOIN test_zones AS aiz ON li.auto_issue_zone = aiz.id WHERE li.id=(SELECT logistics_info_id FROM logistics_id) )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_items.*, (SELECT COALESCE(row_to_json(logis), '{}') FROM cte_logistics_info logis) AS logistics_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (SELECT COALESCE(row_to_json(ii), '{}') FROM cte_item_info ii) AS item_info, (SELECT COALESCE(array_agg(row_to_json(g)), '{}') FROM cte_groups g) AS item_groups, (SELECT COALESCE(array_agg(row_to_json(sl)), '{}') FROM cte_shopping_lists sl) AS item_shopping_lists, (SELECT COALESCE(array_agg(row_to_json(il)), '{}') FROM cte_itemlinks il) AS linked_items, (SELECT COALESCE(array_agg(row_to_json(ils)), '{}') FROM cte_item_locations ils) AS item_locationsFROM test_items LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN test_food_info ON test_items.food_info_id = test_food_info.id LEFT JOIN test_brands ON test_items.brand = test_brands.id LEFT JOIN units ON test_item_info.uom = units.id LEFT JOIN cte_groups ON test_items.id = cte_groups.id LEFT JOIN cte_shopping_lists ON test_items.id = cte_shopping_lists.idWHERE test_items.id=(SELECT passed_id FROM passed_id)GROUP BY test_items.id, test_item_info.id, test_food_info.id, test_brands.id;') \ No newline at end of file