Updated Transaction SCanner to utilize a barcodes

table instead of linked lists.
This commit is contained in:
Jadowyne Ulve 2025-08-06 15:04:18 -05:00
parent 71f1c4f85d
commit e01b31ab9a
21 changed files with 145 additions and 19 deletions

1
.gitignore vendored
View File

@ -5,3 +5,4 @@ static/css/uikit-rtl.min.css
static/css/uikit.css static/css/uikit.css
static/css/uikit.min.css static/css/uikit.min.css
instance/application.cfg.py instance/application.cfg.py
test.py

View File

@ -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
);

View File

@ -1,5 +1,6 @@
CREATE TABLE IF NOT EXISTS %%site_name%%_items( CREATE TABLE IF NOT EXISTS %%site_name%%_items(
id SERIAL PRIMARY KEY, id SERIAL PRIMARY KEY,
item_uuid UUID,
barcode VARCHAR(255) NOT NULL, barcode VARCHAR(255) NOT NULL,
item_name VARCHAR(255) NOT NULL, item_name VARCHAR(255) NOT NULL,
brand INTEGER, brand INTEGER,
@ -12,7 +13,7 @@ CREATE TABLE IF NOT EXISTS %%site_name%%_items(
row_type VARCHAR(255) NOT NULL, row_type VARCHAR(255) NOT NULL,
item_type VARCHAR(255) NOT NULL, item_type VARCHAR(255) NOT NULL,
search_string TEXT NOT NULL, search_string TEXT NOT NULL,
UNIQUE(barcode, item_info_id), UNIQUE(item_uuid, barcode, item_info_id),
CONSTRAINT fk_item_info CONSTRAINT fk_item_info
FOREIGN KEY(item_info_id) FOREIGN KEY(item_info_id)
REFERENCES %%site_name%%_item_info(id) REFERENCES %%site_name%%_item_info(id)

View File

@ -17,6 +17,8 @@ CREATE TABLE IF NOT EXISTS logins(
system_admin BOOLEAN DEFAULT FALSE, system_admin BOOLEAN DEFAULT FALSE,
flags JSONB DEFAULT '{}', flags JSONB DEFAULT '{}',
row_type VARCHAR(50), row_type VARCHAR(50),
profile_pic_url VARCHAR(255),
login_type VARCHAR(32),
UNIQUE(username), UNIQUE(username),
CHECK (email ~* '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$') CHECK (email ~* '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$')
); );

View File

@ -0,0 +1 @@
DROP TABLE %%site_name%%_barcodes CASCADE;

View File

@ -2,6 +2,21 @@ from dataclasses import dataclass, field
import json, datetime import json, datetime
from database import lst2pgarr 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 @dataclass
class LogisticsInfoPayload: class LogisticsInfoPayload:
barcode: str barcode: str

View File

@ -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;

View File

@ -38,8 +38,7 @@ def getItemBarcode():
if request.method == "GET": if request.method == "GET":
item_barcode = f"%{str(request.args.get('barcode', 1))}%" item_barcode = f"%{str(request.args.get('barcode', 1))}%"
site_name = session['selected_site'] site_name = session['selected_site']
record = poe_database.selectItemAllByBarcode(site_name, (item_barcode,)) record = poe_database.selectItemByBarcode(site_name, (item_barcode,))
print(record)
if record == {} or record == (): if record == {} or record == ():
return jsonify({"item":None, "error":True, "message":"Item either does not exist or there was a larger problem!"}) return jsonify({"item":None, "error":True, "message":"Item either does not exist or there was a larger problem!"})
else: else:
@ -50,11 +49,13 @@ def getItemBarcode():
@access_api.login_required @access_api.login_required
def post_transaction(): def post_transaction():
if request.method == "POST": if request.method == "POST":
print(request.get_json())
result = poe_processes.postTransaction( result = poe_processes.postTransaction(
site_name=session['selected_site'], site_name=session['selected_site'],
user_id=session['user_id'], user_id=session['user_id'],
data=dict(request.json) data=dict(request.json)
) )
print(result)
return jsonify(result) return jsonify(result)
return jsonify({"error":True, "message":"There was an error with this POST statement"}) return jsonify({"error":True, "message":"There was an error with this POST statement"})

View File

@ -174,6 +174,37 @@ def selectItemAllByID(site, payload, convert=True, conn=None):
except (Exception, psycopg2.DatabaseError) as error: except (Exception, psycopg2.DatabaseError) as error:
raise postsqldb.DatabaseError(error, payload, getItemAllByID_sql) 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): def selectItemAllByBarcode(site, payload, convert=True, conn=None):
item = () item = ()
self_conn = False self_conn = False

View File

@ -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)), 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)), info_id AS (SELECT item_info_id FROM %%site_name%%_items WHERE id=(SELECT passed_id FROM passed_id)),
cte_item_info AS ( cte_item_info AS (

View File

@ -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);

View File

@ -31,6 +31,7 @@ async function addToQueue(event) {
if (event.key == "Enter"){ if (event.key == "Enter"){
let data = await getItemBarcode(document.getElementById('barcode-scan').value) let data = await getItemBarcode(document.getElementById('barcode-scan').value)
let scannedItem = data.item let scannedItem = data.item
console.log(scannedItem)
if(data.error){ if(data.error){
UIkit.notification({ UIkit.notification({
message: data.message, message: data.message,
@ -68,14 +69,14 @@ async function submitScanTransaction(scannedItem) {
let comparator = 0 let comparator = 0
if (trans_type === "Adjust In"){ if (trans_type === "Adjust In"){
comparator = scannedItem.logistics_info.primary_location.id comparator = scannedItem.primary_location_id
} else if (trans_type === "Adjust Out"){ } 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++){ for (let i = 0; i < scannedItem.item_locations.length; i++){
if (scannedItem.item_locations[i].location_id === comparator){ 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`, { const response = await fetch(`/poe/postTransaction`, {
@ -84,14 +85,14 @@ async function submitScanTransaction(scannedItem) {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
}, },
body: JSON.stringify({ body: JSON.stringify({
item_id: scannedItem.id, item_id: scannedItem.item_id,
logistics_info_id: scannedItem.logistics_info_id, logistics_info_id: scannedItem.logistics_info_id,
barcode: scannedItem.barcode, barcode: scannedItem.barcode,
item_name: scannedItem.item_name, item_name: scannedItem.item_name,
transaction_type: document.getElementById('scan_trans_type').value, transaction_type: document.getElementById('scan_trans_type').value,
quantity: scannedItem.item_info.uom_quantity, quantity: scannedItem.uom_quantity,
description: "", description: "",
cost: parseFloat(scannedItem.item_info.cost), cost: parseFloat(scannedItem.cost),
vendor: 0, vendor: 0,
expires: null, expires: null,
location_id: scan_transaction_item_location_id location_id: scan_transaction_item_location_id
@ -138,9 +139,9 @@ async function replenishScanTable() {
typeCell.innerHTML = reversedScannedItems[i].type typeCell.innerHTML = reversedScannedItems[i].type
let locationCell = document.createElement('td') let locationCell = document.createElement('td')
if (reversedScannedItems[i].type === "Adjust In"){ 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 { } 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) tableRow.append(statusCell, barcodeCell, nameCell, typeCell, locationCell)

View File

@ -5,6 +5,15 @@ from dataclasses import dataclass, field
import random import random
import string import string
import config 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): class DatabaseError(Exception):
def __init__(self, message, payload=[], sql=""): def __init__(self, message, payload=[], sql=""):

View File

@ -263,7 +263,6 @@ def getFile(file_name):
@access_api.login_required @access_api.login_required
def getPreview(file_name): def getPreview(file_name):
path_ = current_app.config['FILES_FOLDER'] + "/receipts/previews" path_ = current_app.config['FILES_FOLDER'] + "/receipts/previews"
print(path_)
return send_from_directory(path_, file_name) return send_from_directory(path_, file_name)
@receipt_api.route('/api/checkAPI', methods=["POST"]) @receipt_api.route('/api/checkAPI', methods=["POST"])

View File

@ -215,13 +215,9 @@ async function replenishFilesCards(files) {
let card_div = document.createElement('div') let card_div = document.createElement('div')
card_div.setAttribute('class', 'uk-card uk-card-default uk-card-small') card_div.setAttribute('class', 'uk-card uk-card-default uk-card-small')
console.log(files[key])
let baseStaticUrl = `/receipts/api/getPreview/`; let baseStaticUrl = `/receipts/api/getPreview/`;
let imgSrc = `${baseStaticUrl}${files[key].preview_image}`; let imgSrc = `${baseStaticUrl}${files[key].preview_image}`;
console.log(imgSrc)
let media_div = document.createElement('div') let media_div = document.createElement('div')
media_div.setAttribute('class', 'uk-card-media-top') media_div.setAttribute('class', 'uk-card-media-top')
media_div.innerHTML = `<img data-src="${imgSrc}" width="600" height="400" alt="" uk-img />`; media_div.innerHTML = `<img data-src="${imgSrc}" width="600" height="400" alt="" uk-img />`;

View File

@ -2,3 +2,21 @@
2025-08-03 08:25:07.786121 --- ERROR --- DatabaseError(message=''int' object does not support indexing', 2025-08-03 08:25:07.786121 --- ERROR --- DatabaseError(message=''int' object does not support indexing',
payload=1, payload=1,
sql='SELECT * FROM logins WHERE id=%s;') 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;')