diff --git a/.gitignore b/.gitignore index 05cb92a..8c5c3bb 100644 --- a/.gitignore +++ b/.gitignore @@ -3,56 +3,4 @@ sites static/css/uikit-rtl.css static/css/uikit-rtl.min.css static/css/uikit.css -static/css/uikit.min.css -__pycache__/api_admin.cpython-312.pyc -__pycache__/api_admin.cpython-313.pyc -__pycache__/api.cpython-312.pyc -__pycache__/api.cpython-313.pyc -__pycache__/config.cpython-312.pyc -__pycache__/config.cpython-313.pyc -__pycache__/database_admin.cpython-312.pyc -__pycache__/database_admin.cpython-313.pyc -__pycache__/database.cpython-312.pyc -__pycache__/database.cpython-313.pyc -__pycache__/external_API.cpython-312.pyc -__pycache__/external_API.cpython-313.pyc -__pycache__/group_api.cpython-312.pyc -__pycache__/group_api.cpython-313.pyc -__pycache__/main.cpython-312.pyc -__pycache__/main.cpython-313.pyc -__pycache__/manage.cpython-312.pyc -__pycache__/manage.cpython-313.pyc -__pycache__/MyDataclasses.cpython-312.pyc -__pycache__/MyDataclasses.cpython-313.pyc -__pycache__/postsqldb.cpython-312.pyc -__pycache__/postsqldb.cpython-313.pyc -__pycache__/process.cpython-312.pyc -__pycache__/process.cpython-313.pyc -__pycache__/receipts_API.cpython-312.pyc -__pycache__/receipts_API.cpython-313.pyc -__pycache__/shopping_list_API.cpython-312.pyc -__pycache__/shopping_list_API.cpython-313.pyc -__pycache__/user_api.cpython-312.pyc -__pycache__/user_api.cpython-313.pyc -__pycache__/webpush.cpython-312.pyc -__pycache__/webpush.cpython-313.pyc -__pycache__/workshop_api.cpython-312.pyc -__pycache__/workshop_api.cpython-313.pyc -application/recipes/__pycache__/__init__.cpython-312.pyc -application/recipes/__pycache__/__init__.cpython-313.pyc -application/recipes/__pycache__/database_recipes.cpython-312.pyc -application/recipes/__pycache__/database_recipes.cpython-313.pyc -application/recipes/__pycache__/recipes_api.cpython-312.pyc -application/recipes/__pycache__/recipes_api.cpython-313.pyc -application/__pycache__/__init__.cpython-312.pyc -application/__pycache__/__init__.cpython-313.pyc -application/__pycache__/postsqldb.cpython-312.pyc -application/__pycache__/postsqldb.cpython-313.pyc -application/items/__pycache__/__init__.cpython-312.pyc -application/items/__pycache__/__init__.cpython-313.pyc -application/items/__pycache__/database_items.cpython-312.pyc -application/items/__pycache__/database_items.cpython-313.pyc -application/items/__pycache__/items_API.cpython-312.pyc -application/items/__pycache__/items_API.cpython-313.pyc -application/items/__pycache__/items_processes.cpython-312.pyc -application/items/__pycache__/items_processes.cpython-313.pyc +static/css/uikit.min.css \ No newline at end of file diff --git a/MyDataclasses.py b/MyDataclasses.py index 03c6fe9..59bd286 100644 --- a/MyDataclasses.py +++ b/MyDataclasses.py @@ -358,6 +358,10 @@ class SitePayload: self.default_auto_issue_location, self.default_primary_location ) + + def get_dictionary(self): + return self.__dict__ + #DONE @dataclass diff --git a/README.md b/README.md index 09e71c0..97b7af7 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,17 @@ -## postgresql and python learning +## PantryTrack -I am attempting to understand how to connect and execute commands through python against a remote postgresql to update my systems +This is currently a passion project that I have started to learn and develop a few different things: +- Barcode Scanners and how they work +- Posgresql Databases +- SQL, JAVASCRIPT, CSS, HTML +- Database Schema management and design -This is a test \ No newline at end of file +PantryTrack is am inventory system that you add items to, use those items to build recipes and shopping lists. + +You then can manually create receipts and or use a barcode scanner to set up a kiosk to scan in all the things you +purchase into a receipt. + +You then edit and receive that receipt into the system. + +There is also the ability to use a kiosk like interface to set up a scan in and out system, where as you use things +the system will remove those items by scanning them. \ No newline at end of file diff --git a/__pycache__/MyDataclasses.cpython-313.pyc b/__pycache__/MyDataclasses.cpython-313.pyc new file mode 100644 index 0000000..b36b635 Binary files /dev/null and b/__pycache__/MyDataclasses.cpython-313.pyc differ diff --git a/__pycache__/api.cpython-313.pyc b/__pycache__/api.cpython-313.pyc new file mode 100644 index 0000000..102c9ee Binary files /dev/null and b/__pycache__/api.cpython-313.pyc differ diff --git a/__pycache__/api_admin.cpython-313.pyc b/__pycache__/api_admin.cpython-313.pyc new file mode 100644 index 0000000..c93ef6b Binary files /dev/null and b/__pycache__/api_admin.cpython-313.pyc differ diff --git a/__pycache__/config.cpython-313.pyc b/__pycache__/config.cpython-313.pyc new file mode 100644 index 0000000..215a24c Binary files /dev/null and b/__pycache__/config.cpython-313.pyc differ diff --git a/__pycache__/database.cpython-313.pyc b/__pycache__/database.cpython-313.pyc new file mode 100644 index 0000000..fbd9b10 Binary files /dev/null and b/__pycache__/database.cpython-313.pyc differ diff --git a/__pycache__/database_admin.cpython-313.pyc b/__pycache__/database_admin.cpython-313.pyc new file mode 100644 index 0000000..a655a0e Binary files /dev/null and b/__pycache__/database_admin.cpython-313.pyc differ diff --git a/__pycache__/external_API.cpython-313.pyc b/__pycache__/external_API.cpython-313.pyc new file mode 100644 index 0000000..25f6310 Binary files /dev/null and b/__pycache__/external_API.cpython-313.pyc differ diff --git a/__pycache__/group_api.cpython-313.pyc b/__pycache__/group_api.cpython-313.pyc new file mode 100644 index 0000000..1650b5e Binary files /dev/null and b/__pycache__/group_api.cpython-313.pyc differ diff --git a/__pycache__/main.cpython-313.pyc b/__pycache__/main.cpython-313.pyc new file mode 100644 index 0000000..70408a2 Binary files /dev/null and b/__pycache__/main.cpython-313.pyc differ diff --git a/__pycache__/manage.cpython-313.pyc b/__pycache__/manage.cpython-313.pyc new file mode 100644 index 0000000..a756353 Binary files /dev/null and b/__pycache__/manage.cpython-313.pyc differ diff --git a/__pycache__/outh.cpython-313.pyc b/__pycache__/outh.cpython-313.pyc new file mode 100644 index 0000000..fe0d19c Binary files /dev/null and b/__pycache__/outh.cpython-313.pyc differ diff --git a/__pycache__/postsqldb.cpython-313.pyc b/__pycache__/postsqldb.cpython-313.pyc new file mode 100644 index 0000000..87149ea Binary files /dev/null and b/__pycache__/postsqldb.cpython-313.pyc differ diff --git a/__pycache__/process.cpython-313.pyc b/__pycache__/process.cpython-313.pyc new file mode 100644 index 0000000..d61c37c Binary files /dev/null and b/__pycache__/process.cpython-313.pyc differ diff --git a/__pycache__/receipts_API.cpython-313.pyc b/__pycache__/receipts_API.cpython-313.pyc new file mode 100644 index 0000000..3839926 Binary files /dev/null and b/__pycache__/receipts_API.cpython-313.pyc differ diff --git a/__pycache__/shopping_list_API.cpython-313.pyc b/__pycache__/shopping_list_API.cpython-313.pyc new file mode 100644 index 0000000..c542617 Binary files /dev/null and b/__pycache__/shopping_list_API.cpython-313.pyc differ diff --git a/__pycache__/user_api.cpython-313.pyc b/__pycache__/user_api.cpython-313.pyc new file mode 100644 index 0000000..7f19419 Binary files /dev/null and b/__pycache__/user_api.cpython-313.pyc differ diff --git a/__pycache__/webpush.cpython-313.pyc b/__pycache__/webpush.cpython-313.pyc new file mode 100644 index 0000000..41867f6 Binary files /dev/null and b/__pycache__/webpush.cpython-313.pyc differ diff --git a/__pycache__/webserver.cpython-313.pyc b/__pycache__/webserver.cpython-313.pyc new file mode 100644 index 0000000..35d01e3 Binary files /dev/null and b/__pycache__/webserver.cpython-313.pyc differ diff --git a/__pycache__/workshop_api.cpython-313.pyc b/__pycache__/workshop_api.cpython-313.pyc new file mode 100644 index 0000000..411c09b Binary files /dev/null and b/__pycache__/workshop_api.cpython-313.pyc differ diff --git a/api.py b/api.py deleted file mode 100644 index 746405b..0000000 --- a/api.py +++ /dev/null @@ -1,370 +0,0 @@ -from flask import Blueprint, request, render_template, redirect, session, url_for, send_file, jsonify, Response -import psycopg2, math, json, datetime, main, copy, requests, process, database -from config import config, sites_config -from main import unfoldCostLayers - -database_api= Blueprint('database_api', __name__) - -@database_api.route("/changeSite", methods=["POST"]) -def changeSite(): - if request.method == "POST": - site = request.json['site'] - session['selected_site'] = site - return jsonify({'error': False, 'message': 'Site Changed!'}) - - -@database_api.route("/getGroups") -def paginate_groups(): - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 10)) - site_name = session['selected_site'] - offset = (page - 1) * limit - - groups = [] - count = 0 - - database_config = config() - with psycopg2.connect(**database_config) as conn: - try: - with conn.cursor() as cur: - sql = f"SELECT * FROM {site_name}_groups LIMIT %s OFFSET %s;" - count = f"SELECT COUNT(*) FROM {site_name}_groups" - - cur.execute(sql, (limit, offset)) - groups = cur.fetchall() - cur.execute(count) - count = cur.fetchone()[0] - - - sql_item = f"SELECT {site_name}_items.barcode, {site_name}_items.item_name, {site_name}_logistics_info.quantity_on_hand FROM {site_name}_items LEFT JOIN {site_name}_logistics_info ON {site_name}_items.logistics_info_id = {site_name}_logistics_info.id WHERE {site_name}_items.id = %s; " - new_groups = [] - for group in groups: - qty = 0 - group = list(group) - items = [] - print(group[3]) - for item_id in group[3]: - cur.execute(sql_item, (item_id,)) - item_row = list(cur.fetchone()) - cur.execute(f"SELECT quantity_on_hand FROM {site_name}_item_locations WHERE part_id=%s;", (item_id, )) - item_locations = cur.fetchall()[0] - qty += float(sum(item_locations)) - item_row[2] = sum(item_locations) - items.append(item_row) - group[3] = items - group.append(qty) - new_groups.append(group) - except (Exception, psycopg2.DatabaseError) as error: - print(error) - - return jsonify({'groups': new_groups, "end": math.ceil(count/limit)}) - - -@database_api.route("/getVendors") -def get_vendors(): - database_config = config() - site_name = session['selected_site'] - vendors = [] - with psycopg2.connect(**database_config) as conn: - try: - with conn.cursor() as cur: - sql = f"SELECT * FROM {site_name}_vendors;" - cur.execute(sql) - vendors = cur.fetchall() - except (Exception, psycopg2.DatabaseError) as error: - print(error) - - return jsonify(vendors=vendors) - - -@database_api.route("/addGroup") -def addGroup(): - name = str(request.args.get('name', "")) - description = str(request.args.get('description', "")) - group_type = str(request.args.get('type', "")) - site_name = session['selected_site'] - state = "FAILED" - - database_config = config() - with psycopg2.connect(**database_config) as conn: - try: - with conn.cursor() as cur: - sql = f"INSERT INTO {site_name}_groups (name, description, included_items, group_type) VALUES (%s, %s, %s, %s);" - cur.execute(sql, (name, description, json.dumps({}), group_type)) - state = "SUCCESS" - conn.commit() - except (Exception, psycopg2.DatabaseError) as error: - print(error) - conn.rollback() - - - return jsonify({'state': state}) - -@database_api.route("/getGroup") -def get_group(): - id = int(request.args.get('id', 1)) - database_config = config() - site_name = session['selected_site'] - - group = [] - with psycopg2.connect(**database_config) as conn: - try: - with conn.cursor() as cur: - sql = f"SELECT * FROM {site_name}_groups WHERE id=%s;" - cur.execute(sql, (id, )) - group = list(cur.fetchone()) - - sql_item = f"SELECT {site_name}_items.id, {site_name}_items.barcode, {site_name}_items.item_name, {site_name}_logistics_info.quantity_on_hand FROM {site_name}_items LEFT JOIN {site_name}_logistics_info ON {site_name}_items.logistics_info_id = {site_name}_logistics_info.id WHERE {site_name}_items.id = %s;" - qty = 0 - group = list(group) - items = [] - print(group[3]) - for item_id in group[3]: - cur.execute(sql_item, (item_id,)) - item_row = cur.fetchone() - qty += float(item_row[3]) - items.append(item_row) - group[3] = items - group.append(qty) - except (Exception, psycopg2.DatabaseError) as error: - print(error) - - return jsonify(group=group) - -@database_api.route("/updateGroup", methods=["POST"]) -def update_group(): - if request.method == "POST": - site_name = session['selected_site'] - group_id = request.get_json()['id'] - items = request.get_json()['items'] - name = request.get_json()['name'] - description = request.get_json()['description'] - group_type = request.get_json()['group_type'] - data = (name, description, items, group_type, group_id) - database_config = config() - with psycopg2.connect(**database_config) as conn: - try: - with conn.cursor() as cur: - # Start by updating the group -> included items with the up to date list - sql = f"UPDATE {site_name}_groups SET name = %s, description = %s, included_items = %s, group_type = %s WHERE id=%s;" - cur.execute(sql, data) - - update_item_sql = f"UPDATE {site_name}_item_info SET groups = %s WHERE id = %s;" - select_item_sql = f"SELECT {site_name}_item_info.id, {site_name}_item_info.groups FROM {site_name}_items LEFT JOIN {site_name}_item_info ON {site_name}_items.item_info_id = {site_name}_item_info.id WHERE {site_name}_items.id = %s;" - # Now we will fetch each item row one by one and check if the group id is already inside of its groups array - for item_id in items: - cur.execute(select_item_sql, (item_id, )) - item = cur.fetchone() - print(item) - item_groups: set = set(item[1]) - # Condition check, adds it if it doesnt exist. - if group_id not in item_groups: - item_groups.add(group_id) - cur.execute(update_item_sql, (list(item_groups), item[0])) - - # Now we fetch all items that have the group id in its groups array - fetch_items_with_group = f"SELECT {site_name}_items.id, groups, {site_name}_item_info.id FROM {site_name}_item_info LEFT JOIN {site_name}_items ON {site_name}_items.item_info_id = {site_name}_item_info.id WHERE groups @> ARRAY[%s];" - cur.execute(fetch_items_with_group, (group_id, )) - group_items = cur.fetchall() - print(items) - # We will then check each item id against the groups new included_items list to see if the item should be in there - for item_id, group, info_id in group_items: - # If it is not we remove the group form the items list and update the item - if item_id not in items: - groups: list = list(group) - groups.remove(group_id) - cur.execute(update_item_sql, (list(groups), info_id)) - - conn.commit() - except (Exception, psycopg2.DatabaseError) as error: - print(error) - conn.rollback() - - return jsonify({"state": "SUCCESS"}) - return jsonify({"state": "FAILED"}) - -@database_api.route("/addList") -def addList(): - name = str(request.args.get('name', "")) - description = str(request.args.get('description', "")) - list_type = str(request.args.get('type', "")) - site_name = session['selected_site'] - - print(name, description, list_type) - state = "FAILED" - - #if name or description or group_type == "": - # print("this is empty") - # return jsonify({'state': state}) - timestamp = datetime.datetime.now() - data = (name, description, [], json.dumps({}), [], [], 0, timestamp, list_type) - database_config = config() - with psycopg2.connect(**database_config) as conn: - try: - with conn.cursor() as cur: - sql = f"INSERT INTO {site_name}_shopping_lists (name, description, pantry_items, custom_items, recipes, groups, author, creation_date, type) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s);" - cur.execute(sql, data) - state = "SUCCESS" - conn.commit() - except (Exception, psycopg2.DatabaseError) as error: - print(error) - conn.rollback() - - - return jsonify({'state': state}) - -@database_api.route("/getLists") -def paginate_lists(): - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 10)) - site_name = session['selected_site'] - - offset = (page - 1) * limit - - lists = [] - count = 0 - - database_config = config() - with psycopg2.connect(**database_config) as conn: - try: - with conn.cursor() as cur: - sql = f"SELECT * FROM {site_name}_shopping_lists LIMIT %s OFFSET %s;" - count = f"SELECT COUNT(*) FROM {site_name}_shopping_lists;" - - cur.execute(sql, (limit, offset)) - temp_lists = list(cur.fetchall()) - cur.execute(count) - count = cur.fetchone()[0] - - for shopping_list in temp_lists: - shopping_list: list = list(shopping_list) - pantry_items = shopping_list[3] - custom_items = shopping_list[4] - list_length = len(custom_items) - - sqlfile = open(f"sites/{site_name}/sql/unique/shopping_lists_safetystock_count.sql", "r+") - sql = "\n".join(sqlfile.readlines()) - sqlfile.close() - print(sql) - if shopping_list[10] == 'calculated': - print(shopping_list[0]) - cur.execute(sql, (shopping_list[0], )) - list_length += cur.fetchone()[0] - - else: - list_length += len(pantry_items) - - shopping_list.append(list_length) - lists.append(shopping_list) - - except (Exception, psycopg2.DatabaseError) as error: - print(error) - - return jsonify({'lists': lists, 'end': math.ceil(count/limit)}) - -@database_api.route("/getListView") -def get_list_view(): - id = int(request.args.get('id', 1)) - site_name = session['selected_site'] - shopping_list = [] - database_config = config() - with psycopg2.connect(**database_config) as conn: - try: - with conn.cursor() as cur: - sql = f"SELECT * FROM {site_name}_shopping_lists WHERE id=%s;" - cur.execute(sql, (id, )) - shopping_list = list(cur.fetchone()) - - if shopping_list[10] == "calculated": - sqlfile = open(f"sites/{site_name}/sql/unique/shopping_lists_safetystock.sql", "r+") - sql = "\n".join(sqlfile.readlines()) - sqlfile.close() - else: - sqlfile = open(f"sites/{site_name}/sql/unique/shopping_lists_safetystock_uncalculated.sql", "r+") - sql = "\n".join(sqlfile.readlines()) - sqlfile.close() - - cur.execute(sql, (id, )) - shopping_list[3] = list(cur.fetchall()) - print(shopping_list[4]) - - except (Exception, psycopg2.DatabaseError) as error: - print(error) - - return jsonify(shopping_list=shopping_list) - -@database_api.route("/getList") -def get_list(): - id = int(request.args.get('id', 1)) - database_config = config() - site_name = session['selected_site'] - shopping_list = [] - with psycopg2.connect(**database_config) as conn: - try: - with conn.cursor() as cur: - sql = f"SELECT * FROM {site_name}_shopping_lists WHERE id=%s;" - cur.execute(sql, (id, )) - shopping_list = list(cur.fetchone()) - itemSQL = f"SELECT {site_name}_items.id, {site_name}_items.barcode, {site_name}_items.item_name, {site_name}_items.links, {site_name}_item_info.uom FROM {site_name}_items LEFT JOIN {site_name}_item_info ON {site_name}_items.item_info_id = {site_name}_item_info.id WHERE {site_name}_item_info.shopping_lists @> ARRAY[%s];" - cur.execute(itemSQL, (id, )) - shopping_list[3] = list(cur.fetchall()) - print(shopping_list) - except (Exception, psycopg2.DatabaseError) as error: - print(error) - - return jsonify(shopping_list=shopping_list) - -@database_api.route("/updateList", methods=["POST"]) -def update_list(): - if request.method == "POST": - site_name = session['selected_site'] - list_id = request.get_json()['id'] - items = request.get_json()['items'] - print(items) - custom_items = request.get_json()['custom'] - name = request.get_json()['name'] - description = request.get_json()['description'] - list_type = request.get_json()['list_type'] - quantities = request.get_json()['quantities'] - data = (name, description, items, json.dumps(custom_items), list_type, json.dumps(quantities), list_id) - database_config = config() - with psycopg2.connect(**database_config) as conn: - try: - with conn.cursor() as cur: - # Start by updating the group -> included items with the up to date list - sql = f"UPDATE {site_name}_shopping_lists SET name = %s, description = %s, pantry_items = %s, custom_items = %s, type = %s, quantities = %s WHERE id=%s;" - cur.execute(sql, data) - - update_item_sql = f"UPDATE {site_name}_item_info SET shopping_lists = %s WHERE id = %s;" - select_item_sql = f"SELECT {site_name}_item_info.id, {site_name}_item_info.shopping_lists FROM {site_name}_items LEFT JOIN {site_name}_item_info ON {site_name}_items.item_info_id = {site_name}_item_info.id WHERE {site_name}_items.id = %s;" - # Now we will fetch each item row one by one and check if the group id is already inside of its groups array - for item_id in items: - cur.execute(select_item_sql, (item_id, )) - item = cur.fetchone() - print(item) - shopping_lists: set = set(item[1]) - # Condition check, adds it if it doesnt exist. - if list_id not in shopping_lists: - shopping_lists.add(list_id) - cur.execute(update_item_sql, (list(shopping_lists), item[0])) - - # Now we fetch all items that have the group id in its groups array - fetch_items_with_list = f"SELECT {site_name}_items.id, {site_name}_item_info.shopping_lists, {site_name}_item_info.id FROM {site_name}_item_info LEFT JOIN {site_name}_items ON {site_name}_items.item_info_id = {site_name}_item_info.id WHERE {site_name}_item_info.shopping_lists @> ARRAY[%s];" - cur.execute(fetch_items_with_list, (list_id, )) - list_items = cur.fetchall() - print(items) - # We will then check each item id against the groups new included_items list to see if the item should be in there - for item_id, shopping_list, info_id in list_items: - # If it is not we remove the group form the items list and update the item - if item_id not in items: - shopping_lists: list = list(shopping_list) - shopping_lists.remove(list_id) - cur.execute(update_item_sql, (list(shopping_lists), info_id)) - - conn.commit() - except (Exception, psycopg2.DatabaseError) as error: - print(error) - conn.rollback() - - return jsonify({"state": "SUCCESS"}) - return jsonify({"state": "FAILED"}) \ No newline at end of file diff --git a/api_admin.py b/api_admin.py deleted file mode 100644 index cbad775..0000000 --- a/api_admin.py +++ /dev/null @@ -1,263 +0,0 @@ -from flask import Blueprint, request, render_template, redirect, session, url_for, send_file, jsonify, Response -import psycopg2, math, json, datetime, main, copy, requests -from config import config, sites_config -from main import unfoldCostLayers, get_sites, get_roles, create_site_secondary, getUser -from manage import create -from user_api import login_required -import postsqldb, process, hashlib, database_admin - - -admin_api = Blueprint('admin_api', __name__) - -@admin_api.route('/admin') -def admin_index(): - sites = [site[1] for site in main.get_sites(session['user']['sites'])] - return render_template("admin/index.html", - current_site=session['selected_site'], - sites=sites) - -@admin_api.route('/admin/site/') -@login_required -def adminSites(id): - if id == "new": - new_site = postsqldb.SitesTable.Payload( - "", - "", - session['user_id'] - ) - return render_template("admin/site.html", site=new_site.get_dictionary()) - else: - database_config = config() - with psycopg2.connect(**database_config) as conn: - site = postsqldb.SitesTable.select_tuple(conn, (id,)) - return render_template('admin/site.html', site=site) - -@admin_api.route('/admin/role/') -@login_required -def adminRoles(id): - database_config = config() - with psycopg2.connect(**database_config) as conn: - sites = postsqldb.SitesTable.selectTuples(conn) - if id == "new": - new_role = postsqldb.RolesTable.Payload( - "", - "", - 0 - ) - return render_template("admin/role.html", role=new_role.get_dictionary(), sites=sites) - else: - role = postsqldb.RolesTable.select_tuple(conn, (id,)) - return render_template('admin/role.html', role=role, sites=sites) - -@admin_api.route('/admin/user/') -@login_required -def adminUser(id): - database_config = config() - with psycopg2.connect(**database_config) as conn: - if id == "new": - new_user = postsqldb.LoginsTable.Payload("", "", "", "") - return render_template("admin/user.html", user=new_user.get_dictionary()) - else: - user = database_admin.selectLoginsUser(int(id)) - return render_template('admin/user.html', user=user) - -@admin_api.route('/admin/getSites', methods=['GET']) -@login_required -def getSites(): - if request.method == "GET": - records = [] - count = 0 - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 10)) - offset = (page - 1) * limit - database_config = config() - with psycopg2.connect(**database_config) as conn: - records, count = postsqldb.SitesTable.paginateTuples(conn, (limit, offset)) - return jsonify({'sites': records, "end": math.ceil(count/limit), 'error':False, 'message': 'Sites Loaded Successfully!'}) - return jsonify({'sites': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading Sites!'}) - -@admin_api.route('/admin/getRoles', methods=['GET']) -@login_required -def getRoles(): - if request.method == "GET": - records = [] - count = 0 - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 10)) - offset = (page - 1) * limit - database_config = config() - with psycopg2.connect(**database_config) as conn: - records, count = postsqldb.RolesTable.paginate_tuples(conn, (limit, offset)) - return jsonify({'roles': records, "end": math.ceil(count/limit), 'error':False, 'message': 'Roles Loaded Successfully!'}) - return jsonify({'roles': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading Roles!'}) - -@admin_api.route('/admin/getLogins', methods=['GET']) -@login_required -def getLogins(): - if request.method == "GET": - records = [] - count = 0 - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 10)) - offset = (page - 1) * limit - database_config = config() - with psycopg2.connect(**database_config) as conn: - records, count = postsqldb.LoginsTable.paginate_tuples(conn, (limit, offset)) - return jsonify({'logins': records, "end": math.ceil(count/limit), 'error':False, 'message': 'logins Loaded Successfully!'}) - return jsonify({'logins': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading logins!'}) - -@admin_api.route('/admin/site/postDeleteSite', methods=["POST"]) -def postDeleteSite(): - if request.method == "POST": - site_id = request.get_json()['site_id'] - database_config = config() - user_id = session['user_id'] - try: - with psycopg2.connect(**database_config) as conn: - user = postsqldb.LoginsTable.select_tuple(conn, (user_id,)) - admin_user = (user['username'], user['password'], user['email'], user['row_type']) - site = postsqldb.SitesTable.select_tuple(conn, (site_id,)) - site = postsqldb.SitesTable.Manager( - site['site_name'], - admin_user, - site['default_zone'], - site['default_primary_location'], - site['site_description'] - ) - process.deleteSite(site_manager=site) - except Exception as error: - conn.rollback() - return jsonify({'error': True, 'message': error}) - return jsonify({'error': False, 'message': f""}) - return jsonify({'error': True, 'message': f""}) - -@admin_api.route('/admin/site/postAddSite', methods=["POST"]) -def postAddSite(): - if request.method == "POST": - payload = request.get_json()['payload'] - database_config = config() - site_name = session['selected_site'] - user_id = session['user_id'] - print(payload) - try: - with psycopg2.connect(**database_config) as conn: - user = postsqldb.LoginsTable.select_tuple(conn, (user_id,)) - admin_user = (user['username'], user['password'], user['email'], user['row_type']) - site = postsqldb.SitesTable.Manager( - payload['site_name'], - admin_user, - payload['default_zone'], - payload['default_primary_location'], - payload['site_description'] - ) - process.addSite(site_manager=site) - - except Exception as error: - conn.rollback() - return jsonify({'error': True, 'message': error}) - return jsonify({'error': False, 'message': f"Zone added to {site_name}."}) - return jsonify({'error': True, 'message': f"These was an error with adding this Zone to {site_name}."}) - -@admin_api.route('/admin/site/postEditSite', methods=["POST"]) -def postEditSite(): - if request.method == "POST": - payload = request.get_json()['payload'] - database_config = config() - try: - with psycopg2.connect(**database_config) as conn: - postsqldb.SitesTable.update_tuple(conn, payload) - except Exception as error: - conn.rollback() - return jsonify({'error': True, 'message': error}) - return jsonify({'error': False, 'message': f"Site updated."}) - return jsonify({'error': True, 'message': f"These was an error with updating Site."}) - -@admin_api.route('/admin/role/postAddRole', methods=["POST"]) -def postAddRole(): - if request.method == "POST": - payload = request.get_json()['payload'] - database_config = config() - print(payload) - try: - with psycopg2.connect(**database_config) as conn: - role = postsqldb.RolesTable.Payload( - payload['role_name'], - payload['role_description'], - payload['site_id'] - ) - postsqldb.RolesTable.insert_tuple(conn, role.payload()) - - except Exception as error: - conn.rollback() - return jsonify({'error': True, 'message': error}) - return jsonify({'error': False, 'message': f"Role added."}) - return jsonify({'error': True, 'message': f"These was an error with adding this Role."}) - -@admin_api.route('/admin/role/postEditRole', methods=["POST"]) -def postEditRole(): - if request.method == "POST": - payload = request.get_json()['payload'] - database_config = config() - print(payload) - try: - with psycopg2.connect(**database_config) as conn: - postsqldb.RolesTable.update_tuple(conn, payload) - - except Exception as error: - conn.rollback() - return jsonify({'error': True, 'message': error}) - return jsonify({'error': False, 'message': f"Role updated."}) - return jsonify({'error': True, 'message': f"These was an error with updating this Role."}) - -@admin_api.route('/admin/user/postAddLogin', methods=["POST"]) -def postAddLogin(): - if request.method == "POST": - payload = request.get_json()['payload'] - database_config = config() - user = [] - try: - with psycopg2.connect(**database_config) as conn: - user = postsqldb.LoginsTable.Payload( - payload['username'], - hashlib.sha256(payload['password'].encode()).hexdigest(), - payload['email'], - payload['row_type'] - ) - user = postsqldb.LoginsTable.insert_tuple(conn, user.payload()) - except postsqldb.DatabaseError as error: - conn.rollback() - return jsonify({'user': user, 'error': True, 'message': error}) - return jsonify({'user': user, 'error': False, 'message': f"User added."}) - return jsonify({'user': user, 'error': True, 'message': f"These was an error with adding this User."}) - -@admin_api.route('/admin/user/postEditLogin', methods=["POST"]) -def postEditLogin(): - if request.method == "POST": - payload = request.get_json()['payload'] - database_config = config() - try: - with psycopg2.connect(**database_config) as conn: - postsqldb.LoginsTable.update_tuple(conn, payload) - except Exception as error: - conn.rollback() - return jsonify({'error': True, 'message': error}) - return jsonify({'error': False, 'message': f"User was Added Successfully."}) - return jsonify({'error': True, 'message': f"These was an error with adding this user."}) - -@admin_api.route('/admin/user/postEditLoginPassword', methods=["POST"]) -def postEditLoginPassword(): - if request.method == "POST": - payload = request.get_json()['payload'] - database_config = config() - try: - with psycopg2.connect(**database_config) as conn: - user = postsqldb.LoginsTable.select_tuple(conn, (payload['id'],)) - if hashlib.sha256(payload['current_password'].encode()).hexdigest() != user['password']: - return jsonify({'error': True, 'message': "The provided current password is incorrect"}) - payload['update']['password'] = hashlib.sha256(payload['update']['password'].encode()).hexdigest() - postsqldb.LoginsTable.update_tuple(conn, payload) - except Exception as error: - conn.rollback() - return jsonify({'error': True, 'message': error}) - return jsonify({'error': False, 'message': f"Password was changed successfully."}) - return jsonify({'error': True, 'message': f"These was an error with updating this Users password."}) diff --git a/application/__pycache__/__init__.cpython-313.pyc b/application/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..6313878 Binary files /dev/null and b/application/__pycache__/__init__.cpython-313.pyc differ diff --git a/application/__pycache__/database_payloads.cpython-313.pyc b/application/__pycache__/database_payloads.cpython-313.pyc new file mode 100644 index 0000000..96b6b6a Binary files /dev/null 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 new file mode 100644 index 0000000..cde95cd Binary files /dev/null and b/application/__pycache__/postsqldb.cpython-313.pyc differ diff --git a/application/access_module/__init__.py b/application/access_module/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/application/access_module/__pycache__/__init__.cpython-313.pyc b/application/access_module/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..f93845a Binary files /dev/null and b/application/access_module/__pycache__/__init__.cpython-313.pyc differ diff --git a/application/access_module/__pycache__/access_api.cpython-313.pyc b/application/access_module/__pycache__/access_api.cpython-313.pyc new file mode 100644 index 0000000..9dc3cb3 Binary files /dev/null and b/application/access_module/__pycache__/access_api.cpython-313.pyc differ diff --git a/application/access_module/__pycache__/access_database.cpython-313.pyc b/application/access_module/__pycache__/access_database.cpython-313.pyc new file mode 100644 index 0000000..3984cd0 Binary files /dev/null and b/application/access_module/__pycache__/access_database.cpython-313.pyc differ diff --git a/user_api.py b/application/access_module/access_api.py similarity index 56% rename from user_api.py rename to application/access_module/access_api.py index 967b17a..6347024 100644 --- a/user_api.py +++ b/application/access_module/access_api.py @@ -1,62 +1,81 @@ from flask import Blueprint, request, render_template, redirect, session, url_for, jsonify -import hashlib, psycopg2, process, MyDataclasses -from config import config, sites_config, setFirstSetupDone +from authlib.integrations.flask_client import OAuth +import hashlib, psycopg2 +from config import config, sites_config from functools import wraps -from manage import create -from main import create_site, getUser, setSystemAdmin import postsqldb +import requests + +from application.access_module import access_database +from outh import oauth + +access_api = Blueprint('access_api', __name__, template_folder="templates", static_folder="static") + + -login_app = Blueprint('login', __name__) def update_session_user(): - database_config = config() - with psycopg2.connect(**database_config) as conn: - user = postsqldb.LoginsTable.get_washed_tuple(conn, (session['user_id'],)) - session['user'] = user + user = access_database.selectLoginsTupleByID((session['user_id'],)) + user = access_database.washUserDictionary(user) + session['user'] = user + + print(user) + def login_required(func): @wraps(func) def wrapper(*args, **kwargs): if 'user' not in session or session['user'] == None: - return redirect(url_for('login.login')) + return redirect(url_for('access_api.login')) return func(*args, **kwargs) return wrapper - -@login_app.route('/setup', methods=['GET', 'POST']) -def first_time_setup(): - if request.method == "POST": - database_address = request.form['database_address'] - database_port = request.form['database_port'] - database_name = request.form['database_name'] - database_user = request.form['database_user'] - database_password = request.form['database_address'] - - site_manager = MyDataclasses.SiteManager( - site_name=request.form['site_name'], - admin_user=(request.form['username'], hashlib.sha256(request.form['password'].encode()).hexdigest(), request.form['email']), - default_zone=request.form['site_default_zone'], - default_location=request.form['site_default_location'], - description=request.form['site_description'] - ) - - process.addSite(site_manager) - - setFirstSetupDone() - - return redirect("/login") - - return render_template("setup.html") - - - -@login_app.route('/logout', methods=['GET']) +@access_api.route('/logout', methods=['GET']) +@login_required def logout(): if 'user' in session.keys(): session['user'] = None - return redirect('/login') + return redirect('/access/login') -@login_app.route('/login', methods=['POST', 'GET']) +@access_api.route('/auth') +def auth(): + token = oauth.authentik.authorize_access_token() + access_token = token['access_token'] + userinfo_endpoint="https://auth.treehousefullofstars.com/application/o/userinfo/" + headers = { + 'Authorization': f'Bearer {access_token}', + } + response = requests.get(userinfo_endpoint, headers=headers) + + if response.status_code != 200: + print("Failed to fetch user info:", response.status_code, response.text) + return redirect('/access/login') + + external_user = response.json() + user = access_database.selectUserByEmail((external_user['email'],)) + + if user['login_type'] == "External": + payload = { + 'id': user['id'], + 'update': { + 'username': external_user['preferred_username'], + 'profile_pic_url': external_user['picture'] + } + } + user = access_database.updateLoginsTuple(payload) + user = access_database.washUserDictionary(user) + session['user_id'] = user['id'] + session['user'] = user + return redirect('/') + + return redirect('/access/login') + +@access_api.route('/login/oidc') +def oidc_login(): + redirect_uri = url_for('access_api.auth', _external=True) + return oauth.authentik.authorize_redirect(redirect_uri) + +@access_api.route('/login', methods=['POST', 'GET']) def login(): session.clear() instance_config = sites_config() @@ -83,6 +102,7 @@ def login(): if user and user[2] == password: session['user_id'] = user[0] session['user'] = {'id': user[0], 'username': user[1], 'sites': user[13], 'site_roles': user[14], 'system_admin': user[15], 'flags': user[16]} + session['login_type'] = 'Internal' return jsonify({'error': False, 'message': 'Logged In Sucessfully!'}) else: return jsonify({'error': True, 'message': 'Username or Password was incorrect!'}) @@ -91,9 +111,15 @@ def login(): if 'user' not in session.keys(): session['user'] = None - return render_template("other/login.html") + return render_template("login.html") -@login_app.route('/signup', methods=['POST', 'GET']) +@access_api.route('/dashboard') +def dashboard(): + if 'user' not in session: + return redirect('/') + return f"Hello, {session['user']['name']}! Logout" + +@access_api.route('/signup', methods=['POST', 'GET']) def signup(): instance_config = sites_config() if not instance_config['signup_enabled']: diff --git a/application/access_module/access_database.py b/application/access_module/access_database.py new file mode 100644 index 0000000..c720f80 --- /dev/null +++ b/application/access_module/access_database.py @@ -0,0 +1,103 @@ +import psycopg2 + +import config +from application import postsqldb + +def washUserDictionary(user): + return { + 'id': user['id'], + 'username': user['username'], + 'sites': user['sites'], + 'site_roles': user['site_roles'], + 'system_admin': user['system_admin'], + 'flags': user['flags'], + 'profile_pic_url': user['profile_pic_url'], + 'login_type': user['login_type'] + } + +def selectLoginsTupleByID(payload, convert=True, conn=None): + """ payload = (id,)""" + self_conn = False + user = () + sql = f"SELECT * FROM logins WHERE id=%s;" + 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: + user = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + user = rows + + if self_conn: + conn.commit() + conn.close() + + return user + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def selectUserByEmail(payload, convert=True, conn=None): + """ payload = (email,)""" + self_conn = False + user = () + sql = f"SELECT * FROM logins WHERE email=%s;" + 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: + user = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + user = rows + + if self_conn: + conn.commit() + conn.close() + + return user + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + + +def updateLoginsTuple(payload, convert=True, conn=None): + """ payload = {'id': user_id, 'update': {...}}""" + self_conn = False + user = () + set_clause, values = postsqldb.updateStringFactory(payload['update']) + values.append(payload['id']) + sql = f"UPDATE logins SET {set_clause} WHERE id=%s RETURNING *;" + 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, values) + rows = cur.fetchone() + if rows and convert: + user = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + user = rows + + if self_conn: + conn.commit() + conn.close() + + return user + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) \ No newline at end of file diff --git a/application/access_module/access_processes.py b/application/access_module/access_processes.py new file mode 100644 index 0000000..e69de29 diff --git a/static/handlers/loginHandler.js b/application/access_module/static/js/loginHandler.js similarity index 97% rename from static/handlers/loginHandler.js rename to application/access_module/static/js/loginHandler.js index 99e8216..a9576af 100644 --- a/static/handlers/loginHandler.js +++ b/application/access_module/static/js/loginHandler.js @@ -8,7 +8,7 @@ async function loginUser() { let username = document.getElementById('login_username').value let password = document.getElementById('login_password').value - const response = await fetch(`/login`, { + const response = await fetch(`/access/login`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -97,7 +97,7 @@ async function signupUser() { let user_email = document.getElementById('signup_email').value let password = document.getElementById('signup_password').value let username = document.getElementById('signup_username').value - const response = await fetch(`/signup`, { + const response = await fetch(`/access/signup`, { method: 'POST', headers: { 'Content-Type': 'application/json', diff --git a/templates/other/login.html b/application/access_module/templates/login.html similarity index 90% rename from templates/other/login.html rename to application/access_module/templates/login.html index bd77adb..74aa44b 100644 --- a/templates/other/login.html +++ b/application/access_module/templates/login.html @@ -32,7 +32,6 @@
  • Login
  • Sign Up
  • -
    @@ -52,9 +51,14 @@
    - + Login +
    +

    OR

    +
    +
    @@ -98,5 +102,5 @@
    - + \ No newline at end of file diff --git a/application/administration/__init__.py b/application/administration/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/application/administration/__pycache__/__init__.cpython-313.pyc b/application/administration/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..3ad6b61 Binary files /dev/null and b/application/administration/__pycache__/__init__.cpython-313.pyc differ diff --git a/application/administration/__pycache__/administration_api.cpython-313.pyc b/application/administration/__pycache__/administration_api.cpython-313.pyc new file mode 100644 index 0000000..878be27 Binary files /dev/null and b/application/administration/__pycache__/administration_api.cpython-313.pyc differ diff --git a/application/administration/__pycache__/administration_database.cpython-313.pyc b/application/administration/__pycache__/administration_database.cpython-313.pyc new file mode 100644 index 0000000..4917d79 Binary files /dev/null and b/application/administration/__pycache__/administration_database.cpython-313.pyc differ diff --git a/application/administration/__pycache__/administration_processes.cpython-313.pyc b/application/administration/__pycache__/administration_processes.cpython-313.pyc new file mode 100644 index 0000000..f46043d Binary files /dev/null and b/application/administration/__pycache__/administration_processes.cpython-313.pyc differ diff --git a/application/administration/administration_api.py b/application/administration/administration_api.py new file mode 100644 index 0000000..e9432d5 --- /dev/null +++ b/application/administration/administration_api.py @@ -0,0 +1,222 @@ +# 3RD PARTY IMPORTS +from flask import ( + Blueprint, request, render_template, session, jsonify, redirect + ) +import math +import hashlib + +# APPLICATION IMPORTS +from application.access_module import access_api +from application.administration import administration_database, administration_processes +from application import database_payloads, postsqldb + + +admin_api = Blueprint('admin_api', __name__, template_folder="templates", static_folder="static") + + +# ROOT TEMPLATE ROUTES +@admin_api.route('/') +@access_api.login_required +def admin_index(): + sites = [site[1] for site in postsqldb.get_sites(session['user']['sites'])] + return render_template("admin_index.html", current_site=session['selected_site'], sites=sites) + +@admin_api.route('/site/') +@access_api.login_required +def adminSites(id): + if id == "new": + new_site_payload = database_payloads.SitePayload("", "", session['user_id']) + return render_template("site.html", site=new_site_payload.get_dictionary()) + else: + site = administration_database.selectSitesTuple((id,)) + return render_template('site.html', site=site) + +@admin_api.route('/role/') +@access_api.login_required +def adminRoles(id): + sites = administration_database.selectSitesTuples() + if id == "new": + new_role_payload = database_payloads.RolePayload("", "", 0) + return render_template("role.html", role=new_role_payload.get_dictionary(), sites=sites) + else: + role = administration_database.selectRolesTuple((id,)) + return render_template('role.html', role=role, sites=sites) + +@admin_api.route('/user/') +@access_api.login_required +def adminUser(id): + if id == "new": + new_user_payload = database_payloads.LoginsPayload("", "", "", "") + return render_template("user.html", user=new_user_payload.get_dictionary()) + else: + user = administration_database.selectLoginsTuple((int(id),)) + return render_template('user.html', user=user) + +@admin_api.route('/setup', methods=['GET', 'POST']) +def first_time_setup(): + if request.method == "POST": + database_address = request.form['database_address'] + database_port = request.form['database_port'] + database_name = request.form['database_name'] + database_user = request.form['database_user'] + database_password = request.form['database_address'] + + payload = { + "site_name" : request.form['site_name'], + "admin_user": (request.form['username'], hashlib.sha256(request.form['password'].encode()).hexdigest(), request.form['email']), + "default_zone": request.form['site_default_zone'], + "default_primary_location": request.form['site_default_location'], + "site_description": request.form['site_description'] + } + + administration_processes.addSite(payload) + + return redirect("/login") + + return render_template("setup.html") + +# API ROUTES +@admin_api.route('/api/getSites', methods=['GET']) +@access_api.login_required +def getSites(): + if request.method == "GET": + records = [] + count = 0 + page = int(request.args.get('page', 1)) + limit = int(request.args.get('limit', 10)) + offset = (page - 1) * limit + records, count = administration_database.paginateSitesTuples((limit, offset)) + return jsonify({'sites': records, "end": math.ceil(count/limit), 'error':False, 'message': 'Sites Loaded Successfully!'}) + return jsonify({'sites': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading Sites!'}) + +@admin_api.route('/api/getRoles', methods=['GET']) +@access_api.login_required +def getRoles(): + if request.method == "GET": + records = [] + count = 0 + page = int(request.args.get('page', 1)) + limit = int(request.args.get('limit', 10)) + offset = (page - 1) * limit + records, count = administration_database.paginateRolesTuples((limit, offset)) + return jsonify({'roles': records, "end": math.ceil(count/limit), 'error':False, 'message': 'Roles Loaded Successfully!'}) + return jsonify({'roles': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading Roles!'}) + +@admin_api.route('/api/getLogins', methods=['GET']) +@access_api.login_required +def getLogins(): + if request.method == "GET": + records = [] + count = 0 + page = int(request.args.get('page', 1)) + limit = int(request.args.get('limit', 10)) + offset = (page - 1) * limit + records, count = administration_database.paginateLoginsTuples((limit, offset)) + return jsonify({'logins': records, "end": math.ceil(count/limit), 'error':False, 'message': 'logins Loaded Successfully!'}) + return jsonify({'logins': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading logins!'}) + +@admin_api.route('/api/site/postDeleteSite', methods=["POST"]) +@access_api.login_required +def postDeleteSite(): + if request.method == "POST": + site_id = request.get_json()['site_id'] + user_id = session['user_id'] + site = administration_database.selectSitesTuple((site_id,)) + user = administration_database.selectLoginsTuple((user_id,)) + if user['id'] != site['site_owner_id']: + return jsonify({'error': True, 'message': f"You must be the owner of this site to delete."}) + + try: + administration_processes.deleteSite(site, user) + except Exception as err: + print(err) + + return jsonify({'error': False, 'message': f""}) + return jsonify({'error': True, 'message': f""}) + +@admin_api.route('/api/site/postAddSite', methods=["POST"]) +@access_api.login_required +def postAddSite(): + if request.method == "POST": + payload = request.get_json()['payload'] + site_name = session['selected_site'] + user_id = session['user_id'] + user = administration_database.selectLoginsTuple((user_id,)) + payload['admin_user'] = (user['username'], user['password'], user['email'], user['row_type']) + + administration_processes.addSite(payload) + + + return jsonify({'error': False, 'message': f"Zone added to {site_name}."}) + return jsonify({'error': True, 'message': f"These was an error with adding this Zone to {site_name}."}) + +@admin_api.route('/api/site/postEditSite', methods=["POST"]) +@access_api.login_required +def postEditSite(): + if request.method == "POST": + payload = request.get_json()['payload'] + administration_database.updateSitesTuple(payload) + return jsonify({'error': False, 'message': f"Site updated."}) + return jsonify({'error': True, 'message': f"These was an error with updating Site."}) + +@admin_api.route('/api/role/postAddRole', methods=["POST"]) +@access_api.login_required +def postAddRole(): + if request.method == "POST": + payload = request.get_json()['payload'] + print(payload) + role = database_payloads.RolePayload( + payload['role_name'], + payload['role_description'], + payload['site_id'] + ) + administration_database.insertRolesTuple(role.payload()) + return jsonify({'error': False, 'message': f"Role added."}) + return jsonify({'error': True, 'message': f"These was an error with adding this Role."}) + +@admin_api.route('/api/role/postEditRole', methods=["POST"]) +@access_api.login_required +def postEditRole(): + if request.method == "POST": + payload = request.get_json()['payload'] + administration_database.updateRolesTuple(payload) + return jsonify({'error': False, 'message': f"Role updated."}) + return jsonify({'error': True, 'message': f"These was an error with updating this Role."}) + +@admin_api.route('/api/user/postAddLogin', methods=["POST"]) +@access_api.login_required +def postAddLogin(): + if request.method == "POST": + payload = request.get_json()['payload'] + user = database_payloads.LoginsPayload( + payload['username'], + hashlib.sha256(payload['password'].encode()).hexdigest(), + payload['email'], + payload['row_type'] + ) + user = administration_database.insertLoginsTuple(user.payload()) + + return jsonify({'user': user, 'error': False, 'message': f"User added."}) + return jsonify({'user': user, 'error': True, 'message': f"These was an error with adding this User."}) + +@admin_api.route('/api/user/postEditLogin', methods=["POST"]) +@access_api.login_required +def postEditLogin(): + if request.method == "POST": + payload = request.get_json()['payload'] + administration_database.updateLoginsTuple(payload) + return jsonify({'error': False, 'message': f"User was Added Successfully."}) + return jsonify({'error': True, 'message': f"These was an error with adding this user."}) + +@admin_api.route('/api/user/postEditLoginPassword', methods=["POST"]) +@access_api.login_required +def postEditLoginPassword(): + if request.method == "POST": + payload = request.get_json()['payload'] + user = administration_database.selectLoginsTuple((payload['id'],)) + if hashlib.sha256(payload['current_password'].encode()).hexdigest() != user['password']: + return jsonify({'error': True, 'message': "The provided current password is incorrect"}) + payload['update']['password'] = hashlib.sha256(payload['update']['password'].encode()).hexdigest() + administration_database.updateLoginsTuple(payload) + return jsonify({'error': False, 'message': f"Password was changed successfully."}) + return jsonify({'error': True, 'message': f"These was an error with updating this Users password."}) diff --git a/application/administration/administration_database.py b/application/administration/administration_database.py new file mode 100644 index 0000000..23c13ad --- /dev/null +++ b/application/administration/administration_database.py @@ -0,0 +1,767 @@ +# 3RD PARTY IMPORTS +import psycopg2 + +# APPLICATION IMPORTS +from application import postsqldb +import config + +def getUser(conn, payload, convert=False): + """_summary_ + + Args: + conn (_type_): _description_ + payload (tuple): (username, password) + convert (bool, optional): _description_. Defaults to False. + + Raises: + DatabaseError: _description_ + + Returns: + _type_: _description_ + """ + user = () + try: + with conn.cursor() as cur: + sql = f"SELECT * FROM logins WHERE username=%s;" + cur.execute(sql, (payload[0],)) + rows = cur.fetchone() + if rows and rows[2] == payload[1] and convert: + user = tupleDictionaryFactory(cur.description, rows) + elif rows and rows[2] == payload[1] and not convert: + user = rows + except Exception as error: + raise DatabaseError(error, payload, sql) + return user + +def selectLoginsTuple(payload, convert=True, conn=None): + user = () + self_conn = False + with open("application/administration/sql/selectLoginsUser.sql", "r") as file: + sql = file.read() + 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: + user = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + user = rows + + if self_conn: + conn.close() + + return user + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def selectSitesTuple(payload, convert=True, conn=None): + record = [] + self_conn = False + sql = f"SELECT * FROM sites WHERE id=%s;" + 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.close() + + return record + except Exception as error: + raise postsqldb.DatabaseError(error, (), sql) + +def selectSiteTupleByName(payload, convert=True, conn=None): + """ payload (tuple): (site_name,) """ + site = () + self_conn = False + select_site_sql = f"SELECT * FROM sites WHERE site_name = %s;" + 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(select_site_sql, payload) + rows = cur.fetchone() + if rows and convert: + site = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + site = rows + + if self_conn: + conn.commit() + conn.close() + + return site + + except Exception as error: + raise postsqldb.DatabaseError(error, payload, select_site_sql) + +def selectSitesTuples(convert=True, conn=None): + sites = [] + self_conn = False + sql = f"SELECT * FROM sites;" + 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) + rows = cur.fetchall() + if rows and convert: + sites = [postsqldb.tupleDictionaryFactory(cur.description, row) for row in rows] + elif rows and not convert: + sites = rows + + if self_conn: + conn.close() + + return sites + except Exception as error: + raise postsqldb.DatabaseError(error, (), sql) + +def selectRolesTuple(payload, convert=True, conn=None): + role = [] + self_conn = False + sql = f"SELECT roles.*, row_to_json(sites.*) as site FROM roles LEFT JOIN sites ON sites.id = roles.site_id WHERE roles.id=%s;" + 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: + role = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + role = rows + if self_conn: + conn.close() + + return role + except Exception as error: + raise postsqldb.DatabaseError(error, (), sql) + +def selectRolesTupleBySite(payload, convert=True, conn=None): + """ payload (tuple): (site_id,) """ + roles = () + self_conn = False + select_roles_sql = f"SELECT * FROM roles WHERE site_id = %s;" + 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(select_roles_sql, payload) + rows = cur.fetchall() + if rows and convert: + roles = [postsqldb.tupleDictionaryFactory(cur.description, role) for role in rows] + elif rows and not convert: + roles = rows + + if self_conn: + conn.close() + + return roles + except Exception as error: + raise postsqldb.DatabaseError(error, payload, select_roles_sql) + +def paginateSitesTuples(payload, convert=True, conn=None): + """ payload (tuple): (limit, offset) """ + recordsets = [] + count = 0 + self_conn = False + sql = f"SELECT * FROM sites LIMIT %s OFFSET %s;" + sql_count = f"SELECT COUNT(*) FROM sites;" + 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.fetchall() + if rows and convert: + recordsets = [postsqldb.tupleDictionaryFactory(cur.description, row) for row in rows] + elif rows and not convert: + recordsets = rows + cur.execute(sql_count) + count = cur.fetchone()[0] + + if self_conn: + conn.close() + + return recordsets, count + except Exception as error: + raise postsqldb.DatabaseError(error, (), sql) + +def paginateRolesTuples(payload, convert=True, conn=None): + """ payload (tuple): (limit, offset) """ + recordset = [] + self_conn = False + sql = f"SELECT roles.*, row_to_json(sites.*) as site FROM roles LEFT JOIN sites ON sites.id = roles.site_id LIMIT %s OFFSET %s;" + sql_count = f"SELECT COUNT(*) FROM roles;" + + 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.fetchall() + if rows and convert: + recordset = [postsqldb.tupleDictionaryFactory(cur.description, row) for row in rows] + elif rows and not convert: + recordset = rows + cur.execute(sql_count) + count = cur.fetchone()[0] + + if self_conn: + conn.close() + + return recordset, count + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def paginateLoginsTuples(payload, convert=True, conn=None): + """ payload (tuple): (limit, offset) """ + recordset = [] + self_conn = False + sql = f"SELECT * FROM logins LIMIT %s OFFSET %s;" + sql_count = f"SELECT COUNT(*) FROM logins;" + + 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.fetchall() + if rows and convert: + recordset = [postsqldb.tupleDictionaryFactory(cur.description, row) for row in rows] + elif rows and not convert: + recordset = rows + + cur.execute(sql_count) + count = cur.fetchone()[0] + + if self_conn: + conn.close() + + return recordset, count + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def insertSitesTuple(payload, convert=True, conn=None): + """ payload (tuple): (site_name[str], site_description[str], creation_date[timestamp], site_owner_id[int], + flags[dict], default_zone[str], default_auto_issue_location[str], default_primary_location[str]) """ + site_tuple = () + self_conn = False + with open(f"application/administration/sql/insertSitesTuple.sql", "r+") as file: + sql = file.read() + 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: + site_tuple = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + site_tuple = rows + + if self_conn: + conn.commit() + conn.close() + + return site_tuple + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def insertRolesTuple(payload, convert=True, conn=None): + """ payload (tuple): (role_name[str], role_description[str], site_id[int], flags[jsonb]) """ + role_tuple = () + self_conn = False + with open(f"application/administration/sql/insertRolesTuple.sql", "r+") as file: + sql = file.read() + 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: + role_tuple = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + role_tuple = rows + + if self_conn: + conn.commit() + conn.close() + + return role_tuple + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def insertLoginsTuple(payload, convert=True, conn=None): + """payload (tuple): (username, password, email, favorites, unseen_pantry_items, unseen_groups, unseen_shopping_lists, + unseen_recipes, seen_pantry_items, seen_groups, seen_shopping_lists, seen_recipes, + sites, site_roles, system_admin, flags, row_type)""" + login = () + self_conn = False + with open(f"application/administration/sql/insertLoginsTupleFull.sql", "r+") as file: + sql = file.read() + 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: + login = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + login = rows + + if self_conn: + conn.commit() + conn.close() + + return login + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def insertZonesTuple(site, payload, convert=True, conn=None): + """ payload (tuple): (name[str],) """ + zone = () + self_conn = False + with open(f"application/administration/sql/insertZonesTuple.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: + zone = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + zone = rows + + if self_conn: + conn.commit() + conn.close() + + return zone + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def insertLocationsTuple(site, payload, convert=True, conn=None): + """ payload (tuple): (uuid[str], name[str], zone_id[int], items[jsonb]) """ + location = () + self_conn = False + with open(f"application/administration/sql/insertLocationsTuple.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: + location = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + location = rows + + if self_conn: + conn.commit() + conn.close() + + return location + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def insertVendorsTuple(site, payload, convert=True, conn=None): + """ payload (tuple): (vendor_name[str], vendor_address[str], creation_date[timestamp], created_by[int], phone_number[str]) """ + vendor = () + self_conn = False + with open(f"application/administration/sql/insertVendorsTuple.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: + vendor = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + vendor = rows + + if self_conn: + conn.commit() + conn.close() + + return vendor + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def insertBrandsTuple(site, payload, convert=True, conn=None): + """ payload (tuple): (brand_name[str], ) """ + brand = () + self_conn = False + with open(f"application/administration/sql/insertBrandsTuple.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: + brand = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + brand = rows + + if self_conn: + conn.commit() + conn.close() + + return brand + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def updateAddLoginSitesRoles(payload, convert=True, conn=None): + """ payload (tuple): (site_id, role_id, login_id) """ + sql = f"UPDATE logins SET sites = sites || %s, site_roles = site_roles || %s WHERE id=%s RETURNING *;" + login = () + self_conn = False + 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: + login = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + login = rows + + if self_conn: + conn.commit() + conn.close() + + return login + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def updateSitesTuple(payload, convert=True, conn=None): + """ payload (dict): {'id': row_id, 'update': {... column_to_update: value_to_update_to...}} """ + updated = () + self_conn = False + set_clause, values = postsqldb.updateStringFactory(payload['update']) + values.append(payload['id']) + sql = f"UPDATE sites SET {set_clause} WHERE id=%s RETURNING *;" + 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, values) + rows = cur.fetchone() + if rows and convert: + updated = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + updated = rows + + if self_conn: + conn.commit() + conn.close() + + return updated + + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def updateUsersSites(payload, convert=True, conn=None): + """ payload: {'site_id',} """ + self_conn = False + try: + if not conn: + database_config = config.config() + conn = psycopg2.connect(**database_config) + conn.autocommit = True + self_conn = True + + select_sql = f"SELECT logins.id FROM logins WHERE sites @> ARRAY[%s];" + with conn.cursor() as cur: + cur.execute(select_sql, (payload['site_id'], )) + user = tuple([row[0] for row in cur.fetchall()]) + + update_sql = f"UPDATE logins SET sites = array_remove(sites, %s) WHERE id = %s;" + with conn.cursor() as cur: + for user_id in user: + cur.execute(update_sql, (payload['site_id'], user_id)) + + if self_conn: + conn.commit() + conn.close() + + except Exception as error: + raise error + +def updateUsersRoles(payload, convert=True, conn=None): + """ payload: {'role_id',} """ + self_conn = False + try: + if not conn: + database_config = config.config() + conn = psycopg2.connect(**database_config) + conn.autocommit = True + self_conn = True + + select_sql = f"SELECT logins.id FROM logins WHERE site_roles @> ARRAY[%s];" + with conn.cursor() as cur: + cur.execute(select_sql, (payload['role_id'], )) + users = tuple([row[0] for row in cur.fetchall()]) + + update_sql = f"UPDATE logins SET site_roles = array_remove(site_roles, %s) WHERE id = %s;" + with conn.cursor() as cur: + for user_id in users: + cur.execute(update_sql, (payload['role_id'], user_id)) + + if self_conn: + conn.commit() + conn.close() + + except Exception as error: + raise error + +def updateRolesTuple(payload, convert=True, conn=None): + """ payload (dict): {'id': row_id, 'update': {... column_to_update: value_to_update_to...}""" + updated = () + self_conn = False + set_clause, values = postsqldb.updateStringFactory(payload['update']) + values.append(payload['id']) + sql = f"UPDATE roles SET {set_clause} WHERE id=%s RETURNING *;" + 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, values) + rows = cur.fetchone() + if rows and convert: + updated = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + updated = rows + + if self_conn: + conn.commit() + conn.close() + + return updated + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def updateLoginsTuple(payload, convert=True, conn=None): + """ payload (dict): {'id': row_id, 'update': {... column_to_update: value_to_update_to...}} """ + updated = () + self_conn = False + set_clause, values = postsqldb.updateStringFactory(payload['update']) + values.append(payload['id']) + sql = f"UPDATE logins SET {set_clause} WHERE id=%s RETURNING *;" + 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, values) + rows = cur.fetchone() + if rows and convert: + updated = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + updated = rows + + if self_conn: + conn.commit() + conn.close() + + return updated + + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def createTable(site, table, conn=None): + self_conn = False + with open(f"application/administration/sql/CREATE/{table}.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) + + if self_conn: + conn.commit() + conn.close() + + except Exception as error: + raise postsqldb.DatabaseError(error, sql, table) + +def dropTable(site, table, conn=None): + self_conn = False + with open(f"application/administration/sql/DROP/{table}.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) + + if self_conn: + conn.commit() + conn.close() + + except Exception as error: + raise postsqldb.DatabaseError(error, sql, table) + +def deleteSitesTuple(payload, convert=True, conn=None): + """payload (tuple): (tuple_id, )""" + deleted = () + self_conn = False + sql = f"WITH deleted_rows AS (DELETE FROM sites WHERE id IN ({','.join(['%s'] * len(payload))}) RETURNING *) SELECT * FROM deleted_rows;" + 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.fetchall() + if rows and convert: + deleted = [postsqldb.tupleDictionaryFactory(cur.description, r) for r in rows] + elif rows and not convert: + deleted = rows + + if self_conn: + conn.commit() + conn.close() + + return deleted + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def deleteRolesTuple(payload, convert=True, conn=None): + """payload (tuple): (tuple_id, )""" + deleted = () + self_conn = False + sql = f"WITH deleted_rows AS (DELETE FROM roles WHERE id IN ({','.join(['%s'] * len(payload))}) RETURNING *) SELECT * FROM deleted_rows;" + 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.fetchall() + if rows and convert: + deleted = [postsqldb.tupleDictionaryFactory(cur.description, r) for r in rows] + elif rows and not convert: + deleted = rows + + if self_conn: + conn.commit() + conn.close() + + return deleted + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + \ No newline at end of file diff --git a/application/administration/administration_processes.py b/application/administration/administration_processes.py new file mode 100644 index 0000000..11e6376 --- /dev/null +++ b/application/administration/administration_processes.py @@ -0,0 +1,167 @@ +# 3RD PARTY IMPORTS +import psycopg2 +import datetime + +# APPLICATION IMPORTS +import config +from application import postsqldb, database_payloads +from application.administration import administration_database + +def dropSiteTables(conn, site_manager): + try: + for table in site_manager.drop_order: + administration_database.dropTable(site_manager.site_name, table, conn=conn) + with open("logs/process.log", "a+") as file: + file.write(f"{datetime.datetime.now()} --- INFO --- {table} DROPPED!\n") + except Exception as error: + raise error + +def deleteSite(site, user, conn=None): + """Uses a Site Manager to delete a site from the system. + + Args: + site_manager (MyDataclasses.SiteManager): + + Raises: + Exception: + """ + self_conn = False + if not conn: + database_config = config.config() + conn = psycopg2.connect(**database_config) + conn.autocommit = False + self_conn = True + + try: + admin_user = (user['username'], user['password'], user['email'], user['row_type']) + site_manager = database_payloads.SiteManager( + site['site_name'], + admin_user, + site['default_zone'], + site['default_primary_location'], + site['site_description'] + ) + + roles = administration_database.selectRolesTupleBySite((site['id'],), conn=conn) + administration_database.deleteRolesTuple([role['id'] for role in roles], conn=conn) + + dropSiteTables(conn, site_manager) + + for role in roles: + administration_database.updateUsersRoles({'role_id': role['id']}, conn=conn) + + administration_database.updateUsersSites({'site_id': site['id']}, conn=conn) + + site = administration_database.deleteSitesTuple((site['id'], ), conn=conn) + + if self_conn: + conn.commit() + conn.close() + + except Exception as error: + with open("logs/process.log", "a+") as file: + file.write(f"{datetime.datetime.now()} --- ERROR --- {error}\n") + conn.rollback() + conn.close() + +def addAdminUser(conn, site_manager, convert=True): + admin_user = () + try: + sql = f"INSERT INTO logins (username, password, email, row_type) VALUES (%s, %s, %s, %s) ON CONFLICT (username) DO UPDATE SET username = excluded.username RETURNING *;" + with conn.cursor() as cur: + cur.execute(sql, site_manager.admin_user) + rows = cur.fetchone() + if rows and convert: + admin_user = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + admin_user = rows + with open("logs/process.log", "a+") as file: + file.write(f"{datetime.datetime.now()} --- INFO --- Admin User Created!\n") + except Exception as error: + raise error + return admin_user + +def setupSiteTables(conn, site_manager): + try: + for table in site_manager.create_order: + administration_database.createTable(site_manager.site_name, table, conn=conn) + with open("logs/process.log", "a+") as file: + file.write(f"{datetime.datetime.now()} --- INFO --- {table} Created!\n") + except Exception as error: + raise error + +def addSite(payload, conn=None): + """uses a Site Manager to add a site to the system + + Args: + site_manager (MyDataclasses.SiteManager): + """ + self_conn = False + site_manager = database_payloads.SiteManager( + payload['site_name'], + payload['admin_user'], + payload['default_zone'], + payload['default_primary_location'], + payload['site_description'] + ) + + try: + + if not conn: + database_config = config.config() + conn = psycopg2.connect(**database_config) + conn.autocommit = False + self_conn = True + + setupSiteTables(conn, site_manager) + + admin_user = addAdminUser(conn, site_manager) + + site = database_payloads.SitePayload( + site_name=site_manager.site_name, + site_description=site_manager.description, + site_owner_id=admin_user['id'] + ) + + site = administration_database.insertSitesTuple(site.payload(), conn=conn) + + role = database_payloads.RolePayload("Admin", f"Admin for {site['site_name']}", site['id']) + role = administration_database.insertRolesTuple(role.payload(), conn=conn) + + admin_user = administration_database.updateAddLoginSitesRoles((site["id"], role["id"], admin_user["id"]), conn=conn) + + default_zone = database_payloads.ZonesPayload(site_manager.default_zone) + default_zone = administration_database.insertZonesTuple(site["site_name"], default_zone.payload(), conn=conn) + uuid = f"{site_manager.default_zone}@{site_manager.default_location}" + + default_location = database_payloads.LocationsPayload(uuid, site_manager.default_location, default_zone['id']) + default_location = administration_database.insertLocationsTuple(site['site_name'], default_location.payload(), conn=conn) + + payload = { + 'id': site['id'], + 'update': { + 'default_zone': default_zone['id'], + 'default_auto_issue_location': default_location['id'], + 'default_primary_location': default_location['id'] + } + } + + administration_database.updateSitesTuple(payload, conn=conn) + + + blank_vendor = database_payloads.VendorsPayload("None", admin_user['id']) + blank_brand = database_payloads.BrandsPayload("None") + + blank_vendor = administration_database.insertVendorsTuple(site['site_name'], blank_vendor.payload(), conn=conn) + blank_brand = administration_database.insertBrandsTuple(site['site_name'], blank_brand.payload(), conn=conn) + + + if self_conn: + conn.commit() + conn.close() + + except Exception as error: + with open("logs/process.log", "a+") as file: + file.write(f"{datetime.datetime.now()} --- ERROR --- {error}\n") + conn.rollback() + raise error \ No newline at end of file diff --git a/sql/CREATE/brands.sql b/application/administration/sql/CREATE/brands.sql similarity index 100% rename from sql/CREATE/brands.sql rename to application/administration/sql/CREATE/brands.sql diff --git a/sql/CREATE/conversions.sql b/application/administration/sql/CREATE/conversions.sql similarity index 100% rename from sql/CREATE/conversions.sql rename to application/administration/sql/CREATE/conversions.sql diff --git a/sql/CREATE/cost_layers.sql b/application/administration/sql/CREATE/cost_layers.sql similarity index 100% rename from sql/CREATE/cost_layers.sql rename to application/administration/sql/CREATE/cost_layers.sql diff --git a/sql/CREATE/food_info.sql b/application/administration/sql/CREATE/food_info.sql similarity index 100% rename from sql/CREATE/food_info.sql rename to application/administration/sql/CREATE/food_info.sql diff --git a/sql/CREATE/group_items.sql b/application/administration/sql/CREATE/group_items.sql similarity index 100% rename from sql/CREATE/group_items.sql rename to application/administration/sql/CREATE/group_items.sql diff --git a/sql/CREATE/groups.sql b/application/administration/sql/CREATE/groups.sql similarity index 100% rename from sql/CREATE/groups.sql rename to application/administration/sql/CREATE/groups.sql diff --git a/sql/CREATE/item.sql b/application/administration/sql/CREATE/item.sql similarity index 100% rename from sql/CREATE/item.sql rename to application/administration/sql/CREATE/item.sql diff --git a/sql/CREATE/item_info.sql b/application/administration/sql/CREATE/item_info.sql similarity index 100% rename from sql/CREATE/item_info.sql rename to application/administration/sql/CREATE/item_info.sql diff --git a/sql/CREATE/item_locations.sql b/application/administration/sql/CREATE/item_locations.sql similarity index 100% rename from sql/CREATE/item_locations.sql rename to application/administration/sql/CREATE/item_locations.sql diff --git a/sql/CREATE/linked_items.sql b/application/administration/sql/CREATE/linked_items.sql similarity index 100% rename from sql/CREATE/linked_items.sql rename to application/administration/sql/CREATE/linked_items.sql diff --git a/sql/CREATE/locations.sql b/application/administration/sql/CREATE/locations.sql similarity index 100% rename from sql/CREATE/locations.sql rename to application/administration/sql/CREATE/locations.sql diff --git a/sql/CREATE/logins.sql b/application/administration/sql/CREATE/logins.sql similarity index 100% rename from sql/CREATE/logins.sql rename to application/administration/sql/CREATE/logins.sql diff --git a/sql/CREATE/logistics_info.sql b/application/administration/sql/CREATE/logistics_info.sql similarity index 100% rename from sql/CREATE/logistics_info.sql rename to application/administration/sql/CREATE/logistics_info.sql diff --git a/sql/CREATE/receipt_items.sql b/application/administration/sql/CREATE/receipt_items.sql similarity index 100% rename from sql/CREATE/receipt_items.sql rename to application/administration/sql/CREATE/receipt_items.sql diff --git a/sql/CREATE/receipts.sql b/application/administration/sql/CREATE/receipts.sql similarity index 100% rename from sql/CREATE/receipts.sql rename to application/administration/sql/CREATE/receipts.sql diff --git a/sql/CREATE/recipe_items.sql b/application/administration/sql/CREATE/recipe_items.sql similarity index 100% rename from sql/CREATE/recipe_items.sql rename to application/administration/sql/CREATE/recipe_items.sql diff --git a/sql/CREATE/recipes.sql b/application/administration/sql/CREATE/recipes.sql similarity index 100% rename from sql/CREATE/recipes.sql rename to application/administration/sql/CREATE/recipes.sql diff --git a/sql/CREATE/roles.sql b/application/administration/sql/CREATE/roles.sql similarity index 100% rename from sql/CREATE/roles.sql rename to application/administration/sql/CREATE/roles.sql diff --git a/sql/CREATE/shopping_list_items.sql b/application/administration/sql/CREATE/shopping_list_items.sql similarity index 100% rename from sql/CREATE/shopping_list_items.sql rename to application/administration/sql/CREATE/shopping_list_items.sql diff --git a/sql/CREATE/shopping_lists.sql b/application/administration/sql/CREATE/shopping_lists.sql similarity index 100% rename from sql/CREATE/shopping_lists.sql rename to application/administration/sql/CREATE/shopping_lists.sql diff --git a/sql/CREATE/sites.sql b/application/administration/sql/CREATE/sites.sql similarity index 100% rename from sql/CREATE/sites.sql rename to application/administration/sql/CREATE/sites.sql diff --git a/sql/CREATE/sku_prefix.sql b/application/administration/sql/CREATE/sku_prefix.sql similarity index 100% rename from sql/CREATE/sku_prefix.sql rename to application/administration/sql/CREATE/sku_prefix.sql diff --git a/sql/CREATE/transactions.sql b/application/administration/sql/CREATE/transactions.sql similarity index 100% rename from sql/CREATE/transactions.sql rename to application/administration/sql/CREATE/transactions.sql diff --git a/sql/CREATE/units.sql b/application/administration/sql/CREATE/units.sql similarity index 100% rename from sql/CREATE/units.sql rename to application/administration/sql/CREATE/units.sql diff --git a/sql/CREATE/vendors.sql b/application/administration/sql/CREATE/vendors.sql similarity index 100% rename from sql/CREATE/vendors.sql rename to application/administration/sql/CREATE/vendors.sql diff --git a/sql/CREATE/zones.sql b/application/administration/sql/CREATE/zones.sql similarity index 100% rename from sql/CREATE/zones.sql rename to application/administration/sql/CREATE/zones.sql diff --git a/sql/DROP/brands.sql b/application/administration/sql/DROP/brands.sql similarity index 100% rename from sql/DROP/brands.sql rename to application/administration/sql/DROP/brands.sql diff --git a/sql/DROP/conversions.sql b/application/administration/sql/DROP/conversions.sql similarity index 100% rename from sql/DROP/conversions.sql rename to application/administration/sql/DROP/conversions.sql diff --git a/sql/DROP/cost_layers.sql b/application/administration/sql/DROP/cost_layers.sql similarity index 100% rename from sql/DROP/cost_layers.sql rename to application/administration/sql/DROP/cost_layers.sql diff --git a/sql/DROP/food_info.sql b/application/administration/sql/DROP/food_info.sql similarity index 100% rename from sql/DROP/food_info.sql rename to application/administration/sql/DROP/food_info.sql diff --git a/sql/DROP/group_items.sql b/application/administration/sql/DROP/group_items.sql similarity index 100% rename from sql/DROP/group_items.sql rename to application/administration/sql/DROP/group_items.sql diff --git a/sql/DROP/groups.sql b/application/administration/sql/DROP/groups.sql similarity index 100% rename from sql/DROP/groups.sql rename to application/administration/sql/DROP/groups.sql diff --git a/sql/DROP/item_info.sql b/application/administration/sql/DROP/item_info.sql similarity index 100% rename from sql/DROP/item_info.sql rename to application/administration/sql/DROP/item_info.sql diff --git a/sql/DROP/item_locations.sql b/application/administration/sql/DROP/item_locations.sql similarity index 100% rename from sql/DROP/item_locations.sql rename to application/administration/sql/DROP/item_locations.sql diff --git a/sql/DROP/items.sql b/application/administration/sql/DROP/items.sql similarity index 100% rename from sql/DROP/items.sql rename to application/administration/sql/DROP/items.sql diff --git a/sql/DROP/linked_items.sql b/application/administration/sql/DROP/linked_items.sql similarity index 100% rename from sql/DROP/linked_items.sql rename to application/administration/sql/DROP/linked_items.sql diff --git a/sql/DROP/locations.sql b/application/administration/sql/DROP/locations.sql similarity index 100% rename from sql/DROP/locations.sql rename to application/administration/sql/DROP/locations.sql diff --git a/sql/DROP/logistics_info.sql b/application/administration/sql/DROP/logistics_info.sql similarity index 100% rename from sql/DROP/logistics_info.sql rename to application/administration/sql/DROP/logistics_info.sql diff --git a/sql/DROP/receipt_items.sql b/application/administration/sql/DROP/receipt_items.sql similarity index 100% rename from sql/DROP/receipt_items.sql rename to application/administration/sql/DROP/receipt_items.sql diff --git a/sql/DROP/receipts.sql b/application/administration/sql/DROP/receipts.sql similarity index 100% rename from sql/DROP/receipts.sql rename to application/administration/sql/DROP/receipts.sql diff --git a/sql/DROP/recipe_items.sql b/application/administration/sql/DROP/recipe_items.sql similarity index 100% rename from sql/DROP/recipe_items.sql rename to application/administration/sql/DROP/recipe_items.sql diff --git a/sql/DROP/recipes.sql b/application/administration/sql/DROP/recipes.sql similarity index 100% rename from sql/DROP/recipes.sql rename to application/administration/sql/DROP/recipes.sql diff --git a/sql/DROP/shopping_list_items.sql b/application/administration/sql/DROP/shopping_list_items.sql similarity index 100% rename from sql/DROP/shopping_list_items.sql rename to application/administration/sql/DROP/shopping_list_items.sql diff --git a/sql/DROP/shopping_lists.sql b/application/administration/sql/DROP/shopping_lists.sql similarity index 100% rename from sql/DROP/shopping_lists.sql rename to application/administration/sql/DROP/shopping_lists.sql diff --git a/sql/DROP/sku_prefix.sql b/application/administration/sql/DROP/sku_prefix.sql similarity index 100% rename from sql/DROP/sku_prefix.sql rename to application/administration/sql/DROP/sku_prefix.sql diff --git a/sql/DROP/transactions.sql b/application/administration/sql/DROP/transactions.sql similarity index 100% rename from sql/DROP/transactions.sql rename to application/administration/sql/DROP/transactions.sql diff --git a/sql/DROP/units.sql b/application/administration/sql/DROP/units.sql similarity index 100% rename from sql/DROP/units.sql rename to application/administration/sql/DROP/units.sql diff --git a/sql/DROP/vendors.sql b/application/administration/sql/DROP/vendors.sql similarity index 100% rename from sql/DROP/vendors.sql rename to application/administration/sql/DROP/vendors.sql diff --git a/sql/DROP/zones.sql b/application/administration/sql/DROP/zones.sql similarity index 100% rename from sql/DROP/zones.sql rename to application/administration/sql/DROP/zones.sql diff --git a/application/administration/sql/insertBrandsTuple.sql b/application/administration/sql/insertBrandsTuple.sql new file mode 100644 index 0000000..ff24c65 --- /dev/null +++ b/application/administration/sql/insertBrandsTuple.sql @@ -0,0 +1,4 @@ +INSERT INTO %%site_name%%_brands +(name) +VALUES (%s) +RETURNING *; \ No newline at end of file diff --git a/application/administration/sql/insertLocationsTuple.sql b/application/administration/sql/insertLocationsTuple.sql new file mode 100644 index 0000000..06f1f58 --- /dev/null +++ b/application/administration/sql/insertLocationsTuple.sql @@ -0,0 +1,4 @@ +INSERT INTO %%site_name%%_locations +(uuid, name, zone_id) +VALUES (%s, %s, %s) +RETURNING *; \ No newline at end of file diff --git a/application/administration/sql/insertLoginsTupleFull.sql b/application/administration/sql/insertLoginsTupleFull.sql new file mode 100644 index 0000000..8103c19 --- /dev/null +++ b/application/administration/sql/insertLoginsTupleFull.sql @@ -0,0 +1,6 @@ +INSERT INTO logins +(username, password, email, favorites, unseen_pantry_items, unseen_groups, unseen_shopping_lists, + unseen_recipes, seen_pantry_items, seen_groups, seen_shopping_lists, seen_recipes, + sites, site_roles, system_admin, flags, row_type) +VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) +RETURNING *; \ No newline at end of file diff --git a/application/administration/sql/insertRolesTuple.sql b/application/administration/sql/insertRolesTuple.sql new file mode 100644 index 0000000..fce3d67 --- /dev/null +++ b/application/administration/sql/insertRolesTuple.sql @@ -0,0 +1,4 @@ +INSERT INTO roles +(role_name, role_description, site_id, flags) +VALUES (%s, %s, %s, %s) +RETURNING *; \ No newline at end of file diff --git a/application/administration/sql/insertSitesTuple.sql b/application/administration/sql/insertSitesTuple.sql new file mode 100644 index 0000000..4cc0eb0 --- /dev/null +++ b/application/administration/sql/insertSitesTuple.sql @@ -0,0 +1,5 @@ +INSERT INTO sites +(site_name, site_description, creation_date, site_owner_id, flags, default_zone, +default_auto_issue_location, default_primary_location) +VALUES (%s, %s, %s, %s, %s, %s, %s, %s) +RETURNING *; \ No newline at end of file diff --git a/application/administration/sql/insertVendorsTuple.sql b/application/administration/sql/insertVendorsTuple.sql new file mode 100644 index 0000000..83ad762 --- /dev/null +++ b/application/administration/sql/insertVendorsTuple.sql @@ -0,0 +1,4 @@ +INSERT INTO %%site_name%%_vendors +(vendor_name, vendor_address, creation_date, created_by, phone_number) +VALUES (%s, %s, %s, %s, %s) +RETURNING *; \ No newline at end of file diff --git a/application/administration/sql/insertZonesTuple.sql b/application/administration/sql/insertZonesTuple.sql new file mode 100644 index 0000000..5175752 --- /dev/null +++ b/application/administration/sql/insertZonesTuple.sql @@ -0,0 +1,4 @@ +INSERT INTO %%site_name%%_zones +(name, description) +VALUES (%s, %s) +RETURNING *; \ No newline at end of file diff --git a/application/administration/sql/selectLoginsUser.sql b/application/administration/sql/selectLoginsUser.sql new file mode 100644 index 0000000..83ee988 --- /dev/null +++ b/application/administration/sql/selectLoginsUser.sql @@ -0,0 +1,16 @@ +WITH passed_id AS (SELECT %s AS passed_id), + cte_login AS ( + SELECT logins.* FROM logins + WHERE logins.id = (SELECT passed_id FROM passed_id) + ), + cte_roles AS ( + SELECT roles.*, + row_to_json(sites.*) AS site + FROM roles + LEFT JOIN sites ON sites.id = roles.site_id + WHERE roles.id = ANY(SELECT unnest(site_roles) FROM cte_login) + ) + +SELECT login.*, + (SELECT COALESCE(array_agg(row_to_json(r)), '{}') FROM cte_roles r) AS site_roles +FROM cte_login login; \ No newline at end of file diff --git a/static/handlers/adminHandler.js b/application/administration/static/js/adminHandler.js similarity index 97% rename from static/handlers/adminHandler.js rename to application/administration/static/js/adminHandler.js index 985f4ce..393881f 100644 --- a/static/handlers/adminHandler.js +++ b/application/administration/static/js/adminHandler.js @@ -26,7 +26,6 @@ document.addEventListener('DOMContentLoaded', async function() { await replenishRolesTable(roles) let logins = await fetchLogins() - console.log(logins) await updateLoginsPagination() await replenishLoginsTable(logins) }) @@ -47,7 +46,7 @@ var sites_current_page = 1 var sites_end_page = 10 var sites_limit = 25 async function fetchSites(){ - const url = new URL('/admin/getSites', window.location.origin) + const url = new URL('/administration/api/getSites', window.location.origin) url.searchParams.append('page', sites_current_page) url.searchParams.append('limit', sites_limit) const response = await fetch(url) @@ -76,7 +75,7 @@ async function replenishSitesTable(sites){ let editOp = document.createElement('a') editOp.setAttribute('class', 'uk-button uk-button-small uk-button-default') editOp.innerHTML = "edit" - editOp.href = `/admin/site/${sites[i].id}` + editOp.href = `/administration/site/${sites[i].id}` let deleteOp = document.createElement('a') deleteOp.setAttribute('class', 'uk-button uk-button-small uk-button-default') @@ -177,7 +176,7 @@ async function postDeleteSite(site_id, item_name){ let valid = document.getElementById('delete_input') if(valid.value==item_name){ valid.classList.remove('uk-form-danger') - const response = await fetch(`/admin/site/postDeleteSite`, { + const response = await fetch(`/administration/api/site/postDeleteSite`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -215,7 +214,7 @@ var roles_current_page = 1 var roles_end_page = 10 var roles_limit = 25 async function fetchRoles(){ - const url = new URL('/admin/getRoles', window.location.origin) + const url = new URL('/administration/api/getRoles', window.location.origin) url.searchParams.append('page', roles_current_page) url.searchParams.append('limit', roles_limit) const response = await fetch(url) @@ -246,7 +245,7 @@ async function replenishRolesTable(roles){ let editOp = document.createElement('a') editOp.setAttribute('class', 'uk-button uk-button-small uk-button-default') editOp.innerHTML = "edit" - editOp.href = `/admin/role/${roles[i].id}` + editOp.href = `/administration/role/${roles[i].id}` let deleteOp = document.createElement('a') deleteOp.setAttribute('class', 'uk-button uk-button-small uk-button-default') @@ -349,7 +348,7 @@ var logins_current_page = 1 var logins_end_page = 10 var logins_limit = 25 async function fetchLogins(){ - const url = new URL('/admin/getLogins', window.location.origin) + const url = new URL('/administration/api/getLogins', window.location.origin) url.searchParams.append('page', logins_current_page) url.searchParams.append('limit', logins_limit) const response = await fetch(url) @@ -384,7 +383,7 @@ async function replenishLoginsTable(logins){ let editOp = document.createElement('a') editOp.setAttribute('class', 'uk-button uk-button-small uk-button-default') editOp.innerHTML = "edit" - editOp.href = `/admin/user/${logins[i].id}` + editOp.href = `/administration/user/${logins[i].id}` let deleteOp = document.createElement('a') deleteOp.setAttribute('class', 'uk-button uk-button-small uk-button-default') diff --git a/uom.csv b/application/administration/static/uom.csv similarity index 100% rename from uom.csv rename to application/administration/static/uom.csv diff --git a/templates/admin/index.html b/application/administration/templates/admin_index.html similarity index 76% rename from templates/admin/index.html rename to application/administration/templates/admin_index.html index e2ba58d..7505fe6 100644 --- a/templates/admin/index.html +++ b/application/administration/templates/admin_index.html @@ -16,69 +16,60 @@ -
    - -
    @@ -277,5 +268,5 @@ {% endassets %} - + \ No newline at end of file diff --git a/templates/admin/role.html b/application/administration/templates/role.html similarity index 94% rename from templates/admin/role.html rename to application/administration/templates/role.html index c316e87..7253e34 100644 --- a/templates/admin/role.html +++ b/application/administration/templates/role.html @@ -19,7 +19,7 @@
    @@ -78,7 +78,7 @@ document.addEventListener('DOMContentLoaded', async function() { let mode = "edit" - if(path == "/admin/role/new"){ + if(path == "/administration/role/new"){ mode = "new" } await replenishForm(role, mode) @@ -132,7 +132,7 @@ site_id: document.getElementById('site_id').value, } - const response = await fetch(`/admin/role/postAddRole`, { + const response = await fetch(`/administration/api/role/postAddRole`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -150,7 +150,7 @@ update: {role_name: document.getElementById('role_name').value, role_description: document.getElementById('role_description').value} } - const response = await fetch(`/admin/role/postEditRole`, { + const response = await fetch(`/administration/api/role/postEditRole`, { method: 'POST', headers: { 'Content-Type': 'application/json', diff --git a/templates/setup.html b/application/administration/templates/setup.html similarity index 100% rename from templates/setup.html rename to application/administration/templates/setup.html diff --git a/templates/admin/site.html b/application/administration/templates/site.html similarity index 97% rename from templates/admin/site.html rename to application/administration/templates/site.html index 54b47c0..40a8315 100644 --- a/templates/admin/site.html +++ b/application/administration/templates/site.html @@ -19,7 +19,7 @@
    @@ -144,7 +144,7 @@ - + \ No newline at end of file diff --git a/templates/items/item_new.html b/application/items/templates/item_new.html similarity index 89% rename from templates/items/item_new.html rename to application/items/templates/item_new.html index ddbeafe..84a099d 100644 --- a/templates/items/item_new.html +++ b/application/items/templates/item_new.html @@ -38,59 +38,77 @@ } -
    - -
    @@ -691,6 +709,6 @@ - + \ No newline at end of file diff --git a/templates/items/itemlink.html b/application/items/templates/itemlink.html similarity index 52% rename from templates/items/itemlink.html rename to application/items/templates/itemlink.html index e41d463..e67538f 100644 --- a/templates/items/itemlink.html +++ b/application/items/templates/itemlink.html @@ -21,60 +21,77 @@ -
    - - -
    + diff --git a/application/items/templates/transaction.html b/application/items/templates/transaction.html new file mode 100644 index 0000000..f4dc2dd --- /dev/null +++ b/application/items/templates/transaction.html @@ -0,0 +1,254 @@ + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    Enter Transaction Receipt
    +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + + +
    + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    +
    +

    Select Item

    +

    Select an Item from the system...

    + + + + + + + + + + + + +
    IDBarcodeName
    +
    +
    + +
    +
    +

    Item Locations

    + + + + + + + + + + +
    ZoneLocationQOH
    +
    +
    + {% assets "js_all" %} + + {% endassets %} + + + \ No newline at end of file diff --git a/application/items/templates/transactions.html b/application/items/templates/transactions.html new file mode 100644 index 0000000..55f97bf --- /dev/null +++ b/application/items/templates/transactions.html @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + +
    TimestampBarcodeNameTransaction TypeQuantityDescriptionUser ID
    + +
    +
    +
    +
    +

    Transaction Receipt

    +

    ...

    +

    ...

    +

    ...

    +

    ...

    +

    ...

    +

    ...

    +

    ...

    +

    ...

    + + + + +
    KeyValue
    +
    +
    + + + + \ No newline at end of file diff --git a/application/poe/__init__.py b/application/poe/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/application/poe/__pycache__/__init__.cpython-313.pyc b/application/poe/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..2d40011 Binary files /dev/null and b/application/poe/__pycache__/__init__.cpython-313.pyc differ diff --git a/application/poe/__pycache__/external_API.cpython-313.pyc b/application/poe/__pycache__/external_API.cpython-313.pyc new file mode 100644 index 0000000..7adc28d Binary files /dev/null and b/application/poe/__pycache__/external_API.cpython-313.pyc differ diff --git a/application/poe/__pycache__/poe_api.cpython-313.pyc b/application/poe/__pycache__/poe_api.cpython-313.pyc new file mode 100644 index 0000000..3fe4ee4 Binary files /dev/null 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 new file mode 100644 index 0000000..fe7f94f Binary files /dev/null and b/application/poe/__pycache__/poe_database.cpython-313.pyc differ diff --git a/application/poe/__pycache__/poe_processes.cpython-313.pyc b/application/poe/__pycache__/poe_processes.cpython-313.pyc new file mode 100644 index 0000000..1771d47 Binary files /dev/null and b/application/poe/__pycache__/poe_processes.cpython-313.pyc differ diff --git a/application/poe/poe_api.py b/application/poe/poe_api.py new file mode 100644 index 0000000..a11eab5 --- /dev/null +++ b/application/poe/poe_api.py @@ -0,0 +1,70 @@ +# 3RD PARTY IMPORTS +from flask import ( + Blueprint, request, render_template, redirect, session, url_for, send_file, jsonify, Response + ) +import psycopg2 + +# APPLICATION IMPORTS +from config import config +from application.access_module import access_api +from application.poe import poe_processes, poe_database +from application import postsqldb + + +point_of_ease = Blueprint('poe', __name__, template_folder="templates", static_folder="static") + + +@point_of_ease.route('/scanner', methods=["GET"]) +@access_api.login_required +def scannerEndpoint(): + sites = [site[1] for site in postsqldb.get_sites(session['user']['sites'])] + return render_template('scanner.html', current_site=session['selected_site'], + sites=sites) + +@point_of_ease.route('/receipts', methods=["GET"]) +@access_api.login_required +def receiptsEndpoint(): + sites = [site[1] for site in postsqldb.get_sites(session['user']['sites'])] + database_config = config() + with psycopg2.connect(**database_config) as conn: + units = postsqldb.UnitsTable.getAll(conn) + return render_template('receipts.html', current_site=session['selected_site'], + sites=sites, units=units) + +@point_of_ease.route('/getItem/barcode', methods=["GET"]) +@access_api.login_required +def getItemBarcode(): + record = {} + 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) + if record == {} or record == (): + return jsonify({"item":None, "error":True, "message":"Item either does not exist or there was a larger problem!"}) + else: + return jsonify({"item":record, "error":False, "message":"item fetched succesfully!"}) + return jsonify({"item":record, "error":True, "message":"There was an error with this GET statement"}) + +@point_of_ease.route('/postTransaction', methods=["POST"]) +@access_api.login_required +def post_transaction(): + if request.method == "POST": + result = poe_processes.postTransaction( + site_name=session['selected_site'], + user_id=session['user_id'], + data=dict(request.json) + ) + return jsonify(result) + return jsonify({"error":True, "message":"There was an error with this POST statement"}) + +@point_of_ease.route('/postReceipt', methods=["POST"]) +@access_api.login_required +def post_receipt(): + if request.method == "POST": + site_name = session['selected_site'] + user_id = session['user_id'] + data= {'items': request.json['items']} + status = poe_processes.post_receipt(site_name, user_id, data) + return jsonify(status) + return jsonify({"error":True, "message":"There was an error with this POST statement"}) \ No newline at end of file diff --git a/application/poe/poe_database.py b/application/poe/poe_database.py new file mode 100644 index 0000000..6d69a23 --- /dev/null +++ b/application/poe/poe_database.py @@ -0,0 +1,419 @@ +# 3RD PARTY IMPORTS +import psycopg2 + +# APPLICATION IMPORTS +import config +from application import postsqldb + +def request_receipt_id(conn, site_name): + next_receipt_id = None + sql = f"SELECT receipt_id FROM {site_name}_receipts ORDER BY id DESC LIMIT 1;" + try: + database_config = config.config() + with psycopg2.connect(**database_config) as conn: + with conn.cursor() as cur: + cur.execute(sql) + next_receipt_id = cur.fetchone() + if next_receipt_id == None: + next_receipt_id = "00000001" + else: + next_receipt_id = next_receipt_id[0] + next_receipt_id = int(next_receipt_id.split("-")[1]) + 1 + y = str(next_receipt_id) + len_str = len(y) + x = "".join(["0" for _ in range(8 - len_str)]) + next_receipt_id = x + y + except (Exception, psycopg2.DatabaseError) as error: + raise postsqldb.DatabaseError(error, payload=(), sql=sql) + + return next_receipt_id + +def selectItemLocationsTuple(site_name, payload, convert=True): + item_locations = () + database_config = config.config() + select_item_location_sql = f"SELECT * FROM {site_name}_item_locations WHERE part_id = %s AND location_id = %s;" + try: + with psycopg2.connect(**database_config) as conn: + with conn.cursor() as cur: + cur.execute(select_item_location_sql, payload) + rows = cur.fetchone() + if rows and convert: + item_locations = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + item_locations = rows + return item_locations + except Exception as error: + return error + +def selectCostLayersTuple(site_name, payload, convert=True): + cost_layers = () + database_config = config.config() + select_cost_layers_sql = f"SELECT cl.* FROM {site_name}_item_locations il JOIN {site_name}_cost_layers cl ON cl.id = ANY(il.cost_layers) where il.id=%s;" + try: + with psycopg2.connect(**database_config) as conn: + with conn.cursor() as cur: + cur.execute(select_cost_layers_sql, payload) + rows = cur.fetchall() + if rows and convert: + cost_layers = rows + cost_layers = [postsqldb.tupleDictionaryFactory(cur.description, layer) for layer in rows] + elif rows and not convert: + cost_layers = rows + return cost_layers + except Exception as error: + return error + +def selectLocationsTuple(site, payload, convert=True, conn=None): + selected = () + self_conn = False + sql = f"SELECT * FROM {site}_locations WHERE id=%s;" + 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: + selected = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + selected = rows + + if self_conn: + conn.commit() + conn.close() + + return selected + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def selectItemLocationsTuple(site_name, payload, convert=True, conn=None): + item_locations = () + self_conn = False + select_item_location_sql = f"SELECT * FROM {site_name}_item_locations WHERE part_id = %s AND location_id = %s;" + 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(select_item_location_sql, payload) + rows = cur.fetchone() + if rows and convert: + item_locations = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + item_locations = rows + + if self_conn: + conn.commit() + conn.close() + + return item_locations + + except Exception as error: + return error + +def selectLinkedItemByBarcode(site, payload, convert=True, conn=None): + item = () + self_conn = False + sql = f"SELECT * FROM {site}_itemlinks WHERE barcode=%s;" + 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: + item = postsqldb.tupleDictionaryFactory(cur.description, rows) + if rows and not convert: + item = rows + + if self_conn: + conn.commit() + conn.close() + + return item + except (Exception, psycopg2.DatabaseError) as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def selectItemAllByID(site, payload, convert=True, conn=None): + item = () + self_conn = False + + with open(f"application/poe/sql/getItemAllByID.sql", "r+") as file: + getItemAllByID_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(getItemAllByID_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.commit() + conn.close() + + return item + except (Exception, psycopg2.DatabaseError) as error: + raise postsqldb.DatabaseError(error, payload, getItemAllByID_sql) + +def selectItemAllByBarcode(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 + + linked_item = selectLinkedItemByBarcode(site, (payload[0],)) + + if len(linked_item) > 1: + item = selectItemAllByID(site, payload=(linked_item['link'], ), convert=convert) + item['item_info']['uom_quantity'] = linked_item['conv_factor'] + if self_conn: + conn.close() + return item + else: + with open(f"application/poe/sql/getItemAllByBarcode.sql", "r+") as file: + getItemAllByBarcode_sql = file.read().replace("%%site_name%%", site) + try: + + with conn.cursor() as cur: + cur.execute(getItemAllByBarcode_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, getItemAllByBarcode_sql) + +def insertCostLayersTuple(site, payload, convert=True, conn=None): + cost_layer = () + self_conn = False + + with open(f"application/poe/sql/insertCostLayersTuple.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: + cost_layer = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + cost_layer = rows + + if self_conn: + conn.commit() + conn.close() + + return cost_layer + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def insertTransactionsTuple(site, payload, convert=True, conn=None): + # payload (tuple): (timestamp[timestamp], logistics_info_id[int], barcode[str], name[str], + transaction = () + self_conn = False + with open(f"application/poe/sql/insertTransactionsTuple.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: + transaction = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + transaction = rows + + if self_conn: + conn.commit() + conn.close() + + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + return transaction + +def insertReceiptsTuple(site, payload, convert=True, conn=None): + receipt = () + self_conn = False + with open(f"application/poe/sql/insertReceiptsTuple.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: + receipt = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + receipt = rows + + if self_conn: + conn.commit() + conn.close() + + return receipt + + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def insertReceiptItemsTuple(site, payload, convert=True, conn=None): + receipt_item = () + self_conn = False + + with open(f"application/poe/sql/insertReceiptItemsTuple.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: + receipt_item = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + receipt_item = rows + + if self_conn: + conn.commit() + conn.close() + + return receipt_item + + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def updateCostLayersTuple(site, payload, convert=True, conn=None): + cost_layer = () + self_conn = False + + set_clause, values = postsqldb.updateStringFactory(payload['update']) + values.append(payload['id']) + sql = f"UPDATE {site}_cost_layers SET {set_clause} WHERE id=%s RETURNING *;" + + 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, values) + rows = cur.fetchone() + if rows and convert: + cost_layer = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + cost_layer = rows + + if self_conn: + conn.commit() + conn.close() + + return cost_layer + except Exception as error: + return error + +def updateItemLocation(site, payload, convert=True, conn=None): + item_location = () + self_conn = False + + with open(f"application/poe/sql/updateItemLocation.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: + item_location = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + item_location = rows + + if self_conn: + conn.commit() + conn.close() + + return item_location + except Exception as error: + return error + +def deleteCostLayersTuple(site, payload, convert=True, conn=None): + deleted = () + self_conn = False + sql = f"WITH deleted_rows AS (DELETE FROM {site}_cost_layers WHERE id IN ({','.join(['%s'] * len(payload))}) RETURNING *) SELECT * FROM deleted_rows;" + 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.fetchall() + if rows and convert: + deleted = [postsqldb.tupleDictionaryFactory(cur.description, r) for r in rows] + elif rows and not convert: + deleted = rows + + if self_conn: + conn.commit() + conn.close() + + return deleted + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) diff --git a/application/poe/poe_processes.py b/application/poe/poe_processes.py new file mode 100644 index 0000000..6d187f6 --- /dev/null +++ b/application/poe/poe_processes.py @@ -0,0 +1,136 @@ +# 3RD PARTY IMPORTS +import datetime +import psycopg2 + +# APPLICATION IMPORTS +from application import postsqldb, database_payloads +from application.poe import poe_database +import config + +""" This module will hold all the multilayerd/complex process used in the +point of ease module. """ + + +def postTransaction(site_name, user_id, data: dict, conn=None): + """ dict_keys(['item_id', 'logistics_info_id', 'barcode', 'item_name', 'transaction_type', + 'quantity', 'description', 'cost', 'vendor', 'expires', 'location_id'])""" + def quantityFactory(quantity_on_hand:float, quantity:float, transaction_type:str): + if transaction_type == "Adjust In": + quantity_on_hand += quantity + return quantity_on_hand + if transaction_type == "Adjust Out": + quantity_on_hand -= quantity + return quantity_on_hand + raise Exception("The transaction type is wrong!") + + self_conn = False + if not conn: + database_config = config.config() + conn = psycopg2.connect(**database_config) + conn.autocommit = False + self_conn = True + + + transaction_time = datetime.datetime.now() + + cost_layer = postsqldb.CostLayerPayload( + aquisition_date=transaction_time, + quantity=float(data['quantity']), + cost=float(data['cost']), + currency_type="USD", + vendor=int(data['vendor']), + expires=data['expires'] + ) + transaction = postsqldb.TransactionPayload( + timestamp=transaction_time, + logistics_info_id=int(data['logistics_info_id']), + barcode=data['barcode'], + name=data['item_name'], + transaction_type=data['transaction_type'], + quantity=float(data['quantity']), + description=data['description'], + user_id=user_id, + ) + + location = poe_database.selectItemLocationsTuple(site_name, payload=(data['item_id'], data['location_id']), conn=conn) + cost_layers: list = location['cost_layers'] + if data['transaction_type'] == "Adjust In": + cost_layer = poe_database.insertCostLayersTuple(site_name, cost_layer.payload(), conn=conn) + cost_layers.append(cost_layer['id']) + + if data['transaction_type'] == "Adjust Out": + if float(location['quantity_on_hand']) < float(data['quantity']): + return {"error":True, "message":f"The quantity on hand in the chosen location is not enough to satisfy your transaction!"} + cost_layers = poe_database.selectCostLayersTuple(site_name, payload=(location['id'], )) + + new_cost_layers = [] + qty = float(data['quantity']) + for layer in cost_layers: + if qty == 0.0: + new_cost_layers.append(layer['id']) + elif qty >= float(layer['quantity']): + qty -= float(layer['quantity']) + layer['quantity'] = 0.0 + else: + layer['quantity'] -= qty + new_cost_layers.append(layer['id']) + poe_database.updateCostLayersTuple(site_name, {'id': layer['id'], 'update': {'quantity': layer['quantity']}}, conn=conn) + qty = 0.0 + + if layer['quantity'] == 0.0: + poe_database.deleteCostLayersTuple(site_name, (layer['id'],), conn=conn) + + cost_layers = new_cost_layers + + quantity_on_hand = quantityFactory(float(location['quantity_on_hand']), data['quantity'], data['transaction_type']) + + updated_item_location_payload = (cost_layers, quantity_on_hand, data['item_id'], data['location_id']) + poe_database.updateItemLocation(site_name, updated_item_location_payload, conn=conn) + + site_location = poe_database.selectLocationsTuple(site_name, (location['location_id'], ), conn=conn) + + transaction.data = {'location': site_location['uuid']} + + poe_database.insertTransactionsTuple(site_name, transaction.payload(), conn=conn) + + if self_conn: + conn.commit() + conn.close() + + return {"error": False, "message":f"Transaction Successful!"} + +def post_receipt(site_name, user_id, data: dict, conn=None): + # data = {'items': items} + self_conn = False + items = data['items'] + if not conn: + database_config = config.config() + conn = psycopg2.connect(**database_config) + conn.autocommit = False + self_conn = True + + receipt_id = poe_database.request_receipt_id(conn, site_name) + receipt_id = f"SIR-{receipt_id}" + receipt = database_payloads.ReceiptPayload( + receipt_id=receipt_id, + submitted_by=user_id + ) + receipt = poe_database.insertReceiptsTuple(site_name, receipt.payload(), conn=conn) + + for item in items: + receipt_item = database_payloads.ReceiptItemPayload( + type=item['type'], + receipt_id=receipt['id'], + barcode=item['item']['barcode'], + name=item['item']['item_name'], + qty=item['item']['qty'], + uom=item['item']['uom'], + data=item['item']['data'] + ) + poe_database.insertReceiptItemsTuple(site_name, receipt_item.payload(), conn=conn) + + if self_conn: + conn.commit() + conn.close() + + return {"error":False, "message":"Transaction Complete!"} diff --git a/application/poe/sql/getItemAllByBarcode.sql b/application/poe/sql/getItemAllByBarcode.sql new file mode 100644 index 0000000..b2c4b8d --- /dev/null +++ b/application/poe/sql/getItemAllByBarcode.sql @@ -0,0 +1,75 @@ +WITH passed_id AS (SELECT id AS passed_id FROM %%site_name%%_items WHERE 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 ( + SELECT + %%site_name%%_item_info.*, + row_to_json(units.*) as uom + FROM %%site_name%%_item_info + LEFT JOIN units ON %%site_name%%_item_info.uom = units.id + WHERE %%site_name%%_item_info.id = (SELECT item_info_id FROM info_id) + ), + cte_groups AS ( + SELECT + %%site_name%%_groups.*, + %%site_name%%_group_items.uuid, + %%site_name%%_group_items.item_type, + %%site_name%%_group_items.qty + FROM %%site_name%%_groups + JOIN %%site_name%%_group_items ON %%site_name%%_groups.id = %%site_name%%_group_items.gr_id + WHERE %%site_name%%_group_items.item_id = (SELECT passed_id FROM passed_id) + ), + cte_shopping_lists AS ( + SELECT + %%site_name%%_shopping_lists.*, + %%site_name%%_shopping_list_items.uuid, + %%site_name%%_shopping_list_items.item_type, + %%site_name%%_shopping_list_items.qty + FROM %%site_name%%_shopping_lists + JOIN %%site_name%%_shopping_list_items ON %%site_name%%_shopping_lists.id = %%site_name%%_shopping_list_items.sl_id + WHERE %%site_name%%_shopping_list_items.item_id = (SELECT passed_id FROM passed_id) + ), + cte_itemlinks AS ( + SELECT * FROM %%site_name%%_itemlinks WHERE link=(SELECT passed_id FROM passed_id) + ), + cte_item_locations AS ( + SELECT * 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) + ), + 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 %%site_name%%_logistics_info AS li + LEFT JOIN %%site_name%%_locations AS pl ON li.primary_location = pl.id + LEFT JOIN %%site_name%%_locations AS ail ON li.auto_issue_location = ail.id + LEFT JOIN %%site_name%%_zones AS pz ON li.primary_zone = pz.id + LEFT JOIN %%site_name%%_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, + %%site_name%%_items.*, + (SELECT COALESCE(row_to_json(logis), '{}') FROM cte_logistics_info logis) AS logistics_info, + row_to_json(%%site_name%%_food_info.*) as food_info, + row_to_json(%%site_name%%_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_locations +FROM %%site_name%%_items + LEFT JOIN %%site_name%%_item_info ON %%site_name%%_items.item_info_id = %%site_name%%_item_info.id + LEFT JOIN %%site_name%%_food_info ON %%site_name%%_items.food_info_id = %%site_name%%_food_info.id + LEFT JOIN %%site_name%%_brands ON %%site_name%%_items.brand = %%site_name%%_brands.id + LEFT JOIN units ON %%site_name%%_item_info.uom = units.id + LEFT JOIN cte_groups ON %%site_name%%_items.id = cte_groups.id + LEFT JOIN cte_shopping_lists ON %%site_name%%_items.id = cte_shopping_lists.id +WHERE %%site_name%%_items.id=(SELECT passed_id FROM passed_id) +GROUP BY + %%site_name%%_items.id, %%site_name%%_item_info.id, %%site_name%%_food_info.id, %%site_name%%_brands.id; \ No newline at end of file diff --git a/application/poe/sql/getItemAllByID.sql b/application/poe/sql/getItemAllByID.sql new file mode 100644 index 0000000..8b5ca81 --- /dev/null +++ b/application/poe/sql/getItemAllByID.sql @@ -0,0 +1,86 @@ +WITH passed_id AS (SELECT %s AS 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)), + cte_conversions AS ( + SELECT + %%site_name%%_conversions.id as conv_id, + %%site_name%%_conversions.conv_factor as conv_factor, + units.* as uom + FROM %%site_name%%_conversions + LEFT JOIN units ON %%site_name%%_conversions.uom_id = units.id + WHERE %%site_name%%_conversions.item_id = (SELECT passed_id FROM passed_id) + ), + cte_item_info AS ( + SELECT + %%site_name%%_item_info.*, + row_to_json(units.*) as uom, + COALESCE((SELECT json_agg(convs) FROM cte_conversions convs), '[]'::json) AS conversions, + COALESCE((SELECT json_agg(p.*) FROM %%site_name%%_sku_prefix as p WHERE p.id = ANY(%%site_name%%_item_info.prefixes)), '[]'::json) as prefixes + FROM %%site_name%%_item_info + LEFT JOIN units ON %%site_name%%_item_info.uom = units.id + WHERE %%site_name%%_item_info.id = (SELECT item_info_id FROM info_id) + ), + cte_groups AS ( + SELECT + %%site_name%%_groups.*, + %%site_name%%_group_items.uuid, + %%site_name%%_group_items.item_type, + %%site_name%%_group_items.qty + FROM %%site_name%%_groups + JOIN %%site_name%%_group_items ON %%site_name%%_groups.id = %%site_name%%_group_items.gr_id + WHERE %%site_name%%_group_items.item_id = (SELECT passed_id FROM passed_id) + ), + cte_shopping_lists AS ( + SELECT + %%site_name%%_shopping_lists.*, + %%site_name%%_shopping_list_items.uuid, + %%site_name%%_shopping_list_items.item_type, + %%site_name%%_shopping_list_items.qty + FROM %%site_name%%_shopping_lists + JOIN %%site_name%%_shopping_list_items ON %%site_name%%_shopping_lists.id = %%site_name%%_shopping_list_items.sl_id + WHERE %%site_name%%_shopping_list_items.item_id = (SELECT passed_id FROM passed_id) + ), + cte_itemlinks AS ( + SELECT * FROM %%site_name%%_itemlinks WHERE link=(SELECT passed_id FROM passed_id) + ), + cte_item_locations AS ( + SELECT * 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) + ), + 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 %%site_name%%_logistics_info AS li + LEFT JOIN %%site_name%%_locations AS pl ON li.primary_location = pl.id + LEFT JOIN %%site_name%%_locations AS ail ON li.auto_issue_location = ail.id + LEFT JOIN %%site_name%%_zones AS pz ON li.primary_zone = pz.id + LEFT JOIN %%site_name%%_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, + %%site_name%%_items.*, + (SELECT COALESCE(row_to_json(logis), '{}') FROM cte_logistics_info logis) AS logistics_info, + row_to_json(%%site_name%%_food_info.*) as food_info, + row_to_json(%%site_name%%_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_locations +FROM %%site_name%%_items + LEFT JOIN %%site_name%%_item_info ON %%site_name%%_items.item_info_id = %%site_name%%_item_info.id + LEFT JOIN %%site_name%%_food_info ON %%site_name%%_items.food_info_id = %%site_name%%_food_info.id + LEFT JOIN %%site_name%%_brands ON %%site_name%%_items.brand = %%site_name%%_brands.id + LEFT JOIN units ON %%site_name%%_item_info.uom = units.id + LEFT JOIN cte_groups ON %%site_name%%_items.id = cte_groups.id + LEFT JOIN cte_shopping_lists ON %%site_name%%_items.id = cte_shopping_lists.id +WHERE %%site_name%%_items.id=(SELECT passed_id FROM passed_id) +GROUP BY + %%site_name%%_items.id, %%site_name%%_item_info.id, %%site_name%%_food_info.id, %%site_name%%_brands.id; \ No newline at end of file diff --git a/application/poe/sql/insertCostLayersTuple.sql b/application/poe/sql/insertCostLayersTuple.sql new file mode 100644 index 0000000..c3d381f --- /dev/null +++ b/application/poe/sql/insertCostLayersTuple.sql @@ -0,0 +1,4 @@ +INSERT INTO %%site_name%%_cost_layers +(aquisition_date, quantity, cost, currency_type, expires, vendor) +VALUES (%s, %s, %s, %s, %s, %s) +RETURNING *; \ No newline at end of file diff --git a/application/poe/sql/insertReceiptItemsTuple.sql b/application/poe/sql/insertReceiptItemsTuple.sql new file mode 100644 index 0000000..6aeb85f --- /dev/null +++ b/application/poe/sql/insertReceiptItemsTuple.sql @@ -0,0 +1,4 @@ +INSERT INTO %%site_name%%_receipt_items +(type, receipt_id, barcode, name, qty, uom, data, status) +VALUES (%s, %s, %s, %s, %s, %s, %s, %s) +RETURNING *; \ No newline at end of file diff --git a/application/poe/sql/insertReceiptsTuple.sql b/application/poe/sql/insertReceiptsTuple.sql new file mode 100644 index 0000000..8ddaf60 --- /dev/null +++ b/application/poe/sql/insertReceiptsTuple.sql @@ -0,0 +1,4 @@ +INSERT INTO %%site_name%%_receipts +(receipt_id, receipt_status, date_submitted, submitted_by, vendor_id, files) +VALUES (%s, %s, %s, %s, %s, %s) +RETURNING *; \ No newline at end of file diff --git a/application/poe/sql/insertTransactionsTuple.sql b/application/poe/sql/insertTransactionsTuple.sql new file mode 100644 index 0000000..d8ee48d --- /dev/null +++ b/application/poe/sql/insertTransactionsTuple.sql @@ -0,0 +1,5 @@ +INSERT INTO %%site_name%%_transactions +(timestamp, logistics_info_id, barcode, name, transaction_type, +quantity, description, user_id, data) +VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s) +RETURNING *; \ No newline at end of file diff --git a/application/poe/sql/updateItemLocation.sql b/application/poe/sql/updateItemLocation.sql new file mode 100644 index 0000000..7316d94 --- /dev/null +++ b/application/poe/sql/updateItemLocation.sql @@ -0,0 +1,4 @@ +UPDATE %%site_name%%_item_locations +SET cost_layers = %s, quantity_on_hand = %s +WHERE part_id=%s AND location_id=%s +RETURNING *; \ No newline at end of file diff --git a/application/poe/static/js/receiptsHandler.js b/application/poe/static/js/receiptsHandler.js new file mode 100644 index 0000000..67b9c34 --- /dev/null +++ b/application/poe/static/js/receiptsHandler.js @@ -0,0 +1,241 @@ +var pagination_current = 1; +var search_string = ''; +var defaqult_limit = 2; +var pagination_end = 1; +var item; + +async function changeSite(site){ + console.log(site) + const response = await fetch(`/changeSite`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + site: site, + }), + }); + data = await response.json(); + transaction_status = "success" + if (data.error){ + transaction_status = "danger" + } + + UIkit.notification({ + message: data.message, + status: transaction_status, + pos: 'top-right', + timeout: 5000 + }); + location.reload(true) +} + + + + +async function getItemBarcode(barcode) { + console.log(`selected item: ${barcode}`) + const url = new URL('/poe/getItem/barcode', window.location.origin); + url.searchParams.append('barcode', barcode); + const response = await fetch(url); + data = await response.json(); + return data; +} + +async function submitScanReceipt(items) { + const response = await fetch(`/poe/postReceipt`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + items: items + }), + }); + data = await response.json(); + transaction_status = "success" + if (data.error){ + transaction_status = "danger" + } + + UIkit.notification({ + message: data.message, + status: transaction_status, + pos: 'top-right', + timeout: 5000 + }); + + return data.error +} + +var openedReceipt = false +async function startReceipt() { + openedReceipt = true + document.getElementById('barcode-input').classList.remove('uk-disabled') + document.getElementById('barcode-table').classList.remove('uk-disabled') + + document.getElementById('receiptStart').classList.add('uk-disabled') + document.getElementById('receiptComplete').classList.remove('uk-disabled') + document.getElementById('receiptClose').classList.remove('uk-disabled') + +} + +async function completeReceipt() { + openedReceipt = false + document.getElementById('barcode-input').classList.add('uk-disabled') + document.getElementById('barcode-table').classList.add('uk-disabled') + + document.getElementById('receiptStart').classList.remove('uk-disabled') + document.getElementById('receiptComplete').classList.add('uk-disabled') + document.getElementById('receiptClose').classList.add('uk-disabled') + + await submitScanReceipt(scannedReceiptItems) + let scanReceiptTableBody = document.getElementById("scanReceiptTableBody") + scanReceiptTableBody.innerHTML = "" + + scannedReceiptItems = Array() +} + +async function closeReceipt(){ + openedReceipt = false + document.getElementById('barcode-input').classList.add('uk-disabled') + document.getElementById('barcode-table').classList.add('uk-disabled') + + document.getElementById('receiptStart').classList.remove('uk-disabled') + document.getElementById('receiptComplete').classList.add('uk-disabled') + document.getElementById('receiptClose').classList.add('uk-disabled') + + let scanReceiptTableBody = document.getElementById("scanReceiptTableBody") + scanReceiptTableBody.innerHTML = "" + + scannedReceiptItems = Array() +} + +var scannedReceiptItems = Array(); +async function addToReceipt(event) { + if (event.key == "Enter"){ + let barcode = document.getElementById('barcode-scan-receipt').value + let data = await getItemBarcode(barcode) + let scannedItem = data.item + if(scannedItem){ + let expires = scannedItem.food_info.expires + if(scannedItem.food_info.expires){ + let today = new Date(); + today.setDate(today.getDate() + Number(scannedItem.food_info.default_expiration)) + expires = today.toISOString().split('T')[0]; + } + scannedReceiptItems.push({item: { + barcode: scannedItem.barcode, + item_name: scannedItem.item_name, + qty: scannedItem.item_info.uom_quantity, + uom: scannedItem.item_info.uom.id, + data: {cost: scannedItem.item_info.cost, expires: expires} + }, type: 'sku'}) + document.getElementById('barcode-scan-receipt').value = "" + } else { + scannedReceiptItems.push({item: { + barcode: `%${barcode}%`, + item_name: "unknown", + qty: 1, + uom: 1, + data: {'cost': 0.00, 'expires': false} + }, type: 'new sku'}) + document.getElementById('barcode-scan-receipt').value = "" + } + } + await replenishScannedReceiptTable(scannedReceiptItems) +} + +async function replenishScannedReceiptTable(items) { + let scanReceiptTableBody = document.getElementById("scanReceiptTableBody") + scanReceiptTableBody.innerHTML = "" + + for(let i = 0; i < items.length; i++){ + let tableRow = document.createElement('tr') + + let typeCell = document.createElement('td') + typeCell.innerHTML = items[i].type + let barcodeCell = document.createElement('td') + barcodeCell.innerHTML = items[i].item.barcode + let nameCell = document.createElement('td') + nameCell.innerHTML = items[i].item.item_name + + let operationsCell = document.createElement('td') + + let editOp = document.createElement('a') + editOp.style = "margin-right: 5px;" + editOp.setAttribute('class', 'uk-button uk-button-small uk-button-default') + editOp.setAttribute('uk-icon', 'icon: pencil') + editOp.onclick = async function () { + await openLineEditModal(i, items[i]) + } + + let deleteOp = document.createElement('a') + deleteOp.setAttribute('class', 'uk-button uk-button-small uk-button-default') + deleteOp.setAttribute('uk-icon', 'icon: trash') + deleteOp.onclick = async function() { + scannedReceiptItems.splice(i, 1) + await replenishScannedReceiptTable(scannedReceiptItems) + } + + operationsCell.append(editOp, deleteOp) + + operationsCell.classList.add("uk-flex") + operationsCell.classList.add("uk-flex-right") + + tableRow.append(typeCell, barcodeCell, nameCell, operationsCell) + scanReceiptTableBody.append(tableRow) + } +} + +async function openLineEditModal(ind, line_data) { + console.log(line_data) + document.getElementById('lineName').value = line_data.item.item_name + document.getElementById('lineQty').value = line_data.item.qty + document.getElementById('lineUOM').value = line_data.item.uom + document.getElementById('lineCost').value = line_data.item.data.cost + document.getElementById('lineExpires').value = line_data.item.data.expires + if(line_data.type === 'sku'){ + document.getElementById('lineUOM').classList.add('uk-disabled') + } else { + document.getElementById('lineUOM').classList.remove('uk-disabled') + } + + if(!line_data.item.data.expires){ + document.getElementById('lineExpires').classList.add('uk-disabled') + } else { + document.getElementById('lineExpires').classList.remove('uk-disabled') + } + + document.getElementById('saveLineButton').onclick = async function() { + line_data.item.item_name = document.getElementById('lineName').value + line_data.item.qty = document.getElementById('lineQty').value + line_data.item.uom = document.getElementById('lineUOM').value + line_data.item.data.cost = document.getElementById('lineCost').value + if(line_data.item.data.expires){ + line_data.item.data.expires = document.getElementById('lineExpires').value + } + + scannedReceiptItems[ind] = line_data + UIkit.modal(document.getElementById("lineEditModal")).hide(); + await replenishScannedReceiptTable(scannedReceiptItems) + } + + UIkit.modal(document.getElementById("lineEditModal")).show(); +} + +var mode = false +async function toggleDarkMode() { + let darkMode = document.getElementById("dark-mode"); + darkMode.disabled = !darkMode.disabled; + mode = !mode; + if(mode){ + document.getElementById('modeToggle').innerHTML = "light_mode" + document.getElementById('main_html').classList.add('uk-light') + } else { + document.getElementById('modeToggle').innerHTML = "dark_mode" + document.getElementById('main_html').classList.remove('uk-light') + + } + +} \ No newline at end of file diff --git a/application/poe/static/js/transactionHandler.js b/application/poe/static/js/transactionHandler.js new file mode 100644 index 0000000..59162ad --- /dev/null +++ b/application/poe/static/js/transactionHandler.js @@ -0,0 +1,165 @@ +async function changeSite(site){ + console.log(site) + const response = await fetch(`/changeSite`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + site: site, + }), + }); + data = await response.json(); + transaction_status = "success" + if (data.error){ + transaction_status = "danger" + } + + UIkit.notification({ + message: data.message, + status: transaction_status, + pos: 'top-right', + timeout: 5000 + }); + location.reload(true) +} + +var scannedItems = Array(); +const queueLimit = 49; // 49 should be default + +async function addToQueue(event) { + if (event.key == "Enter"){ + let data = await getItemBarcode(document.getElementById('barcode-scan').value) + let scannedItem = data.item + if(data.error){ + UIkit.notification({ + message: data.message, + status: "danger", + pos: 'top-right', + timeout: 5000 + }); + } + if(scannedItems.length > queueLimit){ + scannedItems.shift() + } + if(!Array.isArray(scannedItem) && !data.error){ + let status = await submitScanTransaction(scannedItem) + scannedItems.push({'item': scannedItem, 'type': `${document.getElementById('scan_trans_type').value}`, 'error': status}) + document.getElementById('barcode-scan').value = "" + } + } + await replenishScanTable() +} + +async function getItemBarcode(barcode) { + console.log(`selected item: ${barcode}`) + const url = new URL('/poe/getItem/barcode', window.location.origin); + url.searchParams.append('barcode', barcode); + const response = await fetch(url); + data = await response.json(); + return data; +} + +async function submitScanTransaction(scannedItem) { + /// I need to find the location that matches the items auto issue location id + + let trans_type = document.getElementById('scan_trans_type').value + let scan_transaction_item_location_id = 0 + let comparator = 0 + + if (trans_type === "Adjust In"){ + comparator = scannedItem.logistics_info.primary_location.id + } else if (trans_type === "Adjust Out"){ + comparator = scannedItem.logistics_info.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 + } + } + const response = await fetch(`/poe/postTransaction`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + item_id: scannedItem.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, + description: "", + cost: parseFloat(scannedItem.item_info.cost), + vendor: 0, + expires: null, + location_id: scan_transaction_item_location_id + }), + }); + data = await response.json(); + transaction_status = "success" + if (data.error){ + transaction_status = "danger" + } + + UIkit.notification({ + message: data.message, + status: transaction_status, + pos: 'top-right', + timeout: 5000 + }); + + return data.error + +} + +async function replenishScanTable() { + let scanTableBody = document.getElementById("scanTableBody") + scanTableBody.innerHTML = "" + + let reversedScannedItems = scannedItems.slice().reverse() + + for(let i = 0; i < reversedScannedItems.length; i++){ + let tableRow = document.createElement('tr') + + let icon = `` + if(reversedScannedItems[i].error){ + icon = `` + } + + let statusCell = document.createElement('td') + statusCell.innerHTML = icon + let barcodeCell = document.createElement('td') + barcodeCell.innerHTML = reversedScannedItems[i].item.barcode + let nameCell = document.createElement('td') + nameCell.innerHTML = reversedScannedItems[i].item.item_name + let typeCell = document.createElement('td') + 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 + } else { + locationCell.innerHTML = reversedScannedItems[i].item.logistics_info.auto_issue_location.uuid + } + + tableRow.append(statusCell, barcodeCell, nameCell, typeCell, locationCell) + scanTableBody.append(tableRow) + } +} + +var mode = false +async function toggleDarkMode() { + let darkMode = document.getElementById("dark-mode"); + darkMode.disabled = !darkMode.disabled; + mode = !mode; + if(mode){ + document.getElementById('modeToggle').innerHTML = "light_mode" + document.getElementById('main_html').classList.add('uk-light') + } else { + document.getElementById('modeToggle').innerHTML = "dark_mode" + document.getElementById('main_html').classList.remove('uk-light') + + } + +} \ No newline at end of file diff --git a/application/poe/templates/receipts.html b/application/poe/templates/receipts.html new file mode 100644 index 0000000..fa4889f --- /dev/null +++ b/application/poe/templates/receipts.html @@ -0,0 +1,193 @@ + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +

    Using this method of entering receipts does so by adding each barcode to a list and once the receipt has been built the + the system will then add the receipt to the system. Its important that you have the Barcode input focused and use a scanner that places the + characters into the field before it finishes up with a press of the ENTER key. +

    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    +
    +
    + + +
    +
    +
    + + + + + + + + + + +
    TypeBarcodeName
    +
    +
    +
    + +
    +
    +

    Edit Line...

    +

    Edit any fields here for the selected Line and then save them.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    QTY
    QTY
    UOM + +
    COST
    EXPIRES
    +

    + + +

    +
    +
    + + {% assets "js_all" %} + + {% endassets %} + + \ No newline at end of file diff --git a/application/poe/templates/scanner.html b/application/poe/templates/scanner.html new file mode 100644 index 0000000..163e05e --- /dev/null +++ b/application/poe/templates/scanner.html @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +

    Using this method of entering transaction receipts does so by transacting a single UOM of the barcode scanned. Its important that you have the + Barcode input focused and use a scanner that places the characters into the field before it finishes up with a press of the ENTER key. +

    +
    +
    +
    + + +
    +
    + +
    +
    +
    + + + + + + + + + + + + +
    StatusBarcodeNameTypeLocation
    +
    +
    +
    + + {% assets "js_all" %} + + {% endassets %} + + \ No newline at end of file diff --git a/application/postsqldb.py b/application/postsqldb.py index 9a8e00c..43706dd 100644 --- a/application/postsqldb.py +++ b/application/postsqldb.py @@ -4,6 +4,7 @@ import psycopg2.extras from dataclasses import dataclass, field import random import string +import config class DatabaseError(Exception): def __init__(self, message, payload=[], sql=""): @@ -14,7 +15,7 @@ class DatabaseError(Exception): self.log_error() def log_error(self): - with open("database.log", "a+") as file: + with open("logs/database.log", "a+") as file: file.write("\n") file.write(f"{datetime.datetime.now()} --- ERROR --- DatabaseError(message='{self.message}',\n") file.write(f"{" "*41}payload={self.payload},\n") @@ -44,6 +45,47 @@ def getUUID(n): random_string = ''.join(random.choices(string.ascii_letters + string.digits, k=n)) return random_string +def get_sites(sites=[]): + database_config = config.config() + with psycopg2.connect(**database_config) as conn: + try: + with conn.cursor() as cur: + site_rows = [] + for each in sites: + cur.execute(f"SELECT * FROM sites WHERE id=%s;", (each, )) + site_rows.append(cur.fetchone()) + return site_rows + except (Exception, psycopg2.DatabaseError) as error: + print(error) + conn.rollback() + return False + + +def get_units_of_measure(convert=True, conn=None): + records = () + self_conn = False + sql = f"SELECT * FROM units;" + 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) + rows = cur.fetchall() + if rows and convert: + records = [tupleDictionaryFactory(cur.description, row) for row in rows] + elif rows and not convert: + records = rows + + if self_conn: + conn.close() + return records + except Exception as error: + raise DatabaseError(error, "", sql) + class ConversionsTable: @dataclass class Payload: @@ -2409,3 +2451,64 @@ class ItemLinkPayload: json.dumps(self.data), self.conv_factor ) + +@dataclass +class LogisticsInfoPayload: + barcode: str + primary_location: int + primary_zone: int + auto_issue_location: int + auto_issue_zone: int + + def payload(self): + return (self.barcode, + self.primary_location, + self.primary_zone, + self.auto_issue_location, + self.auto_issue_zone) + +@dataclass +class ItemInfoPayload: + barcode: str + packaging: str = "" + uom_quantity: float = 1.0 + uom: int = 1 + cost: float = 0.0 + safety_stock: float = 0.0 + lead_time_days: float = 0.0 + ai_pick: bool = False + prefixes: list = field(default_factory=list) + + def __post_init__(self): + if not isinstance(self.barcode, str): + raise TypeError(f"barcode must be of type str; not {type(self.barcode)}") + + def payload(self): + return ( + self.barcode, + self.packaging, + self.uom_quantity, + self.uom, + self.cost, + self.safety_stock, + self.lead_time_days, + self.ai_pick, + lst2pgarr(self.prefixes) + ) + +@dataclass +class FoodInfoPayload: + food_groups: list = field(default_factory=list) + ingrediants: list = field(default_factory=list) + nutrients: dict = field(default_factory=dict) + expires: bool = False + default_expiration: float = 0.0 + + def payload(self): + return ( + lst2pgarr(self.food_groups), + lst2pgarr(self.ingrediants), + json.dumps(self.nutrients), + self.expires, + self.default_expiration + ) \ No newline at end of file diff --git a/application/receipts/__init__.py b/application/receipts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/application/receipts/__pycache__/__init__.cpython-313.pyc b/application/receipts/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..525255b Binary files /dev/null and b/application/receipts/__pycache__/__init__.cpython-313.pyc differ diff --git a/application/receipts/__pycache__/receipts_api.cpython-313.pyc b/application/receipts/__pycache__/receipts_api.cpython-313.pyc new file mode 100644 index 0000000..264dd18 Binary files /dev/null and b/application/receipts/__pycache__/receipts_api.cpython-313.pyc differ diff --git a/application/receipts/__pycache__/receipts_database.cpython-313.pyc b/application/receipts/__pycache__/receipts_database.cpython-313.pyc new file mode 100644 index 0000000..8e951a4 Binary files /dev/null and b/application/receipts/__pycache__/receipts_database.cpython-313.pyc differ diff --git a/application/receipts/__pycache__/receipts_processes.cpython-313.pyc b/application/receipts/__pycache__/receipts_processes.cpython-313.pyc new file mode 100644 index 0000000..ac70b33 Binary files /dev/null and b/application/receipts/__pycache__/receipts_processes.cpython-313.pyc differ diff --git a/application/receipts/receipts_api.py b/application/receipts/receipts_api.py new file mode 100644 index 0000000..b74b30a --- /dev/null +++ b/application/receipts/receipts_api.py @@ -0,0 +1,280 @@ +# 3RD PARTY IMPORTS +from flask import ( + Blueprint, request, render_template, session, jsonify, current_app, send_from_directory + ) +import math +import postsqldb +import mimetypes +import os + +# APPLICATION IMPORTS +import webpush +from application.access_module import access_api +from application import postsqldb, database_payloads +from application.receipts import receipts_processes, receipts_database + + +receipt_api = Blueprint('receipt_api', __name__, template_folder='templates', static_folder='static') + + +# ROOT TEMPLATE ROUTES +@receipt_api.route("/") +@access_api.login_required +def receipts(): + sites = [site[1] for site in postsqldb.get_sites(session['user']['sites'])] + return render_template("receipts_index.html", current_site=session['selected_site'], sites=sites) + +@receipt_api.route("/") +@access_api.login_required +def receipt(id): + sites = [site[1] for site in postsqldb.get_sites(session['user']['sites'])] + units = postsqldb.get_units_of_measure() + return render_template("receipt.html", id=id, current_site=session['selected_site'], sites=sites, units=units) + + +# API ROUTES +@receipt_api.route('/api/getItems', methods=["GET"]) +@access_api.login_required +def getItems(): + recordset = [] + count = {'count': 0} + if request.method == "GET": + page = int(request.args.get('page', 1)) + limit = int(request.args.get('limit', 10)) + site_name = session['selected_site'] + offset = (page - 1) * limit + sort_order = "ID ASC" + payload = ("%%", limit, offset, sort_order) + recordset, count = receipts_database.getItemsWithQOH(site_name, payload) + return jsonify({"items":recordset, "end":math.ceil(count['count']/limit), "error":False, "message":"items fetched succesfully!"}) + return jsonify({"items":recordset, "end":math.ceil(count['count']/limit), "error":True, "message":"There was an error with this GET statement"}) + +@receipt_api.route('/api/getVendors', methods=["GET"]) +@access_api.login_required +def getVendors(): + recordset = [] + count = 0 + if request.method == "GET": + page = int(request.args.get('page', 1)) + limit = int(request.args.get('limit', 10)) + site_name = session['selected_site'] + offset = (page - 1) * limit + recordset, count = receipts_database.paginateVendorsTuples(site_name, payload=(limit, offset)) + return jsonify({"vendors":recordset, "end":math.ceil(count/limit), "error":False, "message":"items fetched succesfully!"}) + return jsonify({"vendors":recordset, "end":math.ceil(count/limit), "error":True, "message":"There was an error with this GET statement"}) + +@receipt_api.route('/api/getLinkedLists', methods=["GET"]) +@access_api.login_required +def getLinkedLists(): + recordset = [] + count = 0 + if request.method == "GET": + page = int(request.args.get('page', 1)) + limit = int(request.args.get('limit', 10)) + site_name = session['selected_site'] + offset = (page - 1) * limit + recordset, count = receipts_database.paginateLinkedLists(site_name, payload=(limit, offset)) + return jsonify({"items":recordset, "end":math.ceil(count/limit), "error":False, "message":"items fetched succesfully!"}) + return jsonify({"items":recordset, "end":math.ceil(count/limit), "error":True, "message":"There was an error with this GET statement"}) + +@receipt_api.route('/api/getReceipts', methods=["GET"]) +@access_api.login_required +def getReceipts(): + recordset = [] + if request.method == "GET": + page = int(request.args.get('page', 1)) + limit = int(request.args.get('limit', 50)) + offset = (page - 1) * limit + site_name = session['selected_site'] + recordset, count = receipts_database.paginateReceiptsTuples(site_name, payload=(limit, offset)) + return jsonify({'receipts':recordset, "end": math.ceil(count/limit), 'error': False, "message": "Get Receipts Successful!"}) + return jsonify({'receipts': recordset, "end": math.ceil(count/limit), 'error': True, "message": "Something went wrong while getting receipts!"}) + +@receipt_api.route('/api/getReceipt', methods=["GET"]) +@access_api.login_required +def getReceipt(): + receipt = [] + if request.method == "GET": + receipt_id = int(request.args.get('id', 1)) + site_name = session['selected_site'] + receipt = receipts_database.getReceiptByID(site_name, (receipt_id, )) + return jsonify({'receipt': receipt, 'error': False, "message": "Get Receipts Successful!"}) + return jsonify({'receipt': receipt, 'error': True, "message": "Something went wrong while getting receipts!"}) + +@receipt_api.route('/api/addReceipt', methods=["POST", "GET"]) +@access_api.login_required +def addReceipt(): + if request.method == "GET": + user_id = session['user_id'] + site_name = session['selected_site'] + receipt = database_payloads.ReceiptPayload( + receipt_id=f"PR-{receipts_database.requestNextReceiptID(site_name)}", + submitted_by=user_id + ) + receipts_database.insertReceiptsTuple(site_name, receipt.payload()) + return jsonify({'error': False, "message": "Receipt Added Successful!"}) + return jsonify({'error': True, "message": "Something went wrong while adding receipt!"}) + +@receipt_api.route('/api/addSKULine', methods=["POST"]) +@access_api.login_required +def addSKULine(): + if request.method == "POST": + item_id = int(request.get_json()['item_id']) + receipt_id = int(request.get_json()['receipt_id']) + + site_name = session['selected_site'] + item = receipts_database.getItemAllByID(site_name, (item_id, )) + data = { + 'cost': item['item_info']['cost'], + 'expires': item['food_info']['expires'] + } + receipt_item = database_payloads.ReceiptItemPayload( + type="sku", + receipt_id=receipt_id, + barcode=item['barcode'], + name=item['item_name'], + qty=item['item_info']['uom_quantity'], + uom=item['item_info']['uom']['id'], + data=data + ) + receipts_database.insertReceiptItemsTuple(site_name, receipt_item.payload()) + return jsonify({'error': False, "message": "Line added Succesfully"}) + return jsonify({'error': True, "message": "Something went wrong while add SKU line!"}) + +@receipt_api.route('/api/deleteLine', methods=["POST"]) +@access_api.login_required +def deleteLine(): + if request.method == "POST": + line_id = int(request.get_json()['line_id']) + site_name = session['selected_site'] + receipts_database.deleteReceiptItemsTuple(site_name, (line_id, )) + return jsonify({'error': False, "message": "Line Deleted Succesfully"}) + return jsonify({'error': True, "message": "Something went wrong while deleting line!"}) + +@receipt_api.route('/api/denyLine', methods=["POST"]) +@access_api.login_required +def denyLine(): + if request.method == "POST": + line_id = int(request.get_json()['line_id']) + site_name = session['selected_site'] + receipts_database.updateReceiptItemsTuple(site_name, {'id': line_id, 'update': {'status': 'Denied'}}) + return jsonify({'error': False, "message": "Line Denied Succesfully"}) + return jsonify({'error': True, "message": "Something went wrong while denying line!"}) + +@receipt_api.route('/api/saveLine', methods=["POST"]) +@access_api.login_required +def saveLine(): + if request.method == "POST": + line_id = int(request.get_json()['line_id']) + payload = request.get_json()['payload'] + site_name = session['selected_site'] + receipt_item = receipts_database.selectReceiptItemsTuple(site_name, (line_id, )) + if 'api_data' in receipt_item['data'].keys(): + payload['data']['api_data'] = receipt_item['data']['api_data'] + receipts_database.updateReceiptItemsTuple(site_name, {'id': line_id, 'update': payload}) + return jsonify({'error': False, "message": "Line Saved Succesfully"}) + return jsonify({'error': True, "message": "Something went wrong while saving line!"}) + +@receipt_api.route('/api/postLinkedItem', methods=["POST"]) +@access_api.login_required +def postLinkedItem(): + if request.method == "POST": + receipt_item_id = int(request.get_json()['receipt_item_id']) + link_list_id = int(request.get_json()['link_list_id']) + conv_factor = float(request.get_json()['conv_factor']) + + site_name = session['selected_site'] + user_id = session['user_id'] + + payload = { + 'receipt_item_id': receipt_item_id, + 'linked_list_id': link_list_id, + 'conv_factor': conv_factor + } + + receipts_processes.linkItem(site_name, user_id, payload) + + return jsonify({'error': False, "message": "Line Saved Succesfully"}) + return jsonify({'error': True, "message": "Something went wrong while saving line!"}) + +@receipt_api.route('/api/resolveLine', methods=["POST"]) +@access_api.login_required +def resolveLine(): + if request.method == "POST": + line_id = int(request.get_json()['line_id']) + site_name = session['selected_site'] + user_id = session['user_id'] + payload = {'line_id': line_id} + receipts_processes.postLine(site_name, user_id, payload) + return jsonify({'error': False, "message": "Line Saved Succesfully"}) + return jsonify({'error': True, "message": "Something went wrong while saving line!"}) + +@receipt_api.route('/api/postVendorUpdate', methods=["POST"]) +@access_api.login_required +def postVendorUpdate(): + if request.method == "POST": + receipt_id = int(request.get_json()['receipt_id']) + vendor_id = int(request.get_json()['vendor_id']) + site_name = session['selected_site'] + receipts_database.updateReceiptsTuple(site_name, {'id': receipt_id, 'update': {'vendor_id': vendor_id}}) + return jsonify({'error': False, "message": "Line Saved Succesfully"}) + return jsonify({'error': True, "message": "Something went wrong while saving line!"}) + +@receipt_api.route('/api/resolveReceipt', methods=["POST"]) +@access_api.login_required +def resolveReceipt(): + if request.method == "POST": + receipt_id = int(request.get_json()['receipt_id']) + site_name = session['selected_site'] + user= session['user'] + receipt = receipts_database.updateReceiptsTuple(site_name, {'id': receipt_id, 'update': {'receipt_status': 'Resolved'}}) + webpush.push_ntfy(title=f"Receipt '{receipt['receipt_id']}' Resolved", body=f"Receipt {receipt['receipt_id']} was completed by {user['username']}.") + return jsonify({'error': False, "message": "Line Saved Succesfully"}) + return jsonify({'error': True, "message": "Something went wrong while saving line!"}) + +@receipt_api.route('/api/uploadfile/', methods=["POST"]) +@access_api.login_required +def uploadFile(receipt_id): + file = request.files['file'] + file_path = current_app.config['FILES_FOLDER'] + f"/receipts/{file.filename.replace(" ", "_")}" + file.save(file_path) + file_type, _ = mimetypes.guess_type(file.filename) + preview_image = "" + if file_type == "application/pdf": + output_path = "static/files/receipts/previews/" + preview_image = receipts_processes.create_pdf_preview(file_path, output_path) + + file_size = os.path.getsize(file_path) + site_name = session['selected_site'] + username = session['user']['username'] + receipt_files = receipts_database.selectReceiptsTuple(site_name, (receipt_id, ))['files'] + receipt_files[file.filename.replace(" ", "_")] = {'file_path': file.filename.replace(" ", "_"), 'file_type': file_type, 'file_size': file_size, 'uploaded_by': username, 'preview_image': preview_image} + receipts_database.updateReceiptsTuple(site_name, {'id': receipt_id, 'update': {'files': receipt_files}}) + return jsonify({}) + +@receipt_api.route('/api/getFile/') +@access_api.login_required +def getFile(file_name): + path_ = current_app.config['FILES_FOLDER'] + "/receipts" + print(path_) + return send_from_directory(path_, file_name) + +@receipt_api.route('/api/checkAPI', methods=["POST"]) +@access_api.login_required +def checkAPI(): + if request.method == "POST": + line_id = int(request.get_json()['line_id']) + barcode = request.get_json()['barcode'] + site_name = session['selected_site'] + api_response, api_data = receipts_processes.get_open_facts(barcode) + if api_response: + receipt_item = receipts_database.selectReceiptItemsTuple(site_name, (line_id, )) + item_data = receipt_item['data'] + item_data['api_data'] = api_data + payload = {'id': line_id, 'update': {'type': 'api','data': item_data,'name': api_data['product_name']}} + receipts_database.updateReceiptItemsTuple(site_name, payload) + return jsonify({'error': False, "message": "Line updated for API, Succesfully"}) + else: + return jsonify({'error': True, "message": "Item not in WorldFoodFacts!"}) + return jsonify({'error': False, "message": "Line Saved Succesfully"}) + return jsonify({'error': True, "message": "Something went wrong while saving line!"}) \ No newline at end of file diff --git a/application/receipts/receipts_database.py b/application/receipts/receipts_database.py new file mode 100644 index 0000000..e509527 --- /dev/null +++ b/application/receipts/receipts_database.py @@ -0,0 +1,724 @@ +# 3RD PARTY IMPORTS +import psycopg2 + +# APPLICATION IMPORTS +import config +from application import postsqldb + +def requestNextReceiptID(site_name, conn=None): + """gets the next id for receipts_id, currently returns a 8 digit number + + Args: + site (str): site to get the next id for + + Returns: + json: receipt_id, message, error keys + """ + next_receipt_id = None + self_conn = False + sql = f"SELECT receipt_id FROM {site_name}_receipts ORDER BY id DESC LIMIT 1;" + 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) + next_receipt_id = cur.fetchone() + if next_receipt_id == None: + next_receipt_id = "00000001" + else: + next_receipt_id = next_receipt_id[0] + next_receipt_id = int(next_receipt_id.split("-")[1]) + 1 + y = str(next_receipt_id) + len_str = len(y) + x = "".join(["0" for _ in range(8 - len_str)]) + next_receipt_id = x + y + + if self_conn: + conn.commit() + conn.close() + + return next_receipt_id + except (Exception, psycopg2.DatabaseError) as error: + raise postsqldb.DatabaseError(error, payload=(), sql=sql) + +def getItemsWithQOH(site, payload, convert=True, conn=None): + recordset = [] + count = 0 + self_conn = False + with open(f"application/receipts/sql/getItemsWithQOH.sql", "r+") as file: + sql = file.read().replace("%%site_name%%", site).replace("%%sort_order%%", payload[3]) + + payload = list(payload) + payload.pop(3) + try: + if not conn: + database_config = config.config() + conn = psycopg2.connect(**database_config) + conn.autocommit = True + self_conn = True + + if convert: + with conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor) as cur: + cur.execute(sql, payload) + recordset = cur.fetchall() + recordset = [dict(record) for record in recordset] + cur.execute(f"SELECT COUNT(*) FROM {site}_items WHERE search_string LIKE '%%' || %s || '%%';", (payload[0], )) + count = cur.fetchone() + else: + with conn.cursor() as cur: + cur.execute(sql, payload) + recordset = cur.fetchall() + cur.execute(f"SELECT COUNT(*) FROM {site}_items WHERE search_string LIKE '%%' || %s || '%%';", (payload[0], )) + count = cur.fetchone() + + if self_conn: + conn.close() + + return recordset, count + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def getLinkedItemByBarcode(site, payload, convert=True, conn=None): + item = () + self_conn = False + sql = f"SELECT * FROM {site}_itemlinks WHERE barcode=%s;" + if convert: + item = {} + 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: + 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, sql) + +def getItemAllByBarcode(site, payload, convert=True, conn=None): + item = () + self_conn = False + + if not conn: + database_config = config.config() + conn = psycopg2.connect(**database_config) + conn.autocommit = True + self_conn = True + + if convert: + item = {} + + linked_item = getLinkedItemByBarcode(site, (payload[0],), conn=conn) + + if len(linked_item) > 1: + item = getItemAllByID(site, payload=(linked_item['link'], ), convert=convert, conn=conn) + item['item_info']['uom_quantity'] = linked_item['conv_factor'] + + if self_conn: + conn.close() + + return item + else: + with open(f"application/receipts/sql/getItemAllByBarcode.sql", "r+") as file: + getItemAllByBarcode_sql = file.read().replace("%%site_name%%", site) + try: + with conn.cursor() as cur: + cur.execute(getItemAllByBarcode_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, getItemAllByBarcode_sql) + +def getItemAllByID(site, payload, convert=True, conn=None): + item = () + self_conn = False + + with open(f"application/receipts/sql/getItemAllByID.sql", "r+") as file: + getItemAllByID_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(getItemAllByID_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, getItemAllByID_sql) + +def getReceiptByID(site, payload, convert=True, conn=None): + receipt = [] + self_conn = False + with open(f"application/receipts/sql/getReceiptByID.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) + row = cur.fetchone() + if row and convert: + receipt = postsqldb.tupleDictionaryFactory(cur.description, row) + if row and not convert: + receipt = row + + if self_conn: + conn.close() + + return receipt + except (Exception, psycopg2.DatabaseError) as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def paginateReceiptsTuples(site, payload, convert=True, conn=None): + """payload=(limit, offset)""" + receipts = [] + count = 0 + self_conn = False + with open(f"application/receipts/sql/getReceipts.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.fetchall() + if rows and convert: + receipts = [postsqldb.tupleDictionaryFactory(cur.description, row) for row in rows] + if rows and not convert: + receipts = rows + + cur.execute(f"SELECT COUNT(*) FROM {site}_receipts;") + count = cur.fetchone()[0] + + if self_conn: + conn.commit() + conn.close() + + return receipts, count + + except (Exception, psycopg2.DatabaseError) as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def paginateVendorsTuples(site, payload, convert=True, conn=None): + """payload (tuple): (limit, offset)""" + recordset = () + count = 0 + self_conn = False + sql = f"SELECT * FROM {site}_vendors LIMIT %s OFFSET %s;" + 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.fetchall() + if rows and convert: + recordset = [postsqldb.tupleDictionaryFactory(cur.description, row) for row in rows] + elif rows and not convert: + recordset = rows + + cur.execute(f"SELECT COUNT(*) FROM {site}_vendors;") + count = cur.fetchone()[0] + + if self_conn: + conn.close() + + return recordset, count + except Exception as error: + raise postsqldb.DatabaseError(error, (), sql) + +def paginateLinkedLists(site, payload, convert=True, conn=None): + records = [] + count = 0 + self_conn = False + sql = f"SELECT * FROM {site}_items WHERE row_type = 'list' LIMIT %s OFFSET %s;" + sql_count = f"SELECT COUNT(*) FROM {site}_items WHERE row_type = 'list' LIMIT %s OFFSET %s;" + 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.fetchall() + if rows and convert: + records = [postsqldb.tupleDictionaryFactory(cur.description, row) for row in rows] + if rows and not convert: + records = rows + + cur.execute(sql_count, payload) + count = cur.fetchone()[0] + + if self_conn: + conn.close() + + return records, count + except (Exception, psycopg2.DatabaseError) as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def selectItemLocationsTuple(site_name, payload, convert=True, conn=None): + """payload (tuple): [item_id, location_id]""" + item_locations = () + self_conn = False + select_item_location_sql = f"SELECT * FROM {site_name}_item_locations WHERE part_id = %s AND location_id = %s;" + 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(select_item_location_sql, payload) + rows = cur.fetchone() + if rows and convert: + item_locations = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + item_locations = rows + + if self_conn: + conn.close() + + return item_locations + except Exception as error: + return error + +def selectLocationsTuple(site, payload, convert=True, conn=None): + selected = () + self_conn = False + sql = f"SELECT * FROM {site}_locations WHERE id=%s;" + 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: + selected = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + selected = rows + + if self_conn: + conn.close() + + return selected + + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def selectReceiptsTuple(site, payload, convert=True, conn=None): + selected = () + self_conn = False + sql = f"SELECT * FROM {site}_receipts WHERE id=%s;" + + 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: + selected = postsqldb.tupleDictionaryFactory(cur.description, rows) + if rows and not convert: + selected = rows + + if self_conn: + conn.close() + + return selected + except (Exception, psycopg2.DatabaseError) as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def selectReceiptItemsTuple(site, payload, convert=True, conn=None): + selected = () + self_conn = False + sql = f"SELECT * FROM {site}_receipt_items WHERE id=%s;" + + 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: + selected = postsqldb.tupleDictionaryFactory(cur.description, rows) + if rows and not convert: + selected = rows + + if self_conn: + conn.close() + + return selected + except (Exception, psycopg2.DatabaseError) as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def deleteReceiptItemsTuple(site, payload, convert=True, conn=None): + deleted = () + self_conn = False + sql = f"WITH deleted_rows AS (DELETE FROM {site}_receipt_items WHERE id IN ({','.join(['%s'] * len(payload))}) RETURNING *) SELECT * FROM deleted_rows;" + 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.fetchall() + if rows and convert: + deleted = [postsqldb.tupleDictionaryFactory(cur.description, r) for r in rows] + elif rows and not convert: + deleted = rows + + if self_conn: + conn.commit() + conn.close() + + return deleted + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def insertTransactionsTuple(site, payload, convert=True, conn=None): + """ + payload (tuple): (timestamp[timestamp], logistics_info_id[int], barcode[str], name[str], + transaction_type[str], quantity[float], description[str], user_id[int], data[jsonb]) + """ + transaction = () + self_conn = False + with open(f"application/receipts/sql/insertTransactionsTuple.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: + transaction = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + transaction = rows + + if self_conn: + conn.commit() + conn.close() + + return transaction + + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def insertItemLinksTuple(site, payload, convert=True, conn=None): + """payload (tuple): (barcode[str], link[int], data[jsonb], conv_factor[float]) """ + link = () + self_conn = False + with open(f"application/receipts/sql/insertItemLinksTuple.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: + link = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + link = rows + + if self_conn: + conn.commit() + conn.close() + + return link + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def insertCostLayersTuple(site, payload, convert=True, conn=None): + """payload (tuple): (aquisition_date[timestamp], quantity[float], cost[float], currency_type[str], expires[timestamp/None], vendor[int])""" + cost_layer = () + self_conn = False + + with open(f"application/receipts/sql/insertCostLayersTuple.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: + cost_layer = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + cost_layer = rows + + if self_conn: + conn.commit() + conn.close() + + return cost_layer + + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def insertReceiptItemsTuple(site, payload, convert=True, conn=None): + receipt_item = () + self_conn = False + with open(f"application/receipts/sql/insertReceiptItemsTuple.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: + receipt_item = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + receipt_item = rows + + if self_conn: + conn.commit() + conn.close() + + return receipt_item + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def insertReceiptsTuple(site, payload, convert=True, conn=None): + receipt = () + self_conn = False + with open(f"application/receipts/sql/insertReceiptsTuple.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: + receipt = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + receipt = rows + + if self_conn: + conn.commit() + conn.close() + + return receipt + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def updateItemsTuple(site, payload, convert=True, conn=None): + """payload (dict): {'id': row_id, 'update': {... column_to_update: value_to_update_to...}}""" + updated = () + self_conn = False + set_clause, values = postsqldb.updateStringFactory(payload['update']) + values.append(payload['id']) + sql = f"UPDATE {site}_items SET {set_clause} WHERE id=%s RETURNING *;" + 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, values) + rows = cur.fetchone() + if rows and convert: + updated = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + updated = rows + + if self_conn: + conn.commit() + conn.close() + + return updated + + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def updateItemLocation(site, payload, convert=True, conn=None): + item_location = () + self_conn = False + with open(f"application/receipts/sql/updateItemLocation.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: + item_location = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + item_location = rows + + if self_conn: + conn.commit() + conn.close() + + return item_location + except Exception as error: + return error + +def updateReceiptsTuple(site, payload, convert=True, conn=None): + """payload (dict): {'id': row_id, 'update': {... column_to_update: value_to_update_to...}}""" + updated = () + self_conn = False + set_clause, values = postsqldb.updateStringFactory(payload['update']) + values.append(payload['id']) + sql = f"UPDATE {site}_receipts SET {set_clause} WHERE id=%s RETURNING *;" + 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, values) + rows = cur.fetchone() + if rows and convert: + updated = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + updated = rows + + if self_conn: + conn.commit() + conn.close() + + return updated + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def updateReceiptItemsTuple(site, payload, convert=True, conn=None): + """_summary_ + + Args: + conn (_T_connector@connect): Postgresql Connector + site (str): + payload (dict): {'id': row_id, 'update': {... column_to_update: value_to_update_to...}} + convert (bool, optional): determines if to return tuple as dictionary. Defaults to True. + + Raises: + DatabaseError: + + Returns: + tuple or dict: updated tuple + """ + updated = () + self_conn = False + + set_clause, values = postsqldb.updateStringFactory(payload['update']) + values.append(payload['id']) + sql = f"UPDATE {site}_receipt_items SET {set_clause} WHERE id=%s RETURNING *;" + 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, values) + rows = cur.fetchone() + if rows and convert: + updated = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + updated = rows + + if self_conn: + conn.commit() + conn.close() + + return updated + + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) \ No newline at end of file diff --git a/application/receipts/receipts_processes.py b/application/receipts/receipts_processes.py new file mode 100644 index 0000000..2b2b594 --- /dev/null +++ b/application/receipts/receipts_processes.py @@ -0,0 +1,204 @@ +# 3RD PARTY IMPORTS +import pymupdf +import os +import PIL +import openfoodfacts +import psycopg2 +import datetime + +# APPLICATION IMPORTS +from application.receipts import receipts_database +from application import database_payloads +from application.items.items_processes import postNewBlankItem +import config + +def create_pdf_preview(pdf_path, output_path, size=(600, 400)): + pdf = pymupdf.open(pdf_path) + page = pdf[0] + file_name = os.path.basename(pdf_path).replace('.pdf', "") + pix = page.get_pixmap() + img = PIL.Image.frombytes("RGB", (pix.width, pix.height), pix.samples) + output_path = output_path + file_name + '.jpg' + img.thumbnail(size) + img.save(output_path) + return file_name + '.jpg' + +def linkItem(site, user_id, data, conn=None): + """ this is a higher level function used to process a new item into the system, + link it to another item, and update the receipt_item to the new linked item data. + + Args: + site (_type_): _description_ + user_id (_type_): _description_ + data (_type_): {'receipt_item_id', 'linked_list_id', 'conv_factor'} + conn (_type_, optional): Passed Connector. Defaults to None. + + Returns: + _type_: _description_ + """ + self_conn = False + if not conn: + database_config = config.config() + conn = psycopg2.connect(**database_config) + conn.autocommit = False + self_conn = True + + # Select receipt item + receipt_item = receipts_database.selectReceiptItemsTuple(site, (data['receipt_item_id'],), conn=conn) + # select linked item + linked_list = receipts_database.getItemAllByID(site, (data['linked_list_id'],), conn=conn) + + if receipt_item['type'] == 'api': + new_item_data = { + 'barcode': receipt_item['barcode'], + 'name': receipt_item['name'], + 'subtype': 'FOOD' + } + postNewBlankItem(site, user_id, new_item_data, conn=conn) + + name = receipt_item['name'] + if receipt_item['name'] == "unknown": + name = linked_list['item_name'] + if receipt_item['type'] == "new sku": + new_item_data = { + 'barcode': receipt_item['barcode'], + 'name': name, + 'subtype': 'FOOD' + } + postNewBlankItem(site, user_id, new_item_data, conn=conn) + + new_item = receipts_database.getItemAllByBarcode(site, (receipt_item['barcode'], ), conn=conn) + new_item = receipts_database.updateItemsTuple(site, {'id': new_item['id'], 'update':{'row_type': 'link'}}, conn=conn) + + + item_link = database_payloads.ItemLinkPayload( + new_item['barcode'], + linked_list['id'], + new_item, + data['conv_factor'] + ) + + receipts_database.insertItemLinksTuple(site, item_link.payload(), conn=conn) + + payload = { + 'id': receipt_item['id'], + 'update': { + 'barcode': linked_list['barcode'], + 'name': linked_list['item_name'], + 'uom': linked_list['item_info']['uom']['id'], + 'qty': float(receipt_item['qty']*data['conv_factor']), + 'type': 'sku' + } + } + + receipts_database.updateReceiptItemsTuple(site, payload, conn=conn) + + if self_conn: + conn.commit() + conn.close() + return False + + return conn + +def postLine(site, user_id, data, conn=None): + self_conn = False + if not conn: + database_config = config.config() + conn = psycopg2.connect(**database_config) + conn.autocommit = False + self_conn = True + transaction_time = datetime.datetime.now() + receipt_item = receipts_database.selectReceiptItemsTuple(site, (data['line_id'],), conn=conn) + receipt = receipts_database.getReceiptByID(site, (receipt_item['receipt_id'], ), conn=conn) + conv_factor = 1.0 + if receipt_item['data']['expires'] is not False: + expiration = datetime.datetime.strptime(receipt_item['data']['expires'], "%Y-%m-%d") + else: + expiration = None + + if receipt_item['type'] == 'sku': + linked_item = receipts_database.getLinkedItemByBarcode(site, (receipt_item['barcode'], ), conn=conn) + if len(linked_item) > 1: + conv_factor = linked_item['conv_factor'] + receipt_item['data']['linked_child'] = linked_item['barcode'] + + if receipt_item['type'] == 'api': + new_item_data = { + 'barcode': receipt_item['barcode'], + 'name': receipt_item['name'], + 'subtype': 'FOOD' + } + postNewBlankItem(site, user_id, new_item_data, conn=conn) + + if receipt_item['type'] == "new sku": + new_item_data = { + 'barcode': receipt_item['barcode'], + 'name': receipt_item['name'], + 'subtype': 'FOOD' + } + postNewBlankItem(site, user_id, new_item_data, conn=conn) + + item = receipts_database.getItemAllByBarcode(site, (receipt_item['barcode'], ), conn=conn) + + location = receipts_database.selectItemLocationsTuple(site, (item['id'], item['logistics_info']['primary_location']['id']), conn=conn) + cost_layers: list = location['cost_layers'] + + receipt_item['data']['location'] = item['logistics_info']['primary_location']['uuid'] + + transaction = database_payloads.TransactionPayload( + timestamp=transaction_time, + logistics_info_id=item['logistics_info_id'], + barcode=item['barcode'], + name=item['item_name'], + transaction_type="Adjust In", + quantity=(float(receipt_item['qty'])*conv_factor), + description=f"{receipt['receipt_id']}", + user_id=user_id, + data=receipt_item['data'] + ) + + cost_layer = database_payloads.CostLayerPayload( + aquisition_date=transaction_time, + quantity=float(receipt_item['qty']), + cost=float(receipt_item['data']['cost']), + currency_type="USD", + vendor=receipt['vendor_id'], + expires=expiration + ) + + cost_layer = receipts_database.insertCostLayersTuple(site, cost_layer.payload(), conn=conn) + cost_layers.append(cost_layer['id']) + + quantity_on_hand = float(location['quantity_on_hand']) + float(receipt_item['qty']) + + updated_item_location_payload = (cost_layers, quantity_on_hand, item['id'], item['logistics_info']['primary_location']['id']) + receipts_database.updateItemLocation(site, updated_item_location_payload, conn=conn) + + + site_location = receipts_database.selectLocationsTuple(site, (location['location_id'], ), conn=conn) + + receipt_item['data']['location'] = site_location['uuid'] + receipts_database.insertTransactionsTuple(site, transaction.payload(), conn=conn) + + receipts_database.updateReceiptItemsTuple(site, {'id': receipt_item['id'], 'update': {'status': "Resolved"}}, conn=conn) + + + + if self_conn: + conn.commit() + conn.close() + return False + + return conn + +# OPEN FOOD FACTS API INTEGRATION +open_food_api = openfoodfacts.API(user_agent="MyAwesomeApp/1.0") +open_food_enabled = True + +def get_open_facts(barcode): + if open_food_enabled: + barcode: str = barcode.replace('%', "") + data = open_food_api.product.get(barcode) + if data != None: + return True, data + return False, {} \ No newline at end of file diff --git a/application/receipts/sql/getItemAllByBarcode.sql b/application/receipts/sql/getItemAllByBarcode.sql new file mode 100644 index 0000000..b2c4b8d --- /dev/null +++ b/application/receipts/sql/getItemAllByBarcode.sql @@ -0,0 +1,75 @@ +WITH passed_id AS (SELECT id AS passed_id FROM %%site_name%%_items WHERE 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 ( + SELECT + %%site_name%%_item_info.*, + row_to_json(units.*) as uom + FROM %%site_name%%_item_info + LEFT JOIN units ON %%site_name%%_item_info.uom = units.id + WHERE %%site_name%%_item_info.id = (SELECT item_info_id FROM info_id) + ), + cte_groups AS ( + SELECT + %%site_name%%_groups.*, + %%site_name%%_group_items.uuid, + %%site_name%%_group_items.item_type, + %%site_name%%_group_items.qty + FROM %%site_name%%_groups + JOIN %%site_name%%_group_items ON %%site_name%%_groups.id = %%site_name%%_group_items.gr_id + WHERE %%site_name%%_group_items.item_id = (SELECT passed_id FROM passed_id) + ), + cte_shopping_lists AS ( + SELECT + %%site_name%%_shopping_lists.*, + %%site_name%%_shopping_list_items.uuid, + %%site_name%%_shopping_list_items.item_type, + %%site_name%%_shopping_list_items.qty + FROM %%site_name%%_shopping_lists + JOIN %%site_name%%_shopping_list_items ON %%site_name%%_shopping_lists.id = %%site_name%%_shopping_list_items.sl_id + WHERE %%site_name%%_shopping_list_items.item_id = (SELECT passed_id FROM passed_id) + ), + cte_itemlinks AS ( + SELECT * FROM %%site_name%%_itemlinks WHERE link=(SELECT passed_id FROM passed_id) + ), + cte_item_locations AS ( + SELECT * 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) + ), + 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 %%site_name%%_logistics_info AS li + LEFT JOIN %%site_name%%_locations AS pl ON li.primary_location = pl.id + LEFT JOIN %%site_name%%_locations AS ail ON li.auto_issue_location = ail.id + LEFT JOIN %%site_name%%_zones AS pz ON li.primary_zone = pz.id + LEFT JOIN %%site_name%%_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, + %%site_name%%_items.*, + (SELECT COALESCE(row_to_json(logis), '{}') FROM cte_logistics_info logis) AS logistics_info, + row_to_json(%%site_name%%_food_info.*) as food_info, + row_to_json(%%site_name%%_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_locations +FROM %%site_name%%_items + LEFT JOIN %%site_name%%_item_info ON %%site_name%%_items.item_info_id = %%site_name%%_item_info.id + LEFT JOIN %%site_name%%_food_info ON %%site_name%%_items.food_info_id = %%site_name%%_food_info.id + LEFT JOIN %%site_name%%_brands ON %%site_name%%_items.brand = %%site_name%%_brands.id + LEFT JOIN units ON %%site_name%%_item_info.uom = units.id + LEFT JOIN cte_groups ON %%site_name%%_items.id = cte_groups.id + LEFT JOIN cte_shopping_lists ON %%site_name%%_items.id = cte_shopping_lists.id +WHERE %%site_name%%_items.id=(SELECT passed_id FROM passed_id) +GROUP BY + %%site_name%%_items.id, %%site_name%%_item_info.id, %%site_name%%_food_info.id, %%site_name%%_brands.id; \ No newline at end of file diff --git a/application/receipts/sql/getItemAllByID.sql b/application/receipts/sql/getItemAllByID.sql new file mode 100644 index 0000000..8b5ca81 --- /dev/null +++ b/application/receipts/sql/getItemAllByID.sql @@ -0,0 +1,86 @@ +WITH passed_id AS (SELECT %s AS 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)), + cte_conversions AS ( + SELECT + %%site_name%%_conversions.id as conv_id, + %%site_name%%_conversions.conv_factor as conv_factor, + units.* as uom + FROM %%site_name%%_conversions + LEFT JOIN units ON %%site_name%%_conversions.uom_id = units.id + WHERE %%site_name%%_conversions.item_id = (SELECT passed_id FROM passed_id) + ), + cte_item_info AS ( + SELECT + %%site_name%%_item_info.*, + row_to_json(units.*) as uom, + COALESCE((SELECT json_agg(convs) FROM cte_conversions convs), '[]'::json) AS conversions, + COALESCE((SELECT json_agg(p.*) FROM %%site_name%%_sku_prefix as p WHERE p.id = ANY(%%site_name%%_item_info.prefixes)), '[]'::json) as prefixes + FROM %%site_name%%_item_info + LEFT JOIN units ON %%site_name%%_item_info.uom = units.id + WHERE %%site_name%%_item_info.id = (SELECT item_info_id FROM info_id) + ), + cte_groups AS ( + SELECT + %%site_name%%_groups.*, + %%site_name%%_group_items.uuid, + %%site_name%%_group_items.item_type, + %%site_name%%_group_items.qty + FROM %%site_name%%_groups + JOIN %%site_name%%_group_items ON %%site_name%%_groups.id = %%site_name%%_group_items.gr_id + WHERE %%site_name%%_group_items.item_id = (SELECT passed_id FROM passed_id) + ), + cte_shopping_lists AS ( + SELECT + %%site_name%%_shopping_lists.*, + %%site_name%%_shopping_list_items.uuid, + %%site_name%%_shopping_list_items.item_type, + %%site_name%%_shopping_list_items.qty + FROM %%site_name%%_shopping_lists + JOIN %%site_name%%_shopping_list_items ON %%site_name%%_shopping_lists.id = %%site_name%%_shopping_list_items.sl_id + WHERE %%site_name%%_shopping_list_items.item_id = (SELECT passed_id FROM passed_id) + ), + cte_itemlinks AS ( + SELECT * FROM %%site_name%%_itemlinks WHERE link=(SELECT passed_id FROM passed_id) + ), + cte_item_locations AS ( + SELECT * 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) + ), + 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 %%site_name%%_logistics_info AS li + LEFT JOIN %%site_name%%_locations AS pl ON li.primary_location = pl.id + LEFT JOIN %%site_name%%_locations AS ail ON li.auto_issue_location = ail.id + LEFT JOIN %%site_name%%_zones AS pz ON li.primary_zone = pz.id + LEFT JOIN %%site_name%%_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, + %%site_name%%_items.*, + (SELECT COALESCE(row_to_json(logis), '{}') FROM cte_logistics_info logis) AS logistics_info, + row_to_json(%%site_name%%_food_info.*) as food_info, + row_to_json(%%site_name%%_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_locations +FROM %%site_name%%_items + LEFT JOIN %%site_name%%_item_info ON %%site_name%%_items.item_info_id = %%site_name%%_item_info.id + LEFT JOIN %%site_name%%_food_info ON %%site_name%%_items.food_info_id = %%site_name%%_food_info.id + LEFT JOIN %%site_name%%_brands ON %%site_name%%_items.brand = %%site_name%%_brands.id + LEFT JOIN units ON %%site_name%%_item_info.uom = units.id + LEFT JOIN cte_groups ON %%site_name%%_items.id = cte_groups.id + LEFT JOIN cte_shopping_lists ON %%site_name%%_items.id = cte_shopping_lists.id +WHERE %%site_name%%_items.id=(SELECT passed_id FROM passed_id) +GROUP BY + %%site_name%%_items.id, %%site_name%%_item_info.id, %%site_name%%_food_info.id, %%site_name%%_brands.id; \ No newline at end of file diff --git a/application/receipts/sql/getItemsWithQOH.sql b/application/receipts/sql/getItemsWithQOH.sql new file mode 100644 index 0000000..fb1b171 --- /dev/null +++ b/application/receipts/sql/getItemsWithQOH.sql @@ -0,0 +1,18 @@ +WITH sum_cte AS ( + SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum + FROM %%site_name%%_item_locations mil + JOIN %%site_name%%_items mi ON mil.part_id = mi.id + GROUP BY mi.id + ) + +SELECT %%site_name%%_items.*, + row_to_json(%%site_name%%_item_info.*) as item_info, + sum_cte.total_sum as total_qoh, + (SELECT COALESCE(row_to_json(u), '{}') FROM units as u WHERE u.id=%%site_name%%_item_info.uom) as uom +FROM %%site_name%%_items +LEFT JOIN sum_cte ON %%site_name%%_items.id = sum_cte.id +LEFT JOIN %%site_name%%_item_info ON %%site_name%%_items.item_info_id = %%site_name%%_item_info.id +WHERE %%site_name%%_items.search_string LIKE '%%' || %s || '%%' +ORDER BY %%sort_order%% +LIMIT %s OFFSET %s; + diff --git a/application/receipts/sql/getReceiptByID.sql b/application/receipts/sql/getReceiptByID.sql new file mode 100644 index 0000000..029c4c6 --- /dev/null +++ b/application/receipts/sql/getReceiptByID.sql @@ -0,0 +1,17 @@ +WITH passed_id AS (SELECT %s AS passed_id), + cte_receipt_items AS ( + SELECT items.* , + (SELECT COALESCE(row_to_json(un), '{}') FROM units un WHERE un.id = items.uom LIMIT 1) AS uom + FROM %%site_name%%_receipt_items items + WHERE items.receipt_id = (SELECT passed_id FROM passed_id) + ) + +SELECT (SELECT passed_id FROM passed_id) AS passed_id, + %%site_name%%_receipts.*, + logins.username as submitted_by, + (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_receipt_items ris) AS receipt_items, + row_to_json(%%site_name%%_vendors.*) as vendor +FROM %%site_name%%_receipts +JOIN logins ON %%site_name%%_receipts.submitted_by = logins.id +LEFT JOIN %%site_name%%_vendors ON %%site_name%%_receipts.vendor_id = %%site_name%%_vendors.id +WHERE %%site_name%%_receipts.id=(SELECT passed_id FROM passed_id) \ No newline at end of file diff --git a/application/receipts/sql/getReceipts.sql b/application/receipts/sql/getReceipts.sql new file mode 100644 index 0000000..59d4c82 --- /dev/null +++ b/application/receipts/sql/getReceipts.sql @@ -0,0 +1,7 @@ +SELECT %%site_name%%_receipts.*, + logins.username as submitted_by +FROM %%site_name%%_receipts +JOIN logins ON %%site_name%%_receipts.submitted_by = logins.id +ORDER BY %%site_name%%_receipts.id DESC +LIMIT %s +OFFSET %s; \ No newline at end of file diff --git a/application/receipts/sql/insertCostLayersTuple.sql b/application/receipts/sql/insertCostLayersTuple.sql new file mode 100644 index 0000000..c3d381f --- /dev/null +++ b/application/receipts/sql/insertCostLayersTuple.sql @@ -0,0 +1,4 @@ +INSERT INTO %%site_name%%_cost_layers +(aquisition_date, quantity, cost, currency_type, expires, vendor) +VALUES (%s, %s, %s, %s, %s, %s) +RETURNING *; \ No newline at end of file diff --git a/application/receipts/sql/insertItemLinksTuple.sql b/application/receipts/sql/insertItemLinksTuple.sql new file mode 100644 index 0000000..81fb2c6 --- /dev/null +++ b/application/receipts/sql/insertItemLinksTuple.sql @@ -0,0 +1,4 @@ +INSERT INTO %%site_name%%_itemlinks +(barcode, link, data, conv_factor) +VALUES (%s, %s, %s, %s) +RETURNING *; \ No newline at end of file diff --git a/application/receipts/sql/insertReceiptItemsTuple.sql b/application/receipts/sql/insertReceiptItemsTuple.sql new file mode 100644 index 0000000..6aeb85f --- /dev/null +++ b/application/receipts/sql/insertReceiptItemsTuple.sql @@ -0,0 +1,4 @@ +INSERT INTO %%site_name%%_receipt_items +(type, receipt_id, barcode, name, qty, uom, data, status) +VALUES (%s, %s, %s, %s, %s, %s, %s, %s) +RETURNING *; \ No newline at end of file diff --git a/application/receipts/sql/insertReceiptsTuple.sql b/application/receipts/sql/insertReceiptsTuple.sql new file mode 100644 index 0000000..8ddaf60 --- /dev/null +++ b/application/receipts/sql/insertReceiptsTuple.sql @@ -0,0 +1,4 @@ +INSERT INTO %%site_name%%_receipts +(receipt_id, receipt_status, date_submitted, submitted_by, vendor_id, files) +VALUES (%s, %s, %s, %s, %s, %s) +RETURNING *; \ No newline at end of file diff --git a/application/receipts/sql/insertTransactionsTuple.sql b/application/receipts/sql/insertTransactionsTuple.sql new file mode 100644 index 0000000..d8ee48d --- /dev/null +++ b/application/receipts/sql/insertTransactionsTuple.sql @@ -0,0 +1,5 @@ +INSERT INTO %%site_name%%_transactions +(timestamp, logistics_info_id, barcode, name, transaction_type, +quantity, description, user_id, data) +VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s) +RETURNING *; \ No newline at end of file diff --git a/application/receipts/sql/updateItemLocation.sql b/application/receipts/sql/updateItemLocation.sql new file mode 100644 index 0000000..7316d94 --- /dev/null +++ b/application/receipts/sql/updateItemLocation.sql @@ -0,0 +1,4 @@ +UPDATE %%site_name%%_item_locations +SET cost_layers = %s, quantity_on_hand = %s +WHERE part_id=%s AND location_id=%s +RETURNING *; \ No newline at end of file diff --git a/static/handlers/receiptHandler.js b/application/receipts/static/js/receiptHandler.js similarity index 96% rename from static/handlers/receiptHandler.js rename to application/receipts/static/js/receiptHandler.js index 993fbb3..587e116 100644 --- a/static/handlers/receiptHandler.js +++ b/application/receipts/static/js/receiptHandler.js @@ -15,7 +15,7 @@ async function refreshReceipt() { async function replenishFields(receipt) { if (receipt){ document.getElementById('title').innerHTML = receipt.receipt_id - document.getElementById('crumbID').innerHTML = receipt.receipt_id + // document.getElementById('crumbID').innerHTML = receipt.receipt_id document.getElementById('receipt_id').innerHTML = receipt.receipt_id document.getElementById('database_id').value = receipt.id document.getElementById('date_submitted').value = receipt.date_submitted @@ -38,7 +38,7 @@ async function replenishFields(receipt) { async function checkAPI(line_id, barcode) { console.log(barcode) - const response = await fetch(`/receipts/checkAPI`, { + const response = await fetch(`/receipts/api/checkAPI`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -250,7 +250,7 @@ async function viewFile(source) { document.getElementById('filenameiframemodal').innerHTML = source let iframe = document.createElement('iframe') - iframe.src = `/receipt/getFile/${source}` + iframe.src = `/receipts/api/getFile/${source}` iframe.width = "100%" iframe.style.height = "100%" @@ -300,7 +300,7 @@ async function openLineEditModal(line_data) { async function addSKULine(item_id) { console.log(item_id) - const response = await fetch(`/receipts/addSKULine`, { + const response = await fetch(`/receipts/api/addSKULine`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -316,7 +316,7 @@ async function addSKULine(item_id) { } async function resolveLine(line_id) { - const response = await fetch(`/receipts/resolveLine`, { + const response = await fetch(`/receipts/api/resolveLine`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -329,7 +329,7 @@ async function resolveLine(line_id) { } async function resolveReceipt() { - const response = await fetch(`/receipts/resolveReceipt`, { + const response = await fetch(`/receipts/api/resolveReceipt`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -346,7 +346,7 @@ async function uploadFile() { const formData = new FormData(); formData.append('file', fileInput.files[0]); - await fetch(`/receipt/uploadfile/${receipt_id}`, { + await fetch(`/receipts/api/uploadfile/${receipt_id}`, { method: 'POST', body: formData }) @@ -379,7 +379,7 @@ async function saveLine(line_id){ } } - const response = await fetch(`/receipts/saveLine`, { + const response = await fetch(`/receipts/api/saveLine`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -395,7 +395,7 @@ async function saveLine(line_id){ } async function deleteLine(id) { - const response = await fetch(`/receipts/deleteLine`, { + const response = await fetch(`/receipts/api/deleteLine`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -409,7 +409,7 @@ async function deleteLine(id) { async function denyLine(id) { console.log(id) - const response = await fetch(`/receipts/denyLine`, { + const response = await fetch(`/receipts/api/denyLine`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -422,7 +422,7 @@ async function denyLine(id) { } async function getReceipt(id) { - const url = new URL('/receipts/getReceipt', window.location.origin); + const url = new URL('/receipts/api/getReceipt', window.location.origin); url.searchParams.append('id', id); const response = await fetch(url); data = await response.json(); @@ -433,7 +433,7 @@ async function getReceipt(id) { let items_limit = 50; async function getItems() { console.log("getting items") - const url = new URL('/receipts/getItems', window.location.origin); + const url = new URL('/receipts/api/getItems', window.location.origin); url.searchParams.append('page', pagination_current); url.searchParams.append('limit', items_limit); const response = await fetch(url); @@ -531,7 +531,7 @@ let vendor_limit = 25 let vendor_current_page = 1 let vendor_end_page = 10 async function getVendors() { - const url = new URL('/receipt/getVendors', window.location.origin); + const url = new URL('/receipts/api/getVendors', window.location.origin); url.searchParams.append('page', vendor_current_page); url.searchParams.append('limit', vendor_limit); const response = await fetch(url); @@ -541,7 +541,7 @@ async function getVendors() { } async function postVendorUpdate(vendor_id) { - const response = await fetch(`/receipt/postVendorUpdate`, { + const response = await fetch(`/receipts/api/postVendorUpdate`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -691,7 +691,7 @@ let links_limit = 25 let links_current_page = 1 let links_end_page = 10 async function getLinkedLists() { - const url = new URL('/receipt/getLinkedLists', window.location.origin); + const url = new URL('/receipts/api/getLinkedLists', window.location.origin); url.searchParams.append('page', vendor_current_page); url.searchParams.append('limit', vendor_limit); const response = await fetch(url); @@ -701,7 +701,7 @@ async function getLinkedLists() { } async function postLinkedItem(receipt_item_id, link_list_id, conv_factor) { - const response = await fetch(`/receipt/postLinkedItem`, { + const response = await fetch(`/receipts/api/postLinkedItem`, { method: 'POST', headers: { 'Content-Type': 'application/json', diff --git a/static/handlers/receiptsHandler.js b/application/receipts/static/js/receiptsHandler.js similarity index 97% rename from static/handlers/receiptsHandler.js rename to application/receipts/static/js/receiptsHandler.js index 54d8a93..d929d2d 100644 --- a/static/handlers/receiptsHandler.js +++ b/application/receipts/static/js/receiptsHandler.js @@ -64,7 +64,7 @@ async function replenishReceiptsTable(receipts) { ) tableRow.onclick = async function() { - let url = `${window.location.origin}/receipt/${receipts[i].id}`; + let url = `${window.location.origin}/receipts/${receipts[i].id}`; window.location.href = url; } @@ -77,7 +77,7 @@ async function replenishReceiptsTable(receipts) { var receipts_limit = 10 async function getReceipts() { - const url = new URL('/receipts/getReceipts', window.location.origin); + const url = new URL('/receipts/api/getReceipts', window.location.origin); url.searchParams.append('page', pagination_current); url.searchParams.append('limit', receipts_limit); const response = await fetch(url); diff --git a/templates/receipts/receipt.html b/application/receipts/templates/receipt.html similarity index 82% rename from templates/receipts/receipt.html rename to application/receipts/templates/receipt.html index 2b1ea1e..955f5b8 100644 --- a/templates/receipts/receipt.html +++ b/application/receipts/templates/receipt.html @@ -23,49 +23,77 @@ -
    -
    @@ -390,6 +418,6 @@
    - + \ No newline at end of file diff --git a/application/receipts/templates/receipts_index.html b/application/receipts/templates/receipts_index.html new file mode 100644 index 0000000..549b192 --- /dev/null +++ b/application/receipts/templates/receipts_index.html @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + +
    + +
    +
    +
    + + + + + + + + + + + +
    Receipt IDReceipt StatusDate SubmittedSubmitted By
    +
    +
    + +
    +
    +
    + + + \ No newline at end of file diff --git a/application/recipes/__pycache__/__init__.cpython-313.pyc b/application/recipes/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..1f36d7b Binary files /dev/null and b/application/recipes/__pycache__/__init__.cpython-313.pyc differ diff --git a/application/recipes/__pycache__/database_recipes.cpython-313.pyc b/application/recipes/__pycache__/database_recipes.cpython-313.pyc new file mode 100644 index 0000000..5f71840 Binary files /dev/null and b/application/recipes/__pycache__/database_recipes.cpython-313.pyc differ diff --git a/application/recipes/__pycache__/recipes_api.cpython-313.pyc b/application/recipes/__pycache__/recipes_api.cpython-313.pyc new file mode 100644 index 0000000..bec128b Binary files /dev/null and b/application/recipes/__pycache__/recipes_api.cpython-313.pyc differ diff --git a/application/recipes/database_recipes.py b/application/recipes/database_recipes.py index 90ab78c..920822d 100644 --- a/application/recipes/database_recipes.py +++ b/application/recipes/database_recipes.py @@ -1,9 +1,12 @@ -from application import postsqldb -import config +# 3RD PARTY APPLICATIONS import psycopg2 import random import string +# APPLICATION IMPORTS +from application import postsqldb +import config + def getUUID(n): random_string = ''.join(random.choices(string.ascii_letters + string.digits, k=n)) return random_string diff --git a/application/recipes/recipes_api.py b/application/recipes/recipes_api.py index 9719ce9..936df8b 100644 --- a/application/recipes/recipes_api.py +++ b/application/recipes/recipes_api.py @@ -1,53 +1,29 @@ -# 3rd party imports +# 3RD PARTY IMPORTS from flask import ( Blueprint, request, render_template, session, jsonify, current_app, send_from_directory ) import math -# application imports +# APPLICATION IMPORTS import main -from user_api import login_required import webpush +from application.access_module import access_api from application.recipes import database_recipes from application import postsqldb as db recipes_api = Blueprint('recipes_api', __name__, template_folder="templates", static_folder="static") @recipes_api.route("/") -@login_required +@access_api.login_required def recipes(): - """This is the main endpoint to reach the webpage for a list of all recipes - --- - responses: - 200: - description: returns recipes/index.html with sites, current_site. - """ sites = [site[1] for site in main.get_sites(session['user']['sites'])] - return render_template("index.html", + return render_template("recipes_index.html", current_site=session['selected_site'], sites=sites) @recipes_api.route("//") -@login_required +@access_api.login_required def recipe(id, mode='view'): - """This is the main endpoint to reach the webpage for a recipe's view or edit mode. - --- - parameters: - - name: mode - in: path - type: string - required: true - default: view - - name: id - in: path - type: integer - required: true - default: all - responses: - 200: - description: Respondes with either the Edit or View webpage for the recipe. - """ - units = database_recipes.getUnits() print("woot") if mode == "edit": @@ -56,14 +32,8 @@ def recipe(id, mode='view'): return render_template("recipe_view.html", recipe_id=id, current_site=session['selected_site']) @recipes_api.route('/getRecipes', methods=["GET"]) -@login_required +@access_api.login_required def getRecipes(): - """ Get a subquery of recipes from the database by passing a page, limit - --- - responses: - 200: - description: limit of rows passed returned to requester - """ recipes = [] count=0 if request.method == "GET": @@ -76,15 +46,8 @@ def getRecipes(): return jsonify({'recipes': recipes, 'end': math.ceil(count/limit), 'error': True, 'message': f'method is not allowed: {request.method}'}) @recipes_api.route('/getRecipe', methods=["GET"]) -@login_required +@access_api.login_required def getRecipe(): - """ Get a query for recipe id from database by passing an id - --- - responses: - 200: - description: id queried successfully! - - """ recipe = {} if request.method == "GET": id = int(request.args.get('id', 1)) @@ -94,14 +57,8 @@ def getRecipe(): return jsonify({'recipe': recipe, 'error': True, 'message': f'method {request.method} not allowed'}) @recipes_api.route('/addRecipe', methods=["POST"]) -@login_required +@access_api.login_required def addRecipe(): - """ post a new recipe into the database by passing a recipe_name and recipe description - --- - responses: - 200: - description: Recipe was added successfully into the system - """ if request.method == "POST": recipe_name = request.get_json()['recipe_name'] recipe_description = request.get_json()['recipe_description'] @@ -118,14 +75,8 @@ def addRecipe(): return jsonify({'recipe': recipe, 'error': True, 'message': f'method {request.method}'}) @recipes_api.route('/getItems', methods=["GET"]) -@login_required +@access_api.login_required def getItems(): - """ Pass along a page, limit, and search strings to get a pagination of items from the system - --- - responses: - 200: - description: Items were returned successfully! - """ recordset = [] count = {'count': 0} if request.method == "GET": @@ -139,17 +90,8 @@ def getItems(): return jsonify({"items":recordset, "end":math.ceil(count/limit), "error":True, "message":"There was an error with this GET statement"}) @recipes_api.route('/postUpdate', methods=["POST"]) -@login_required +@access_api.login_required def postUpdate(): - """ This is an endpoint for updating an RecipeTuple in the sites recipes table - --- - responses: - 200: - description: The time was updated successfully! - - Returns: - dict: returns a dictionary containing the updated recipe object, error status, and a message to post for notifications - """ recipe = {} if request.method == "POST": recipe_id = int(request.get_json()['recipe_id']) @@ -160,14 +102,8 @@ def postUpdate(): return jsonify({'recipe': recipe, 'error': True, 'message': 'Update of Recipe unsuccessful!'}) @recipes_api.route('/postCustomItem', methods=["POST"]) -@login_required +@access_api.login_required def postCustomItem(): - """ post a recipe item to the database by passing a uuid, recipe_id, item_type, item_name, uom, qty, and link - --- - responses: - 200: - description: Recipe Item posted successfully! - """ recipe = {} if request.method == "POST": site_name = session['selected_site'] @@ -187,14 +123,8 @@ def postCustomItem(): return jsonify({'recipe': recipe, 'error': True, 'message': f'method {request.method} not allowed!'}) @recipes_api.route('/postSKUItem', methods=["POST"]) -@login_required +@access_api.login_required def postSKUItem(): - """ post a recipe item to the database by passing a recipe_id and item_id - --- - responses: - 200: - description: recipe item was posted successfully! - """ recipe = {} if request.method == "POST": recipe_id = int(request.get_json()['recipe_id']) @@ -217,20 +147,8 @@ def postSKUItem(): return jsonify({'recipe': recipe, 'error': True, 'message': f'method {request.method} is not allowed!'}) @recipes_api.route('/postImage/', methods=["POST"]) -@login_required +@access_api.login_required def uploadImage(recipe_id): - """ post an image for a recipe into the database and files by passing the recipe_id and picture_path - --- - parameters: - - name: recipe_id - in: path - required: true - schema: - type: integer - responses: - 200: - description: image uploaded succesfully! - """ file = request.files['file'] file_path = current_app.config['UPLOAD_FOLDER'] + f"/recipes/{file.filename.replace(" ", "_")}" file.save(file_path) @@ -239,33 +157,15 @@ def uploadImage(recipe_id): return jsonify({'error': False, 'message': 'Recipe was updated successfully!'}) @recipes_api.route('/getImage/') -@login_required +@access_api.login_required def get_image(recipe_id): - """ get the picture path for a recipe by passing teh recipe id in the path - --- - parameters: - - name: recipe_id - in: path - required: true - schema: - type: integer - responses: - 200: - description: image fetched succesfully! - """ site_name = session['selected_site'] picture_path = database_recipes.getPicturePath(site_name, (recipe_id,)) return send_from_directory('static/pictures/recipes', picture_path) @recipes_api.route('/deleteRecipeItem', methods=["POST"]) -@login_required +@access_api.login_required def deleteRecipeItem(): - """ delete recipe item from database by passing the recipe item ID - --- - responses: - 200: - description: recipe item deleted successfully. - """ recipe = {} if request.method == "POST": id = int(request.get_json()['id']) @@ -276,15 +176,8 @@ def deleteRecipeItem(): return jsonify({'recipe': recipe, 'error': True, 'message': f'method {request.method} is not allowed!'}) @recipes_api.route('/saveRecipeItem', methods=["POST"]) -@login_required +@access_api.login_required def saveRecipeItem(): - """ post an update to a recipe item in the database by passing the recipe item ID and an update - payload. - --- - responses: - 200: - description: recipe item updated successfully. - """ recipe = {} if request.method == "POST": id = int(request.get_json()['id']) diff --git a/application/recipes/static/js/recipeEditHandler.js b/application/recipes/static/js/recipeEditHandler.js index 804e270..86f5072 100644 --- a/application/recipes/static/js/recipeEditHandler.js +++ b/application/recipes/static/js/recipeEditHandler.js @@ -29,7 +29,7 @@ document.addEventListener('DOMContentLoaded', async function() { async function replenishRecipe() { document.getElementById('title').innerHTML = `${recipe.name}` - document.getElementById('breadcrumb').innerHTML = `${recipe.name}` + //document.getElementById('breadcrumb').innerHTML = `${recipe.name}` document.getElementById('recipeName').value = `${recipe.name}` document.getElementById('recipeCreationDate').value = `${recipe.creation_date}` diff --git a/application/recipes/static/js/recipeViewHandler.js b/application/recipes/static/js/recipeViewHandler.js index 287aa59..1ac534f 100644 --- a/application/recipes/static/js/recipeViewHandler.js +++ b/application/recipes/static/js/recipeViewHandler.js @@ -27,7 +27,7 @@ document.addEventListener('DOMContentLoaded', async function() { async function replenishRecipe() { document.getElementById('title').innerHTML = `${recipe.name}` - document.getElementById('breadcrumb').innerHTML = `${recipe.name}` + // document.getElementById('breadcrumb').innerHTML = `${recipe.name}` document.getElementById('recipeTitle').innerHTML = `${recipe.name}` document.getElementById('recipeAuthor').innerHTML = `${recipe.author}` document.getElementById('recipeDescription').innerHTML = `${recipe.description}` diff --git a/application/recipes/templates/index.html b/application/recipes/templates/index.html deleted file mode 100644 index d1bf1ff..0000000 --- a/application/recipes/templates/index.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - - Recipes - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -
    -
    -
    - - -
    -
    - -
    -
    -
    - -
    - -
    -
    -
    -
    - -
    -
    - -
    -

    Add Recipe...

    -
    -
    -

    Add a Recipe to the system by providing a name for the item and a general description.

    -
    - - -
    -
    - - -
    -
    - -
    -
    - - - - \ No newline at end of file diff --git a/application/recipes/templates/recipe_edit.html b/application/recipes/templates/recipe_edit.html index f49ed61..c1b1d93 100644 --- a/application/recipes/templates/recipe_edit.html +++ b/application/recipes/templates/recipe_edit.html @@ -22,58 +22,78 @@ - -
    -
    diff --git a/application/recipes/templates/recipe_view.html b/application/recipes/templates/recipe_view.html index e049802..fec44f0 100644 --- a/application/recipes/templates/recipe_view.html +++ b/application/recipes/templates/recipe_view.html @@ -30,57 +30,77 @@ } -
    -
    diff --git a/application/recipes/templates/recipes_index.html b/application/recipes/templates/recipes_index.html new file mode 100644 index 0000000..b677c5d --- /dev/null +++ b/application/recipes/templates/recipes_index.html @@ -0,0 +1,158 @@ + + + + + Recipes + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    + +
    +
    + +
    +

    Add Recipe...

    +
    +
    +

    Add a Recipe to the system by providing a name for the item and a general description.

    +
    + + +
    +
    + + +
    +
    + +
    +
    + + + + \ No newline at end of file diff --git a/application/shoppinglists/__init__.py b/application/shoppinglists/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/application/shoppinglists/__pycache__/__init__.cpython-313.pyc b/application/shoppinglists/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..21f681d Binary files /dev/null and b/application/shoppinglists/__pycache__/__init__.cpython-313.pyc differ diff --git a/application/shoppinglists/__pycache__/shoplist_api.cpython-313.pyc b/application/shoppinglists/__pycache__/shoplist_api.cpython-313.pyc new file mode 100644 index 0000000..12f3df5 Binary files /dev/null and b/application/shoppinglists/__pycache__/shoplist_api.cpython-313.pyc differ diff --git a/application/shoppinglists/__pycache__/shoplist_database.cpython-313.pyc b/application/shoppinglists/__pycache__/shoplist_database.cpython-313.pyc new file mode 100644 index 0000000..0a4e521 Binary files /dev/null and b/application/shoppinglists/__pycache__/shoplist_database.cpython-313.pyc differ diff --git a/application/shoppinglists/shoplist_api.py b/application/shoppinglists/shoplist_api.py new file mode 100644 index 0000000..061656f --- /dev/null +++ b/application/shoppinglists/shoplist_api.py @@ -0,0 +1,196 @@ +# 3rd Party imports +from flask import ( + Blueprint, request, render_template, redirect, session, jsonify + ) +import math + +# APPLICATION IMPORTS +from application import postsqldb, database_payloads +from application.access_module import access_api +from application.shoppinglists import shoplist_database + +shopping_list_api = Blueprint('shopping_list_API', __name__, template_folder="templates", static_folder="static") + + +# ROOT TEMPLATE ROUTES +@shopping_list_api.route("/") +@access_api.login_required +def shopping_lists(): + sites = [site[1] for site in postsqldb.get_sites(session['user']['sites'])] + return render_template("lists.html", current_site=session['selected_site'], sites=sites) + +@shopping_list_api.route("//") +@access_api.login_required +def shopping_list(mode, id): + sites = [site[1] for site in postsqldb.get_sites(session['user']['sites'])] + if mode == "view": + return render_template("view.html", id=id, current_site=session['selected_site'], sites=sites) + if mode == "edit": + return render_template("edit.html", id=id, current_site=session['selected_site'], sites=sites) + return redirect("/") + +# API CALLS +# Added to Database +@shopping_list_api.route('/api/addList', methods=["POST"]) +@access_api.login_required +def addList(): + if request.method == "POST": + list_name = request.get_json()['list_name'] + list_description = request.get_json()['list_description'] + list_type = request.get_json()['list_type'] + site_name = session['selected_site'] + user_id = session['user_id'] + shopping_list = database_payloads.ShoppingListPayload( + name=list_name, + description=list_description, + author=user_id, + type=list_type + ) + shoplist_database.insertShoppingListsTuple(site_name, shopping_list.payload()) + return jsonify({'error': False, 'message': 'List added!!'}) + return jsonify({'error': True, 'message': 'These was an error with adding the list!'}) + +# Added to Database +@shopping_list_api.route('/api/getLists', methods=["GET"]) +@access_api.login_required +def getShoppingLists(): + lists = [] + if request.method == "GET": + page = int(request.args.get('page', 1)) + limit = int(request.args.get('limit', 1)) + offset = (page-1)*limit + + site_name = session['selected_site'] + lists, count = shoplist_database.getShoppingLists(site_name, (limit, offset)) + + for list in lists: + + if list['type'] == 'calculated': + items = [] + not_items = shoplist_database.getItemsSafetyStock(site_name) + for item in not_items: + new_item = { + 'id': item['id'], + 'uuid': item['barcode'], + 'sl_id': 0, + 'item_type': 'sku', + 'item_name': item['item_name'], + 'uom': item['uom'], + 'qty': float(float(item['safety_stock']) - float(item['total_sum'])), + 'item_id': item['id'], + 'links': item['links'] + } + items.append(new_item) + list['sl_items'] = items + + return jsonify({'shopping_lists': lists, 'end':math.ceil(count/limit), 'error': False, 'message': 'Lists queried successfully!'}) + +# Added to Database +@shopping_list_api.route('/api/getList', methods=["GET"]) +@access_api.login_required +def getShoppingList(): + if request.method == "GET": + sl_id = int(request.args.get('id', 1)) + site_name = session['selected_site'] + list = shoplist_database.getShoppingList(site_name, (sl_id, )) + return jsonify({'shopping_list': list, 'error': False, 'message': 'Lists queried successfully!'}) + +# Added to Database +@shopping_list_api.route('/api/getListItem', methods=["GET"]) +@access_api.login_required +def getShoppingListItem(): + list_item = {} + if request.method == "GET": + sli_id = int(request.args.get('sli_id', 1)) + site_name = session['selected_site'] + list_item = shoplist_database.getShoppingListItem(site_name, (sli_id, )) + return jsonify({'list_item': list_item, 'error': False, 'message': 'Lists Items queried successfully!'}) + return jsonify({'list_item': list_item, 'error': True, 'message': 'List Items queried unsuccessfully!'}) + +# Added to database +@shopping_list_api.route('/api/getItems', methods=["GET"]) +@access_api.login_required +def getItems(): + recordset = [] + count = {'count': 0} + if request.method == "GET": + page = int(request.args.get('page', 1)) + limit = int(request.args.get('limit', 10)) + search_string = request.args.get('search_string', 10) + site_name = session['selected_site'] + offset = (page - 1) * limit + sort_order = "ID ASC" + payload = (search_string, limit, offset, sort_order) + recordset, count = shoplist_database.getItemsWithQOH(site_name, payload, convert=True) + return jsonify({"items":recordset, "end":math.ceil(count['count']/limit), "error":False, "message":"items fetched succesfully!"}) + return jsonify({"items":recordset, "end":math.ceil(count['count']/limit), "error":True, "message":"There was an error with this GET statement"}) + +# Added to database +@shopping_list_api.route('/api/postListItem', methods=["POST"]) +@access_api.login_required +def postListItem(): + if request.method == "POST": + data = request.get_json()['data'] + site_name = session['selected_site'] + sl_item = database_payloads.ShoppingListItemPayload( + uuid = data['uuid'], + sl_id = data['sl_id'], + item_type=data['item_type'], + item_name=data['item_name'], + uom=data['uom'], + qty=data['qty'], + item_id=data['item_id'], + links=data['links'] + ) + shoplist_database.insertShoppingListItemsTuple(site_name, sl_item.payload()) + return jsonify({"error":False, "message":"items fetched succesfully!"}) + return jsonify({"error":True, "message":"There was an error with this GET statement"}) + +# Added to Database +@shopping_list_api.route('/api/deleteListItem', methods=["POST"]) +@access_api.login_required +def deleteListItem(): + if request.method == "POST": + sli_id = request.get_json()['sli_id'] + site_name = session['selected_site'] + shoplist_database.deleteShoppingListItemsTuple(site_name, (sli_id, )) + return jsonify({"error":False, "message":"item deleted succesfully!"}) + return jsonify({"error":True, "message":"There was an error with this POST statement"}) + +# Added to Database +@shopping_list_api.route('/api/saveListItem', methods=["POST"]) +@access_api.login_required +def saveListItem(): + if request.method == "POST": + sli_id = request.get_json()['sli_id'] + update = request.get_json()['update'] + site_name = session['selected_site'] + shoplist_database.updateShoppingListItemsTuple(site_name, {'id': sli_id, 'update': update}) + return jsonify({"error":False, "message":"items fetched succesfully!"}) + return jsonify({"error":True, "message":"There was an error with this GET statement"}) + +# Added to Database +@shopping_list_api.route('/api/getSKUItemsFull', methods=["GET"]) +@access_api.login_required +def getSKUItemsFull(): + items = [] + count = {'count': 0} + if request.method == "GET": + site_name = session['selected_site'] + + not_items = shoplist_database.getItemsSafetyStock(site_name) + for item in not_items: + new_item = { + 'id': item['id'], + 'uuid': item['barcode'], + 'sl_id': 0, + 'item_type': 'sku', + 'item_name': item['item_name'], + 'uom': item['uom'], + 'qty': float(float(item['safety_stock']) - float(item['total_sum'])), + 'item_id': item['id'], + 'links': item['links'] + } + items.append(new_item) + return jsonify({"list_items":items, "error":False, "message":"items fetched succesfully!"}) + return jsonify({"list_items":items, "error":True, "message":"There was an error with this GET statement"}) diff --git a/application/shoppinglists/shoplist_database.py b/application/shoppinglists/shoplist_database.py new file mode 100644 index 0000000..1258824 --- /dev/null +++ b/application/shoppinglists/shoplist_database.py @@ -0,0 +1,278 @@ +# 3rd Party imports +import psycopg2 + + +# applications imports +import config +from application import postsqldb + +def getShoppingList(site, payload, convert=True, conn=None): + recordset = [] + self_conn = False + + with open(f"application/shoppinglists/sql/getShoppingListByID.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: + recordset = postsqldb.tupleDictionaryFactory(cur.description, rows) + if rows and not convert: + recordset = rows + + if self_conn: + conn.close() + + return recordset + + except (Exception, psycopg2.DatabaseError) as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def getShoppingLists(site, payload, convert=True, conn=None): + recordset = [] + count = 0 + self_conn = False + with open(f"application/shoppinglists/sql/getShoppingLists.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.fetchall() + if rows and convert: + recordset = [postsqldb.tupleDictionaryFactory(cur.description, row) for row in rows] + if rows and not convert: + recordset = rows + + cur.execute(f"SELECT COUNT(*) FROM {site}_shopping_lists;") + count = cur.fetchone()[0] + + if self_conn: + conn.close() + + return recordset, count + except (Exception, psycopg2.DatabaseError) as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def getItemsSafetyStock(site, convert=True, conn=None): + recordsets = [] + self_conn = False + with open(f"application/shoppinglists/sql/getItemsSafetyStock.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) + rows = cur.fetchall() + if rows and convert: + recordsets = [postsqldb.tupleDictionaryFactory(cur.description, row) for row in rows] + if rows and not convert: + recordsets = rows + + if self_conn: + conn.close() + + return recordsets + + except (Exception, psycopg2.DatabaseError) as error: + raise postsqldb.DatabaseError(error, None, sql) + +def getShoppingListItem(site, payload, convert=True, conn=None): + record = () + self_conn = False + with open('application/shoppinglists/sql/selectShoppingListItem.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.close() + + return record + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def getItemsWithQOH(site, payload, convert=True, conn=None): + recordset = [] + count = 0 + self_conn = False + + with open(f"application/shoppinglists/sql/getItemsWithQOH.sql", "r+") as file: + sql = file.read().replace("%%site_name%%", site).replace("%%sort_order%%", payload[3]) + + payload = list(payload) + payload.pop(3) + try: + + if not conn: + database_config = config.config() + conn = psycopg2.connect(**database_config) + conn.autocommit = True + self_conn = True + + if convert: + with conn.cursor(cursor_factory=psycopg2.extras.RealDictCursor) as cur: + cur.execute(sql, payload) + recordset = cur.fetchall() + recordset = [dict(record) for record in recordset] + cur.execute(f"SELECT COUNT(*) FROM {site}_items WHERE search_string LIKE '%%' || %s || '%%';", (payload[0], )) + count = cur.fetchone() + else: + with conn.cursor() as cur: + cur.execute(sql, payload) + recordset = cur.fetchall() + cur.execute(f"SELECT COUNT(*) FROM {site}_items WHERE search_string LIKE '%%' || %s || '%%';", (payload[0], )) + count = cur.fetchone() + + if self_conn: + conn.close() + + return recordset, count + + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def deleteShoppingListItemsTuple(site_name, payload, convert=True, conn=None): + deleted = () + self_conn = False + sql = f"WITH deleted_rows AS (DELETE FROM {site_name}_shopping_list_items WHERE id IN ({','.join(['%s'] * len(payload))}) RETURNING *) SELECT * FROM deleted_rows;" + 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.fetchall() + if rows and convert: + deleted = [postsqldb.tupleDictionaryFactory(cur.description, r) for r in rows] + elif rows and not convert: + deleted = rows + + if self_conn: + conn.commit() + conn.close() + + return deleted + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def insertShoppingListsTuple(site, payload, convert=True, conn=None): + shopping_list = () + self_conn = False + with open(f"application/shoppinglists/sql/insertShoppingListsTuple.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: + shopping_list = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + shopping_list = rows + + if self_conn: + conn.commit() + conn.close() + + return shopping_list + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def insertShoppingListItemsTuple(site, payload, convert=True, conn=None): + shopping_list_item = () + self_conn = False + with open(f"application/shoppinglists/sql/insertShoppingListItemsTuple.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: + shopping_list_item = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + shopping_list_item = rows + + if self_conn: + conn.commit() + conn.close() + + return shopping_list_item + + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def updateShoppingListItemsTuple(site, payload, convert=True, conn=None): + updated = () + self_conn = False + set_clause, values = postsqldb.updateStringFactory(payload['update']) + values.append(payload['id']) + sql = f"UPDATE {site}_shopping_list_items SET {set_clause} WHERE id=%s RETURNING *;" + 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, values) + rows = cur.fetchone() + if rows and convert: + updated = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + updated = rows + + if self_conn: + conn.commit() + conn.close() + + return updated + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) \ No newline at end of file diff --git a/application/shoppinglists/shoplist_processess.py b/application/shoppinglists/shoplist_processess.py new file mode 100644 index 0000000..e69de29 diff --git a/application/shoppinglists/sql/getItemsSafetyStock.sql b/application/shoppinglists/sql/getItemsSafetyStock.sql new file mode 100644 index 0000000..de6a42f --- /dev/null +++ b/application/shoppinglists/sql/getItemsSafetyStock.sql @@ -0,0 +1,11 @@ +WITH sum_cte AS ( + SELECT mi.id, SUM(mil.quantity_on_hand) AS total_sum + FROM %%site_name%%_item_locations mil + JOIN %%site_name%%_items mi ON mil.part_id = mi.id + GROUP BY mi.id +) +SELECT * +FROM %%site_name%%_items +LEFT JOIN %%site_name%%_item_info ON %%site_name%%_items.item_info_id = %%site_name%%_item_info.id +LEFT JOIN sum_cte ON %%site_name%%_items.id = sum_cte.id +WHERE %%site_name%%_item_info.safety_stock > COALESCE(sum_cte.total_sum, 0); diff --git a/application/shoppinglists/sql/getItemsWithQOH.sql b/application/shoppinglists/sql/getItemsWithQOH.sql new file mode 100644 index 0000000..e86c053 --- /dev/null +++ b/application/shoppinglists/sql/getItemsWithQOH.sql @@ -0,0 +1,18 @@ +WITH sum_cte AS ( + SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum + FROM %%site_name%%_item_locations mil + JOIN %%site_name%%_items mi ON mil.part_id = mi.id + GROUP BY mi.id + ) + +SELECT %%site_name%%_items.*, + row_to_json(%%site_name%%_item_info.*) as item_info, + sum_cte.total_sum as total_qoh, + (SELECT COALESCE(row_to_json(u), '{}') FROM units as u WHERE u.id=%%site_name%%_item_info.uom) as uom +FROM %%site_name%%_items +LEFT JOIN sum_cte ON %%site_name%%_items.id = sum_cte.id +LEFT JOIN %%site_name%%_item_info ON %%site_name%%_items.item_info_id = %%site_name%%_item_info.id +WHERE %%site_name%%_items.search_string LIKE '%%' || %s || '%%' +ORDER BY %%sort_order%% +LIMIT %s OFFSET %s; + diff --git a/application/shoppinglists/sql/getShoppingListByID.sql b/application/shoppinglists/sql/getShoppingListByID.sql new file mode 100644 index 0000000..de06f2e --- /dev/null +++ b/application/shoppinglists/sql/getShoppingListByID.sql @@ -0,0 +1,15 @@ +WITH passed_id AS (SELECT %s AS passed_id), + cte_sl_items AS ( + SELECT items.*, + (SELECT COALESCE(row_to_json(un), '{}') FROM units un WHERE un.id = items.uom LIMIT 1) AS uom + FROM %%site_name%%_shopping_list_items items + WHERE items.sl_id = (SELECT passed_id FROM passed_id) + ) + +SELECT (SELECT passed_id FROM passed_id) AS passed_id, + %%site_name%%_shopping_lists.*, + logins.username as author, + (SELECT COALESCE(array_agg(row_to_json(slis)), '{}') FROM cte_sl_items slis) AS sl_items +FROM %%site_name%%_shopping_lists +JOIN logins ON %%site_name%%_shopping_lists.author = logins.id +WHERE %%site_name%%_shopping_lists.id=(SELECT passed_id FROM passed_id) \ No newline at end of file diff --git a/application/shoppinglists/sql/getShoppingLists.sql b/application/shoppinglists/sql/getShoppingLists.sql new file mode 100644 index 0000000..acccf96 --- /dev/null +++ b/application/shoppinglists/sql/getShoppingLists.sql @@ -0,0 +1,3 @@ +SELECT *, + (SELECT COALESCE(array_agg(row_to_json(g)), '{}') FROM %%site_name%%_shopping_list_items g WHERE sl_id = %%site_name%%_shopping_lists.id) AS sl_items + FROM %%site_name%%_shopping_lists LIMIT %s OFFSET %s; \ No newline at end of file diff --git a/application/shoppinglists/sql/insertShoppingListItemsTuple.sql b/application/shoppinglists/sql/insertShoppingListItemsTuple.sql new file mode 100644 index 0000000..0e45d8c --- /dev/null +++ b/application/shoppinglists/sql/insertShoppingListItemsTuple.sql @@ -0,0 +1,4 @@ +INSERT INTO %%site_name%%_shopping_list_items +(uuid, sl_id, item_type, item_name, uom, qty, item_id, links) +VALUES (%s, %s, %s, %s, %s, %s, %s, %s) +RETURNING *; \ No newline at end of file diff --git a/application/shoppinglists/sql/insertShoppingListsTuple.sql b/application/shoppinglists/sql/insertShoppingListsTuple.sql new file mode 100644 index 0000000..6816ef5 --- /dev/null +++ b/application/shoppinglists/sql/insertShoppingListsTuple.sql @@ -0,0 +1,4 @@ +INSERT INTO %%site_name%%_shopping_lists +(name, description, author, creation_date, type) +VALUES (%s, %s, %s, %s, %s) +RETURNING *; \ No newline at end of file diff --git a/application/shoppinglists/sql/selectShoppingListItem.sql b/application/shoppinglists/sql/selectShoppingListItem.sql new file mode 100644 index 0000000..64a029f --- /dev/null +++ b/application/shoppinglists/sql/selectShoppingListItem.sql @@ -0,0 +1,4 @@ +SELECT items.*, + (SELECT COALESCE(row_to_json(un), '{}') FROM units un WHERE un.id = items.uom LIMIT 1) AS uom +FROM %%site_name%%_shopping_list_items items +WHERE items.id = %s; \ No newline at end of file diff --git a/static/handlers/shoppingListEditHandler.js b/application/shoppinglists/static/js/shoppingListEditHandler.js similarity index 96% rename from static/handlers/shoppingListEditHandler.js rename to application/shoppinglists/static/js/shoppingListEditHandler.js index 2f71022..b390ab8 100644 --- a/static/handlers/shoppingListEditHandler.js +++ b/application/shoppinglists/static/js/shoppingListEditHandler.js @@ -88,7 +88,7 @@ async function replenishLineTable(sl_items){ } async function fetchShoppingList() { - const url = new URL('/shopping-lists/getList', window.location.origin); + const url = new URL('/shopping-lists/api/getList', window.location.origin); url.searchParams.append('id', sl_id); const response = await fetch(url); data = await response.json(); @@ -158,7 +158,7 @@ async function openLineEditModal(sli_id) { console.log(sl_item) document.getElementById('lineName').value = sl_item.item_name document.getElementById('lineQty').value = sl_item.qty - document.getElementById('lineUOM').value = sl_item.uom.fullname + document.getElementById('lineUOM').value = sl_item.uom.id console.log(sl_item.links) if(!sl_item.links.hasOwnProperty('main')){ @@ -277,7 +277,7 @@ async function updateItemsPaginationElement() { let items_limit = 25; async function fetchItems() { - const url = new URL('/shopping-lists/getItems', window.location.origin); + const url = new URL('/shopping-lists/api/getItems', window.location.origin); url.searchParams.append('page', pagination_current); url.searchParams.append('limit', items_limit); url.searchParams.append('search_string', search_string); @@ -288,7 +288,7 @@ async function fetchItems() { } async function fetchSLItem(sli_id) { - const url = new URL('/shopping-lists/getListItem', window.location.origin); + const url = new URL('/shopping-lists/api/getListItem', window.location.origin); url.searchParams.append('sli_id', sli_id); const response = await fetch(url); data = await response.json(); @@ -320,7 +320,7 @@ async function addCustomItem() { } async function submitItemToList(newItem) { - const response = await fetch(`/shopping-lists/postListItem`, { + const response = await fetch(`/shopping-lists/api/postListItem`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -345,7 +345,7 @@ async function submitItemToList(newItem) { } async function deleteLineItem(sli_id) { - const response = await fetch(`/shopping-lists/deleteListItem`, { + const response = await fetch(`/shopping-lists/api/deleteListItem`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -374,7 +374,7 @@ async function deleteLineItem(sli_id) { } async function saveLineItem(sli_id, update) { - const response = await fetch(`/shopping-lists/saveListItem`, { + const response = await fetch(`/shopping-lists/api/saveListItem`, { method: 'POST', headers: { 'Content-Type': 'application/json', diff --git a/static/handlers/shoppingListViewHandler.js b/application/shoppinglists/static/js/shoppingListViewHandler.js similarity index 92% rename from static/handlers/shoppingListViewHandler.js rename to application/shoppinglists/static/js/shoppingListViewHandler.js index 1b4cf8d..b2cf155 100644 --- a/static/handlers/shoppingListViewHandler.js +++ b/application/shoppinglists/static/js/shoppingListViewHandler.js @@ -60,7 +60,7 @@ async function replenishLineTable(sl_items){ } async function fetchShoppingList() { - const url = new URL('/shopping-lists/getList', window.location.origin); + const url = new URL('/shopping-lists/api/getList', window.location.origin); url.searchParams.append('id', sl_id); const response = await fetch(url); data = await response.json(); @@ -68,7 +68,7 @@ async function fetchShoppingList() { } async function fetchSLItem(sli_id) { - const url = new URL('/shopping-lists/getListItem', window.location.origin); + const url = new URL('/shopping-lists/api/getListItem', window.location.origin); url.searchParams.append('sli_id', sli_id); const response = await fetch(url); data = await response.json(); @@ -76,7 +76,7 @@ async function fetchSLItem(sli_id) { } async function fetchItemsFullCalculated() { - const url = new URL('/shopping-lists/getSKUItemsFull', window.location.origin); + const url = new URL('/shopping-lists/api/getSKUItemsFull', window.location.origin); const response = await fetch(url); data = await response.json(); return data.list_items; diff --git a/static/handlers/shoppingListsHandler.js b/application/shoppinglists/static/js/shoppingListsHandler.js similarity index 97% rename from static/handlers/shoppingListsHandler.js rename to application/shoppinglists/static/js/shoppingListsHandler.js index a3166bd..a4e4603 100644 --- a/static/handlers/shoppingListsHandler.js +++ b/application/shoppinglists/static/js/shoppingListsHandler.js @@ -58,12 +58,12 @@ async function replenishShoppingListCards(lists) { editOp.setAttribute('class', 'uk-button uk-button-small uk-button-default') editOp.innerHTML = ' Edit' editOp.style = "margin-right: 10px;" - editOp.href = `/shopping-list/edit/${lists[i].id}` + editOp.href = `/shopping-lists/edit/${lists[i].id}` let viewOp = document.createElement('a') viewOp.setAttribute('class', 'uk-button uk-button-small uk-button-default') viewOp.innerHTML = ' View' - viewOp.href = `/shopping-list/view/${lists[i].id}` + viewOp.href = `/shopping-lists/view/${lists[i].id}` //viewOp.style = "margin-right: 20px;" @@ -83,7 +83,7 @@ async function openAddListModal() { var listLimit = 5; async function getShoppingLists(){ console.log(pagination_current) - const url = new URL('/shopping-lists/getLists', window.location.origin); + const url = new URL('/shopping-lists/api/getLists', window.location.origin); url.searchParams.append('page', pagination_current); url.searchParams.append('limit', listLimit); response = await fetch(url) @@ -98,7 +98,7 @@ async function addList() { let list_description = document.getElementById('addListDescription').value let list_type = document.getElementById('list_type').value - const response = await fetch(`/shopping-lists/addList`, { + const response = await fetch(`/shopping-lists/api/addList`, { method: 'POST', headers: { 'Content-Type': 'application/json', diff --git a/templates/shopping-lists/edit.html b/application/shoppinglists/templates/edit.html similarity index 74% rename from templates/shopping-lists/edit.html rename to application/shoppinglists/templates/edit.html index 16333a2..b8662da 100644 --- a/templates/shopping-lists/edit.html +++ b/application/shoppinglists/templates/edit.html @@ -23,70 +23,77 @@ -
    -
    @@ -304,6 +311,6 @@
    - + \ No newline at end of file diff --git a/application/shoppinglists/templates/lists.html b/application/shoppinglists/templates/lists.html new file mode 100644 index 0000000..bd49499 --- /dev/null +++ b/application/shoppinglists/templates/lists.html @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    +
    +

    Adding Shopping List...

    +
    + + +
    +
    + + +
    +
    + + +
    + +
    +
    +
    + + + \ No newline at end of file diff --git a/application/shoppinglists/templates/view.html b/application/shoppinglists/templates/view.html new file mode 100644 index 0000000..723c110 --- /dev/null +++ b/application/shoppinglists/templates/view.html @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +

    test

    +
    +
    +

    test

    +
    +
    +

    test

    +
    +
    + + + + + + + + + +
    OperationsItemQty/UOM
    + +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/application/site_management/__init__.py b/application/site_management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/application/site_management/__pycache__/__init__.cpython-313.pyc b/application/site_management/__pycache__/__init__.cpython-313.pyc new file mode 100644 index 0000000..b72b797 Binary files /dev/null and b/application/site_management/__pycache__/__init__.cpython-313.pyc differ diff --git a/application/site_management/__pycache__/site_management_api.cpython-313.pyc b/application/site_management/__pycache__/site_management_api.cpython-313.pyc new file mode 100644 index 0000000..f1e92e0 Binary files /dev/null and b/application/site_management/__pycache__/site_management_api.cpython-313.pyc differ diff --git a/application/site_management/__pycache__/site_management_database.cpython-313.pyc b/application/site_management/__pycache__/site_management_database.cpython-313.pyc new file mode 100644 index 0000000..66fc08b Binary files /dev/null and b/application/site_management/__pycache__/site_management_database.cpython-313.pyc differ diff --git a/application/site_management/site_management_api.py b/application/site_management/site_management_api.py new file mode 100644 index 0000000..e06400f --- /dev/null +++ b/application/site_management/site_management_api.py @@ -0,0 +1,204 @@ +# 3RD PARTY IMPORTS +from flask import ( + Blueprint, request, render_template, redirect, session, jsonify + ) +import math + +# APPLICATION IMPORTS +from application import postsqldb, database_payloads +from application.access_module import access_api +from application.site_management import site_management_database + +site_management_api = Blueprint('site_management_api', __name__, template_folder="templates", static_folder="static") + +# ROOT TEMPLATE ROUTES +@site_management_api.route("/") +@access_api.login_required +def site_management_index(): + sites = [site[1] for site in postsqldb.get_sites(session['user']['sites'])] + if not session.get('user')['system_admin']: + return redirect('/logout') + site_name = session['selected_site'] + zones = site_management_database.selectZonesTuples(site_name, convert=False) + return render_template("site_management.html", current_site=site_name, sites=sites, zones=zones) + +# API CALLS +# added to database +@site_management_api.route('/api/getZones', methods=['GET']) +@access_api.login_required +def getZones(): + if request.method == "GET": + records = [] + count = 0 + page = int(request.args.get('page', 1)) + limit = int(request.args.get('limit', 10)) + offset = (page - 1) * limit + site_name = session['selected_site'] + records, count = site_management_database.paginateZonesTuples(site_name, (limit, offset)) + return jsonify({'zones': records, "end": math.ceil(count/limit), 'error':False, 'message': 'Zones Loaded Successfully!'}) + return jsonify({'zones': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading Zones!'}) + +# added to database +@site_management_api.route('/api/getLocations', methods=['GET']) +@access_api.login_required +def getLocations(): + if request.method == "GET": + records = [] + count = 0 + page = int(request.args.get('page', 1)) + limit = int(request.args.get('limit', 10)) + offset = (page - 1) * limit + site_name = session['selected_site'] + records, count = site_management_database.paginateLocationsTuples(site_name, (limit, offset)) + return jsonify({'locations': records, "end": math.ceil(count/limit), 'error':False, 'message': 'Zones Loaded Successfully!'}) + return jsonify({'locations': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading Zones!'}) + +# added to database +@site_management_api.route('/api/getVendors', methods=['GET']) +@access_api.login_required +def getVendors(): + if request.method == "GET": + records = [] + count = 0 + page = int(request.args.get('page', 1)) + limit = int(request.args.get('limit', 10)) + offset = (page - 1) * limit + site_name = session['selected_site'] + records, count = site_management_database.paginateVendorsTuples(site_name, (limit, offset)) + return jsonify({'vendors': records, "end": math.ceil(count/limit), 'error':False, 'message': 'Zones Loaded Successfully!'}) + return jsonify({'vendors': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading Zones!'}) + +# added to database +@site_management_api.route('/api/getBrands', methods=['GET']) +@access_api.login_required +def getBrands(): + if request.method == "GET": + records = [] + count = 0 + page = int(request.args.get('page', 1)) + limit = int(request.args.get('limit', 10)) + offset = (page - 1) * limit + site_name = session['selected_site'] + records, count = site_management_database.paginateBrandsTuples(site_name, (limit, offset)) + return jsonify({'brands': records, "end": math.ceil(count/limit), 'error':False, 'message': 'Zones Loaded Successfully!'}) + return jsonify({'brands': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading Zones!'}) + +# added to database +@site_management_api.route('/api/getPrefixes', methods=['GET']) +@access_api.login_required +def getPrefixes(): + if request.method == "GET": + records = [] + count = 0 + page = int(request.args.get('page', 1)) + limit = int(request.args.get('limit', 10)) + offset = (page - 1) * limit + site_name = session['selected_site'] + records, count = site_management_database.paginatePrefixesTuples(site_name, (limit, offset)) + return jsonify({'prefixes': records, "end": math.ceil(count/limit), 'error':False, 'message': 'Zones Loaded Successfully!'}) + return jsonify({'prefixes': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading Zones!'}) + +# added to database +@site_management_api.route('/api/postAddZone', methods=["POST"]) +@access_api.login_required +def postAddZone(): + if request.method == "POST": + site_name = session['selected_site'] + zone = database_payloads.ZonesPayload(request.get_json()['name'], request.get_json()['description']) + site_management_database.insertZonesTuple(site_name, zone.payload()) + return jsonify({'error': False, 'message': f"Zone added to {site_name}."}) + return jsonify({'error': True, 'message': f"These was an error with adding this Zone to {site_name}."}) + +# added to database +@site_management_api.route('/api/postEditZone', methods=["POST"]) +@access_api.login_required +def postEditZone(): + if request.method == "POST": + site_name = session['selected_site'] + payload = {'id': request.get_json()['zone_id'], 'update': request.get_json()['update']} + zone = site_management_database.updateZonesTuple(site_name, payload) + return jsonify({'error': False, 'message': f"{zone['name']} edited in site {site_name}."}) + return jsonify({'error': True, 'message': f"These was an error with editing Zone {zone['name']} in {site_name}."}) + +# added to database +@site_management_api.route('/api/postAddLocation', methods=["POST"]) +@access_api.login_required +def postAddLocation(): + if request.method == "POST": + site_name = session['selected_site'] + location = database_payloads.LocationsPayload(request.get_json()['uuid'], request.get_json()['name'], request.get_json()['zone_id']) + site_management_database.insertLocationsTuple(site_name, location.payload()) + return jsonify({'error': False, 'message': f"Zone added to {site_name}."}) + return jsonify({'error': True, 'message': f"These was an error with adding this Zone to {site_name}."}) + +# added to database +@site_management_api.route('/api/postAddVendor', methods=["POST"]) +@access_api.login_required +def postAddVendor(): + if request.method == "POST": + site_name = session['selected_site'] + + vendor = database_payloads.VendorsPayload( + request.get_json()['vendor_name'], + session['user_id'], + request.get_json()['vendor_address'], + request.get_json()['vendor_phone_number'], + ) + site_management_database.insertVendorsTuple(site_name, vendor.payload()) + return jsonify({'error': False, 'message': f"Zone added to {site_name}."}) + return jsonify({'error': True, 'message': f"These was an error with adding this Zone to {site_name}."}) + +# added to database +@site_management_api.route('/api/postEditVendor', methods=["POST"]) +@access_api.login_required +def postEditVendor(): + if request.method == "POST": + site_name = session['selected_site'] + payload = {'id': request.get_json()['vendor_id'], 'update': request.get_json()['update']} + vendor = site_management_database.updateVendorsTuple(site_name, payload) + return jsonify({'error': False, 'message': f"{vendor['vendor_name']} edited in site {site_name}."}) + return jsonify({'error': True, 'message': f"These was an error with editing Zone {vendor['vendor_name']} in {site_name}."}) + +# added to database +@site_management_api.route('/api/postAddBrand', methods=["POST"]) +@access_api.login_required +def postAddBrand(): + if request.method == "POST": + site_name = session['selected_site'] + brand = database_payloads.BrandsPayload(request.get_json()['brand_name']) + site_management_database.insertBrandsTuple(site_name, brand.payload()) + return jsonify({'error': False, 'message': f"Brand added to {site_name}."}) + return jsonify({'error': True, 'message': f"These was an error with adding this Zone to {site_name}."}) + +# added to database +@site_management_api.route('/api/postEditBrand', methods=["POST"]) +@access_api.login_required +def postEditBrand(): + if request.method == "POST": + site_name = session['selected_site'] + payload = {'id': request.get_json()['brand_id'], 'update': request.get_json()['update']} + brand = site_management_database.updateBrandsTuple(site_name, payload) + return jsonify({'error': False, 'message': f"{brand['name']} edited in site {site_name}."}) + return jsonify({'error': True, 'message': f"These was an error with editing Zone {brand['name']} in {site_name}."}) + +# added to database +@site_management_api.route('/api/postAddPrefix', methods=["POST"]) +@access_api.login_required +def postAddPrefix(): + if request.method == "POST": + site_name = session['selected_site'] + prefix = database_payloads.SKUPrefixPayload(request.get_json()['prefix_uuid'], request.get_json()['prefix_name'], request.get_json()['prefix_description']) + site_management_database.insertSKUPrefixesTuple(site_name, prefix.payload()) + return jsonify({'error': False, 'message': f"Prefix added to {site_name}."}) + return jsonify({'error': True, 'message': f"These was an error with adding this Prefix to {site_name}."}) + +# added to database +@site_management_api.route('/api/postEditPrefix', methods=["POST"]) +@access_api.login_required +def postEditPrefix(): + if request.method == "POST": + site_name = session['selected_site'] + payload = {'id': request.get_json()['prefix_id'], 'update': request.get_json()['update']} + prefix = site_management_database.updateSKUPrefixesTuple(site_name, payload) + return jsonify({'error': False, 'message': f"{prefix['name']} edited in site {site_name}."}) + return jsonify({'error': True, 'message': f"These was an error with editing Zone {prefix['name']} in {site_name}."}) diff --git a/application/site_management/site_management_database.py b/application/site_management/site_management_database.py new file mode 100644 index 0000000..177ec9e --- /dev/null +++ b/application/site_management/site_management_database.py @@ -0,0 +1,488 @@ +# 3RD PARTY IMPORTS +import psycopg2 + +# APPLICATION IMPORTS +import config +from application import postsqldb + +def paginateZonesTuples(site, payload, convert=True, conn=None): + """ payload (tuple): (limit, offset) """ + recordset = () + count = 0 + self_conn = False + sql = f"SELECT * FROM {site}_zones LIMIT %s OFFSET %s;" + 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.fetchall() + if rows and convert: + recordset = [postsqldb.tupleDictionaryFactory(cur.description, row) for row in rows] + elif rows and not convert: + recordset = rows + + cur.execute(f"SELECT COUNT(*) FROM {site}_zones;") + count = cur.fetchone()[0] + + if self_conn: + conn.commit() + conn.close() + + return recordset, count + + except Exception as error: + raise postsqldb.DatabaseError(error, (), sql) + +def paginateLocationsTuples(site, payload, convert=True, conn=None): + """ payload (tuple): (limit, offset) """ + recordset = () + count = 0 + self_conn = False + sql = f"SELECT * FROM {site}_locations LIMIT %s OFFSET %s;" + 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.fetchall() + if rows and convert: + recordset = [postsqldb.tupleDictionaryFactory(cur.description, row) for row in rows] + elif rows and not convert: + recordset = rows + + cur.execute(f"SELECT COUNT(*) FROM {site}_locations;") + count = cur.fetchone()[0] + + if self_conn: + conn.commit() + conn.close() + + return recordset, count + except Exception as error: + raise postsqldb.DatabaseError(error, (), sql) + +def paginateVendorsTuples(site, payload, convert=True, conn=None): + """ payload (tuple): (limit, offset) """ + recordset = () + count = 0 + self_conn = False + sql = f"SELECT * FROM {site}_vendors LIMIT %s OFFSET %s;" + 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.fetchall() + if rows and convert: + recordset = [postsqldb.tupleDictionaryFactory(cur.description, row) for row in rows] + elif rows and not convert: + recordset = rows + + cur.execute(f"SELECT COUNT(*) FROM {site}_vendors;") + count = cur.fetchone()[0] + + if self_conn: + conn.commit() + conn.close() + + return recordset, count + except Exception as error: + raise postsqldb.DatabaseError(error, (), sql) + +def paginateBrandsTuples(site, payload, convert=True, conn=None): + """ payload (tuple): (limit, offset) """ + recordset = () + count = 0 + self_conn = False + sql = f"SELECT * FROM {site}_brands LIMIT %s OFFSET %s;" + 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.fetchall() + if rows and convert: + recordset = [postsqldb.tupleDictionaryFactory(cur.description, row) for row in rows] + elif rows and not convert: + recordset = rows + + cur.execute(f"SELECT COUNT(*) FROM {site}_brands;") + count = cur.fetchone()[0] + + if self_conn: + conn.commit() + conn.close() + + return recordset, count + except Exception as error: + raise postsqldb.DatabaseError(error, (), sql) + +def paginatePrefixesTuples(site, payload, convert=True, conn=None): + """ payload (_type_): (limit, offset) """ + recordset = [] + self_conn = False + count = 0 + sql = f"SELECT * FROM {site}_sku_prefix LIMIT %s OFFSET %s;" + 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.fetchall() + if rows and convert: + recordset = [postsqldb.tupleDictionaryFactory(cur.description, row) for row in rows] + if rows and not convert: + recordset = rows + + cur.execute(f"SELECT COUNT(*) FROM {site}_sku_prefix;") + count = cur.fetchone()[0] + + if self_conn: + conn.commit() + conn.close() + + return recordset, count + except (Exception, psycopg2.DatabaseError) as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def selectSitesTupleByName(payload, convert=True, conn=None): + """ payload (_type_): (site_name,) """ + record = () + self_conn = False + sql = f"SELECT id FROM sites WHERE site_name = %s;" + 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) + if rows and not convert: + record = rows + + if self_conn: + conn.commit() + conn.close() + + return record + except (Exception, psycopg2.DatabaseError) as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def selectZonesTuples(site, convert=True, conn=None): + """ payload (tuple): (limit, offset) """ + recordset = () + self_conn = False + sql = f"SELECT * FROM {site}_zones;" + 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) + rows = cur.fetchall() + if rows and convert: + recordset = [postsqldb.tupleDictionaryFactory(cur.description, row) for row in rows] + elif rows and not convert: + recordset = rows + + if self_conn: + conn.commit() + conn.close() + + return recordset + + except Exception as error: + raise postsqldb.DatabaseError(error, (), sql) + +def insertZonesTuple(site, payload, convert=True, conn=None): + """ payload (tuple): (name[str],) """ + zone = () + self_conn = False + with open(f"application/site_management/sql/insertZonesTuple.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: + zone = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + zone = rows + + if self_conn: + conn.commit() + conn.close() + + return zone + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def insertLocationsTuple(site, payload, convert=True, conn=None): + """ payload (tuple): (name[str],) """ + zone = () + self_conn = False + with open(f"application/site_management/sql/insertLocationsTuple.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: + zone = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + zone = rows + + if self_conn: + conn.commit() + conn.close() + + return zone + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def insertVendorsTuple(site, payload, convert=True, conn=None): + """ payload (tuple): (name[str],) """ + zone = () + self_conn = False + with open(f"application/site_management/sql/insertVendorsTuple.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: + zone = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + zone = rows + + if self_conn: + conn.commit() + conn.close() + + return zone + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def insertBrandsTuple(site, payload, convert=True, conn=None): + """ payload (tuple): (name[str],) """ + brand = () + self_conn = False + with open(f"application/site_management/sql/insertBrandsTuple.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: + brand = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + brand = rows + + if self_conn: + conn.commit() + conn.close() + + return brand + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def insertSKUPrefixesTuple(site, payload, convert=True, conn=None): + """ payload (tuple): (name[str],) """ + prefix = () + self_conn = False + with open(f"application/site_management/sql/insertSKUPrefixTuple.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: + prefix = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + prefix = rows + + if self_conn: + conn.commit() + conn.close() + + return prefix + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def updateSKUPrefixesTuple(site, payload, convert=True, conn=None): + """ payload (dict): {'id': row_id, 'update': {... column_to_update: value_to_update_to...}} """ + updated = () + self_conn = False + set_clause, values = postsqldb.updateStringFactory(payload['update']) + values.append(payload['id']) + sql = f"UPDATE {site}_sku_prefix SET {set_clause} WHERE id=%s RETURNING *;" + 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, values) + rows = cur.fetchone() + if rows and convert: + updated = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + updated = rows + + if self_conn: + conn.commit() + conn.close() + + return updated + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def updateZonesTuple(site, payload, convert=True, conn=None): + """ payload (dict): {'id': row_id, 'update': {... column_to_update: value_to_update_to...}} """ + updated = () + self_conn = False + set_clause, values = postsqldb.updateStringFactory(payload['update']) + values.append(payload['id']) + sql = f"UPDATE {site}_zones SET {set_clause} WHERE id=%s RETURNING *;" + 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, values) + rows = cur.fetchone() + if rows and convert: + updated = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + updated = rows + + if self_conn: + conn.commit() + conn.close() + + return updated + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def updateVendorsTuple(site, payload, convert=True, conn=None): + """ payload (dict): {'id': row_id, 'update': {... column_to_update: value_to_update_to...}} """ + updated = () + self_conn = False + set_clause, values = postsqldb.updateStringFactory(payload['update']) + values.append(payload['id']) + sql = f"UPDATE {site}_vendors SET {set_clause} WHERE id=%s RETURNING *;" + 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, values) + rows = cur.fetchone() + if rows and convert: + updated = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + updated = rows + + if self_conn: + conn.commit() + conn.close() + + return updated + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) + +def updateBrandsTuple(site, payload, convert=True, conn=None): + """ payload (dict): {'id': row_id, 'update': {... column_to_update: value_to_update_to...}} """ + updated = () + self_conn = False + set_clause, values = postsqldb.updateStringFactory(payload['update']) + values.append(payload['id']) + sql = f"UPDATE {site}_brands SET {set_clause} WHERE id=%s RETURNING *;" + 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, values) + rows = cur.fetchone() + if rows and convert: + updated = postsqldb.tupleDictionaryFactory(cur.description, rows) + elif rows and not convert: + updated = rows + + if self_conn: + conn.commit() + conn.close() + + return updated + except Exception as error: + raise postsqldb.DatabaseError(error, payload, sql) diff --git a/application/site_management/site_management_processes.py b/application/site_management/site_management_processes.py new file mode 100644 index 0000000..e69de29 diff --git a/application/site_management/sql/insertBrandsTuple.sql b/application/site_management/sql/insertBrandsTuple.sql new file mode 100644 index 0000000..ff24c65 --- /dev/null +++ b/application/site_management/sql/insertBrandsTuple.sql @@ -0,0 +1,4 @@ +INSERT INTO %%site_name%%_brands +(name) +VALUES (%s) +RETURNING *; \ No newline at end of file diff --git a/application/site_management/sql/insertLocationsTuple.sql b/application/site_management/sql/insertLocationsTuple.sql new file mode 100644 index 0000000..06f1f58 --- /dev/null +++ b/application/site_management/sql/insertLocationsTuple.sql @@ -0,0 +1,4 @@ +INSERT INTO %%site_name%%_locations +(uuid, name, zone_id) +VALUES (%s, %s, %s) +RETURNING *; \ No newline at end of file diff --git a/application/site_management/sql/insertSKUPrefixTuple.sql b/application/site_management/sql/insertSKUPrefixTuple.sql new file mode 100644 index 0000000..555146f --- /dev/null +++ b/application/site_management/sql/insertSKUPrefixTuple.sql @@ -0,0 +1,4 @@ +INSERT INTO %%site_name%%_sku_prefix +(uuid, name, description) +VALUES (%s, %s, %s) +RETURNING *; \ No newline at end of file diff --git a/application/site_management/sql/insertVendorsTuple.sql b/application/site_management/sql/insertVendorsTuple.sql new file mode 100644 index 0000000..83ad762 --- /dev/null +++ b/application/site_management/sql/insertVendorsTuple.sql @@ -0,0 +1,4 @@ +INSERT INTO %%site_name%%_vendors +(vendor_name, vendor_address, creation_date, created_by, phone_number) +VALUES (%s, %s, %s, %s, %s) +RETURNING *; \ No newline at end of file diff --git a/application/site_management/sql/insertZonesTuple.sql b/application/site_management/sql/insertZonesTuple.sql new file mode 100644 index 0000000..5175752 --- /dev/null +++ b/application/site_management/sql/insertZonesTuple.sql @@ -0,0 +1,4 @@ +INSERT INTO %%site_name%%_zones +(name, description) +VALUES (%s, %s) +RETURNING *; \ No newline at end of file diff --git a/static/handlers/workshopHandler.js b/application/site_management/static/js/site_management_handler.js similarity index 97% rename from static/handlers/workshopHandler.js rename to application/site_management/static/js/site_management_handler.js index 17a4612..faa937b 100644 --- a/static/handlers/workshopHandler.js +++ b/application/site_management/static/js/site_management_handler.js @@ -71,7 +71,7 @@ let zones_current_page = 1 let zones_end_page = 10 let zones_limit = 25 async function fetchZones(){ - const url = new URL('/workshop/getZones', window.location.origin) + const url = new URL('/site-management/api/getZones', window.location.origin) url.searchParams.append('page', zones_current_page) url.searchParams.append('limit', zones_limit) const response = await fetch(url) @@ -220,7 +220,7 @@ async function postAddZone() { let zoneName = `${document.getElementById('ZoneName').value}` let description = `${document.getElementById('ZoneDescription').value}` - const response = await fetch(`/workshop/postAddZone`, { + const response = await fetch(`/site-management/api/postAddZone`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -251,7 +251,7 @@ async function postAddZone() { async function postEditZone(zone_id) { let description = `${document.getElementById('ZoneDescription').value}` - const response = await fetch(`/workshop/postEditZone`, { + const response = await fetch(`/site-management/api/postEditZone`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -284,7 +284,7 @@ let locations_current_page = 1 let locations_end_page = 10 let locations_limit = 25 async function fetchLocations(){ - const url = new URL('/workshop/getLocations', window.location.origin) + const url = new URL('/site-management/api/getLocations', window.location.origin) url.searchParams.append('page', locations_current_page) url.searchParams.append('limit', locations_limit) const response = await fetch(url) @@ -417,7 +417,7 @@ async function postAddLocation() { let zone_name = document.getElementById(`locationzone_${zone_id}`).innerHTML let uuid = `${zone_name}@${locationName}` - const response = await fetch(`/workshop/postAddLocation`, { + const response = await fetch(`/site_management/api/postAddLocation`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -451,7 +451,7 @@ let vendors_current_page = 1 let vendors_end_page = 10 let vendors_limit = 25 async function fetchVendors(){ - const url = new URL('/workshop/getVendors', window.location.origin) + const url = new URL('/site-management/api/getVendors', window.location.origin) url.searchParams.append('page', vendors_current_page) url.searchParams.append('limit', vendors_limit) const response = await fetch(url) @@ -604,7 +604,7 @@ async function postAddVendor() { let vendor_phone_number = document.getElementById('VendorPhoneNumber').value let vendor_address = document.getElementById('VendorAddress').value - const response = await fetch(`/workshop/postAddVendor`, { + const response = await fetch(`/site-management/api/postAddVendor`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -638,7 +638,7 @@ async function postEditVendor(vendor_id) { let vendor_phone_number = document.getElementById('VendorPhoneNumber').value let vendor_address = document.getElementById('VendorAddress').value - const response = await fetch(`/workshop/postEditVendor`, { + const response = await fetch(`/site-management/api/postEditVendor`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -671,7 +671,7 @@ let brands_current_page = 1 let brands_end_page = 10 let brands_limit = 25 async function fetchBrands(){ - const url = new URL('/workshop/getBrands', window.location.origin) + const url = new URL('/site-management/api/getBrands', window.location.origin) url.searchParams.append('page', brands_current_page) url.searchParams.append('limit', brands_limit) const response = await fetch(url) @@ -813,7 +813,7 @@ async function openEditBrandsModal(brand) { async function postAddBrand() { let brand_name = document.getElementById('BrandName').value - const response = await fetch(`/workshop/postAddBrand`, { + const response = await fetch(`/site-management/api/postAddBrand`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -843,7 +843,7 @@ async function postAddBrand() { async function postEditBrand(brand_id) { let brand_name = document.getElementById('BrandName').value - const response = await fetch(`/workshop/postEditBrand`, { + const response = await fetch(`/site-management/api/postEditBrand`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -876,7 +876,7 @@ let prefix_current_page = 1 let prefix_end_page = 10 let prefix_limit = 25 async function fetchPrefixes(){ - const url = new URL('/workshop/getPrefixes', window.location.origin) + const url = new URL('/site-management/api/getPrefixes', window.location.origin) url.searchParams.append('page', prefix_current_page) url.searchParams.append('limit', prefix_limit) const response = await fetch(url) @@ -1029,7 +1029,7 @@ async function postAddPrefix() { let prefix_name = document.getElementById('PrefixName').value let prefix_description = document.getElementById('PrefixDescription').value - const response = await fetch(`/workshop/postAddPrefix`, { + const response = await fetch(`/site-management/api/postAddPrefix`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -1063,7 +1063,7 @@ async function postEditPrefix(prefix_id) { let prefix_name = document.getElementById('PrefixName').value let prefix_description = document.getElementById('PrefixDescription').value - const response = await fetch(`/workshop/postEditPrefix`, { + const response = await fetch(`/site-management/api/postEditPrefix`, { method: 'POST', headers: { 'Content-Type': 'application/json', diff --git a/templates/other/workshop.html b/application/site_management/templates/site_management.html similarity index 99% rename from templates/other/workshop.html rename to application/site_management/templates/site_management.html index 957a8f4..b5d5ba6 100644 --- a/templates/other/workshop.html +++ b/application/site_management/templates/site_management.html @@ -481,5 +481,5 @@ {% endassets %} - + \ No newline at end of file diff --git a/database.log b/database.log deleted file mode 100644 index abc5896..0000000 --- a/database.log +++ /dev/null @@ -1,1937 +0,0 @@ - -2025-03-19 14:36:27.422471 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "sites_site_name_key"DETAIL: Key (site_name)=(test) already exists.', - payload=('test', 'This is my test site', datetime.datetime(2025, 3, 19, 14, 36, 27, 421459), 1, '{}', None, None, None), - sql='INSERT INTO sites(site_name, site_description, creation_date, site_owner_id, flags, default_zone,default_auto_issue_location, default_primary_location) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:41:51.498701 --- ERROR --- DatabaseError(message='malformed array literal: "{n,o,-,s,t,i,c,k, ,g,p,r,a,y,m,l,v,e,d,x,w,h,f,|,5,0}"LINE 3: ...ificial-preservatives-flavors-colors-net-wt-50}', '{n,o,-,s,... ^DETAIL: Unexpected "," character.', - payload=('{en:no-stick-cooking-spray-pam-olive-oil-made-extra-virgin-olive-oil-with-expeller-pressed-no-artificial-preservatives-flavors-colors-net-wt-50}', '{n,o,-,s,t,i,c,k, ,g,p,r,a,y,m,l,v,e,d,x,w,h,f,|,5,0}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "g", "fibers": "", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:41:52.044494 --- ERROR --- DatabaseError(message='malformed array literal: "{C,a,r,b,o,n,t,e,d, ,W,,,H,i,g,h,F,u,c,s,S,y,p,m,l,P,A,N,v,f,.}"LINE 3: ...l-flavouring,en:flavouring,en:caffeine,en:e330}', '{C,a,r,b,... ^DETAIL: Unexpected "," character.', - payload=('{en:carbonated-water,en:water,en:high-fructose-corn-syrup,en:added-sugar,en:disaccharide,en:monosaccharide,en:fructose,en:glucose,en:corn-syrup,en:glucose-fructose-syrup,en:e150a,en:sugar,en:e338,en:natural-flavouring,en:flavouring,en:caffeine,en:e330}', '{C,a,r,b,o,n,t,e,d, ,W,,,H,i,g,h,F,u,c,s,S,y,p,m,l,P,A,N,v,f,.}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "", "fibers": "", "fibers_unit": ""}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:41:52.069785 --- ERROR --- DatabaseError(message='malformed array literal: "{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}"LINE 3: VALUES ('{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,... ^DETAIL: Unexpected "," character.', - payload=('{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}', '{c,,, ,a,r,b,o,n,t,e,d,w,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "0", "proteins_unit": "g", "fats": "0", "fats_unit": "g", "carbohydrates": "46", "carbohydrates_unit": "g", "sugars": "46", "sugars_unit": "g", "sodium": "0.06", "sodium_unit": "mg", "fibers": "0", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:41:54.274588 --- ERROR --- DatabaseError(message='malformed array literal: "{P,o,r,k,,, ,w,a,t,e,b,n,d,l,s,h,2,%,f,i,g,:,p,u,m,c,y,x,v,j,(,),.}"LINE 3: ...:salt,en:maltodextrin,en:lemon,en:citrus-fruit}', '{P,o,r,k,... ^DETAIL: Unexpected "," character.', - payload=('{en:pork,en:animal,en:water,en:beer,en:alcohol,en:and-less-than-2-of-the-following,en:e326,en:corn-syrup,en:added-sugar,en:disaccharide,en:dextrose,en:monosaccharide,en:glucose,en:spice,en:condiment,en:natural-flavouring,en:flavouring,en:e339,en:e262ii,en:e262,en:lemon-juice,en:fruit,en:juice,en:fruit-juice,en:collagen-casing,en:salt,en:maltodextrin,en:lemon,en:citrus-fruit}', '{P,o,r,k,,, ,w,a,t,e,b,n,d,l,s,h,2,%,f,i,g,:,p,u,m,c,y,x,v,j,(,),.}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "9", "proteins_unit": "g", "fats": "20", "fats_unit": "g", "carbohydrates": "2", "carbohydrates_unit": "g", "sugars": "1", "sugars_unit": "g", "sodium": "0.55", "sodium_unit": "mg", "fibers": "0", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:41:56.869612 --- ERROR --- DatabaseError(message='malformed array literal: "{C,A,R,B,O,N,T,E,D, ,W,,,H,I,G,F,U,S,Y,L,V,M,Z,(,P,),s,m,a,r,t,l,o,b,e,•,5,1,0,7,c,n,f,i,-,8,4,3,2,9}"LINE 3: ...-432-97,en:preserves-freshness,en:preservative}', '{C,A,R,B,... ^DETAIL: Unexpected "," character.', - payload=('{en:carbonated-water,en:water,en:high-fructose-corn-syri-natural-and-artificial-flavor,en:e330,en:e211,en:caffeine,en:e414,en:sodium-citrate,en:minerals,en:sodium,en:calciu-smartlobel,en:disodium-edta,en:e444,en:e102,en:blue-bottled-under-the-authority-of-pepsico,en:inc,en:purchase,en:ny-10577-scan-for-info-call-for-info-1-800-432-97,en:preserves-freshness,en:preservative}', '{C,A,R,B,O,N,T,E,D, ,W,,,H,I,G,F,U,S,Y,L,V,M,Z,(,P,),s,m,a,r,t,l,o,b,e,•,5,1,0,7,c,n,f,i,-,8,4,3,2,9}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "g", "fibers": "", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:49:48.467790 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "sites_site_name_key"DETAIL: Key (site_name)=(test) already exists.', - payload=('test', 'This is my test site', datetime.datetime(2025, 3, 19, 14, 49, 48, 466784), 1, '{}', None, None, None), - sql='INSERT INTO sites(site_name, site_description, creation_date, site_owner_id, flags, default_zone,default_auto_issue_location, default_primary_location) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:49:53.691975 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "sites_site_name_key"DETAIL: Key (site_name)=(test) already exists.', - payload=('test', 'This is my test site', datetime.datetime(2025, 3, 19, 14, 49, 53, 691975), 1, '{}', None, None, None), - sql='INSERT INTO sites(site_name, site_description, creation_date, site_owner_id, flags, default_zone,default_auto_issue_location, default_primary_location) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:49:54.200974 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "sites_site_name_key"DETAIL: Key (site_name)=(test) already exists.', - payload=('test', 'This is my test site', datetime.datetime(2025, 3, 19, 14, 49, 54, 199652), 1, '{}', None, None, None), - sql='INSERT INTO sites(site_name, site_description, creation_date, site_owner_id, flags, default_zone,default_auto_issue_location, default_primary_location) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:50:55.176081 --- ERROR --- DatabaseError(message='malformed array literal: "{n,o,-,s,t,i,c,k, ,g,p,r,a,y,m,l,v,e,d,x,w,h,f,|,5,0}"LINE 3: ...ificial-preservatives-flavors-colors-net-wt-50}', '{n,o,-,s,... ^DETAIL: Unexpected "," character.', - payload=('{en:no-stick-cooking-spray-pam-olive-oil-made-extra-virgin-olive-oil-with-expeller-pressed-no-artificial-preservatives-flavors-colors-net-wt-50}', '{n,o,-,s,t,i,c,k, ,g,p,r,a,y,m,l,v,e,d,x,w,h,f,|,5,0}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "g", "fibers": "", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:50:55.766282 --- ERROR --- DatabaseError(message='malformed array literal: "{C,a,r,b,o,n,t,e,d, ,W,,,H,i,g,h,F,u,c,s,S,y,p,m,l,P,A,N,v,f,.}"LINE 3: ...l-flavouring,en:flavouring,en:caffeine,en:e330}', '{C,a,r,b,... ^DETAIL: Unexpected "," character.', - payload=('{en:carbonated-water,en:water,en:high-fructose-corn-syrup,en:added-sugar,en:disaccharide,en:monosaccharide,en:fructose,en:glucose,en:corn-syrup,en:glucose-fructose-syrup,en:e150a,en:sugar,en:e338,en:natural-flavouring,en:flavouring,en:caffeine,en:e330}', '{C,a,r,b,o,n,t,e,d, ,W,,,H,i,g,h,F,u,c,s,S,y,p,m,l,P,A,N,v,f,.}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "", "fibers": "", "fibers_unit": ""}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:50:55.800573 --- ERROR --- DatabaseError(message='malformed array literal: "{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}"LINE 3: VALUES ('{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,... ^DETAIL: Unexpected "," character.', - payload=('{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}', '{c,,, ,a,r,b,o,n,t,e,d,w,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "0", "proteins_unit": "g", "fats": "0", "fats_unit": "g", "carbohydrates": "46", "carbohydrates_unit": "g", "sugars": "46", "sugars_unit": "g", "sodium": "0.06", "sodium_unit": "mg", "fibers": "0", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:50:58.247624 --- ERROR --- DatabaseError(message='malformed array literal: "{P,o,r,k,,, ,w,a,t,e,b,n,d,l,s,h,2,%,f,i,g,:,p,u,m,c,y,x,v,j,(,),.}"LINE 3: ...:salt,en:maltodextrin,en:lemon,en:citrus-fruit}', '{P,o,r,k,... ^DETAIL: Unexpected "," character.', - payload=('{en:pork,en:animal,en:water,en:beer,en:alcohol,en:and-less-than-2-of-the-following,en:e326,en:corn-syrup,en:added-sugar,en:disaccharide,en:dextrose,en:monosaccharide,en:glucose,en:spice,en:condiment,en:natural-flavouring,en:flavouring,en:e339,en:e262ii,en:e262,en:lemon-juice,en:fruit,en:juice,en:fruit-juice,en:collagen-casing,en:salt,en:maltodextrin,en:lemon,en:citrus-fruit}', '{P,o,r,k,,, ,w,a,t,e,b,n,d,l,s,h,2,%,f,i,g,:,p,u,m,c,y,x,v,j,(,),.}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "9", "proteins_unit": "g", "fats": "20", "fats_unit": "g", "carbohydrates": "2", "carbohydrates_unit": "g", "sugars": "1", "sugars_unit": "g", "sodium": "0.55", "sodium_unit": "mg", "fibers": "0", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:51:01.113304 --- ERROR --- DatabaseError(message='malformed array literal: "{C,A,R,B,O,N,T,E,D, ,W,,,H,I,G,F,U,S,Y,L,V,M,Z,(,P,),s,m,a,r,t,l,o,b,e,•,5,1,0,7,c,n,f,i,-,8,4,3,2,9}"LINE 3: ...-432-97,en:preserves-freshness,en:preservative}', '{C,A,R,B,... ^DETAIL: Unexpected "," character.', - payload=('{en:carbonated-water,en:water,en:high-fructose-corn-syri-natural-and-artificial-flavor,en:e330,en:e211,en:caffeine,en:e414,en:sodium-citrate,en:minerals,en:sodium,en:calciu-smartlobel,en:disodium-edta,en:e444,en:e102,en:blue-bottled-under-the-authority-of-pepsico,en:inc,en:purchase,en:ny-10577-scan-for-info-call-for-info-1-800-432-97,en:preserves-freshness,en:preservative}', '{C,A,R,B,O,N,T,E,D, ,W,,,H,I,G,F,U,S,Y,L,V,M,Z,(,P,),s,m,a,r,t,l,o,b,e,•,5,1,0,7,c,n,f,i,-,8,4,3,2,9}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "g", "fibers": "", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:51:21.420962 --- ERROR --- DatabaseError(message='malformed array literal: "{n,o,-,s,t,i,c,k, ,g,p,r,a,y,m,l,v,e,d,x,w,h,f,|,5,0}"LINE 3: ...ificial-preservatives-flavors-colors-net-wt-50}', '{n,o,-,s,... ^DETAIL: Unexpected "," character.', - payload=('{en:no-stick-cooking-spray-pam-olive-oil-made-extra-virgin-olive-oil-with-expeller-pressed-no-artificial-preservatives-flavors-colors-net-wt-50}', '{n,o,-,s,t,i,c,k, ,g,p,r,a,y,m,l,v,e,d,x,w,h,f,|,5,0}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "g", "fibers": "", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:51:21.928350 --- ERROR --- DatabaseError(message='malformed array literal: "{C,a,r,b,o,n,t,e,d, ,W,,,H,i,g,h,F,u,c,s,S,y,p,m,l,P,A,N,v,f,.}"LINE 3: ...l-flavouring,en:flavouring,en:caffeine,en:e330}', '{C,a,r,b,... ^DETAIL: Unexpected "," character.', - payload=('{en:carbonated-water,en:water,en:high-fructose-corn-syrup,en:added-sugar,en:disaccharide,en:monosaccharide,en:fructose,en:glucose,en:corn-syrup,en:glucose-fructose-syrup,en:e150a,en:sugar,en:e338,en:natural-flavouring,en:flavouring,en:caffeine,en:e330}', '{C,a,r,b,o,n,t,e,d, ,W,,,H,i,g,h,F,u,c,s,S,y,p,m,l,P,A,N,v,f,.}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "", "fibers": "", "fibers_unit": ""}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:51:21.961384 --- ERROR --- DatabaseError(message='malformed array literal: "{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}"LINE 3: VALUES ('{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,... ^DETAIL: Unexpected "," character.', - payload=('{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}', '{c,,, ,a,r,b,o,n,t,e,d,w,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "0", "proteins_unit": "g", "fats": "0", "fats_unit": "g", "carbohydrates": "46", "carbohydrates_unit": "g", "sugars": "46", "sugars_unit": "g", "sodium": "0.06", "sodium_unit": "mg", "fibers": "0", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:51:24.296390 --- ERROR --- DatabaseError(message='malformed array literal: "{P,o,r,k,,, ,w,a,t,e,b,n,d,l,s,h,2,%,f,i,g,:,p,u,m,c,y,x,v,j,(,),.}"LINE 3: ...:salt,en:maltodextrin,en:lemon,en:citrus-fruit}', '{P,o,r,k,... ^DETAIL: Unexpected "," character.', - payload=('{en:pork,en:animal,en:water,en:beer,en:alcohol,en:and-less-than-2-of-the-following,en:e326,en:corn-syrup,en:added-sugar,en:disaccharide,en:dextrose,en:monosaccharide,en:glucose,en:spice,en:condiment,en:natural-flavouring,en:flavouring,en:e339,en:e262ii,en:e262,en:lemon-juice,en:fruit,en:juice,en:fruit-juice,en:collagen-casing,en:salt,en:maltodextrin,en:lemon,en:citrus-fruit}', '{P,o,r,k,,, ,w,a,t,e,b,n,d,l,s,h,2,%,f,i,g,:,p,u,m,c,y,x,v,j,(,),.}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "9", "proteins_unit": "g", "fats": "20", "fats_unit": "g", "carbohydrates": "2", "carbohydrates_unit": "g", "sugars": "1", "sugars_unit": "g", "sodium": "0.55", "sodium_unit": "mg", "fibers": "0", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:51:26.954053 --- ERROR --- DatabaseError(message='malformed array literal: "{C,A,R,B,O,N,T,E,D, ,W,,,H,I,G,F,U,S,Y,L,V,M,Z,(,P,),s,m,a,r,t,l,o,b,e,•,5,1,0,7,c,n,f,i,-,8,4,3,2,9}"LINE 3: ...-432-97,en:preserves-freshness,en:preservative}', '{C,A,R,B,... ^DETAIL: Unexpected "," character.', - payload=('{en:carbonated-water,en:water,en:high-fructose-corn-syri-natural-and-artificial-flavor,en:e330,en:e211,en:caffeine,en:e414,en:sodium-citrate,en:minerals,en:sodium,en:calciu-smartlobel,en:disodium-edta,en:e444,en:e102,en:blue-bottled-under-the-authority-of-pepsico,en:inc,en:purchase,en:ny-10577-scan-for-info-call-for-info-1-800-432-97,en:preserves-freshness,en:preservative}', '{C,A,R,B,O,N,T,E,D, ,W,,,H,I,G,F,U,S,Y,L,V,M,Z,(,P,),s,m,a,r,t,l,o,b,e,•,5,1,0,7,c,n,f,i,-,8,4,3,2,9}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "g", "fibers": "", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:54:27.195058 --- ERROR --- DatabaseError(message='malformed array literal: "{n,o,-,s,t,i,c,k, ,g,p,r,a,y,m,l,v,e,d,x,w,h,f,|,5,0}"LINE 3: ...ificial-preservatives-flavors-colors-net-wt-50}', '{n,o,-,s,... ^DETAIL: Unexpected "," character.', - payload=('{en:no-stick-cooking-spray-pam-olive-oil-made-extra-virgin-olive-oil-with-expeller-pressed-no-artificial-preservatives-flavors-colors-net-wt-50}', '{n,o,-,s,t,i,c,k, ,g,p,r,a,y,m,l,v,e,d,x,w,h,f,|,5,0}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "g", "fibers": "", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:54:27.834941 --- ERROR --- DatabaseError(message='malformed array literal: "{C,a,r,b,o,n,t,e,d, ,W,,,H,i,g,h,F,u,c,s,S,y,p,m,l,P,A,N,v,f,.}"LINE 3: ...l-flavouring,en:flavouring,en:caffeine,en:e330}', '{C,a,r,b,... ^DETAIL: Unexpected "," character.', - payload=('{en:carbonated-water,en:water,en:high-fructose-corn-syrup,en:added-sugar,en:disaccharide,en:monosaccharide,en:fructose,en:glucose,en:corn-syrup,en:glucose-fructose-syrup,en:e150a,en:sugar,en:e338,en:natural-flavouring,en:flavouring,en:caffeine,en:e330}', '{C,a,r,b,o,n,t,e,d, ,W,,,H,i,g,h,F,u,c,s,S,y,p,m,l,P,A,N,v,f,.}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "", "fibers": "", "fibers_unit": ""}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:54:27.879739 --- ERROR --- DatabaseError(message='malformed array literal: "{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}"LINE 3: VALUES ('{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,... ^DETAIL: Unexpected "," character.', - payload=('{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}', '{c,,, ,a,r,b,o,n,t,e,d,w,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "0", "proteins_unit": "g", "fats": "0", "fats_unit": "g", "carbohydrates": "46", "carbohydrates_unit": "g", "sugars": "46", "sugars_unit": "g", "sodium": "0.06", "sodium_unit": "mg", "fibers": "0", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:54:30.255974 --- ERROR --- DatabaseError(message='malformed array literal: "{P,o,r,k,,, ,w,a,t,e,b,n,d,l,s,h,2,%,f,i,g,:,p,u,m,c,y,x,v,j,(,),.}"LINE 3: ...:salt,en:maltodextrin,en:lemon,en:citrus-fruit}', '{P,o,r,k,... ^DETAIL: Unexpected "," character.', - payload=('{en:pork,en:animal,en:water,en:beer,en:alcohol,en:and-less-than-2-of-the-following,en:e326,en:corn-syrup,en:added-sugar,en:disaccharide,en:dextrose,en:monosaccharide,en:glucose,en:spice,en:condiment,en:natural-flavouring,en:flavouring,en:e339,en:e262ii,en:e262,en:lemon-juice,en:fruit,en:juice,en:fruit-juice,en:collagen-casing,en:salt,en:maltodextrin,en:lemon,en:citrus-fruit}', '{P,o,r,k,,, ,w,a,t,e,b,n,d,l,s,h,2,%,f,i,g,:,p,u,m,c,y,x,v,j,(,),.}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "9", "proteins_unit": "g", "fats": "20", "fats_unit": "g", "carbohydrates": "2", "carbohydrates_unit": "g", "sugars": "1", "sugars_unit": "g", "sodium": "0.55", "sodium_unit": "mg", "fibers": "0", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:54:32.971379 --- ERROR --- DatabaseError(message='malformed array literal: "{C,A,R,B,O,N,T,E,D, ,W,,,H,I,G,F,U,S,Y,L,V,M,Z,(,P,),s,m,a,r,t,l,o,b,e,•,5,1,0,7,c,n,f,i,-,8,4,3,2,9}"LINE 3: ...-432-97,en:preserves-freshness,en:preservative}', '{C,A,R,B,... ^DETAIL: Unexpected "," character.', - payload=('{en:carbonated-water,en:water,en:high-fructose-corn-syri-natural-and-artificial-flavor,en:e330,en:e211,en:caffeine,en:e414,en:sodium-citrate,en:minerals,en:sodium,en:calciu-smartlobel,en:disodium-edta,en:e444,en:e102,en:blue-bottled-under-the-authority-of-pepsico,en:inc,en:purchase,en:ny-10577-scan-for-info-call-for-info-1-800-432-97,en:preserves-freshness,en:preservative}', '{C,A,R,B,O,N,T,E,D, ,W,,,H,I,G,F,U,S,Y,L,V,M,Z,(,P,),s,m,a,r,t,l,o,b,e,•,5,1,0,7,c,n,f,i,-,8,4,3,2,9}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "g", "fibers": "", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:56:35.749498 --- ERROR --- DatabaseError(message='malformed array literal: "{n,o,-,s,t,i,c,k, ,g,p,r,a,y,m,l,v,e,d,x,w,h,f,|,5,0}"LINE 3: ...ificial-preservatives-flavors-colors-net-wt-50}', '{n,o,-,s,... ^DETAIL: Unexpected "," character.', - payload=('{en:no-stick-cooking-spray-pam-olive-oil-made-extra-virgin-olive-oil-with-expeller-pressed-no-artificial-preservatives-flavors-colors-net-wt-50}', '{n,o,-,s,t,i,c,k, ,g,p,r,a,y,m,l,v,e,d,x,w,h,f,|,5,0}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "g", "fibers": "", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:56:36.282177 --- ERROR --- DatabaseError(message='malformed array literal: "{C,a,r,b,o,n,t,e,d, ,W,,,H,i,g,h,F,u,c,s,S,y,p,m,l,P,A,N,v,f,.}"LINE 3: ...l-flavouring,en:flavouring,en:caffeine,en:e330}', '{C,a,r,b,... ^DETAIL: Unexpected "," character.', - payload=('{en:carbonated-water,en:water,en:high-fructose-corn-syrup,en:added-sugar,en:disaccharide,en:monosaccharide,en:fructose,en:glucose,en:corn-syrup,en:glucose-fructose-syrup,en:e150a,en:sugar,en:e338,en:natural-flavouring,en:flavouring,en:caffeine,en:e330}', '{C,a,r,b,o,n,t,e,d, ,W,,,H,i,g,h,F,u,c,s,S,y,p,m,l,P,A,N,v,f,.}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "", "fibers": "", "fibers_unit": ""}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:56:36.311650 --- ERROR --- DatabaseError(message='malformed array literal: "{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}"LINE 3: VALUES ('{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,... ^DETAIL: Unexpected "," character.', - payload=('{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}', '{c,,, ,a,r,b,o,n,t,e,d,w,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "0", "proteins_unit": "g", "fats": "0", "fats_unit": "g", "carbohydrates": "46", "carbohydrates_unit": "g", "sugars": "46", "sugars_unit": "g", "sodium": "0.06", "sodium_unit": "mg", "fibers": "0", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:56:38.381903 --- ERROR --- DatabaseError(message='malformed array literal: "{P,o,r,k,,, ,w,a,t,e,b,n,d,l,s,h,2,%,f,i,g,:,p,u,m,c,y,x,v,j,(,),.}"LINE 3: ...:salt,en:maltodextrin,en:lemon,en:citrus-fruit}', '{P,o,r,k,... ^DETAIL: Unexpected "," character.', - payload=('{en:pork,en:animal,en:water,en:beer,en:alcohol,en:and-less-than-2-of-the-following,en:e326,en:corn-syrup,en:added-sugar,en:disaccharide,en:dextrose,en:monosaccharide,en:glucose,en:spice,en:condiment,en:natural-flavouring,en:flavouring,en:e339,en:e262ii,en:e262,en:lemon-juice,en:fruit,en:juice,en:fruit-juice,en:collagen-casing,en:salt,en:maltodextrin,en:lemon,en:citrus-fruit}', '{P,o,r,k,,, ,w,a,t,e,b,n,d,l,s,h,2,%,f,i,g,:,p,u,m,c,y,x,v,j,(,),.}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "9", "proteins_unit": "g", "fats": "20", "fats_unit": "g", "carbohydrates": "2", "carbohydrates_unit": "g", "sugars": "1", "sugars_unit": "g", "sodium": "0.55", "sodium_unit": "mg", "fibers": "0", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:56:40.965828 --- ERROR --- DatabaseError(message='malformed array literal: "{C,A,R,B,O,N,T,E,D, ,W,,,H,I,G,F,U,S,Y,L,V,M,Z,(,P,),s,m,a,r,t,l,o,b,e,•,5,1,0,7,c,n,f,i,-,8,4,3,2,9}"LINE 3: ...-432-97,en:preserves-freshness,en:preservative}', '{C,A,R,B,... ^DETAIL: Unexpected "," character.', - payload=('{en:carbonated-water,en:water,en:high-fructose-corn-syri-natural-and-artificial-flavor,en:e330,en:e211,en:caffeine,en:e414,en:sodium-citrate,en:minerals,en:sodium,en:calciu-smartlobel,en:disodium-edta,en:e444,en:e102,en:blue-bottled-under-the-authority-of-pepsico,en:inc,en:purchase,en:ny-10577-scan-for-info-call-for-info-1-800-432-97,en:preserves-freshness,en:preservative}', '{C,A,R,B,O,N,T,E,D, ,W,,,H,I,G,F,U,S,Y,L,V,M,Z,(,P,),s,m,a,r,t,l,o,b,e,•,5,1,0,7,c,n,f,i,-,8,4,3,2,9}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "g", "fibers": "", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:57:29.949369 --- ERROR --- DatabaseError(message='malformed array literal: "{n,o,-,s,t,i,c,k, ,g,p,r,a,y,m,l,v,e,d,x,w,h,f,|,5,0}"LINE 3: ...ificial-preservatives-flavors-colors-net-wt-50}', '{n,o,-,s,... ^DETAIL: Unexpected "," character.', - payload=('{en:no-stick-cooking-spray-pam-olive-oil-made-extra-virgin-olive-oil-with-expeller-pressed-no-artificial-preservatives-flavors-colors-net-wt-50}', '{n,o,-,s,t,i,c,k, ,g,p,r,a,y,m,l,v,e,d,x,w,h,f,|,5,0}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "g", "fibers": "", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:57:30.445350 --- ERROR --- DatabaseError(message='malformed array literal: "{C,a,r,b,o,n,t,e,d, ,W,,,H,i,g,h,F,u,c,s,S,y,p,m,l,P,A,N,v,f,.}"LINE 3: ...l-flavouring,en:flavouring,en:caffeine,en:e330}', '{C,a,r,b,... ^DETAIL: Unexpected "," character.', - payload=('{en:carbonated-water,en:water,en:high-fructose-corn-syrup,en:added-sugar,en:disaccharide,en:monosaccharide,en:fructose,en:glucose,en:corn-syrup,en:glucose-fructose-syrup,en:e150a,en:sugar,en:e338,en:natural-flavouring,en:flavouring,en:caffeine,en:e330}', '{C,a,r,b,o,n,t,e,d, ,W,,,H,i,g,h,F,u,c,s,S,y,p,m,l,P,A,N,v,f,.}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "", "fibers": "", "fibers_unit": ""}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:57:30.482176 --- ERROR --- DatabaseError(message='malformed array literal: "{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}"LINE 3: VALUES ('{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,... ^DETAIL: Unexpected "," character.', - payload=('{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}', '{c,,, ,a,r,b,o,n,t,e,d,w,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "0", "proteins_unit": "g", "fats": "0", "fats_unit": "g", "carbohydrates": "46", "carbohydrates_unit": "g", "sugars": "46", "sugars_unit": "g", "sodium": "0.06", "sodium_unit": "mg", "fibers": "0", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:57:32.484221 --- ERROR --- DatabaseError(message='malformed array literal: "{P,o,r,k,,, ,w,a,t,e,b,n,d,l,s,h,2,%,f,i,g,:,p,u,m,c,y,x,v,j,(,),.}"LINE 3: ...:salt,en:maltodextrin,en:lemon,en:citrus-fruit}', '{P,o,r,k,... ^DETAIL: Unexpected "," character.', - payload=('{en:pork,en:animal,en:water,en:beer,en:alcohol,en:and-less-than-2-of-the-following,en:e326,en:corn-syrup,en:added-sugar,en:disaccharide,en:dextrose,en:monosaccharide,en:glucose,en:spice,en:condiment,en:natural-flavouring,en:flavouring,en:e339,en:e262ii,en:e262,en:lemon-juice,en:fruit,en:juice,en:fruit-juice,en:collagen-casing,en:salt,en:maltodextrin,en:lemon,en:citrus-fruit}', '{P,o,r,k,,, ,w,a,t,e,b,n,d,l,s,h,2,%,f,i,g,:,p,u,m,c,y,x,v,j,(,),.}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "9", "proteins_unit": "g", "fats": "20", "fats_unit": "g", "carbohydrates": "2", "carbohydrates_unit": "g", "sugars": "1", "sugars_unit": "g", "sodium": "0.55", "sodium_unit": "mg", "fibers": "0", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 14:57:34.898794 --- ERROR --- DatabaseError(message='malformed array literal: "{C,A,R,B,O,N,T,E,D, ,W,,,H,I,G,F,U,S,Y,L,V,M,Z,(,P,),s,m,a,r,t,l,o,b,e,•,5,1,0,7,c,n,f,i,-,8,4,3,2,9}"LINE 3: ...-432-97,en:preserves-freshness,en:preservative}', '{C,A,R,B,... ^DETAIL: Unexpected "," character.', - payload=('{en:carbonated-water,en:water,en:high-fructose-corn-syri-natural-and-artificial-flavor,en:e330,en:e211,en:caffeine,en:e414,en:sodium-citrate,en:minerals,en:sodium,en:calciu-smartlobel,en:disodium-edta,en:e444,en:e102,en:blue-bottled-under-the-authority-of-pepsico,en:inc,en:purchase,en:ny-10577-scan-for-info-call-for-info-1-800-432-97,en:preserves-freshness,en:preservative}', '{C,A,R,B,O,N,T,E,D, ,W,,,H,I,G,F,U,S,Y,L,V,M,Z,(,P,),s,m,a,r,t,l,o,b,e,•,5,1,0,7,c,n,f,i,-,8,4,3,2,9}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "g", "fibers": "", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 15:00:20.968131 --- ERROR --- DatabaseError(message='malformed array literal: "{n,o,-,s,t,i,c,k, ,g,p,r,a,y,m,l,v,e,d,x,w,h,f,|,5,0}"LINE 3: ...ificial-preservatives-flavors-colors-net-wt-50}', '{n,o,-,s,... ^DETAIL: Unexpected "," character.', - payload=('{en:no-stick-cooking-spray-pam-olive-oil-made-extra-virgin-olive-oil-with-expeller-pressed-no-artificial-preservatives-flavors-colors-net-wt-50}', '{n,o,-,s,t,i,c,k, ,g,p,r,a,y,m,l,v,e,d,x,w,h,f,|,5,0}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "g", "fibers": "", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 15:00:21.697897 --- ERROR --- DatabaseError(message='malformed array literal: "{C,a,r,b,o,n,t,e,d, ,W,,,H,i,g,h,F,u,c,s,S,y,p,m,l,P,A,N,v,f,.}"LINE 3: ...l-flavouring,en:flavouring,en:caffeine,en:e330}', '{C,a,r,b,... ^DETAIL: Unexpected "," character.', - payload=('{en:carbonated-water,en:water,en:high-fructose-corn-syrup,en:added-sugar,en:disaccharide,en:monosaccharide,en:fructose,en:glucose,en:corn-syrup,en:glucose-fructose-syrup,en:e150a,en:sugar,en:e338,en:natural-flavouring,en:flavouring,en:caffeine,en:e330}', '{C,a,r,b,o,n,t,e,d, ,W,,,H,i,g,h,F,u,c,s,S,y,p,m,l,P,A,N,v,f,.}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "", "fibers": "", "fibers_unit": ""}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 15:00:21.731824 --- ERROR --- DatabaseError(message='malformed array literal: "{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}"LINE 3: VALUES ('{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,... ^DETAIL: Unexpected "," character.', - payload=('{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}', '{c,,, ,a,r,b,o,n,t,e,d,w,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "0", "proteins_unit": "g", "fats": "0", "fats_unit": "g", "carbohydrates": "46", "carbohydrates_unit": "g", "sugars": "46", "sugars_unit": "g", "sodium": "0.06", "sodium_unit": "mg", "fibers": "0", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 15:00:24.310086 --- ERROR --- DatabaseError(message='malformed array literal: "{P,o,r,k,,, ,w,a,t,e,b,n,d,l,s,h,2,%,f,i,g,:,p,u,m,c,y,x,v,j,(,),.}"LINE 3: ...:salt,en:maltodextrin,en:lemon,en:citrus-fruit}', '{P,o,r,k,... ^DETAIL: Unexpected "," character.', - payload=('{en:pork,en:animal,en:water,en:beer,en:alcohol,en:and-less-than-2-of-the-following,en:e326,en:corn-syrup,en:added-sugar,en:disaccharide,en:dextrose,en:monosaccharide,en:glucose,en:spice,en:condiment,en:natural-flavouring,en:flavouring,en:e339,en:e262ii,en:e262,en:lemon-juice,en:fruit,en:juice,en:fruit-juice,en:collagen-casing,en:salt,en:maltodextrin,en:lemon,en:citrus-fruit}', '{P,o,r,k,,, ,w,a,t,e,b,n,d,l,s,h,2,%,f,i,g,:,p,u,m,c,y,x,v,j,(,),.}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "9", "proteins_unit": "g", "fats": "20", "fats_unit": "g", "carbohydrates": "2", "carbohydrates_unit": "g", "sugars": "1", "sugars_unit": "g", "sodium": "0.55", "sodium_unit": "mg", "fibers": "0", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 15:00:28.181626 --- ERROR --- DatabaseError(message='malformed array literal: "{C,A,R,B,O,N,T,E,D, ,W,,,H,I,G,F,U,S,Y,L,V,M,Z,(,P,),s,m,a,r,t,l,o,b,e,•,5,1,0,7,c,n,f,i,-,8,4,3,2,9}"LINE 3: ...-432-97,en:preserves-freshness,en:preservative}', '{C,A,R,B,... ^DETAIL: Unexpected "," character.', - payload=('{en:carbonated-water,en:water,en:high-fructose-corn-syri-natural-and-artificial-flavor,en:e330,en:e211,en:caffeine,en:e414,en:sodium-citrate,en:minerals,en:sodium,en:calciu-smartlobel,en:disodium-edta,en:e444,en:e102,en:blue-bottled-under-the-authority-of-pepsico,en:inc,en:purchase,en:ny-10577-scan-for-info-call-for-info-1-800-432-97,en:preserves-freshness,en:preservative}', '{C,A,R,B,O,N,T,E,D, ,W,,,H,I,G,F,U,S,Y,L,V,M,Z,(,P,),s,m,a,r,t,l,o,b,e,•,5,1,0,7,c,n,f,i,-,8,4,3,2,9}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "g", "fibers": "", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO test_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 15:01:38.354494 --- ERROR --- DatabaseError(message='malformed array literal: "{n,o,-,s,t,i,c,k, ,g,p,r,a,y,m,l,v,e,d,x,w,h,f,|,5,0}"LINE 3: ...ificial-preservatives-flavors-colors-net-wt-50}', '{n,o,-,s,... ^DETAIL: Unexpected "," character.', - payload=('{en:no-stick-cooking-spray-pam-olive-oil-made-extra-virgin-olive-oil-with-expeller-pressed-no-artificial-preservatives-flavors-colors-net-wt-50}', '{n,o,-,s,t,i,c,k, ,g,p,r,a,y,m,l,v,e,d,x,w,h,f,|,5,0}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "g", "fibers": "", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO main_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 15:01:39.091670 --- ERROR --- DatabaseError(message='malformed array literal: "{C,a,r,b,o,n,t,e,d, ,W,,,H,i,g,h,F,u,c,s,S,y,p,m,l,P,A,N,v,f,.}"LINE 3: ...l-flavouring,en:flavouring,en:caffeine,en:e330}', '{C,a,r,b,... ^DETAIL: Unexpected "," character.', - payload=('{en:carbonated-water,en:water,en:high-fructose-corn-syrup,en:added-sugar,en:disaccharide,en:monosaccharide,en:fructose,en:glucose,en:corn-syrup,en:glucose-fructose-syrup,en:e150a,en:sugar,en:e338,en:natural-flavouring,en:flavouring,en:caffeine,en:e330}', '{C,a,r,b,o,n,t,e,d, ,W,,,H,i,g,h,F,u,c,s,S,y,p,m,l,P,A,N,v,f,.}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "", "fibers": "", "fibers_unit": ""}', False, 0.0), - sql='INSERT INTO main_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 15:01:39.122455 --- ERROR --- DatabaseError(message='malformed array literal: "{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}"LINE 3: VALUES ('{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,... ^DETAIL: Unexpected "," character.', - payload=('{c,a,r,b,o,n,t,e,d, ,w,,,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}', '{c,,, ,a,r,b,o,n,t,e,d,w,h,i,g,f,u,s,y,p,j,l,v,m,z,(,),5}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "0", "proteins_unit": "g", "fats": "0", "fats_unit": "g", "carbohydrates": "46", "carbohydrates_unit": "g", "sugars": "46", "sugars_unit": "g", "sodium": "0.06", "sodium_unit": "mg", "fibers": "0", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO main_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 15:01:42.144637 --- ERROR --- DatabaseError(message='malformed array literal: "{P,o,r,k,,, ,w,a,t,e,b,n,d,l,s,h,2,%,f,i,g,:,p,u,m,c,y,x,v,j,(,),.}"LINE 3: ...:salt,en:maltodextrin,en:lemon,en:citrus-fruit}', '{P,o,r,k,... ^DETAIL: Unexpected "," character.', - payload=('{en:pork,en:animal,en:water,en:beer,en:alcohol,en:and-less-than-2-of-the-following,en:e326,en:corn-syrup,en:added-sugar,en:disaccharide,en:dextrose,en:monosaccharide,en:glucose,en:spice,en:condiment,en:natural-flavouring,en:flavouring,en:e339,en:e262ii,en:e262,en:lemon-juice,en:fruit,en:juice,en:fruit-juice,en:collagen-casing,en:salt,en:maltodextrin,en:lemon,en:citrus-fruit}', '{P,o,r,k,,, ,w,a,t,e,b,n,d,l,s,h,2,%,f,i,g,:,p,u,m,c,y,x,v,j,(,),.}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "9", "proteins_unit": "g", "fats": "20", "fats_unit": "g", "carbohydrates": "2", "carbohydrates_unit": "g", "sugars": "1", "sugars_unit": "g", "sodium": "0.55", "sodium_unit": "mg", "fibers": "0", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO main_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 15:01:45.898068 --- ERROR --- DatabaseError(message='malformed array literal: "{C,A,R,B,O,N,T,E,D, ,W,,,H,I,G,F,U,S,Y,L,V,M,Z,(,P,),s,m,a,r,t,l,o,b,e,•,5,1,0,7,c,n,f,i,-,8,4,3,2,9}"LINE 3: ...-432-97,en:preserves-freshness,en:preservative}', '{C,A,R,B,... ^DETAIL: Unexpected "," character.', - payload=('{en:carbonated-water,en:water,en:high-fructose-corn-syri-natural-and-artificial-flavor,en:e330,en:e211,en:caffeine,en:e414,en:sodium-citrate,en:minerals,en:sodium,en:calciu-smartlobel,en:disodium-edta,en:e444,en:e102,en:blue-bottled-under-the-authority-of-pepsico,en:inc,en:purchase,en:ny-10577-scan-for-info-call-for-info-1-800-432-97,en:preserves-freshness,en:preservative}', '{C,A,R,B,O,N,T,E,D, ,W,,,H,I,G,F,U,S,Y,L,V,M,Z,(,P,),s,m,a,r,t,l,o,b,e,•,5,1,0,7,c,n,f,i,-,8,4,3,2,9}', '{"serving": "", "serving_unit": "", "calories": "", "calories_unit": "None", "proteins": "", "proteins_unit": "g", "fats": "", "fats_unit": "g", "carbohydrates": "", "carbohydrates_unit": "g", "sugars": "", "sugars_unit": "g", "sodium": "", "sodium_unit": "g", "fibers": "", "fibers_unit": "g"}', False, 0.0), - sql='INSERT INTO main_food_info(ingrediants, food_groups, nutrients, expires, default_expiration) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 15:24:34.268066 --- ERROR --- DatabaseError(message='null value in column "item_type" of relation "test_items" violates not-null constraintDETAIL: Failing row contains (2420, %085239110744%, Diced Tomatoes, 1, , {}, {}, 2450, 2450, 2420, single, null, &&%085239110744%&&Diced Tomatoes&&).', - payload=('%085239110744%', 'Diced Tomatoes', 1, '', '{}', '{}', 2450, 2450, 2420, 'single', None, '&&%085239110744%&&Diced Tomatoes&&'), - sql='INSERT INTO test_items(barcode, item_name, brand, description, tags, links, item_info_id, logistics_info_id, food_info_id, row_type, item_type, search_string) VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 15:24:34.275772 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01201303%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:24:34.285777 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%07831504%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:24:34.295490 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01231003%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:24:34.304806 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%049000007251%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:24:34.314640 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%04905004%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:24:34.323110 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01231003%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:24:34.330796 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%PenneNoodles%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:24:34.338177 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%07831504%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:24:34.346223 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%FIBERONE%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:24:34.353814 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:24:34.362011 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:24:34.369416 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:24:34.375914 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:24:34.384479 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SmokedSausage%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:24:34.392456 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:24:34.400547 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:24:34.408550 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:24:34.417426 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%04963406%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:24:34.425024 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:26:23.542486 --- ERROR --- DatabaseError(message='null value in column "item_type" of relation "test_items" violates not-null constraintDETAIL: Failing row contains (2422, %085239110744%, Diced Tomatoes, 1, , {}, {}, 2452, 2452, 2422, single, null, &&%085239110744%&&Diced Tomatoes&&).', - payload=('%085239110744%', 'Diced Tomatoes', 1, '', '{}', '{}', 2452, 2452, 2422, 'single', None, '&&%085239110744%&&Diced Tomatoes&&'), - sql='INSERT INTO test_items(barcode, item_name, brand, description, tags, links, item_info_id, logistics_info_id, food_info_id, row_type, item_type, search_string) VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 15:26:23.550679 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01201303%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:26:23.558832 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%07831504%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:26:23.566519 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01231003%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:26:23.574410 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%049000007251%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:26:23.582457 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%04905004%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:26:23.590494 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01231003%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:26:23.598954 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%PenneNoodles%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:26:23.606624 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%07831504%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:26:23.614475 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%FIBERONE%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:26:23.622267 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:26:23.630290 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:26:23.638330 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:26:23.645659 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:26:23.653421 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SmokedSausage%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:26:23.661556 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:26:23.669451 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:26:23.678515 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:26:23.685986 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%04963406%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:26:23.694799 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.023584 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_logistics_info_barcode_key"DETAIL: Key (barcode)=(%194346066674%) already exists.', - payload=('%194346066674%', 1, 1, 1, 1), - sql='INSERT INTO test_logistics_info(barcode, primary_location, primary_zone, auto_issue_location, auto_issue_zone) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 15:27:07.031336 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%PenneNoodles%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.039649 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%PenneNoodles%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.047219 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%test123%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.055467 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%%poptart%%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.063442 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SmokedSausage%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.071542 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SmokedSausage%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.079304 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000231315%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.087192 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000231346%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.091852 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000183669%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.099208 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000130311%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.108464 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%DicedTomatoes%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.116312 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%DicedTomatoes%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.123628 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01201303%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.131791 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%07831504%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.139810 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01231003%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.147612 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%049000007251%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.155886 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%04905004%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.163577 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01231003%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.171429 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%PenneNoodles%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.180046 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%07831504%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.188010 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%FIBERONE%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.195229 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.203456 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.211597 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.219621 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.228627 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SmokedSausage%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.236261 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.244440 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.252545 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.260698 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%04963406%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:27:07.269477 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.230475 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_logistics_info_barcode_key"DETAIL: Key (barcode)=(%194346066674%) already exists.', - payload=('%194346066674%', 1, 1, 1, 1), - sql='INSERT INTO test_logistics_info(barcode, primary_location, primary_zone, auto_issue_location, auto_issue_zone) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 15:31:10.237981 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%194346066674%', 2243, '{"id": null, "barcode": "%194346066674%", "name": "Bath Tissue", "brands": "Great Value", "brands_tags": ["Great Value"], "categories": [""], "food_groups_tags": [""], "ingredients_hierarchy": [""], "ingredients_text_en": "", "nutriments": {"carbohydrates": "0", "carbohydrates_100g": 0, "carbohydrates_unit": "", "carbohydrates_value": 0, "energy": 0, "energy-kcal": 0, "energy-kcal_100g": 0, "energy-kcal_unit": "", "energy-kcal_value": 0, "energy-kcal_value_computed": 0, "energy_100g": 0, "energy_unit": "", "energy_value": 0, "fat": 0, "fat_100g": 0, "fat_unit": "", "fat_value": 0, "fruits-vegetables-legumes-estimate-from-ingredients_100g": 0, "fruits-vegetables-legumes-estimate-from-ingredients_serving": 0, "fruits-vegetables-nuts-estimate-from-ingredients_100g": 0, "fruits-vegetables-nuts-estimate-from-ingredients_serving": 0, "nova-group": 0, "nova-group_100g": 0, "nova-group_serving": 0, "proteins": "0", "proteins_100g": 0, "proteins_unit": "", "proteins_value": 0, "saturated-fat": 0, "saturated-fat_100g": 0, "saturated-fat_unit": "", "saturated-fat_value": 0, "sugars": "0", "sugars_100g": 0, "sugars_unit": "", "sugars_value": 0, "serving": "", "calories": "", "fats": "", "sodium": "", "fibers": "", "serving_unit": "", "calories_unit": null, "fats_unit": "", "sodium_unit": "", "fibers_unit": ""}, "packaging": "case", "product_name": "Bath Tissue", "product_quantity": 1, "product_quantity_unit": "case", "quantity": 1, "cost": 0, "transactions_id": 260, "safety_stock": "None", "lead_time": 0, "groups": [], "links": [], "AI_Pickable": "FALSE", "entry_type": "ITEM", "linked_list": [], "search_string": "Great Value&&&&Bath Tissue", "qty_on_hand": 1}', '12'), - sql='INSERT INTO test_itemlinks(barcode, link, data, conv_factor) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-03-19 15:31:10.243882 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%PenneNoodles%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.251395 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%PenneNoodles%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.259470 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%test123%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.268159 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%%poptart%%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.276318 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SmokedSausage%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.284456 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SmokedSausage%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.292716 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000231315%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.300418 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000231346%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.308740 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000183669%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.316130 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000130311%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.324250 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%DicedTomatoes%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.332690 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%DicedTomatoes%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.340437 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01201303%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.348522 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%07831504%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.356004 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01231003%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.364768 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%049000007251%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.373328 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%04905004%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.381134 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01231003%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.389177 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%PenneNoodles%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.397305 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%07831504%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.405962 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%FIBERONE%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.413475 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.421573 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.429606 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.438404 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.446132 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SmokedSausage%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.454212 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.462474 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.470630 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.478509 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%04963406%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:10.487403 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.348704 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_logistics_info_barcode_key"DETAIL: Key (barcode)=(%194346066674%) already exists.', - payload=('%194346066674%', 1, 1, 1, 1), - sql='INSERT INTO test_logistics_info(barcode, primary_location, primary_zone, auto_issue_location, auto_issue_zone) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 15:31:28.356213 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%194346066674%', 2243, '{"id": null, "barcode": "%194346066674%", "name": "Bath Tissue", "brands": "Great Value", "brands_tags": ["Great Value"], "categories": [""], "food_groups_tags": [""], "ingredients_hierarchy": [""], "ingredients_text_en": "", "nutriments": {"carbohydrates": "0", "carbohydrates_100g": 0, "carbohydrates_unit": "", "carbohydrates_value": 0, "energy": 0, "energy-kcal": 0, "energy-kcal_100g": 0, "energy-kcal_unit": "", "energy-kcal_value": 0, "energy-kcal_value_computed": 0, "energy_100g": 0, "energy_unit": "", "energy_value": 0, "fat": 0, "fat_100g": 0, "fat_unit": "", "fat_value": 0, "fruits-vegetables-legumes-estimate-from-ingredients_100g": 0, "fruits-vegetables-legumes-estimate-from-ingredients_serving": 0, "fruits-vegetables-nuts-estimate-from-ingredients_100g": 0, "fruits-vegetables-nuts-estimate-from-ingredients_serving": 0, "nova-group": 0, "nova-group_100g": 0, "nova-group_serving": 0, "proteins": "0", "proteins_100g": 0, "proteins_unit": "", "proteins_value": 0, "saturated-fat": 0, "saturated-fat_100g": 0, "saturated-fat_unit": "", "saturated-fat_value": 0, "sugars": "0", "sugars_100g": 0, "sugars_unit": "", "sugars_value": 0, "serving": "", "calories": "", "fats": "", "sodium": "", "fibers": "", "serving_unit": "", "calories_unit": null, "fats_unit": "", "sodium_unit": "", "fibers_unit": ""}, "packaging": "case", "product_name": "Bath Tissue", "product_quantity": 1, "product_quantity_unit": "case", "quantity": 1, "cost": 0, "transactions_id": 260, "safety_stock": "None", "lead_time": 0, "groups": [], "links": [], "AI_Pickable": "FALSE", "entry_type": "ITEM", "linked_list": [], "search_string": "Great Value&&&&Bath Tissue", "qty_on_hand": 1}', '12'), - sql='INSERT INTO test_itemlinks(barcode, link, data, conv_factor) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-03-19 15:31:28.361126 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%PenneNoodles%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.369883 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%PenneNoodles%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.377646 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%test123%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.385069 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%%poptart%%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.393162 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SmokedSausage%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.401077 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SmokedSausage%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.409528 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000231315%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.417548 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000231346%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.425716 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000183669%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.433171 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000130311%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.441580 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%DicedTomatoes%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.449676 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%DicedTomatoes%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.457602 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01201303%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.464831 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%07831504%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.473322 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01231003%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.480547 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%049000007251%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.488443 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%04905004%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.496522 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01231003%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.504632 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%PenneNoodles%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.512456 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%07831504%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.520367 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%FIBERONE%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.528695 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.536158 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.544343 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.552127 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.560073 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SmokedSausage%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.567627 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.576455 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.584196 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.592674 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%04963406%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:31:28.600183 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.256297 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_logistics_info_barcode_key"DETAIL: Key (barcode)=(%194346066674%) already exists.', - payload=('%194346066674%', 1, 1, 1, 1), - sql='INSERT INTO test_logistics_info(barcode, primary_location, primary_zone, auto_issue_location, auto_issue_zone) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 15:32:33.264350 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%194346066674%', 2243, '{"id": null, "barcode": "%194346066674%", "name": "Bath Tissue", "brands": "Great Value", "brands_tags": ["Great Value"], "categories": [""], "food_groups_tags": [""], "ingredients_hierarchy": [""], "ingredients_text_en": "", "nutriments": {"carbohydrates": "0", "carbohydrates_100g": 0, "carbohydrates_unit": "", "carbohydrates_value": 0, "energy": 0, "energy-kcal": 0, "energy-kcal_100g": 0, "energy-kcal_unit": "", "energy-kcal_value": 0, "energy-kcal_value_computed": 0, "energy_100g": 0, "energy_unit": "", "energy_value": 0, "fat": 0, "fat_100g": 0, "fat_unit": "", "fat_value": 0, "fruits-vegetables-legumes-estimate-from-ingredients_100g": 0, "fruits-vegetables-legumes-estimate-from-ingredients_serving": 0, "fruits-vegetables-nuts-estimate-from-ingredients_100g": 0, "fruits-vegetables-nuts-estimate-from-ingredients_serving": 0, "nova-group": 0, "nova-group_100g": 0, "nova-group_serving": 0, "proteins": "0", "proteins_100g": 0, "proteins_unit": "", "proteins_value": 0, "saturated-fat": 0, "saturated-fat_100g": 0, "saturated-fat_unit": "", "saturated-fat_value": 0, "sugars": "0", "sugars_100g": 0, "sugars_unit": "", "sugars_value": 0, "serving": "", "calories": "", "fats": "", "sodium": "", "fibers": "", "serving_unit": "", "calories_unit": null, "fats_unit": "", "sodium_unit": "", "fibers_unit": ""}, "packaging": "case", "product_name": "Bath Tissue", "product_quantity": 1, "product_quantity_unit": "case", "quantity": 1, "cost": 0, "transactions_id": 260, "safety_stock": "None", "lead_time": 0, "groups": [], "links": [], "AI_Pickable": "FALSE", "entry_type": "ITEM", "linked_list": [], "search_string": "Great Value&&&&Bath Tissue", "qty_on_hand": 1}', '12'), - sql='INSERT INTO test_itemlinks(barcode, link, data, conv_factor) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-03-19 15:32:33.269359 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%PenneNoodles%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.277356 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%PenneNoodles%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.285602 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%test123%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.293842 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%%poptart%%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.301972 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SmokedSausage%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.309914 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SmokedSausage%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.317935 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000231315%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.325438 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000231346%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.333619 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000183669%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.341857 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000130311%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.349790 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%DicedTomatoes%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.357362 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%DicedTomatoes%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.365222 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01201303%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.373164 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%07831504%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.380703 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01231003%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.389658 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%049000007251%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.397327 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%04905004%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.405066 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01231003%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.413270 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%PenneNoodles%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.421759 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%07831504%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.429797 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%FIBERONE%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.438712 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.445997 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.454472 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.462496 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.470570 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SmokedSausage%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.479439 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.487754 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.496109 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.504067 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%04963406%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:33.511681 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.291836 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_logistics_info_barcode_key"DETAIL: Key (barcode)=(%194346066674%) already exists.', - payload=('%194346066674%', 1, 1, 1, 1), - sql='INSERT INTO test_logistics_info(barcode, primary_location, primary_zone, auto_issue_location, auto_issue_zone) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 15:32:57.297675 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%194346066674%', 2243, '{"id": null, "barcode": "%194346066674%", "name": "Bath Tissue", "brands": "Great Value", "brands_tags": ["Great Value"], "categories": [""], "food_groups_tags": [""], "ingredients_hierarchy": [""], "ingredients_text_en": "", "nutriments": {"carbohydrates": "0", "carbohydrates_100g": 0, "carbohydrates_unit": "", "carbohydrates_value": 0, "energy": 0, "energy-kcal": 0, "energy-kcal_100g": 0, "energy-kcal_unit": "", "energy-kcal_value": 0, "energy-kcal_value_computed": 0, "energy_100g": 0, "energy_unit": "", "energy_value": 0, "fat": 0, "fat_100g": 0, "fat_unit": "", "fat_value": 0, "fruits-vegetables-legumes-estimate-from-ingredients_100g": 0, "fruits-vegetables-legumes-estimate-from-ingredients_serving": 0, "fruits-vegetables-nuts-estimate-from-ingredients_100g": 0, "fruits-vegetables-nuts-estimate-from-ingredients_serving": 0, "nova-group": 0, "nova-group_100g": 0, "nova-group_serving": 0, "proteins": "0", "proteins_100g": 0, "proteins_unit": "", "proteins_value": 0, "saturated-fat": 0, "saturated-fat_100g": 0, "saturated-fat_unit": "", "saturated-fat_value": 0, "sugars": "0", "sugars_100g": 0, "sugars_unit": "", "sugars_value": 0, "serving": "", "calories": "", "fats": "", "sodium": "", "fibers": "", "serving_unit": "", "calories_unit": null, "fats_unit": "", "sodium_unit": "", "fibers_unit": ""}, "packaging": "case", "product_name": "Bath Tissue", "product_quantity": 1, "product_quantity_unit": "case", "quantity": 1, "cost": 0, "transactions_id": 260, "safety_stock": "None", "lead_time": 0, "groups": [], "links": [], "AI_Pickable": "FALSE", "entry_type": "ITEM", "linked_list": [], "search_string": "Great Value&&&&Bath Tissue", "qty_on_hand": 1}', '12'), - sql='INSERT INTO test_itemlinks(barcode, link, data, conv_factor) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-03-19 15:32:57.302063 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%PenneNoodles%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.309448 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%PenneNoodles%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.317558 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%test123%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.325978 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%%poptart%%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.333622 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SmokedSausage%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.341481 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SmokedSausage%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.349660 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000231315%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.357600 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000231346%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.365444 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000183669%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.373992 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000130311%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.381471 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%DicedTomatoes%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.390154 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%DicedTomatoes%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.398451 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01201303%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.405686 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%07831504%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.413902 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01231003%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.422345 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%049000007251%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.430092 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%04905004%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.438140 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01231003%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.446719 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%PenneNoodles%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.454838 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%07831504%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.463496 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%FIBERONE%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.471481 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.479616 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.488213 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.495315 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.504453 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SmokedSausage%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.511498 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.520450 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.527706 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.536284 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%04963406%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:32:57.543633 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:05.901260 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_logistics_info_barcode_key"DETAIL: Key (barcode)=(%194346066674%) already exists.', - payload=('%194346066674%', 1, 1, 1, 1), - sql='INSERT INTO test_logistics_info(barcode, primary_location, primary_zone, auto_issue_location, auto_issue_zone) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 15:33:05.907429 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%194346066674%', 2243, '{"id": null, "barcode": "%194346066674%", "name": "Bath Tissue", "brands": "Great Value", "brands_tags": ["Great Value"], "categories": [""], "food_groups_tags": [""], "ingredients_hierarchy": [""], "ingredients_text_en": "", "nutriments": {"carbohydrates": "0", "carbohydrates_100g": 0, "carbohydrates_unit": "", "carbohydrates_value": 0, "energy": 0, "energy-kcal": 0, "energy-kcal_100g": 0, "energy-kcal_unit": "", "energy-kcal_value": 0, "energy-kcal_value_computed": 0, "energy_100g": 0, "energy_unit": "", "energy_value": 0, "fat": 0, "fat_100g": 0, "fat_unit": "", "fat_value": 0, "fruits-vegetables-legumes-estimate-from-ingredients_100g": 0, "fruits-vegetables-legumes-estimate-from-ingredients_serving": 0, "fruits-vegetables-nuts-estimate-from-ingredients_100g": 0, "fruits-vegetables-nuts-estimate-from-ingredients_serving": 0, "nova-group": 0, "nova-group_100g": 0, "nova-group_serving": 0, "proteins": "0", "proteins_100g": 0, "proteins_unit": "", "proteins_value": 0, "saturated-fat": 0, "saturated-fat_100g": 0, "saturated-fat_unit": "", "saturated-fat_value": 0, "sugars": "0", "sugars_100g": 0, "sugars_unit": "", "sugars_value": 0, "serving": "", "calories": "", "fats": "", "sodium": "", "fibers": "", "serving_unit": "", "calories_unit": null, "fats_unit": "", "sodium_unit": "", "fibers_unit": ""}, "packaging": "case", "product_name": "Bath Tissue", "product_quantity": 1, "product_quantity_unit": "case", "quantity": 1, "cost": 0, "transactions_id": 260, "safety_stock": "None", "lead_time": 0, "groups": [], "links": [], "AI_Pickable": "FALSE", "entry_type": "ITEM", "linked_list": [], "search_string": "Great Value&&&&Bath Tissue", "qty_on_hand": 1}', '12'), - sql='INSERT INTO test_itemlinks(barcode, link, data, conv_factor) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-03-19 15:33:05.912457 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%PenneNoodles%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:05.920814 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%PenneNoodles%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:05.928821 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%test123%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:05.937342 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%%poptart%%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:05.944895 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SmokedSausage%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:05.954265 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SmokedSausage%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:05.962197 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000231315%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:05.970449 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000231346%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:05.978406 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000183669%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:05.987430 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%012000130311%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:05.995294 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%DicedTomatoes%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:06.004444 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%DicedTomatoes%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:06.011336 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01201303%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:06.019699 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%07831504%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:06.028505 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01231003%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:06.036661 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%049000007251%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:06.045209 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%04905004%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:06.053455 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%01231003%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:06.061838 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%PenneNoodles%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:06.069309 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%07831504%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:06.078409 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%FIBERONE%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:06.086341 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:06.094684 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:06.102970 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:06.111667 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:06.120629 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SmokedSausage%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:06.128594 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:06.137428 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:06.145853 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpagehttiMeatballs%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:06.153963 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%04963406%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 15:33:06.162456 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('%SpaghettiSauce%',), - sql='WITH passed_id AS (SELECT id AS passed_id FROM test_items WHERE barcode=%s), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_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_item_info.*) as item_info, row_to_json(test_food_info.*) as food_info, row_to_json(test_brands.*) as brand, (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 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-03-19 18:41:51.871167 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_shopping_lists_name_key"DETAIL: Key (name)=(test2) already exists.', - payload=('test2', 'This is the second test', 1, datetime.datetime(2025, 3, 19, 18, 41, 51, 869521), 'plain_list'), - sql='INSERT INTO test_shopping_lists(name, description, author, creation_date, type) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-03-19 18:52:53.385792 --- ERROR --- DatabaseError(message=''NoneType' object is not subscriptable', - payload=(5, 5), - sql='SELECT * FROM test_shopping_listsLIMIT %s OFFSET %s;') -2025-03-19 18:52:54.290657 --- ERROR --- DatabaseError(message=''NoneType' object is not subscriptable', - payload=(5, 5), - sql='SELECT * FROM test_shopping_listsLIMIT %s OFFSET %s;') -2025-03-19 18:53:10.033561 --- ERROR --- DatabaseError(message=''NoneType' object is not subscriptable', - payload=(5, 5), - sql='SELECT * FROM test_shopping_listsLIMIT %s OFFSET %s;') -2025-03-19 18:54:33.781346 --- ERROR --- DatabaseError(message=''NoneType' object is not subscriptable', - payload=(5, 5), - sql='SELECT * FROM test_shopping_listsLIMIT %s OFFSET %s;') -2025-03-19 18:55:19.805867 --- ERROR --- DatabaseError(message=''NoneType' object is not subscriptable', - payload=(5, 5), - sql='SELECT * FROM test_shopping_listsLIMIT %s OFFSET %s;') -2025-03-19 18:56:48.566895 --- ERROR --- DatabaseError(message=''NoneType' object is not subscriptable', - payload=(5, 5), - sql='SELECT * FROM test_shopping_lists LIMIT %s OFFSET %s;') -2025-03-19 18:57:28.915918 --- ERROR --- DatabaseError(message=''NoneType' object is not subscriptable', - payload=(5, 5), - sql='SELECT * FROM test_shopping_lists LIMIT %s OFFSET %s;') -2025-03-20 17:54:34.069242 --- ERROR --- DatabaseError(message='not all arguments converted during string formatting', - payload=%038000221248%, - sql='SELECT * FROM test_itemlinks WHERE barcode=%s;') -2025-03-21 17:32:54.209121 --- ERROR --- DatabaseError(message='invalid input syntax for type jsonLINE 1: ...ole grain oats', qty = '1', uom = 'each', links = 'google.co... ^DETAIL: Token "google" is invalid.CONTEXT: JSON data, line 1: google...', - payload={'id': 4, 'update': {'item_name': 'Whole grain oats', 'qty': '1', 'uom': 'each', 'links': 'google.com'}}, - sql='UPDATE test_shopping_list_items SET item_name = %s, qty = %s, uom = %s, links = %s WHERE id=%s RETURNING *;') -2025-03-21 17:33:34.010623 --- ERROR --- DatabaseError(message='invalid input syntax for type jsonLINE 1: ...ole grain oats', qty = '1', uom = 'each', links = 'google.co... ^DETAIL: Token "google" is invalid.CONTEXT: JSON data, line 1: google...', - payload={'id': 4, 'update': {'item_name': 'Whole grain oats', 'qty': '1', 'uom': 'each', 'links': 'google.com'}}, - sql='UPDATE test_shopping_list_items SET item_name = %s, qty = %s, uom = %s, links = %s WHERE id=%s RETURNING *;') -2025-03-21 17:34:21.233927 --- ERROR --- DatabaseError(message='invalid input syntax for type jsonLINE 1: ...ole grain oats', qty = '1', uom = 'each', links = 'google.co... ^DETAIL: Token "google" is invalid.CONTEXT: JSON data, line 1: google...', - payload={'id': 4, 'update': {'item_name': 'Whole grain oats', 'qty': '1', 'uom': 'each', 'links': 'google.com'}}, - sql='UPDATE test_shopping_list_items SET item_name = %s, qty = %s, uom = %s, links = %s WHERE id=%s RETURNING *;') -2025-03-22 07:55:04.913515 --- ERROR --- DatabaseError(message='syntax error at or near "DSC"LINE 14: ORDER BY sum_cte.total_sum DSC ^', - payload=('', 50, 0), - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM main_item_locations mil JOIN main_items mi ON mil.part_id = mi.id GROUP BY mi.id)SELECT main_items.*, row_to_json(main_item_info.*) as item_info, sum_cte.total_sum as total_qohFROM main_itemsLEFT JOIN sum_cte ON main_items.id = sum_cte.idLEFT JOIN main_item_info ON main_items.item_info_id = main_item_info.id WHERE main_items.search_string LIKE '%%' || %s || '%%' AND sum_cte.total_sum > 0ORDER BY sum_cte.total_sum DSCLIMIT %s OFFSET %s;') -2025-03-23 12:22:07.792923 --- ERROR --- DatabaseError(message='column "g" does not existLINE 2: (SELECT COALESCE(array_agg(row_to_json(g)), '{}') FROM t... ^', - payload=(5, 0), - sql='SELECT *, (SELECT COALESCE(array_agg(row_to_json(g)), '{}') FROM test_shopping_list_items WHERE sl_id = test_shopping_lists) AS sl_items FROM test_shopping_lists LIMIT %s OFFSET %s;') -2025-03-23 12:22:20.046597 --- ERROR --- DatabaseError(message='operator does not exist: integer = test_shopping_listsLINE 2: ...'{}') FROM test_shopping_list_items g WHERE sl_id = test_sho... ^HINT: No operator matches the given name and argument types. You might need to add explicit type casts.', - payload=(5, 0), - sql='SELECT *, (SELECT COALESCE(array_agg(row_to_json(g)), '{}') FROM test_shopping_list_items g WHERE sl_id = test_shopping_lists) AS sl_items FROM test_shopping_lists LIMIT %s OFFSET %s;') -2025-03-23 12:22:35.373028 --- ERROR --- DatabaseError(message='malformed array literal: "[]"LINE 2: (SELECT COALESCE(array_agg(row_to_json(g)), '[]') FROM t... ^DETAIL: "[" must introduce explicitly-specified array dimensions.', - payload=(5, 0), - sql='SELECT *, (SELECT COALESCE(array_agg(row_to_json(g)), '[]') FROM test_shopping_list_items g WHERE sl_id = test_shopping_lists) AS sl_items FROM test_shopping_lists LIMIT %s OFFSET %s;') -2025-03-23 15:14:31.483955 --- ERROR --- DatabaseError(message='insert or update on table "test_shopping_list_items" violates foreign key constraint "fk_item_id"DETAIL: Key (item_id)=(0) is not present in table "test_items".', - payload=('5fskqqy', '5', 'custom', 'MyCustomItem', 'Box', 1, 0, '{"main": "https://www.upcitemdb.com/upc/28400199148"}'), - sql='INSERT INTO test_shopping_list_items(uuid, sl_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-03-23 16:58:49.303277 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_shopping_list_items_uuid_key"DETAIL: Key (uuid)=(%078742015101%) already exists.', - payload=('%078742015101%', '3', 'sku', '100% grated parmesan cheese', 'each', 1, 2149, '{}'), - sql='INSERT INTO test_shopping_list_items(uuid, sl_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-03-23 16:58:50.643859 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_shopping_list_items_uuid_key"DETAIL: Key (uuid)=(%078742015101%) already exists.', - payload=('%078742015101%', '3', 'sku', '100% grated parmesan cheese', 'each', 1, 2149, '{}'), - sql='INSERT INTO test_shopping_list_items(uuid, sl_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-03-23 16:58:50.829794 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_shopping_list_items_uuid_key"DETAIL: Key (uuid)=(%078742015101%) already exists.', - payload=('%078742015101%', '3', 'sku', '100% grated parmesan cheese', 'each', 1, 2149, '{}'), - sql='INSERT INTO test_shopping_list_items(uuid, sl_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-03-23 16:58:58.630008 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_shopping_list_items_uuid_key"DETAIL: Key (uuid)=(%078742015101%) already exists.', - payload=('%078742015101%', '3', 'sku', '100% grated parmesan cheese', 'each', 1, 2149, '{}'), - sql='INSERT INTO test_shopping_list_items(uuid, sl_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-03-23 17:45:22.233163 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_shopping_list_items_uuid_sl_id_key"DETAIL: Key (uuid, sl_id)=(%078742015101%, 5) already exists.', - payload=('%078742015101%', '5', 'sku', '100% grated parmesan cheese', 'each', 1, 2149, '{}'), - sql='INSERT INTO test_shopping_list_items(uuid, sl_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-03-23 17:45:22.848888 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_shopping_list_items_uuid_sl_id_key"DETAIL: Key (uuid, sl_id)=(%078742015101%, 5) already exists.', - payload=('%078742015101%', '5', 'sku', '100% grated parmesan cheese', 'each', 1, 2149, '{}'), - sql='INSERT INTO test_shopping_list_items(uuid, sl_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-03-23 17:45:23.113705 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_shopping_list_items_uuid_sl_id_key"DETAIL: Key (uuid, sl_id)=(%078742015101%, 5) already exists.', - payload=('%078742015101%', '5', 'sku', '100% grated parmesan cheese', 'each', 1, 2149, '{}'), - sql='INSERT INTO test_shopping_list_items(uuid, sl_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-03-23 17:45:23.375900 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_shopping_list_items_uuid_sl_id_key"DETAIL: Key (uuid, sl_id)=(%078742015101%, 5) already exists.', - payload=('%078742015101%', '5', 'sku', '100% grated parmesan cheese', 'each', 1, 2149, '{}'), - sql='INSERT INTO test_shopping_list_items(uuid, sl_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-03-23 17:45:23.832867 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_shopping_list_items_uuid_sl_id_key"DETAIL: Key (uuid, sl_id)=(%078742015101%, 5) already exists.', - payload=('%078742015101%', '5', 'sku', '100% grated parmesan cheese', 'each', 1, 2149, '{}'), - sql='INSERT INTO test_shopping_list_items(uuid, sl_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-03-23 17:45:24.198342 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_shopping_list_items_uuid_sl_id_key"DETAIL: Key (uuid, sl_id)=(%078742015101%, 5) already exists.', - payload=('%078742015101%', '5', 'sku', '100% grated parmesan cheese', 'each', 1, 2149, '{}'), - sql='INSERT INTO test_shopping_list_items(uuid, sl_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-03-23 17:45:24.383560 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_shopping_list_items_uuid_sl_id_key"DETAIL: Key (uuid, sl_id)=(%078742015101%, 5) already exists.', - payload=('%078742015101%', '5', 'sku', '100% grated parmesan cheese', 'each', 1, 2149, '{}'), - sql='INSERT INTO test_shopping_list_items(uuid, sl_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-03-23 17:45:34.555592 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_shopping_list_items_uuid_sl_id_key"DETAIL: Key (uuid, sl_id)=(%078742015101%, 5) already exists.', - payload=('%078742015101%', '5', 'sku', '100% grated parmesan cheese', 'each', 1, 2149, '{}'), - sql='INSERT INTO test_shopping_list_items(uuid, sl_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-03-29 09:11:14.676444 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "main_logistics_info_barcode_key"DETAIL: Key (barcode)=(%070847898245%) already exists.', - payload=('%070847898245%', 1, 1, 1, 1), - sql='INSERT INTO main_logistics_info(barcode, primary_location, primary_zone, auto_issue_location, auto_issue_zone) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-04-03 17:22:29.828709 --- ERROR --- DatabaseError(message='table "test_sku_prefix" does not exist', - payload=DROP TABLE test_sku_prefix CASCADE;, - sql='PrefixTable') -2025-04-03 17:47:25.451559 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_sku_prefix_name_uuid_key"DETAIL: Key (name, uuid)=(testprefix, testuuid) already exists.', - payload=('testuuid', 'testprefix', 'this is a test prefix!'), - sql='INSERT INTO test_sku_prefix(uuid, name, description) VALUES (%s, %s, %s) RETURNING *;') -2025-04-05 12:21:16.322390 --- ERROR --- DatabaseError(message='missing FROM-clause entry for table "test_recipes"LINE 13: JOIN logins ON test_recipes.author = logins.id ^', - payload=(2,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT * FROM test_recipe_items items WHERE items.rp_id = (SELECT passed_id FROM passed_id) )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as submitted_by, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_items, row_to_json(test_vendors.*) as vendorFROM test_receiptsJOIN logins ON test_recipes.author = logins.idWHERE test_recipe.id=(SELECT passed_id FROM passed_id)') -2025-04-05 12:22:09.957162 --- ERROR --- DatabaseError(message='missing FROM-clause entry for table "test_recipe"LINE 13: WHERE test_recipe.id=(SELECT passed_id FROM passed_id) ^', - payload=(2,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT * FROM test_recipe_items items WHERE items.rp_id = (SELECT passed_id FROM passed_id) )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as submitted_by, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipe.id=(SELECT passed_id FROM passed_id)') -2025-04-05 12:24:36.650645 --- ERROR --- DatabaseError(message='name 'row' is not defined', - payload=(2,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT * FROM test_recipe_items items WHERE items.rp_id = (SELECT passed_id FROM passed_id) )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as submitted_by, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-05 20:59:40.968589 --- ERROR --- DatabaseError(message='column "item_name" of relation "test_recipes" does not existLINE 1: UPDATE test_recipes SET item_name = 'Spicy Bacon Chilli12' W... ^', - payload={'id': 1, 'update': {'item_name': 'Spicy Bacon Chilli12'}}, - sql='UPDATE test_recipes SET item_name = %s WHERE id=%s RETURNING *;') -2025-04-05 21:23:23.842735 --- ERROR --- DatabaseError(message='syntax error at or near "WHERE"LINE 1: UPDATE test_recipes SET WHERE id=1 RETURNING *; ^', - payload={'id': 1, 'update': {}}, - sql='UPDATE test_recipes SET WHERE id=%s RETURNING *;') -2025-04-05 21:27:02.277422 --- ERROR --- DatabaseError(message='syntax error at or near "WHERE"LINE 1: UPDATE test_recipes SET WHERE id=1 RETURNING *; ^', - payload={'id': 1, 'update': {}}, - sql='UPDATE test_recipes SET WHERE id=%s RETURNING *;') -2025-04-05 21:29:51.251551 --- ERROR --- DatabaseError(message='syntax error at or near "WHERE"LINE 1: UPDATE test_recipes SET WHERE id=1 RETURNING *; ^', - payload={'id': 1, 'update': {}}, - sql='UPDATE test_recipes SET WHERE id=%s RETURNING *;') -2025-04-06 08:59:42.901643 --- ERROR --- DatabaseError(message='syntax error at or near "test_items"LINE 4: LEFT test_items ON items.item_id = test_items.id ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT * FROM test_recipe_items items LEFT test_items ON items.item_id = test_items.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-06 09:09:43.896386 --- ERROR --- DatabaseError(message='syntax error at or near "COALESCE"LINE 4: COALESCE(test_items.barcode, items.uuid) AS uuid... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT * COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-06 16:49:33.943922 --- ERROR --- DatabaseError(message='column "linked_items" of relation "main_item_info" does not existLINE 2: (barcode, linked_items, shopping_lists, recipes, groups, ^', - payload=('%037000771807%', '{}', '{}', '{}', '{}', '', 1.0, 'each', 0.0, 0.0, 0.0, False), - sql='INSERT INTO main_item_info(barcode, linked_items, shopping_lists, recipes, groups, packaging, uom_quantity, uom, cost, safety_stock, lead_time_days, ai_pick) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:43.995134 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "units_plural_key"DETAIL: Key (plural)=(pinches) already exists.', - payload=('pinches', ' pinch', ' Pinch', ' Less than 1/8 teaspoon.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:43.999768 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('tsp', ' tsp', ' Teaspoon', ' 5 millilitres in Australia New Zealand UK Canada and the US but approximately 4.93 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.008680 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('dsp', ' dsp', ' Dessertspoon', ' 10 millilitres in Australia.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.015714 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('tbsp', ' tbsp', ' Tablespoon', ' 20 millilitres in Australia or 15 millilitres in New Zealand the UK Canada and the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.024247 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('fl oz', ' fl oz', ' Fluid ounce', ' 28.41 millilitres in the UK or approximately 29.57 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.032074 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('cups', ' cup', ' Cup', ' 250 millilitres in Australia and New Zealand or approximately 170.48 millilitres in the UK or approximately 227.31 millilitres in Canada and approximately 236.59 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.039602 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('pt', ' pt', ' Pint', ' 570 millilitres in Australia approximately 568.26 millilitres in New Zealand the UK and Canada and approximately 473.18 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.047805 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('qt', ' qt', ' Quart', ' Approximately 1136.52 millilitres in Australia New Zealand the UK and Canada and approximately 946.35 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.056200 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('gal', ' gal', ' Gallon', ' Approximately 4546.09 millilitres in Australia New Zealand the UK and Canada and approximately 3785.41 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.062489 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('jiggers', ' jigger', ' Jigger', ' 1.5 fluid ounces.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.070300 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('oz', ' oz', ' Ounce', ' 1/4 lb for butter which can also be measured as 3 tablespoons.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.078265 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('L', ' L', ' Liter', ' Commonly used for volume measurement in the metric system.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.086375 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('mL', ' mL', ' Milliliter', ' Commonly used for volume measurement in the metric system.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.093920 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('dm3', ' dm3', ' Cubic decimeter', ' Equivalent to 1 liter.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.100773 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('g', ' g', ' Gram', ' Commonly used for weight measurement in the metric system.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.109147 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('kg', ' kg', ' Kilogram', ' Commonly used for weight measurement in the metric system.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.116151 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('lbs', ' lb', ' Pound', ' Used for weight measurement in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.123798 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('fluid scruples', ' fluid scruple', ' Fluid scruple', " A unit used in the apothecaries' system but not commonly used in cooking."), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.131105 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('cm3', ' cm3', ' Cubic centimeter', ' Equivalent to 1 milliliter.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.138678 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('breakfast cups', ' breakfast cup', ' Breakfast cup', ' Similar in size to the US customary cup and the metric cup.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.147224 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('tumblers', ' tumbler', ' Tumblerful', ' A unit used in British cookery books and recipes.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.155810 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('winefulls', ' winefull', ' Wineglassful', ' A unit used in British cookery books and recipes.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.162996 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('coffee cups', ' coffee cup', ' Coffee cup', ' Can vary from 100 to 200 millilitres.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.171595 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('sticks of butter', ' stick of butter', ' Stick of butter', ' 1/4 lb or 3 tablespoons.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.179159 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('smidgens', ' smidgen', ' Smidgen', ' An approximate unit of measure.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.186951 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('dashes', ' dash', ' Dash', ' An approximate unit of measure.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.194886 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('drops', ' drop', ' Drop', ' An approximate unit of measure.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.202379 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('eaches', ' each', ' Each', ' A single unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.210756 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('boxes', ' box', ' Box', ' A Single box of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.217824 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('crates', ' crate', ' Crate', ' a single crate of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.225840 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('jars', ' jar', ' Jar', ' A single Jar of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.233830 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('cans', ' can', ' Can', ' A Single Can of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.241115 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('bars', ' bar', ' Bars', ' A Single bar of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.248836 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('loaves', ' loaf', ' Loaf', ' A single loaf of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.256251 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('packs', ' pack', ' Pack', ' A Single Pack of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:10:44.263842 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=CREATE TABLE IF NOT EXISTS units ( - id SERIAL PRIMARY KEY, - plural VARCHAR(32), - single VARCHAR(32), - fullname VARCHAR(255), - description TEXT, - unique(plural), - unique(single), - unique(fullname) -);, - sql='UnitsTable') -2025-04-07 18:11:11.901876 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "units_plural_key"DETAIL: Key (plural)=(pinches) already exists.', - payload=('pinches', ' pinch', ' Pinch', ' Less than 1/8 teaspoon.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:11.908951 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('tsp', ' tsp', ' Teaspoon', ' 5 millilitres in Australia New Zealand UK Canada and the US but approximately 4.93 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:11.917103 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('dsp', ' dsp', ' Dessertspoon', ' 10 millilitres in Australia.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:11.924693 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('tbsp', ' tbsp', ' Tablespoon', ' 20 millilitres in Australia or 15 millilitres in New Zealand the UK Canada and the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:11.932160 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('fl oz', ' fl oz', ' Fluid ounce', ' 28.41 millilitres in the UK or approximately 29.57 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:11.940305 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('cups', ' cup', ' Cup', ' 250 millilitres in Australia and New Zealand or approximately 170.48 millilitres in the UK or approximately 227.31 millilitres in Canada and approximately 236.59 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:11.947171 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('pt', ' pt', ' Pint', ' 570 millilitres in Australia approximately 568.26 millilitres in New Zealand the UK and Canada and approximately 473.18 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:11.954815 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('qt', ' qt', ' Quart', ' Approximately 1136.52 millilitres in Australia New Zealand the UK and Canada and approximately 946.35 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:11.962887 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('gal', ' gal', ' Gallon', ' Approximately 4546.09 millilitres in Australia New Zealand the UK and Canada and approximately 3785.41 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:11.970928 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('jiggers', ' jigger', ' Jigger', ' 1.5 fluid ounces.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:11.978694 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('oz', ' oz', ' Ounce', ' 1/4 lb for butter which can also be measured as 3 tablespoons.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:11.986020 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('L', ' L', ' Liter', ' Commonly used for volume measurement in the metric system.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:11.994224 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('mL', ' mL', ' Milliliter', ' Commonly used for volume measurement in the metric system.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.001600 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('dm3', ' dm3', ' Cubic decimeter', ' Equivalent to 1 liter.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.009228 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('g', ' g', ' Gram', ' Commonly used for weight measurement in the metric system.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.017172 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('kg', ' kg', ' Kilogram', ' Commonly used for weight measurement in the metric system.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.024445 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('lbs', ' lb', ' Pound', ' Used for weight measurement in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.031947 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('fluid scruples', ' fluid scruple', ' Fluid scruple', " A unit used in the apothecaries' system but not commonly used in cooking."), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.040208 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('cm3', ' cm3', ' Cubic centimeter', ' Equivalent to 1 milliliter.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.048172 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('breakfast cups', ' breakfast cup', ' Breakfast cup', ' Similar in size to the US customary cup and the metric cup.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.055868 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('tumblers', ' tumbler', ' Tumblerful', ' A unit used in British cookery books and recipes.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.063104 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('winefulls', ' winefull', ' Wineglassful', ' A unit used in British cookery books and recipes.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.071383 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('coffee cups', ' coffee cup', ' Coffee cup', ' Can vary from 100 to 200 millilitres.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.079081 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('sticks of butter', ' stick of butter', ' Stick of butter', ' 1/4 lb or 3 tablespoons.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.087113 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('smidgens', ' smidgen', ' Smidgen', ' An approximate unit of measure.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.095194 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('dashes', ' dash', ' Dash', ' An approximate unit of measure.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.103901 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('drops', ' drop', ' Drop', ' An approximate unit of measure.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.111035 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('eaches', ' each', ' Each', ' A single unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.120008 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('boxes', ' box', ' Box', ' A Single box of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.127986 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('crates', ' crate', ' Crate', ' a single crate of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.135808 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('jars', ' jar', ' Jar', ' A single Jar of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.144135 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('cans', ' can', ' Can', ' A Single Can of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.152889 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('bars', ' bar', ' Bars', ' A Single bar of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.161167 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('loaves', ' loaf', ' Loaf', ' A single loaf of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:11:12.169462 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('packs', ' pack', ' Pack', ' A Single Pack of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.005060 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "units_plural_key"DETAIL: Key (plural)=(Plural) already exists.', - payload=('Plural', ' Single', ' Fullname', ' Description'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.012765 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('tsp', ' tsp', ' Teaspoon', ' 5 millilitres in Australia New Zealand UK Canada and the US but approximately 4.93 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.022257 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('dsp', ' dsp', ' Dessertspoon', ' 10 millilitres in Australia.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.030830 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('tbsp', ' tbsp', ' Tablespoon', ' 20 millilitres in Australia or 15 millilitres in New Zealand the UK Canada and the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.039674 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('fl oz', ' fl oz', ' Fluid ounce', ' 28.41 millilitres in the UK or approximately 29.57 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.048175 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('cups', ' cup', ' Cup', ' 250 millilitres in Australia and New Zealand or approximately 170.48 millilitres in the UK or approximately 227.31 millilitres in Canada and approximately 236.59 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.056041 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('pt', ' pt', ' Pint', ' 570 millilitres in Australia approximately 568.26 millilitres in New Zealand the UK and Canada and approximately 473.18 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.064251 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('qt', ' qt', ' Quart', ' Approximately 1136.52 millilitres in Australia New Zealand the UK and Canada and approximately 946.35 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.072942 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('gal', ' gal', ' Gallon', ' Approximately 4546.09 millilitres in Australia New Zealand the UK and Canada and approximately 3785.41 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.081401 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('jiggers', ' jigger', ' Jigger', ' 1.5 fluid ounces.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.090546 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('oz', ' oz', ' Ounce', ' 1/4 lb for butter which can also be measured as 3 tablespoons.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.099456 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('L', ' L', ' Liter', ' Commonly used for volume measurement in the metric system.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.107916 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('mL', ' mL', ' Milliliter', ' Commonly used for volume measurement in the metric system.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.116091 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('dm3', ' dm3', ' Cubic decimeter', ' Equivalent to 1 liter.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.124020 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('g', ' g', ' Gram', ' Commonly used for weight measurement in the metric system.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.132775 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('kg', ' kg', ' Kilogram', ' Commonly used for weight measurement in the metric system.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.140932 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('lbs', ' lb', ' Pound', ' Used for weight measurement in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.148932 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('fluid scruples', ' fluid scruple', ' Fluid scruple', " A unit used in the apothecaries' system but not commonly used in cooking."), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.157444 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('cm3', ' cm3', ' Cubic centimeter', ' Equivalent to 1 milliliter.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.166119 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('breakfast cups', ' breakfast cup', ' Breakfast cup', ' Similar in size to the US customary cup and the metric cup.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.174918 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('tumblers', ' tumbler', ' Tumblerful', ' A unit used in British cookery books and recipes.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.182730 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('winefulls', ' winefull', ' Wineglassful', ' A unit used in British cookery books and recipes.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.191743 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('coffee cups', ' coffee cup', ' Coffee cup', ' Can vary from 100 to 200 millilitres.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.200252 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('sticks of butter', ' stick of butter', ' Stick of butter', ' 1/4 lb or 3 tablespoons.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.209374 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('smidgens', ' smidgen', ' Smidgen', ' An approximate unit of measure.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.217544 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('dashes', ' dash', ' Dash', ' An approximate unit of measure.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.226129 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('drops', ' drop', ' Drop', ' An approximate unit of measure.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.236147 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('eaches', ' each', ' Each', ' A single unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.244366 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('boxes', ' box', ' Box', ' A Single box of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.253119 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('crates', ' crate', ' Crate', ' a single crate of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.261763 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('jars', ' jar', ' Jar', ' A single Jar of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.269773 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('cans', ' can', ' Can', ' A Single Can of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.279465 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('bars', ' bar', ' Bars', ' A Single bar of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.287480 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('loaves', ' loaf', ' Loaf', ' A single loaf of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.296201 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('packs', ' pack', ' Pack', ' A Single Pack of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:12:49.306000 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=PrefixTable, - sql='DROP TABLE units CASCADE;') -2025-04-07 18:13:10.285371 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "units_plural_key"DETAIL: Key (plural)=(Plural) already exists.', - payload=('Plural', ' Single', ' Fullname', ' Description'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.294121 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('tsp', ' tsp', ' Teaspoon', ' 5 millilitres in Australia New Zealand UK Canada and the US but approximately 4.93 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.302719 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('dsp', ' dsp', ' Dessertspoon', ' 10 millilitres in Australia.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.312275 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('tbsp', ' tbsp', ' Tablespoon', ' 20 millilitres in Australia or 15 millilitres in New Zealand the UK Canada and the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.320616 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('fl oz', ' fl oz', ' Fluid ounce', ' 28.41 millilitres in the UK or approximately 29.57 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.329231 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('cups', ' cup', ' Cup', ' 250 millilitres in Australia and New Zealand or approximately 170.48 millilitres in the UK or approximately 227.31 millilitres in Canada and approximately 236.59 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.339234 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('pt', ' pt', ' Pint', ' 570 millilitres in Australia approximately 568.26 millilitres in New Zealand the UK and Canada and approximately 473.18 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.347584 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('qt', ' qt', ' Quart', ' Approximately 1136.52 millilitres in Australia New Zealand the UK and Canada and approximately 946.35 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.356397 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('gal', ' gal', ' Gallon', ' Approximately 4546.09 millilitres in Australia New Zealand the UK and Canada and approximately 3785.41 millilitres in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.364495 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('jiggers', ' jigger', ' Jigger', ' 1.5 fluid ounces.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.371981 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('oz', ' oz', ' Ounce', ' 1/4 lb for butter which can also be measured as 3 tablespoons.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.380838 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('L', ' L', ' Liter', ' Commonly used for volume measurement in the metric system.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.389480 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('mL', ' mL', ' Milliliter', ' Commonly used for volume measurement in the metric system.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.396988 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('dm3', ' dm3', ' Cubic decimeter', ' Equivalent to 1 liter.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.406045 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('g', ' g', ' Gram', ' Commonly used for weight measurement in the metric system.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.414346 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('kg', ' kg', ' Kilogram', ' Commonly used for weight measurement in the metric system.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.422811 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('lbs', ' lb', ' Pound', ' Used for weight measurement in the US.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.431743 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('fluid scruples', ' fluid scruple', ' Fluid scruple', " A unit used in the apothecaries' system but not commonly used in cooking."), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.440322 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('cm3', ' cm3', ' Cubic centimeter', ' Equivalent to 1 milliliter.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.448693 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('breakfast cups', ' breakfast cup', ' Breakfast cup', ' Similar in size to the US customary cup and the metric cup.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.457055 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('tumblers', ' tumbler', ' Tumblerful', ' A unit used in British cookery books and recipes.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.465266 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('winefulls', ' winefull', ' Wineglassful', ' A unit used in British cookery books and recipes.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.473926 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('coffee cups', ' coffee cup', ' Coffee cup', ' Can vary from 100 to 200 millilitres.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.481942 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('sticks of butter', ' stick of butter', ' Stick of butter', ' 1/4 lb or 3 tablespoons.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.490407 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('smidgens', ' smidgen', ' Smidgen', ' An approximate unit of measure.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.498270 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('dashes', ' dash', ' Dash', ' An approximate unit of measure.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.507063 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('drops', ' drop', ' Drop', ' An approximate unit of measure.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.516062 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('eaches', ' each', ' Each', ' A single unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.524222 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('boxes', ' box', ' Box', ' A Single box of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.532729 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('crates', ' crate', ' Crate', ' a single crate of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.541345 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('jars', ' jar', ' Jar', ' A single Jar of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.549306 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('cans', ' can', ' Can', ' A Single Can of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.558787 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('bars', ' bar', ' Bars', ' A Single bar of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.567370 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('loaves', ' loaf', ' Loaf', ' A single loaf of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:10.574985 --- ERROR --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', - payload=('packs', ' pack', ' Pack', ' A Single Pack of a unit.'), - sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') -2025-04-07 18:13:18.198596 --- ERROR --- DatabaseError(message='table "units" does not exist', - payload=PrefixTable, - sql='DROP TABLE units CASCADE;') -2025-04-07 18:49:02.343762 --- ERROR --- DatabaseError(message='operator does not exist: test_item_info = integerLINE 8: WHERE test_item_info = (SELECT item_info_id FROM ite... ^HINT: No operator matches the given name and argument types. You might need to add explicit type casts.', - payload=(2016,), - sql='WITH passed_id AS (SELECT %s AS passed_id), logistics_id AS (SELECT logistics_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_id)), item_info_id AS (SELECT item_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_id)), cte_item_info AS ( SELECT * FROM test_item_info LEFT JOIN units ON test_item_info.uom = units.id WHERE test_item_info = (SELECT item_info_id FROM item_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(array_agg(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-04-07 18:50:39.627298 --- ERROR --- DatabaseError(message='relation "item_info_id" does not existLINE 8: ... WHERE test_item_info = (SELECT info_id FROM item_info_... ^', - payload=(2016,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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 * FROM test_item_info LEFT JOIN units ON test_item_info.uom = units.id WHERE test_item_info = (SELECT info_id FROM item_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(array_agg(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-04-07 18:51:14.119335 --- ERROR --- DatabaseError(message='operator does not exist: test_item_info = integerLINE 8: WHERE test_item_info = (SELECT item_info_id FROM inf... ^HINT: No operator matches the given name and argument types. You might need to add explicit type casts.', - payload=(2016,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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 * FROM test_item_info LEFT JOIN units ON test_item_info.uom = units.id WHERE test_item_info = (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(array_agg(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-04-07 18:53:02.040807 --- ERROR --- DatabaseError(message='syntax error at or near "FROM"LINE 8: FROM test_item_info ^', - payload=(2016,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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(array_agg(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-04-07 19:13:00.718908 --- ERROR --- DatabaseError(message='invalid reference to FROM-clause entry for table "test_receipt_items"LINE 6: LEFT JOIN units ON test_receipt_items.uom = unit... ^HINT: Perhaps you meant to reference the table alias "items".', - payload=(5,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_receipt_items AS ( SELECT items.* , (SELECT COALESCE(row_to_json(un), '{}') FROM units un) AS uom FROM test_receipt_items items LEFT JOIN units ON test_receipt_items.uom = units.id WHERE items.receipt_id = (SELECT passed_id FROM passed_id) )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_receipts.*, logins.username as submitted_by, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_receipt_items ris) AS receipt_items, row_to_json(test_vendors.*) as vendorFROM test_receiptsJOIN logins ON test_receipts.submitted_by = logins.idLEFT JOIN test_vendors ON test_receipts.vendor_id = test_vendors.id WHERE test_receipts.id=(SELECT passed_id FROM passed_id)') -2025-04-07 19:13:24.483942 --- ERROR --- DatabaseError(message='operator does not exist: character varying = integerLINE 6: LEFT JOIN units ON items.uom = units.id ^HINT: No operator matches the given name and argument types. You might need to add explicit type casts.', - payload=(5,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_receipt_items AS ( SELECT items.* , (SELECT COALESCE(row_to_json(un), '{}') FROM units un) AS uom FROM test_receipt_items items LEFT JOIN units ON items.uom = units.id WHERE items.receipt_id = (SELECT passed_id FROM passed_id) )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_receipts.*, logins.username as submitted_by, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_receipt_items ris) AS receipt_items, row_to_json(test_vendors.*) as vendorFROM test_receiptsJOIN logins ON test_receipts.submitted_by = logins.idLEFT JOIN test_vendors ON test_receipts.vendor_id = test_vendors.id WHERE test_receipts.id=(SELECT passed_id FROM passed_id)') -2025-04-07 19:15:47.046817 --- ERROR --- DatabaseError(message='operator does not exist: character varying = integerLINE 5: LEFT JOIN units ON items.uom = units.id ^HINT: No operator matches the given name and argument types. You might need to add explicit type casts.', - payload=(5,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_receipt_items AS ( SELECT items.* FROM test_receipt_items items LEFT JOIN units ON items.uom = units.id WHERE items.receipt_id = (SELECT passed_id FROM passed_id) )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_receipts.*, logins.username as submitted_by, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_receipt_items ris) AS receipt_items, row_to_json(test_vendors.*) as vendorFROM test_receiptsJOIN logins ON test_receipts.submitted_by = logins.idLEFT JOIN test_vendors ON test_receipts.vendor_id = test_vendors.id WHERE test_receipts.id=(SELECT passed_id FROM passed_id)') -2025-04-07 19:16:34.486882 --- ERROR --- DatabaseError(message='operator does not exist: character varying = integerLINE 5: ... LEFT JOIN units ON test_receipt_items.uom = units.id ^HINT: No operator matches the given name and argument types. You might need to add explicit type casts.', - payload=(5,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_receipt_items AS ( SELECT test_receipt_items.* FROM test_receipt_items LEFT JOIN units ON test_receipt_items.uom = units.id WHERE test_receipt_items.receipt_id = (SELECT passed_id FROM passed_id) )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_receipts.*, logins.username as submitted_by, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_receipt_items ris) AS receipt_items, row_to_json(test_vendors.*) as vendorFROM test_receiptsJOIN logins ON test_receipts.submitted_by = logins.idLEFT JOIN test_vendors ON test_receipts.vendor_id = test_vendors.id WHERE test_receipts.id=(SELECT passed_id FROM passed_id)') -2025-04-07 19:19:55.680893 --- ERROR --- DatabaseError(message='more than one row returned by a subquery used as an expression', - payload=(5,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_receipt_items AS ( SELECT items.* , (SELECT COALESCE(row_to_json(un), '{}') FROM units un) AS uom FROM test_receipt_items items LEFT JOIN units ON items.uom = units.id WHERE items.receipt_id = (SELECT passed_id FROM passed_id) )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_receipts.*, logins.username as submitted_by, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_receipt_items ris) AS receipt_items, row_to_json(test_vendors.*) as vendorFROM test_receiptsJOIN logins ON test_receipts.submitted_by = logins.idLEFT JOIN test_vendors ON test_receipts.vendor_id = test_vendors.id WHERE test_receipts.id=(SELECT passed_id FROM passed_id)') -2025-04-08 06:49:10.286120 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_shopping_list_items_uuid_sl_id_key"DETAIL: Key (uuid, sl_id)=(%078742015101%, 5) already exists.', - payload=('%078742015101%', '5', 'sku', '100% grated parmesan cheese', 1, 1, 2149, '{}'), - sql='INSERT INTO test_shopping_list_items(uuid, sl_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-09 17:00:37.142181 --- ERROR --- DatabaseError(message='syntax error at or near ";"LINE 24: GROUP BY test_item_info.id; ^', - payload=(2149,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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_two 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_conversions AS ( SELECT conversions.* FROM conversions WHERE conversions.id = ANY(SELECT unnest(conversions_column) FROM test_item_info) ), cte_item_info AS ( SELECT cte_item_info.*, json_agg(cte_conversions) AS conversions FROM cte_item_info LEFT JOIN cte_conversions ON true GROUP BY test_item_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-04-09 17:00:53.165583 --- ERROR --- DatabaseError(message='relation "conversions" does not existLINE 15: FROM conversions ^', - payload=(2149,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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_two 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_conversions AS ( SELECT conversions.* FROM conversions WHERE conversions.id = ANY(SELECT unnest(conversions_column) FROM test_item_info) ), cte_item_info AS ( SELECT cte_item_info.*, json_agg(cte_conversions) AS conversions FROM cte_item_info LEFT JOIN cte_conversions ON true GROUP BY test_item_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-04-09 17:02:26.029976 --- ERROR --- DatabaseError(message='column "conversions" does not existLINE 16: ... WHERE test_conversions.id = ANY(SELECT unnest(conversion... ^', - payload=(2149,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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_two 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_conversions AS ( SELECT test_conversions.* FROM test_conversions WHERE test_conversions.id = ANY(SELECT unnest(conversions) FROM test_item_info) ), cte_item_info AS ( SELECT cte_item_info.*, json_agg(cte_conversions) AS conversions FROM cte_item_info LEFT JOIN cte_conversions ON true GROUP BY test_item_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-04-09 17:02:55.461835 --- ERROR --- DatabaseError(message='column "conversions" does not existLINE 16: ... WHERE test_conversions.id = ANY(SELECT unnest(conversion... ^', - payload=(2149,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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_two 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_conversions AS ( SELECT test_conversions.* FROM test_conversions WHERE test_conversions.id = ANY(SELECT unnest(conversions) FROM test_item_info) ), cte_item_info AS ( SELECT cte_item_info_two.*, json_agg(cte_conversions) AS conversions FROM cte_item_info_two LEFT JOIN cte_conversions ON true GROUP BY test_item_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-04-09 17:03:42.594269 --- ERROR --- DatabaseError(message='column "conversions" does not existLINE 16: ... WHERE test_conversions.id = ANY(SELECT unnest(conversion... ^', - payload=(2149,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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_conversions AS ( SELECT test_conversions.* FROM test_conversions WHERE test_conversions.id = ANY(SELECT unnest(conversions) FROM test_item_info) ), 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-04-09 17:05:18.810964 --- ERROR --- DatabaseError(message='missing FROM-clause entry for table "cte_conversions"LINE 14: row_to_json(cte_conversions.*) as conversions ^', - payload=(2149,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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_conversions AS ( SELECT test_conversions.* FROM test_conversions WHERE test_conversions.item_id = (SELECT passed_id FROM passed_id) ), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom, row_to_json(cte_conversions.*) as conversions 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-04-09 17:06:11.023787 --- ERROR --- DatabaseError(message='syntax error at or near "SELECT"LINE 14: row_to_json(SELECT * FROM cte_conversions) as conver... ^', - payload=(2149,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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_conversions AS ( SELECT test_conversions.* FROM test_conversions WHERE test_conversions.item_id = (SELECT passed_id FROM passed_id) ), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom, row_to_json(SELECT * FROM cte_conversions) as conversions 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-04-09 17:06:29.417010 --- ERROR --- DatabaseError(message='syntax error at or near "FROM"LINE 14: row_to_json(* FROM cte_conversions) as conversions ^', - payload=(2149,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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_conversions AS ( SELECT test_conversions.* FROM test_conversions WHERE test_conversions.item_id = (SELECT passed_id FROM passed_id) ), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom, row_to_json(* FROM cte_conversions) as conversions 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-04-09 17:07:43.627785 --- ERROR --- DatabaseError(message='missing FROM-clause entry for table "cte_conversions"LINE 14: row_to_json(cte_conversions.*) AS conversions ... ^', - payload=(2149,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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_conversions AS ( SELECT test_conversions.* FROM test_conversions WHERE test_conversions.item_id = (SELECT passed_id FROM passed_id) ), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom, row_to_json(cte_conversions.*) AS conversions 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-04-09 17:08:29.263327 --- ERROR --- DatabaseError(message='more than one row returned by a subquery used as an expression', - payload=(2149,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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_conversions AS ( SELECT test_conversions.* FROM test_conversions WHERE test_conversions.item_id = (SELECT passed_id FROM passed_id) ), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom, (SELECT row_to_json(convs) FROM cte_conversions convs) AS conversions 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-04-11 16:18:53.997845 --- ERROR --- DatabaseError(message='invalid input syntax for type integer: "each"LINE 3: ...S ('new sku', 10, '%076808514377%', 'unknown', 1, 'each', '{... ^', - payload=('new sku', 10, '%076808514377%', 'unknown', 1, 'each', '{"cost": 0, "expires": false}', 'Unresolved'), - sql='INSERT INTO main_receipt_items(type, receipt_id, barcode, name, qty, uom, data, status) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-11 17:33:40.206669 --- ERROR --- DatabaseError(message='column "prefixes" specified more than onceLINE 3: ...uom, cost, safety_stock, lead_time_days, ai_pick, prefixes) ^', - payload=('%076808514377%', '{}', '', 1.0, 1, 0.0, 0.0, 0.0, False, []), - sql='INSERT INTO main_item_info(barcode, prefixes, packaging, uom_quantity, uom, cost, safety_stock, lead_time_days, ai_pick, prefixes) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-11 17:36:36.692381 --- ERROR --- DatabaseError(message='not all arguments converted during string formatting', - payload=('%076808514377%', '{}', '', 1.0, 1, 0.0, 0.0, 0.0, False, []), - sql='INSERT INTO main_item_info(barcode, packaging, uom_quantity, uom, cost, safety_stock, lead_time_days, ai_pick, prefixes) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') - - - - - - -2025-04-12 09:38:34.044274 --- ERROR --- DatabaseError(message='syntax error at or near "test_item_info"LINE 18: ...on_agg(p.*) FROM test_prefixes as p WHERE p.id IN test_item_... ^', - payload=(2149,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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_conversions AS ( SELECT test_conversions.id as conv_id, test_conversions.conv_factor as conv_factor, units.* as uom FROM test_conversions LEFT JOIN units ON test_conversions.uom_id = units.id WHERE test_conversions.item_id = (SELECT passed_id FROM passed_id) ), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom, COALESCE((SELECT json_agg(convs) FROM cte_conversions convs), '[]'::json) AS conversions, COALESCE((SELECT json_agg(p.*) FROM test_prefixes as p WHERE p.id IN test_item_info.prefixes), '[]'::json) as prefixes 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-04-12 09:39:52.102309 --- ERROR --- DatabaseError(message='relation "test_prefixes" does not existLINE 18: COALESCE((SELECT json_agg(p.*) FROM test_prefixes as... ^', - payload=(2149,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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_conversions AS ( SELECT test_conversions.id as conv_id, test_conversions.conv_factor as conv_factor, units.* as uom FROM test_conversions LEFT JOIN units ON test_conversions.uom_id = units.id WHERE test_conversions.item_id = (SELECT passed_id FROM passed_id) ), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom, COALESCE((SELECT json_agg(convs) FROM cte_conversions convs), '[]'::json) AS conversions, COALESCE((SELECT json_agg(p.*) FROM test_prefixes as p WHERE p.id IN (test_item_info.prefixes)), '[]'::json) as prefixes 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-04-12 09:40:26.149289 --- ERROR --- DatabaseError(message='operator does not exist: integer = integer[]LINE 18: ...son_agg(p.*) FROM test_sku_prefix as p WHERE p.id IN (test_i... ^HINT: No operator matches the given name and argument types. You might need to add explicit type casts.', - payload=(2149,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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_conversions AS ( SELECT test_conversions.id as conv_id, test_conversions.conv_factor as conv_factor, units.* as uom FROM test_conversions LEFT JOIN units ON test_conversions.uom_id = units.id WHERE test_conversions.item_id = (SELECT passed_id FROM passed_id) ), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom, COALESCE((SELECT json_agg(convs) FROM cte_conversions convs), '[]'::json) AS conversions, COALESCE((SELECT json_agg(p.*) FROM test_sku_prefix as p WHERE p.id IN (test_item_info.prefixes)), '[]'::json) as prefixes 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-04-12 09:41:00.418051 --- ERROR --- DatabaseError(message='operator does not exist: integer @> integer[]LINE 18: ...son_agg(p.*) FROM test_sku_prefix as p WHERE p.id @> test_it... ^HINT: No operator matches the given name and argument types. You might need to add explicit type casts.', - payload=(2149,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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_conversions AS ( SELECT test_conversions.id as conv_id, test_conversions.conv_factor as conv_factor, units.* as uom FROM test_conversions LEFT JOIN units ON test_conversions.uom_id = units.id WHERE test_conversions.item_id = (SELECT passed_id FROM passed_id) ), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom, COALESCE((SELECT json_agg(convs) FROM cte_conversions convs), '[]'::json) AS conversions, COALESCE((SELECT json_agg(p.*) FROM test_sku_prefix as p WHERE p.id @> test_item_info.prefixes), '[]'::json) as prefixes 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-04-12 10:40:51.886361 --- ERROR --- DatabaseError(message='type object 'ItemInfoTable' has no attribute 'cursor'', - payload=test, - sql='SELECT * FROM _item_info WHERE id=%s;') -2025-04-12 14:04:48.983858 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "main_sku_prefix_name_uuid_key"DETAIL: Key (name, uuid)=(Soda, %1000%) already exists.', - payload=('%1000%', 'Soda', ''), - sql='INSERT INTO main_sku_prefix(uuid, name, description) VALUES (%s, %s, %s) RETURNING *;') -2025-04-12 14:47:01.980333 --- ERROR --- DatabaseError(message='invalid input syntax for type integer: " Pinch"LINE 1: ... SET name = 'Coca-Cola 12 Pack', qty = '1', uom = ' Pinch', ... ^', - payload={'id': 66, 'update': {'name': 'Coca-Cola 12 Pack', 'qty': '1', 'uom': ' Pinch', 'data': {'cost': '0', 'expires': False, 'api_data': {'id': '0049000028904', 'lc': 'en', '_id': '0049000028904', 'rev': 20, 'code': '0049000028904', 'lang': 'en', 'link': '', 'teams': 'swipe-studio', 'brands': 'Coca-Cola', 'images': {'1': {'sizes': {'100': {'h': 60, 'w': 100}, '400': {'h': 239, 'w': 400}, 'full': {'h': 957, 'w': 1600}}, 'uploader': 'openfoodfacts-contributors', 'uploaded_t': '1478385267'}, '2': {'sizes': {'100': {'h': 100, 'w': 75}, '400': {'h': 400, 'w': 300}, 'full': {'h': 3328, 'w': 2496}}, 'uploader': 'tanyad1013', 'uploaded_t': 1555187983}, '3': {'sizes': {'100': {'h': 100, 'w': 75}, '400': {'h': 400, 'w': 300}, 'full': {'h': 3328, 'w': 2496}}, 'uploader': 'tanyad1013', 'uploaded_t': 1555188029}, '5': {'sizes': {'100': {'h': 100, 'w': 100}, '400': {'h': 400, 'w': 400}, 'full': {'h': 1400, 'w': 1400}}, 'uploader': 'thaialagata', 'uploaded_t': 1640260897}, 'front_en': {'x1': '0', 'x2': '0', 'y1': '0', 'y2': '0', 'rev': '16', 'angle': '0', 'imgid': '5', 'sizes': {'100': {'h': 78, 'w': 100}, '200': {'h': 156, 'w': 200}, '400': {'h': 311, 'w': 400}, 'full': {'h': 1080, 'w': 1389}}, 'geometry': '0x0-0-0', 'normalize': 'false', 'white_magic': 'false', 'coordinates_image_size': 'full'}, 'ingredients_en': {'x1': None, 'x2': None, 'y1': None, 'y2': None, 'rev': '8', 'angle': None, 'imgid': '3', 'sizes': {'100': {'h': 100, 'w': 75}, '200': {'h': 200, 'w': 150}, '400': {'h': 400, 'w': 300}, 'full': {'h': 3328, 'w': 2496}}, 'geometry': '0x0-0-0', 'normalize': None, 'white_magic': None}}, 'labels': '', 'origin': '', 'states': 'en:to-be-completed, en:nutrition-facts-completed, en:ingredients-completed, en:expiration-date-to-be-completed, en:packaging-code-to-be-completed, en:characteristics-to-be-completed, en:origins-to-be-completed, en:categories-completed, en:brands-completed, en:packaging-completed, en:quantity-completed, en:product-name-completed, en:photos-to-be-validated, en:packaging-photo-to-be-selected, en:nutrition-photo-to-be-selected, en:ingredients-photo-selected, en:front-photo-selected, en:photos-uploaded', 'stores': '', 'traces': '', 'creator': 'openfoodfacts-contributors', 'origins': '', 'scans_n': 18, 'sortkey': 1609090427, 'complete': 0, 'quantity': '12 cans', '_keywords': ['beverage', 'carbonated', 'coca-cola', 'drink'], 'allergens': '', 'countries': 'United States', 'created_t': 1478385267, 'emb_codes': '', 'image_url': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/front_en.16.400.jpg', 'labels_lc': 'en', 'languages': {'en:english': 4}, 'max_imgid': '5', 'misc_tags': ['en:ecoscore-extended-data-computed', 'en:ecoscore-extended-data-version-4', 'en:ecoscore-not-computed', 'en:nutriscore-2021-e-2023-e', 'en:nutriscore-2021-same-as-2023', 'en:nutriscore-computed', 'en:nutrition-fruits-vegetables-legumes-estimate-from-ingredients', 'en:nutrition-fruits-vegetables-nuts-estimate-from-ingredients', 'en:nutrition-no-fiber', 'en:nutrition-no-fiber-or-fruits-vegetables-nuts', 'en:packagings-not-complete', 'en:packagings-not-empty', 'en:packagings-not-empty-but-not-complete', 'en:packagings-number-of-components-2'], 'origin_en': '', 'packaging': 'Aluminium-can, Card-box', 'traces_lc': 'en', 'categories': 'Beverages, Carbonated drinks', 'codes_tags': ['code-13', 'conflict-with-upc-12', '0049000028xxx', '004900002xxxx', '00490000xxxxx', '0049000xxxxxx', '004900xxxxxxx', '00490xxxxxxxx', '0049xxxxxxxxx', '004xxxxxxxxxx', '00xxxxxxxxxxx', '0xxxxxxxxxxxx'], 'labels_old': '', 'nova_group': 4, 'nutriments': {'fat': 0, 'salt': 112.5, 'energy': 586, 'sodium': 45, 'sugars': 39, 'fat_100g': 0, 'fat_unit': 'g', 'proteins': 0, 'fat_value': 0, 'salt_100g': 31.7, 'salt_unit': 'g', 'nova-group': 4, 'salt_value': 112.5, 'energy-kcal': 140, 'energy_100g': 165, 'energy_unit': 'kcal', 'fat_serving': 0, 'sodium_100g': 12.7, 'sodium_unit': 'g', 'sugars_100g': 11, 'sugars_unit': 'g', 'energy_value': 140, 'salt_serving': 112.5, 'sodium_value': 45, 'sugars_value': 39, 'carbohydrates': 39, 'proteins_100g': 0, 'proteins_unit': 'g', 'energy_serving': 586, 'proteins_value': 0, 'sodium_serving': 45, 'sugars_serving': 39, 'nova-group_100g': 4, 'energy-kcal_100g': 39.4, 'energy-kcal_unit': 'kcal', 'proteins_serving': 0, 'energy-kcal_value': 140, 'carbohydrates_100g': 11, 'carbohydrates_unit': 'g', 'nova-group_serving': 4, 'nutrition-score-fr': 32, 'carbohydrates_value': 39, 'energy-kcal_serving': 140, 'carbohydrates_serving': 39, 'nutrition-score-fr_100g': 32, 'energy-kcal_value_computed': 156, 'fruits-vegetables-nuts-estimate-from-ingredients_100g': 0, 'fruits-vegetables-legumes-estimate-from-ingredients_100g': 0, 'fruits-vegetables-nuts-estimate-from-ingredients_serving': 0, 'fruits-vegetables-legumes-estimate-from-ingredients_serving': 0}, 'nutriscore': {'2021': {'data': {'fiber': 0, 'energy': 165, 'is_fat': 0, 'sodium': 12700, 'sugars': 11, 'is_water': 0, 'proteins': 0, 'is_cheese': 0, 'fiber_value': 0, 'is_beverage': 1, 'energy_value': 165, 'fiber_points': 0, 'sodium_value': 12700, 'sugars_value': 11, 'energy_points': 6, 'saturated_fat': 0, 'sodium_points': 10, 'sugars_points': 8, 'proteins_value': 0, 'negative_points': 24, 'positive_points': 0, 'proteins_points': 0, 'saturated_fat_ratio': 0, 'saturated_fat_value': 0, 'saturated_fat_points': 0, 'fruits_vegetables_nuts_colza_walnut_olive_oils': 0, 'fruits_vegetables_nuts_colza_walnut_olive_oils_value': 0, 'fruits_vegetables_nuts_colza_walnut_olive_oils_points': 0}, 'grade': 'e', 'score': 24, 'category_available': 1, 'nutrients_available': 1, 'nutriscore_computed': 1, 'nutriscore_applicable': 1}, '2023': {'data': {'is_water': 0, 'is_cheese': 0, 'components': {'negative': [{'id': 'energy', 'unit': 'kJ', 'value': 165, 'points': 3, 'points_max': 10}, {'id': 'sugars', 'unit': 'g', 'value': 11, 'points': 9, 'points_max': 10}, {'id': 'saturated_fat', 'unit': 'g', 'value': 0, 'points': 0, 'points_max': 10}, {'id': 'salt', 'unit': 'g', 'value': 31.7, 'points': 20, 'points_max': 20}, {'id': 'non_nutritive_sweeteners', 'unit': 'number', 'value': 0, 'points': 0, 'points_max': 4}], 'positive': [{'id': 'proteins', 'unit': 'g', 'value': 0, 'points': 0, 'points_max': 7}, {'id': 'fiber', 'unit': 'g', 'value': None, 'points': 0, 'points_max': 5}, {'id': 'fruits_vegetables_legumes', 'unit': '%', 'value': 0, 'points': 0, 'points_max': 6}]}, 'is_beverage': 1, 'count_proteins': 1, 'negative_points': 32, 'positive_points': 0, 'positive_nutrients': ['proteins', 'fiber', 'fruits_vegetables_legumes'], 'is_red_meat_product': 0, 'negative_points_max': 54, 'positive_points_max': 18, 'count_proteins_reason': 'beverage', 'is_fat_oil_nuts_seeds': 0}, 'grade': 'e', 'score': 32, 'category_available': 1, 'nutrients_available': 1, 'nutriscore_computed': 1, 'nutriscore_applicable': 1}}, 'origins_lc': 'en', 'packagings': [{'shape': 'en:can', 'material': 'en:aluminium'}, {'shape': 'en:box'}], 'teams_tags': ['swipe-studio'], 'update_key': 'sort', 'additives_n': 2, 'brands_tags': ['coca-cola'], 'cities_tags': [], 'food_groups': 'en:unsweetened-beverages', 'ingredients': [{'id': 'en:pledse-recycle-cans', 'text': 'pledse recycle cans', 'percent_max': 100, 'percent_min': 9.09090909090909, 'is_in_taxonomy': 0, 'percent_estimate': 54.5454545454545}, {'id': 'en:cartons-cts-ainer-fructose-corn-syrup-1-can-phosphoric-acid', 'text': 'cartons cts ainer fructose corn syrup 1 can phosphoric acid', 'percent_max': 50, 'percent_min': 0, 'is_in_taxonomy': 0, 'percent_estimate': 22.7272727272727}, {'id': 'en:natural-carbonated-water', 'text': 'natural carbonated water', 'percent_max': 33.3333333333333, 'percent_min': 0, 'is_in_taxonomy': 0, 'percent_estimate': 11.3636363636364}, {'id': 'en:high-caramel-color', 'text': 'high caramel color', 'percent_max': 25, 'percent_min': 0, 'is_in_taxonomy': 0, 'percent_estimate': 5.68181818181818}, {'id': 'en:flavouring', 'text': 'flavors', 'vegan': 'maybe', 'vegetarian': 'maybe', 'percent_max': '5', 'percent_min': 0, 'is_in_taxonomy': 1, 'percent_estimate': 2.5}, {'id': 'en:caffeine', 'text': 'caffeine', 'vegan': 'yes', 'vegetarian': 'yes', 'percent_max': '5', 'percent_min': 0, 'is_in_taxonomy': 1, 'percent_estimate': 1.59090909090909}, {'id': 'en:canned-under-authority-of-the-coca-cola-company-atlanta', 'text': 'canned under authority of the coca-cola company atlanta', 'percent_max': '5', 'percent_min': 0, 'is_in_taxonomy': 0, 'percent_estimate': 0.795454545454547}, {'id': 'en:ga-30313', 'text': 'ga 30313', 'percent_max': '5', 'percent_min': 0, 'is_in_taxonomy': 0, 'percent_estimate': 0.397727272727273}, {'id': 'en:canner-s-name-and-address-appear-on-each-can', 'text': "canner's name and address appear on each can", 'percent_max': '5', 'percent_min': 0, 'is_in_taxonomy': 0, 'percent_estimate': 0.19886363636364}, {'id': 'en:caffeine-content', 'text': 'caffeine content', 'quantity': '34 mg', 'quantity_g': 0.034, 'ingredients': [{'id': 'en:12-fl-oz-02017-the-coca-cola-140-daily-value-0-2-14-g-company-consumer-information-ugars-78-call-1-800-438-2653-coke', 'text': '12 fl oz 02017 the coca-cola 140 daily value 0% 2% 14% g company consumer information ugars 78%| call 1-800-438-2653 coke', 'percent_max': '5', 'percent_min': 0, 'is_in_taxonomy': 0, 'percent_estimate': 0.0994318181818201}], 'percent_max': '5', 'percent_min': 0, 'is_in_taxonomy': 0, 'percent_estimate': 0.0994318181818201}, {'id': 'en:com-l-saturated-fat-tary-fiber-and-potassium-coke-scan-here-for-more-food-information-rchase-floz-cans', 'text': 'com l saturated fat tary fiber and potassium coke scan here for more food information rchase floz cans', 'percent_max': '5', 'percent_min': 0, 'is_in_taxonomy': 0, 'percent_estimate': 0.099431818181813}], 'labels_tags': [], 'nova_groups': '4', 'origins_old': '', 'states_tags': ['en:to-be-completed', 'en:nutrition-facts-completed', 'en:ingredients-completed', 'en:expiration-date-to-be-completed', 'en:packaging-code-to-be-completed', 'en:characteristics-to-be-completed', 'en:origins-to-be-completed', 'en:categories-completed', 'en:brands-completed', 'en:packaging-completed', 'en:quantity-completed', 'en:product-name-completed', 'en:photos-to-be-validated', 'en:packaging-photo-to-be-selected', 'en:nutrition-photo-to-be-selected', 'en:ingredients-photo-selected', 'en:front-photo-selected', 'en:photos-uploaded'], 'stores_tags': [], 'traces_tags': [], 'allergens_lc': 'en', 'completeness': 0.775, 'countries_lc': 'en', 'data_sources': 'App - Horizon, App - InFood, Apps', 'editors_tags': ['ecoscore-impact-estimator', 'foodless', 'inf', 'openfoodfacts-contributors', 'swipe-studio', 'tanyad1013', 'teolemon', 'thaialagata'], 'generic_name': '', 'last_image_t': 1640260897, 'origins_tags': [], 'packaging_lc': 'en', 'packagings_n': 2, 'product_name': 'Coca-Cola', 'product_type': 'food', 'serving_size': '355ml', 'categories_lc': 'en', 'checkers_tags': [], 'ecoscore_data': {'scores': {}, 'status': 'unknown', 'missing': {'labels': 1, 'origins': 1, 'packagings': 1, 'agb_category': 1}, 'agribalyse': {'warning': 'missing_agribalyse_match'}, 'adjustments': {'packaging': {'score': -28, 'value': -13, 'warning': 'unspecified_material', 'packagings': [{'shape': 'en:can', 'material': 'en:heavy-aluminium', 'ecoscore_shape_ratio': 1, 'ecoscore_material_score': 72}, {'shape': 'en:box', 'material': 'en:unknown', 'ecoscore_shape_ratio': 1, 'ecoscore_material_score': 0}], 'non_recyclable_and_non_biodegradable_materials': 0}, 'production_system': {'value': 0, 'labels': [], 'warning': 'no_label'}, 'threatened_species': {}, 'origins_of_ingredients': {'value': -5, 'values': {'ad': -5, 'al': -5, 'at': -5, 'ax': -5, 'ba': -5, 'be': -5, 'bg': -5, 'ch': -5, 'cy': -5, 'cz': -5, 'de': -5, 'dk': -5, 'dz': -5, 'ee': -5, 'eg': -5, 'es': -5, 'fi': -5, 'fo': -5, 'fr': -5, 'gg': -5, 'gi': -5, 'gr': -5, 'hr': -5, 'hu': -5, 'ie': -5, 'il': -5, 'im': -5, 'is': -5, 'it': -5, 'je': -5, 'lb': -5, 'li': -5, 'lt': -5, 'lu': -5, 'lv': -5, 'ly': -5, 'ma': -5, 'mc': -5, 'md': -5, 'me': -5, 'mk': -5, 'mt': -5, 'nl': -5, 'no': -5, 'pl': -5, 'ps': -5, 'pt': -5, 'ro': -5, 'rs': -5, 'se': -5, 'si': -5, 'sj': -5, 'sk': -5, 'sm': -5, 'sy': -5, 'tn': -5, 'tr': -5, 'ua': -5, 'uk': -5, 'us': -5, 'va': -5, 'xk': -5, 'world': -5}, 'warning': 'origins_are_100_percent_unknown', 'epi_score': 0, 'epi_value': -5, 'aggregated_origins': [{'origin': 'en:unknown', 'percent': 100, 'epi_score': '0', 'transportation_score': 0}], 'transportation_score': 0, 'transportation_value': 0, 'transportation_scores': {'ad': 0, 'al': 0, 'at': 0, 'ax': 0, 'ba': 0, 'be': 0, 'bg': 0, 'ch': 0, 'cy': 0, 'cz': 0, 'de': 0, 'dk': 0, 'dz': 0, 'ee': 0, 'eg': 0, 'es': 0, 'fi': 0, 'fo': 0, 'fr': 0, 'gg': 0, 'gi': 0, 'gr': 0, 'hr': 0, 'hu': 0, 'ie': 0, 'il': 0, 'im': 0, 'is': 0, 'it': 0, 'je': 0, 'lb': 0, 'li': 0, 'lt': 0, 'lu': 0, 'lv': 0, 'ly': 0, 'ma': 0, 'mc': 0, 'md': 0, 'me': 0, 'mk': 0, 'mt': 0, 'nl': 0, 'no': 0, 'pl': 0, 'ps': 0, 'pt': 0, 'ro': 0, 'rs': 0, 'se': 0, 'si': 0, 'sj': 0, 'sk': 0, 'sm': 0, 'sy': 0, 'tn': 0, 'tr': 0, 'ua': 0, 'uk': 0, 'us': 0, 'va': 0, 'xk': 0, 'world': 0}, 'transportation_values': {'ad': 0, 'al': 0, 'at': 0, 'ax': 0, 'ba': 0, 'be': 0, 'bg': 0, 'ch': 0, 'cy': 0, 'cz': 0, 'de': 0, 'dk': 0, 'dz': 0, 'ee': 0, 'eg': 0, 'es': 0, 'fi': 0, 'fo': 0, 'fr': 0, 'gg': 0, 'gi': 0, 'gr': 0, 'hr': 0, 'hu': 0, 'ie': 0, 'il': 0, 'im': 0, 'is': 0, 'it': 0, 'je': 0, 'lb': 0, 'li': 0, 'lt': 0, 'lu': 0, 'lv': 0, 'ly': 0, 'ma': 0, 'mc': 0, 'md': 0, 'me': 0, 'mk': 0, 'mt': 0, 'nl': 0, 'no': 0, 'pl': 0, 'ps': 0, 'pt': 0, 'ro': 0, 'rs': 0, 'se': 0, 'si': 0, 'sj': 0, 'sk': 0, 'sm': 0, 'sy': 0, 'tn': 0, 'tr': 0, 'ua': 0, 'uk': 0, 'us': 0, 'va': 0, 'xk': 0, 'world': 0}, 'origins_from_categories': ['en:unknown'], 'origins_from_origins_field': ['en:unknown']}}, 'missing_agribalyse_match_warning': 1}, 'ecoscore_tags': ['unknown'], 'ingredients_n': 12, 'minerals_tags': [], 'packaging_old': 'en:card-box,en:aluminium-can', 'pnns_groups_1': 'Beverages', 'pnns_groups_2': 'Unsweetened beverages', 'vitamins_tags': [], 'weighers_tags': [], 'additives_tags': ['en:e150c', 'en:e338'], 'allergens_tags': [], 'categories_old': 'Beverages, Carbonated drinks', 'countries_tags': ['en:united-states'], 'ecoscore_grade': 'unknown', 'emb_codes_tags': [], 'informers_tags': ['openfoodfacts-contributors', 'tanyad1013', 'teolemon', 'swipe-studio', 'ecoscore-impact-estimator'], 'ingredients_lc': 'en', 'languages_tags': ['en:english', 'en:1'], 'last_updated_t': 1738753791, 'nutrition_data': 'on', 'packaging_tags': ['en:aluminium-can', 'en:card-box'], 'packaging_text': '', 'popularity_key': 23900000011, 'schema_version': 998, 'unique_scans_n': 11, 'categories_tags': ['en:beverages', 'en:carbonated-drinks'], 'correctors_tags': ['openfoodfacts-contributors', 'tanyad1013', 'teolemon', 'inf', 'swipe-studio', 'thaialagata', 'ecoscore-impact-estimator'], 'expiration_date': '', 'generic_name_en': '', 'image_front_url': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/front_en.16.400.jpg', 'image_small_url': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/front_en.16.200.jpg', 'image_thumb_url': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/front_en.16.100.jpg', 'languages_codes': {'en': 4}, 'last_modified_t': 1728751740, 'nutrient_levels': {'fat': 'low', 'salt': 'high', 'sugars': 'high'}, 'nutriscore_data': {'grade': 'e', 'score': 32, 'is_water': 0, 'is_cheese': 0, 'components': {'negative': [{'id': 'energy', 'unit': 'kJ', 'value': 165, 'points': 3, 'points_max': 10}, {'id': 'sugars', 'unit': 'g', 'value': 11, 'points': 9, 'points_max': 10}, {'id': 'saturated_fat', 'unit': 'g', 'value': 0, 'points': 0, 'points_max': 10}, {'id': 'salt', 'unit': 'g', 'value': 31.7, 'points': 20, 'points_max': 20}, {'id': 'non_nutritive_sweeteners', 'unit': 'number', 'value': 0, 'points': 0, 'points_max': 4}], 'positive': [{'id': 'proteins', 'unit': 'g', 'value': 0, 'points': 0, 'points_max': 7}, {'id': 'fiber', 'unit': 'g', 'value': None, 'points': 0, 'points_max': 5}, {'id': 'fruits_vegetables_legumes', 'unit': '%', 'value': 0, 'points': 0, 'points_max': 6}]}, 'is_beverage': 1, 'count_proteins': 1, 'negative_points': 32, 'positive_points': 0, 'positive_nutrients': ['proteins', 'fiber', 'fruits_vegetables_legumes'], 'is_red_meat_product': 0, 'negative_points_max': 54, 'positive_points_max': 18, 'count_proteins_reason': 'beverage', 'is_fat_oil_nuts_seeds': 0}, 'nutriscore_tags': ['e'], 'popularity_tags': ['top-country-fr-scans-2019', 'bottom-25-percent-scans-2020', 'bottom-20-percent-scans-2020', 'top-85-percent-scans-2020', 'top-90-percent-scans-2020', 'top-5000-us-scans-2020', 'top-10000-us-scans-2020', 'top-50000-us-scans-2020', 'top-100000-us-scans-2020', 'top-country-us-scans-2020', 'top-75-percent-scans-2021', 'top-80-percent-scans-2021', 'top-85-percent-scans-2021', 'top-90-percent-scans-2021', 'top-5000-ua-scans-2021', 'top-10000-ua-scans-2021', 'top-50000-ua-scans-2021', 'top-100000-ua-scans-2021', 'top-country-ua-scans-2021', 'top-50000-us-scans-2021', 'top-100000-us-scans-2021', 'top-75-percent-scans-2022', 'top-80-percent-scans-2022', 'top-85-percent-scans-2022', 'top-90-percent-scans-2022', 'top-1000-us-scans-2022', 'top-5000-us-scans-2022', 'top-10000-us-scans-2022', 'top-50000-us-scans-2022', 'top-100000-us-scans-2022', 'top-country-us-scans-2022', 'top-75-percent-scans-2023', 'top-80-percent-scans-2023', 'top-85-percent-scans-2023', 'top-90-percent-scans-2023', 'top-5000-mx-scans-2023', 'top-10000-mx-scans-2023', 'top-50000-mx-scans-2023', 'top-100000-mx-scans-2023', 'top-country-mx-scans-2023', 'top-100000-scans-2024', 'at-least-5-scans-2024', 'at-least-10-scans-2024', 'top-75-percent-scans-2024', 'top-80-percent-scans-2024', 'top-85-percent-scans-2024', 'top-90-percent-scans-2024', 'top-10000-us-scans-2024', 'top-50000-us-scans-2024', 'top-100000-us-scans-2024', 'top-country-us-scans-2024', 'top-100000-fr-scans-2024', 'top-50000-it-scans-2024', 'top-100000-it-scans-2024', 'top-10000-in-scans-2024', 'top-50000-in-scans-2024', 'top-100000-in-scans-2024', 'top-5000-lv-scans-2024', 'top-10000-lv-scans-2024', 'top-50000-lv-scans-2024', 'top-100000-lv-scans-2024', 'top-5000-sg-scans-2024', 'top-10000-sg-scans-2024', 'top-50000-sg-scans-2024', 'top-100000-sg-scans-2024', 'top-50000-nl-scans-2024', 'top-100000-nl-scans-2024', 'top-50000-es-scans-2024', 'top-100000-es-scans-2024'], 'product_name_en': 'Coca-Cola', 'purchase_places': '', 'selected_images': {'front': {'small': {'en': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/front_en.16.200.jpg'}, 'thumb': {'en': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/front_en.16.100.jpg'}, 'display': {'en': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/front_en.16.400.jpg'}}, 'ingredients': {'small': {'en': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/ingredients_en.8.200.jpg'}, 'thumb': {'en': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/ingredients_en.8.100.jpg'}, 'display': {'en': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/ingredients_en.8.400.jpg'}}}, 'amino_acids_tags': [], 'entry_dates_tags': ['2016-11-05', '2016-11', '2016'], 'food_groups_tags': ['en:beverages', 'en:unsweetened-beverages'], 'ingredients_tags': ['en:pledse-recycle-cans', 'en:cartons-cts-ainer-fructose-corn-syrup-1-can-phosphoric-acid', 'en:natural-carbonated-water', 'en:high-caramel-color', 'en:flavouring', 'en:caffeine', 'en:canned-under-authority-of-the-coca-cola-company-atlanta', 'en:ga-30313', 'en:canner-s-name-and-address-appear-on-each-can', 'en:caffeine-content', 'en:com-l-saturated-fat-tary-fiber-and-potassium-coke-scan-here-for-more-food-information-rchase-floz-cans', 'en:12-fl-oz-02017-the-coca-cola-140-daily-value-0-2-14-g-company-consumer-information-ugars-78-call-1-800-438-2653-coke'], 'ingredients_text': "pledse recycle cans, cartons cts ainer fructose corn syrup 1 can phosphoric acid, natural carbonated water, high caramel color, flavors, caffeine, canned under authority of the coca-cola company atlanta, ga 30313, canner's name and address appear on each can, caffeine content: 34 mg/12 fl oz 02017 the coca-cola 140 daily value 0% 2% 14% g company consumer information ugars 78%| call 1-800-438-2653 coke,com l saturated fat tary fiber and potassium coke scan here for more food information rchase floz cans", 'labels_hierarchy': [], 'nova_group_debug': '', 'nova_groups_tags': ['en:4-ultra-processed-food-and-drink-products'], 'nucleotides_tags': [], 'nutriscore_grade': 'e', 'nutriscore_score': 32, 'nutrition_grades': 'e', 'product_quantity': '0', 'serving_quantity': '355', 'states_hierarchy': ['en:to-be-completed', 'en:nutrition-facts-completed', 'en:ingredients-completed', 'en:expiration-date-to-be-completed', 'en:packaging-code-to-be-completed', 'en:characteristics-to-be-completed', 'en:origins-to-be-completed', 'en:categories-completed', 'en:brands-completed', 'en:packaging-completed', 'en:quantity-completed', 'en:product-name-completed', 'en:photos-to-be-validated', 'en:packaging-photo-to-be-selected', 'en:nutrition-photo-to-be-selected', 'en:ingredients-photo-selected', 'en:front-photo-selected', 'en:photos-uploaded'], 'traces_from_user': '(en) ', 'traces_hierarchy': [], 'data_quality_tags': ['en:packaging-data-incomplete', 'en:ingredients-percent-analysis-ok', 'en:ecoscore-extended-data-computed', 'en:ecoscore-extended-data-less-precise-than-agribalyse', 'en:food-groups-1-known', 'en:food-groups-2-known', 'en:food-groups-3-unknown', 'en:ingredients-unknown-score-above-5', 'en:ingredients-80-percent-unknown', 'en:ingredients-ingredient-tag-length-greater-than-50', 'en:ingredients-ingredient-tag-length-greater-than-100', 'en:nutrition-value-very-high-for-category-salt', 'en:product-quantity-under-1g', 'en:serving-quantity-over-product-quantity', 'en:ecoscore-origins-of-ingredients-origins-are-100-percent-unknown', 'en:ecoscore-packaging-unspecified-material', 'en:ecoscore-production-system-no-label'], 'data_sources_tags': ['app-horizon', 'app-infood', 'apps'], 'ingredients_debug': ['pledse recycle cans& cartons cts ainer FRUCTOSE CORN SYRUP 1 Can PHOSPHORIC ACID', ',', None, None, None, ' NATURAL CARBONATED WATER', ',', None, None, None, ' HIGH CARAMEL COLOR', ',', None, None, None, ' FLAVORS', ',', None, None, None, ' CAFFEINE', '. ', None, None, None, 'CANNED UNDER AUTHORITY OF THE COCA-COLA COMPANY ATLANTA', ',', None, None, None, ' GA 30313', '. ', None, None, None, "CANNER'S NAME AND ADDRESS APPEAR ON EACH CAN", '. ', None, None, None, 'CAFFEINE CONTENT', ':', ':', None, None, ' 34 mg', '/', None, None, '/', '12 fl oz 02017 THE COCA-COLA 140 Daily Value 0% 2% 14% g COMPANY CONSUMER INFORMATION ugars 78%| CALL 1-800-438-2653 coke.com l saturated fat tary fiber and potassium Coke SCAN HERE FoR MORE FOOD INFORMATION RCHASE FLOZ CANS'], 'origins_hierarchy': [], 'packaging_text_en': '', 'ingredients_n_tags': ['12', '11-20'], 'minerals_prev_tags': [], 'nutriscore_version': '2023', 'nutrition_data_per': 'serving', 'nutrition_grade_fr': 'e', 'photographers_tags': ['openfoodfacts-contributors', 'tanyad1013', 'thaialagata'], 'pnns_groups_1_tags': ['beverages', 'known'], 'pnns_groups_2_tags': ['unsweetened-beverages', 'known'], 'vitamins_prev_tags': [], 'allergens_from_user': '(en) ', 'allergens_hierarchy': [], 'category_properties': {}, 'countries_hierarchy': ['en:united-states'], 'ingredients_text_en': "pledse recycle cans, cartons cts ainer fructose corn syrup 1 can phosphoric acid, natural carbonated water, high caramel color, flavors, caffeine, canned under authority of the coca-cola company atlanta, ga 30313, canner's name and address appear on each can, caffeine content: 34 mg/12 fl oz 02017 the coca-cola 140 daily value 0% 2% 14% g company consumer information ugars 78%| call 1-800-438-2653 coke,com l saturated fat tary fiber and potassium coke scan here for more food information rchase floz cans", 'known_ingredients_n': 2, 'languages_hierarchy': ['en:english'], 'main_countries_tags': [], 'nova_groups_markers': {'4': [['additives', 'en:e150c'], ['ingredients', 'en:flavouring']]}, 'packaging_hierarchy': ['en:Aluminium-can', 'en:Card-box'], 'added_countries_tags': [], 'categories_hierarchy': ['en:beverages', 'en:carbonated-drinks'], 'compared_to_category': 'en:carbonated-drinks', 'ingredients_analysis': {'en:vegan-status-unknown': ['en:pledse-recycle-cans', 'en:cartons-cts-ainer-fructose-corn-syrup-1-can-phosphoric-acid', 'en:natural-carbonated-water', 'en:high-caramel-color', 'en:canned-under-authority-of-the-coca-cola-company-atlanta', 'en:ga-30313', 'en:canner-s-name-and-address-appear-on-each-can', 'en:caffeine-content', 'en:12-fl-oz-02017-the-coca-cola-140-daily-value-0-2-14-g-company-consumer-information-ugars-78-call-1-800-438-2653-coke', 'en:com-l-saturated-fat-tary-fiber-and-potassium-coke-scan-here-for-more-food-information-rchase-floz-cans'], 'en:palm-oil-content-unknown': ['en:pledse-recycle-cans', 'en:cartons-cts-ainer-fructose-corn-syrup-1-can-phosphoric-acid', 'en:natural-carbonated-water', 'en:high-caramel-color', 'en:canned-under-authority-of-the-coca-cola-company-atlanta', 'en:ga-30313', 'en:canner-s-name-and-address-appear-on-each-can', 'en:caffeine-content', 'en:12-fl-oz-02017-the-coca-cola-140-daily-value-0-2-14-g-company-consumer-information-ugars-78-call-1-800-438-2653-coke', 'en:com-l-saturated-fat-tary-fiber-and-potassium-coke-scan-here-for-more-food-information-rchase-floz-cans'], 'en:vegetarian-status-unknown': ['en:pledse-recycle-cans', 'en:cartons-cts-ainer-fructose-corn-syrup-1-can-phosphoric-acid', 'en:natural-carbonated-water', 'en:high-caramel-color', 'en:canned-under-authority-of-the-coca-cola-company-atlanta', 'en:ga-30313', 'en:canner-s-name-and-address-appear-on-each-can', 'en:caffeine-content', 'en:12-fl-oz-02017-the-coca-cola-140-daily-value-0-2-14-g-company-consumer-information-ugars-78-call-1-800-438-2653-coke', 'en:com-l-saturated-fat-tary-fiber-and-potassium-coke-scan-here-for-more-food-information-rchase-floz-cans']}, 'last_edit_dates_tags': ['2024-10-12', '2024-10', '2024'], 'manufacturing_places': '', 'nutrient_levels_tags': ['en:fat-in-low-quantity', 'en:sugars-in-high-quantity', 'en:salt-in-high-quantity'], 'nutriscore_2021_tags': ['e'], 'nutriscore_2023_tags': ['e'], 'packagings_materials': {'all': {}, 'en:metal': {}, 'en:unknown': {}}, 'purchase_places_tags': [], 'amino_acids_prev_tags': [], 'categories_properties': {}, 'ciqual_food_name_tags': ['unknown'], 'image_front_small_url': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/front_en.16.200.jpg', 'image_front_thumb_url': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/front_en.16.100.jpg', 'image_ingredients_url': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/ingredients_en.8.400.jpg', 'ingredients_hierarchy': ['en:pledse-recycle-cans', 'en:cartons-cts-ainer-fructose-corn-syrup-1-can-phosphoric-acid', 'en:natural-carbonated-water', 'en:high-caramel-color', 'en:flavouring', 'en:caffeine', 'en:canned-under-authority-of-the-coca-cola-company-atlanta', 'en:ga-30313', 'en:canner-s-name-and-address-appear-on-each-can', 'en:caffeine-content', 'en:com-l-saturated-fat-tary-fiber-and-potassium-coke-scan-here-for-more-food-information-rchase-floz-cans', 'en:12-fl-oz-02017-the-coca-cola-140-daily-value-0-2-14-g-company-consumer-information-ugars-78-call-1-800-438-2653-coke'], 'ingredients_ids_debug': ['pledse-recycle-cans-cartons-cts-ainer-fructose-corn-syrup-1-can-phosphoric-acid', 'natural-carbonated-water', 'high-caramel-color', 'flavors', 'caffeine', 'canned-under-authority-of-the-coca-cola-company-atlanta', 'ga-30313', 'canner-s-name-and-address-appear-on-each-can', 'caffeine-content', '34-mg', '12-fl-oz-02017-the-coca-cola-140-daily-value-0-2-14-g-company-consumer-information-ugars-78-call-1-800-438-2653-coke-com-l-saturated-fat-tary-fiber-and-potassium-coke-scan-here-for-more-food-information-rchase-floz-cans'], 'last_image_dates_tags': ['2021-12-23', '2021-12', '2021'], 'nucleotides_prev_tags': [], 'nutrition_grades_tags': ['e'], 'nutrition_score_debug': '', 'packaging_shapes_tags': ['en:box', 'en:can'], 'serving_quantity_unit': 'ml', 'unknown_ingredients_n': 10, 'data_quality_bugs_tags': [], 'data_quality_info_tags': ['en:packaging-data-incomplete', 'en:ingredients-percent-analysis-ok', 'en:ecoscore-extended-data-computed', 'en:ecoscore-extended-data-less-precise-than-agribalyse', 'en:food-groups-1-known', 'en:food-groups-2-known', 'en:food-groups-3-unknown'], 'ingredients_text_debug': "pledse recycle cans& cartons cts ainer FRUCTOSE CORN SYRUP 1 Can PHOSPHORIC ACID, NATURAL CARBONATED WATER, HIGH CARAMEL COLOR, FLAVORS, CAFFEINE. CANNED UNDER AUTHORITY OF THE COCA-COLA COMPANY ATLANTA, GA 30313. CANNER'S NAME AND ADDRESS APPEAR ON EACH CAN. CAFFEINE CONTENT: 34 mg/12 fl oz 02017 THE COCA-COLA 140 Daily Value 0% 2% 14% g COMPANY CONSUMER INFORMATION ugars 78%| CALL 1-800-438-2653 coke.com l saturated fat tary fiber and potassium Coke SCAN HERE FoR MORE FOOD INFORMATION RCHASE FLOZ CANS", 'removed_countries_tags': [], 'unknown_nutrients_tags': [], 'additives_original_tags': ['en:e338', 'en:e150c'], 'traces_from_ingredients': '', 'data_quality_errors_tags': [], 'debug_param_sorted_langs': ['en'], 'ingredients_sweeteners_n': 0, 'nutrition_score_beverage': 1, 'packaging_materials_tags': ['en:aluminium'], 'packaging_recycling_tags': [], 'ingredients_analysis_tags': ['en:palm-oil-content-unknown', 'en:vegan-status-unknown', 'en:vegetarian-status-unknown'], 'ingredients_original_tags': ['en:pledse-recycle-cans', 'en:cartons-cts-ainer-fructose-corn-syrup-1-can-phosphoric-acid', 'en:natural-carbonated-water', 'en:high-caramel-color', 'en:flavouring', 'en:caffeine', 'en:canned-under-authority-of-the-coca-cola-company-atlanta', 'en:ga-30313', 'en:canner-s-name-and-address-appear-on-each-can', 'en:caffeine-content', 'en:com-l-saturated-fat-tary-fiber-and-potassium-coke-scan-here-for-more-food-information-rchase-floz-cans', 'en:12-fl-oz-02017-the-coca-cola-140-daily-value-0-2-14-g-company-consumer-information-ugars-78-call-1-800-438-2653-coke'], 'interface_version_created': '20120622', 'manufacturing_places_tags': [], 'nutriscore_score_opposite': -32, 'allergens_from_ingredients': '', 'categories_properties_tags': ['all-products', 'categories-known', 'agribalyse-food-code-unknown', 'agribalyse-proxy-food-code-unknown', 'ciqual-food-code-unknown', 'agribalyse-unknown'], 'data_quality_warnings_tags': ['en:ingredients-unknown-score-above-5', 'en:ingredients-80-percent-unknown', 'en:ingredients-ingredient-tag-length-greater-than-50', 'en:ingredients-ingredient-tag-length-greater-than-100', 'en:nutrition-value-very-high-for-category-salt', 'en:product-quantity-under-1g', 'en:serving-quantity-over-product-quantity', 'en:ecoscore-origins-of-ingredients-origins-are-100-percent-unknown', 'en:ecoscore-packaging-unspecified-material', 'en:ecoscore-production-system-no-label'], 'interface_version_modified': '20150316.jqm2', 'image_ingredients_small_url': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/ingredients_en.8.200.jpg', 'image_ingredients_thumb_url': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/ingredients_en.8.100.jpg', 'ingredients_from_palm_oil_n': 0, 'nutrition_data_prepared_per': '100g', 'ingredients_percent_analysis': 1, 'ingredients_from_palm_oil_tags': [], 'ingredients_text_with_allergens': "pledse recycle cans, cartons cts ainer fructose corn syrup 1 can phosphoric acid, natural carbonated water, high caramel color, flavors, caffeine, canned under authority of the coca-cola company atlanta, ga 30313, canner's name and address appear on each can, caffeine content: 34 mg/12 fl oz 02017 the coca-cola 140 daily value 0% 2% 14% g company consumer information ugars 78%| call 1-800-438-2653 coke,com l saturated fat tary fiber and potassium coke scan here for more food information rchase floz cans", 'ingredients_without_ciqual_codes': ['en:12-fl-oz-02017-the-coca-cola-140-daily-value-0-2-14-g-company-consumer-information-ugars-78-call-1-800-438-2653-coke', 'en:caffeine', 'en:caffeine-content', 'en:canned-under-authority-of-the-coca-cola-company-atlanta', 'en:canner-s-name-and-address-appear-on-each-can', 'en:cartons-cts-ainer-fructose-corn-syrup-1-can-phosphoric-acid', 'en:com-l-saturated-fat-tary-fiber-and-potassium-coke-scan-here-for-more-food-information-rchase-floz-cans', 'en:flavouring', 'en:ga-30313', 'en:high-caramel-color', 'en:natural-carbonated-water', 'en:pledse-recycle-cans'], 'nutrition_score_warning_no_fiber': 1, 'ingredients_without_ecobalyse_ids': ['en:12-fl-oz-02017-the-coca-cola-140-daily-value-0-2-14-g-company-consumer-information-ugars-78-call-1-800-438-2653-coke', 'en:caffeine', 'en:caffeine-content', 'en:canned-under-authority-of-the-coca-cola-company-atlanta', 'en:canner-s-name-and-address-appear-on-each-can', 'en:cartons-cts-ainer-fructose-corn-syrup-1-can-phosphoric-acid', 'en:com-l-saturated-fat-tary-fiber-and-potassium-coke-scan-here-for-more-food-information-rchase-floz-cans', 'en:flavouring', 'en:ga-30313', 'en:high-caramel-color', 'en:natural-carbonated-water', 'en:pledse-recycle-cans'], 'other_nutritional_substances_tags': [], 'ingredients_text_with_allergens_en': "pledse recycle cans, cartons cts ainer fructose corn syrup 1 can phosphoric acid, natural carbonated water, high caramel color, flavors, caffeine, canned under authority of the coca-cola company atlanta, ga 30313, canner's name and address appear on each can, caffeine content: 34 mg/12 fl oz 02017 the coca-cola 140 daily value 0% 2% 14% g company consumer information ugars 78%| call 1-800-438-2653 coke,com l saturated fat tary fiber and potassium coke scan here for more food information rchase floz cans", 'ingredients_without_ciqual_codes_n': 12, 'ingredients_without_ecobalyse_ids_n': 12, 'ingredients_with_specified_percent_n': 0, 'ingredients_non_nutritive_sweeteners_n': 0, 'ingredients_with_specified_percent_sum': 0, 'ingredients_with_unspecified_percent_n': 11, 'ingredients_that_may_be_from_palm_oil_n': 0, 'ingredients_with_unspecified_percent_sum': 100, 'ingredients_that_may_be_from_palm_oil_tags': [], 'ingredients_from_or_that_may_be_from_palm_oil_n': 0, 'nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients': 1, 'nutrition_score_warning_fruits_vegetables_legumes_estimate_from_ingredients': 1, 'nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients_value': 0, 'nutrition_score_warning_fruits_vegetables_legumes_estimate_from_ingredients_value': 0}}}}, - sql='UPDATE main_receipt_items SET name = %s, qty = %s, uom = %s, data = %s WHERE id=%s RETURNING *;') -2025-04-12 14:48:31.330764 --- ERROR --- DatabaseError(message='invalid input syntax for type integer: " Pinch"LINE 1: ...pt_items SET name = 'Coca-Cola', qty = '1', uom = ' Pinch', ... ^', - payload={'id': 66, 'update': {'name': 'Coca-Cola', 'qty': '1', 'uom': ' Pinch', 'data': {'cost': '7.92', 'expires': False, 'api_data': {'id': '0049000028904', 'lc': 'en', '_id': '0049000028904', 'rev': 20, 'code': '0049000028904', 'lang': 'en', 'link': '', 'teams': 'swipe-studio', 'brands': 'Coca-Cola', 'images': {'1': {'sizes': {'100': {'h': 60, 'w': 100}, '400': {'h': 239, 'w': 400}, 'full': {'h': 957, 'w': 1600}}, 'uploader': 'openfoodfacts-contributors', 'uploaded_t': '1478385267'}, '2': {'sizes': {'100': {'h': 100, 'w': 75}, '400': {'h': 400, 'w': 300}, 'full': {'h': 3328, 'w': 2496}}, 'uploader': 'tanyad1013', 'uploaded_t': 1555187983}, '3': {'sizes': {'100': {'h': 100, 'w': 75}, '400': {'h': 400, 'w': 300}, 'full': {'h': 3328, 'w': 2496}}, 'uploader': 'tanyad1013', 'uploaded_t': 1555188029}, '5': {'sizes': {'100': {'h': 100, 'w': 100}, '400': {'h': 400, 'w': 400}, 'full': {'h': 1400, 'w': 1400}}, 'uploader': 'thaialagata', 'uploaded_t': 1640260897}, 'front_en': {'x1': '0', 'x2': '0', 'y1': '0', 'y2': '0', 'rev': '16', 'angle': '0', 'imgid': '5', 'sizes': {'100': {'h': 78, 'w': 100}, '200': {'h': 156, 'w': 200}, '400': {'h': 311, 'w': 400}, 'full': {'h': 1080, 'w': 1389}}, 'geometry': '0x0-0-0', 'normalize': 'false', 'white_magic': 'false', 'coordinates_image_size': 'full'}, 'ingredients_en': {'x1': None, 'x2': None, 'y1': None, 'y2': None, 'rev': '8', 'angle': None, 'imgid': '3', 'sizes': {'100': {'h': 100, 'w': 75}, '200': {'h': 200, 'w': 150}, '400': {'h': 400, 'w': 300}, 'full': {'h': 3328, 'w': 2496}}, 'geometry': '0x0-0-0', 'normalize': None, 'white_magic': None}}, 'labels': '', 'origin': '', 'states': 'en:to-be-completed, en:nutrition-facts-completed, en:ingredients-completed, en:expiration-date-to-be-completed, en:packaging-code-to-be-completed, en:characteristics-to-be-completed, en:origins-to-be-completed, en:categories-completed, en:brands-completed, en:packaging-completed, en:quantity-completed, en:product-name-completed, en:photos-to-be-validated, en:packaging-photo-to-be-selected, en:nutrition-photo-to-be-selected, en:ingredients-photo-selected, en:front-photo-selected, en:photos-uploaded', 'stores': '', 'traces': '', 'creator': 'openfoodfacts-contributors', 'origins': '', 'scans_n': 18, 'sortkey': 1609090427, 'complete': 0, 'quantity': '12 cans', '_keywords': ['beverage', 'carbonated', 'coca-cola', 'drink'], 'allergens': '', 'countries': 'United States', 'created_t': 1478385267, 'emb_codes': '', 'image_url': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/front_en.16.400.jpg', 'labels_lc': 'en', 'languages': {'en:english': 4}, 'max_imgid': '5', 'misc_tags': ['en:ecoscore-extended-data-computed', 'en:ecoscore-extended-data-version-4', 'en:ecoscore-not-computed', 'en:nutriscore-2021-e-2023-e', 'en:nutriscore-2021-same-as-2023', 'en:nutriscore-computed', 'en:nutrition-fruits-vegetables-legumes-estimate-from-ingredients', 'en:nutrition-fruits-vegetables-nuts-estimate-from-ingredients', 'en:nutrition-no-fiber', 'en:nutrition-no-fiber-or-fruits-vegetables-nuts', 'en:packagings-not-complete', 'en:packagings-not-empty', 'en:packagings-not-empty-but-not-complete', 'en:packagings-number-of-components-2'], 'origin_en': '', 'packaging': 'Aluminium-can, Card-box', 'traces_lc': 'en', 'categories': 'Beverages, Carbonated drinks', 'codes_tags': ['code-13', 'conflict-with-upc-12', '0049000028xxx', '004900002xxxx', '00490000xxxxx', '0049000xxxxxx', '004900xxxxxxx', '00490xxxxxxxx', '0049xxxxxxxxx', '004xxxxxxxxxx', '00xxxxxxxxxxx', '0xxxxxxxxxxxx'], 'labels_old': '', 'nova_group': 4, 'nutriments': {'fat': 0, 'salt': 112.5, 'energy': 586, 'sodium': 45, 'sugars': 39, 'fat_100g': 0, 'fat_unit': 'g', 'proteins': 0, 'fat_value': 0, 'salt_100g': 31.7, 'salt_unit': 'g', 'nova-group': 4, 'salt_value': 112.5, 'energy-kcal': 140, 'energy_100g': 165, 'energy_unit': 'kcal', 'fat_serving': 0, 'sodium_100g': 12.7, 'sodium_unit': 'g', 'sugars_100g': 11, 'sugars_unit': 'g', 'energy_value': 140, 'salt_serving': 112.5, 'sodium_value': 45, 'sugars_value': 39, 'carbohydrates': 39, 'proteins_100g': 0, 'proteins_unit': 'g', 'energy_serving': 586, 'proteins_value': 0, 'sodium_serving': 45, 'sugars_serving': 39, 'nova-group_100g': 4, 'energy-kcal_100g': 39.4, 'energy-kcal_unit': 'kcal', 'proteins_serving': 0, 'energy-kcal_value': 140, 'carbohydrates_100g': 11, 'carbohydrates_unit': 'g', 'nova-group_serving': 4, 'nutrition-score-fr': 32, 'carbohydrates_value': 39, 'energy-kcal_serving': 140, 'carbohydrates_serving': 39, 'nutrition-score-fr_100g': 32, 'energy-kcal_value_computed': 156, 'fruits-vegetables-nuts-estimate-from-ingredients_100g': 0, 'fruits-vegetables-legumes-estimate-from-ingredients_100g': 0, 'fruits-vegetables-nuts-estimate-from-ingredients_serving': 0, 'fruits-vegetables-legumes-estimate-from-ingredients_serving': 0}, 'nutriscore': {'2021': {'data': {'fiber': 0, 'energy': 165, 'is_fat': 0, 'sodium': 12700, 'sugars': 11, 'is_water': 0, 'proteins': 0, 'is_cheese': 0, 'fiber_value': 0, 'is_beverage': 1, 'energy_value': 165, 'fiber_points': 0, 'sodium_value': 12700, 'sugars_value': 11, 'energy_points': 6, 'saturated_fat': 0, 'sodium_points': 10, 'sugars_points': 8, 'proteins_value': 0, 'negative_points': 24, 'positive_points': 0, 'proteins_points': 0, 'saturated_fat_ratio': 0, 'saturated_fat_value': 0, 'saturated_fat_points': 0, 'fruits_vegetables_nuts_colza_walnut_olive_oils': 0, 'fruits_vegetables_nuts_colza_walnut_olive_oils_value': 0, 'fruits_vegetables_nuts_colza_walnut_olive_oils_points': 0}, 'grade': 'e', 'score': 24, 'category_available': 1, 'nutrients_available': 1, 'nutriscore_computed': 1, 'nutriscore_applicable': 1}, '2023': {'data': {'is_water': 0, 'is_cheese': 0, 'components': {'negative': [{'id': 'energy', 'unit': 'kJ', 'value': 165, 'points': 3, 'points_max': 10}, {'id': 'sugars', 'unit': 'g', 'value': 11, 'points': 9, 'points_max': 10}, {'id': 'saturated_fat', 'unit': 'g', 'value': 0, 'points': 0, 'points_max': 10}, {'id': 'salt', 'unit': 'g', 'value': 31.7, 'points': 20, 'points_max': 20}, {'id': 'non_nutritive_sweeteners', 'unit': 'number', 'value': 0, 'points': 0, 'points_max': 4}], 'positive': [{'id': 'proteins', 'unit': 'g', 'value': 0, 'points': 0, 'points_max': 7}, {'id': 'fiber', 'unit': 'g', 'value': None, 'points': 0, 'points_max': 5}, {'id': 'fruits_vegetables_legumes', 'unit': '%', 'value': 0, 'points': 0, 'points_max': 6}]}, 'is_beverage': 1, 'count_proteins': 1, 'negative_points': 32, 'positive_points': 0, 'positive_nutrients': ['proteins', 'fiber', 'fruits_vegetables_legumes'], 'is_red_meat_product': 0, 'negative_points_max': 54, 'positive_points_max': 18, 'count_proteins_reason': 'beverage', 'is_fat_oil_nuts_seeds': 0}, 'grade': 'e', 'score': 32, 'category_available': 1, 'nutrients_available': 1, 'nutriscore_computed': 1, 'nutriscore_applicable': 1}}, 'origins_lc': 'en', 'packagings': [{'shape': 'en:can', 'material': 'en:aluminium'}, {'shape': 'en:box'}], 'teams_tags': ['swipe-studio'], 'update_key': 'sort', 'additives_n': 2, 'brands_tags': ['coca-cola'], 'cities_tags': [], 'food_groups': 'en:unsweetened-beverages', 'ingredients': [{'id': 'en:pledse-recycle-cans', 'text': 'pledse recycle cans', 'percent_max': 100, 'percent_min': 9.09090909090909, 'is_in_taxonomy': 0, 'percent_estimate': 54.5454545454545}, {'id': 'en:cartons-cts-ainer-fructose-corn-syrup-1-can-phosphoric-acid', 'text': 'cartons cts ainer fructose corn syrup 1 can phosphoric acid', 'percent_max': 50, 'percent_min': 0, 'is_in_taxonomy': 0, 'percent_estimate': 22.7272727272727}, {'id': 'en:natural-carbonated-water', 'text': 'natural carbonated water', 'percent_max': 33.3333333333333, 'percent_min': 0, 'is_in_taxonomy': 0, 'percent_estimate': 11.3636363636364}, {'id': 'en:high-caramel-color', 'text': 'high caramel color', 'percent_max': 25, 'percent_min': 0, 'is_in_taxonomy': 0, 'percent_estimate': 5.68181818181818}, {'id': 'en:flavouring', 'text': 'flavors', 'vegan': 'maybe', 'vegetarian': 'maybe', 'percent_max': '5', 'percent_min': 0, 'is_in_taxonomy': 1, 'percent_estimate': 2.5}, {'id': 'en:caffeine', 'text': 'caffeine', 'vegan': 'yes', 'vegetarian': 'yes', 'percent_max': '5', 'percent_min': 0, 'is_in_taxonomy': 1, 'percent_estimate': 1.59090909090909}, {'id': 'en:canned-under-authority-of-the-coca-cola-company-atlanta', 'text': 'canned under authority of the coca-cola company atlanta', 'percent_max': '5', 'percent_min': 0, 'is_in_taxonomy': 0, 'percent_estimate': 0.795454545454547}, {'id': 'en:ga-30313', 'text': 'ga 30313', 'percent_max': '5', 'percent_min': 0, 'is_in_taxonomy': 0, 'percent_estimate': 0.397727272727273}, {'id': 'en:canner-s-name-and-address-appear-on-each-can', 'text': "canner's name and address appear on each can", 'percent_max': '5', 'percent_min': 0, 'is_in_taxonomy': 0, 'percent_estimate': 0.19886363636364}, {'id': 'en:caffeine-content', 'text': 'caffeine content', 'quantity': '34 mg', 'quantity_g': 0.034, 'ingredients': [{'id': 'en:12-fl-oz-02017-the-coca-cola-140-daily-value-0-2-14-g-company-consumer-information-ugars-78-call-1-800-438-2653-coke', 'text': '12 fl oz 02017 the coca-cola 140 daily value 0% 2% 14% g company consumer information ugars 78%| call 1-800-438-2653 coke', 'percent_max': '5', 'percent_min': 0, 'is_in_taxonomy': 0, 'percent_estimate': 0.0994318181818201}], 'percent_max': '5', 'percent_min': 0, 'is_in_taxonomy': 0, 'percent_estimate': 0.0994318181818201}, {'id': 'en:com-l-saturated-fat-tary-fiber-and-potassium-coke-scan-here-for-more-food-information-rchase-floz-cans', 'text': 'com l saturated fat tary fiber and potassium coke scan here for more food information rchase floz cans', 'percent_max': '5', 'percent_min': 0, 'is_in_taxonomy': 0, 'percent_estimate': 0.099431818181813}], 'labels_tags': [], 'nova_groups': '4', 'origins_old': '', 'states_tags': ['en:to-be-completed', 'en:nutrition-facts-completed', 'en:ingredients-completed', 'en:expiration-date-to-be-completed', 'en:packaging-code-to-be-completed', 'en:characteristics-to-be-completed', 'en:origins-to-be-completed', 'en:categories-completed', 'en:brands-completed', 'en:packaging-completed', 'en:quantity-completed', 'en:product-name-completed', 'en:photos-to-be-validated', 'en:packaging-photo-to-be-selected', 'en:nutrition-photo-to-be-selected', 'en:ingredients-photo-selected', 'en:front-photo-selected', 'en:photos-uploaded'], 'stores_tags': [], 'traces_tags': [], 'allergens_lc': 'en', 'completeness': 0.775, 'countries_lc': 'en', 'data_sources': 'App - Horizon, App - InFood, Apps', 'editors_tags': ['ecoscore-impact-estimator', 'foodless', 'inf', 'openfoodfacts-contributors', 'swipe-studio', 'tanyad1013', 'teolemon', 'thaialagata'], 'generic_name': '', 'last_image_t': 1640260897, 'origins_tags': [], 'packaging_lc': 'en', 'packagings_n': 2, 'product_name': 'Coca-Cola', 'product_type': 'food', 'serving_size': '355ml', 'categories_lc': 'en', 'checkers_tags': [], 'ecoscore_data': {'scores': {}, 'status': 'unknown', 'missing': {'labels': 1, 'origins': 1, 'packagings': 1, 'agb_category': 1}, 'agribalyse': {'warning': 'missing_agribalyse_match'}, 'adjustments': {'packaging': {'score': -28, 'value': -13, 'warning': 'unspecified_material', 'packagings': [{'shape': 'en:can', 'material': 'en:heavy-aluminium', 'ecoscore_shape_ratio': 1, 'ecoscore_material_score': 72}, {'shape': 'en:box', 'material': 'en:unknown', 'ecoscore_shape_ratio': 1, 'ecoscore_material_score': 0}], 'non_recyclable_and_non_biodegradable_materials': 0}, 'production_system': {'value': 0, 'labels': [], 'warning': 'no_label'}, 'threatened_species': {}, 'origins_of_ingredients': {'value': -5, 'values': {'ad': -5, 'al': -5, 'at': -5, 'ax': -5, 'ba': -5, 'be': -5, 'bg': -5, 'ch': -5, 'cy': -5, 'cz': -5, 'de': -5, 'dk': -5, 'dz': -5, 'ee': -5, 'eg': -5, 'es': -5, 'fi': -5, 'fo': -5, 'fr': -5, 'gg': -5, 'gi': -5, 'gr': -5, 'hr': -5, 'hu': -5, 'ie': -5, 'il': -5, 'im': -5, 'is': -5, 'it': -5, 'je': -5, 'lb': -5, 'li': -5, 'lt': -5, 'lu': -5, 'lv': -5, 'ly': -5, 'ma': -5, 'mc': -5, 'md': -5, 'me': -5, 'mk': -5, 'mt': -5, 'nl': -5, 'no': -5, 'pl': -5, 'ps': -5, 'pt': -5, 'ro': -5, 'rs': -5, 'se': -5, 'si': -5, 'sj': -5, 'sk': -5, 'sm': -5, 'sy': -5, 'tn': -5, 'tr': -5, 'ua': -5, 'uk': -5, 'us': -5, 'va': -5, 'xk': -5, 'world': -5}, 'warning': 'origins_are_100_percent_unknown', 'epi_score': 0, 'epi_value': -5, 'aggregated_origins': [{'origin': 'en:unknown', 'percent': 100, 'epi_score': '0', 'transportation_score': 0}], 'transportation_score': 0, 'transportation_value': 0, 'transportation_scores': {'ad': 0, 'al': 0, 'at': 0, 'ax': 0, 'ba': 0, 'be': 0, 'bg': 0, 'ch': 0, 'cy': 0, 'cz': 0, 'de': 0, 'dk': 0, 'dz': 0, 'ee': 0, 'eg': 0, 'es': 0, 'fi': 0, 'fo': 0, 'fr': 0, 'gg': 0, 'gi': 0, 'gr': 0, 'hr': 0, 'hu': 0, 'ie': 0, 'il': 0, 'im': 0, 'is': 0, 'it': 0, 'je': 0, 'lb': 0, 'li': 0, 'lt': 0, 'lu': 0, 'lv': 0, 'ly': 0, 'ma': 0, 'mc': 0, 'md': 0, 'me': 0, 'mk': 0, 'mt': 0, 'nl': 0, 'no': 0, 'pl': 0, 'ps': 0, 'pt': 0, 'ro': 0, 'rs': 0, 'se': 0, 'si': 0, 'sj': 0, 'sk': 0, 'sm': 0, 'sy': 0, 'tn': 0, 'tr': 0, 'ua': 0, 'uk': 0, 'us': 0, 'va': 0, 'xk': 0, 'world': 0}, 'transportation_values': {'ad': 0, 'al': 0, 'at': 0, 'ax': 0, 'ba': 0, 'be': 0, 'bg': 0, 'ch': 0, 'cy': 0, 'cz': 0, 'de': 0, 'dk': 0, 'dz': 0, 'ee': 0, 'eg': 0, 'es': 0, 'fi': 0, 'fo': 0, 'fr': 0, 'gg': 0, 'gi': 0, 'gr': 0, 'hr': 0, 'hu': 0, 'ie': 0, 'il': 0, 'im': 0, 'is': 0, 'it': 0, 'je': 0, 'lb': 0, 'li': 0, 'lt': 0, 'lu': 0, 'lv': 0, 'ly': 0, 'ma': 0, 'mc': 0, 'md': 0, 'me': 0, 'mk': 0, 'mt': 0, 'nl': 0, 'no': 0, 'pl': 0, 'ps': 0, 'pt': 0, 'ro': 0, 'rs': 0, 'se': 0, 'si': 0, 'sj': 0, 'sk': 0, 'sm': 0, 'sy': 0, 'tn': 0, 'tr': 0, 'ua': 0, 'uk': 0, 'us': 0, 'va': 0, 'xk': 0, 'world': 0}, 'origins_from_categories': ['en:unknown'], 'origins_from_origins_field': ['en:unknown']}}, 'missing_agribalyse_match_warning': 1}, 'ecoscore_tags': ['unknown'], 'ingredients_n': 12, 'minerals_tags': [], 'packaging_old': 'en:card-box,en:aluminium-can', 'pnns_groups_1': 'Beverages', 'pnns_groups_2': 'Unsweetened beverages', 'vitamins_tags': [], 'weighers_tags': [], 'additives_tags': ['en:e150c', 'en:e338'], 'allergens_tags': [], 'categories_old': 'Beverages, Carbonated drinks', 'countries_tags': ['en:united-states'], 'ecoscore_grade': 'unknown', 'emb_codes_tags': [], 'informers_tags': ['openfoodfacts-contributors', 'tanyad1013', 'teolemon', 'swipe-studio', 'ecoscore-impact-estimator'], 'ingredients_lc': 'en', 'languages_tags': ['en:english', 'en:1'], 'last_updated_t': 1738753791, 'nutrition_data': 'on', 'packaging_tags': ['en:aluminium-can', 'en:card-box'], 'packaging_text': '', 'popularity_key': 23900000011, 'schema_version': 998, 'unique_scans_n': 11, 'categories_tags': ['en:beverages', 'en:carbonated-drinks'], 'correctors_tags': ['openfoodfacts-contributors', 'tanyad1013', 'teolemon', 'inf', 'swipe-studio', 'thaialagata', 'ecoscore-impact-estimator'], 'expiration_date': '', 'generic_name_en': '', 'image_front_url': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/front_en.16.400.jpg', 'image_small_url': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/front_en.16.200.jpg', 'image_thumb_url': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/front_en.16.100.jpg', 'languages_codes': {'en': 4}, 'last_modified_t': 1728751740, 'nutrient_levels': {'fat': 'low', 'salt': 'high', 'sugars': 'high'}, 'nutriscore_data': {'grade': 'e', 'score': 32, 'is_water': 0, 'is_cheese': 0, 'components': {'negative': [{'id': 'energy', 'unit': 'kJ', 'value': 165, 'points': 3, 'points_max': 10}, {'id': 'sugars', 'unit': 'g', 'value': 11, 'points': 9, 'points_max': 10}, {'id': 'saturated_fat', 'unit': 'g', 'value': 0, 'points': 0, 'points_max': 10}, {'id': 'salt', 'unit': 'g', 'value': 31.7, 'points': 20, 'points_max': 20}, {'id': 'non_nutritive_sweeteners', 'unit': 'number', 'value': 0, 'points': 0, 'points_max': 4}], 'positive': [{'id': 'proteins', 'unit': 'g', 'value': 0, 'points': 0, 'points_max': 7}, {'id': 'fiber', 'unit': 'g', 'value': None, 'points': 0, 'points_max': 5}, {'id': 'fruits_vegetables_legumes', 'unit': '%', 'value': 0, 'points': 0, 'points_max': 6}]}, 'is_beverage': 1, 'count_proteins': 1, 'negative_points': 32, 'positive_points': 0, 'positive_nutrients': ['proteins', 'fiber', 'fruits_vegetables_legumes'], 'is_red_meat_product': 0, 'negative_points_max': 54, 'positive_points_max': 18, 'count_proteins_reason': 'beverage', 'is_fat_oil_nuts_seeds': 0}, 'nutriscore_tags': ['e'], 'popularity_tags': ['top-country-fr-scans-2019', 'bottom-25-percent-scans-2020', 'bottom-20-percent-scans-2020', 'top-85-percent-scans-2020', 'top-90-percent-scans-2020', 'top-5000-us-scans-2020', 'top-10000-us-scans-2020', 'top-50000-us-scans-2020', 'top-100000-us-scans-2020', 'top-country-us-scans-2020', 'top-75-percent-scans-2021', 'top-80-percent-scans-2021', 'top-85-percent-scans-2021', 'top-90-percent-scans-2021', 'top-5000-ua-scans-2021', 'top-10000-ua-scans-2021', 'top-50000-ua-scans-2021', 'top-100000-ua-scans-2021', 'top-country-ua-scans-2021', 'top-50000-us-scans-2021', 'top-100000-us-scans-2021', 'top-75-percent-scans-2022', 'top-80-percent-scans-2022', 'top-85-percent-scans-2022', 'top-90-percent-scans-2022', 'top-1000-us-scans-2022', 'top-5000-us-scans-2022', 'top-10000-us-scans-2022', 'top-50000-us-scans-2022', 'top-100000-us-scans-2022', 'top-country-us-scans-2022', 'top-75-percent-scans-2023', 'top-80-percent-scans-2023', 'top-85-percent-scans-2023', 'top-90-percent-scans-2023', 'top-5000-mx-scans-2023', 'top-10000-mx-scans-2023', 'top-50000-mx-scans-2023', 'top-100000-mx-scans-2023', 'top-country-mx-scans-2023', 'top-100000-scans-2024', 'at-least-5-scans-2024', 'at-least-10-scans-2024', 'top-75-percent-scans-2024', 'top-80-percent-scans-2024', 'top-85-percent-scans-2024', 'top-90-percent-scans-2024', 'top-10000-us-scans-2024', 'top-50000-us-scans-2024', 'top-100000-us-scans-2024', 'top-country-us-scans-2024', 'top-100000-fr-scans-2024', 'top-50000-it-scans-2024', 'top-100000-it-scans-2024', 'top-10000-in-scans-2024', 'top-50000-in-scans-2024', 'top-100000-in-scans-2024', 'top-5000-lv-scans-2024', 'top-10000-lv-scans-2024', 'top-50000-lv-scans-2024', 'top-100000-lv-scans-2024', 'top-5000-sg-scans-2024', 'top-10000-sg-scans-2024', 'top-50000-sg-scans-2024', 'top-100000-sg-scans-2024', 'top-50000-nl-scans-2024', 'top-100000-nl-scans-2024', 'top-50000-es-scans-2024', 'top-100000-es-scans-2024'], 'product_name_en': 'Coca-Cola', 'purchase_places': '', 'selected_images': {'front': {'small': {'en': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/front_en.16.200.jpg'}, 'thumb': {'en': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/front_en.16.100.jpg'}, 'display': {'en': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/front_en.16.400.jpg'}}, 'ingredients': {'small': {'en': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/ingredients_en.8.200.jpg'}, 'thumb': {'en': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/ingredients_en.8.100.jpg'}, 'display': {'en': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/ingredients_en.8.400.jpg'}}}, 'amino_acids_tags': [], 'entry_dates_tags': ['2016-11-05', '2016-11', '2016'], 'food_groups_tags': ['en:beverages', 'en:unsweetened-beverages'], 'ingredients_tags': ['en:pledse-recycle-cans', 'en:cartons-cts-ainer-fructose-corn-syrup-1-can-phosphoric-acid', 'en:natural-carbonated-water', 'en:high-caramel-color', 'en:flavouring', 'en:caffeine', 'en:canned-under-authority-of-the-coca-cola-company-atlanta', 'en:ga-30313', 'en:canner-s-name-and-address-appear-on-each-can', 'en:caffeine-content', 'en:com-l-saturated-fat-tary-fiber-and-potassium-coke-scan-here-for-more-food-information-rchase-floz-cans', 'en:12-fl-oz-02017-the-coca-cola-140-daily-value-0-2-14-g-company-consumer-information-ugars-78-call-1-800-438-2653-coke'], 'ingredients_text': "pledse recycle cans, cartons cts ainer fructose corn syrup 1 can phosphoric acid, natural carbonated water, high caramel color, flavors, caffeine, canned under authority of the coca-cola company atlanta, ga 30313, canner's name and address appear on each can, caffeine content: 34 mg/12 fl oz 02017 the coca-cola 140 daily value 0% 2% 14% g company consumer information ugars 78%| call 1-800-438-2653 coke,com l saturated fat tary fiber and potassium coke scan here for more food information rchase floz cans", 'labels_hierarchy': [], 'nova_group_debug': '', 'nova_groups_tags': ['en:4-ultra-processed-food-and-drink-products'], 'nucleotides_tags': [], 'nutriscore_grade': 'e', 'nutriscore_score': 32, 'nutrition_grades': 'e', 'product_quantity': '0', 'serving_quantity': '355', 'states_hierarchy': ['en:to-be-completed', 'en:nutrition-facts-completed', 'en:ingredients-completed', 'en:expiration-date-to-be-completed', 'en:packaging-code-to-be-completed', 'en:characteristics-to-be-completed', 'en:origins-to-be-completed', 'en:categories-completed', 'en:brands-completed', 'en:packaging-completed', 'en:quantity-completed', 'en:product-name-completed', 'en:photos-to-be-validated', 'en:packaging-photo-to-be-selected', 'en:nutrition-photo-to-be-selected', 'en:ingredients-photo-selected', 'en:front-photo-selected', 'en:photos-uploaded'], 'traces_from_user': '(en) ', 'traces_hierarchy': [], 'data_quality_tags': ['en:packaging-data-incomplete', 'en:ingredients-percent-analysis-ok', 'en:ecoscore-extended-data-computed', 'en:ecoscore-extended-data-less-precise-than-agribalyse', 'en:food-groups-1-known', 'en:food-groups-2-known', 'en:food-groups-3-unknown', 'en:ingredients-unknown-score-above-5', 'en:ingredients-80-percent-unknown', 'en:ingredients-ingredient-tag-length-greater-than-50', 'en:ingredients-ingredient-tag-length-greater-than-100', 'en:nutrition-value-very-high-for-category-salt', 'en:product-quantity-under-1g', 'en:serving-quantity-over-product-quantity', 'en:ecoscore-origins-of-ingredients-origins-are-100-percent-unknown', 'en:ecoscore-packaging-unspecified-material', 'en:ecoscore-production-system-no-label'], 'data_sources_tags': ['app-horizon', 'app-infood', 'apps'], 'ingredients_debug': ['pledse recycle cans& cartons cts ainer FRUCTOSE CORN SYRUP 1 Can PHOSPHORIC ACID', ',', None, None, None, ' NATURAL CARBONATED WATER', ',', None, None, None, ' HIGH CARAMEL COLOR', ',', None, None, None, ' FLAVORS', ',', None, None, None, ' CAFFEINE', '. ', None, None, None, 'CANNED UNDER AUTHORITY OF THE COCA-COLA COMPANY ATLANTA', ',', None, None, None, ' GA 30313', '. ', None, None, None, "CANNER'S NAME AND ADDRESS APPEAR ON EACH CAN", '. ', None, None, None, 'CAFFEINE CONTENT', ':', ':', None, None, ' 34 mg', '/', None, None, '/', '12 fl oz 02017 THE COCA-COLA 140 Daily Value 0% 2% 14% g COMPANY CONSUMER INFORMATION ugars 78%| CALL 1-800-438-2653 coke.com l saturated fat tary fiber and potassium Coke SCAN HERE FoR MORE FOOD INFORMATION RCHASE FLOZ CANS'], 'origins_hierarchy': [], 'packaging_text_en': '', 'ingredients_n_tags': ['12', '11-20'], 'minerals_prev_tags': [], 'nutriscore_version': '2023', 'nutrition_data_per': 'serving', 'nutrition_grade_fr': 'e', 'photographers_tags': ['openfoodfacts-contributors', 'tanyad1013', 'thaialagata'], 'pnns_groups_1_tags': ['beverages', 'known'], 'pnns_groups_2_tags': ['unsweetened-beverages', 'known'], 'vitamins_prev_tags': [], 'allergens_from_user': '(en) ', 'allergens_hierarchy': [], 'category_properties': {}, 'countries_hierarchy': ['en:united-states'], 'ingredients_text_en': "pledse recycle cans, cartons cts ainer fructose corn syrup 1 can phosphoric acid, natural carbonated water, high caramel color, flavors, caffeine, canned under authority of the coca-cola company atlanta, ga 30313, canner's name and address appear on each can, caffeine content: 34 mg/12 fl oz 02017 the coca-cola 140 daily value 0% 2% 14% g company consumer information ugars 78%| call 1-800-438-2653 coke,com l saturated fat tary fiber and potassium coke scan here for more food information rchase floz cans", 'known_ingredients_n': 2, 'languages_hierarchy': ['en:english'], 'main_countries_tags': [], 'nova_groups_markers': {'4': [['additives', 'en:e150c'], ['ingredients', 'en:flavouring']]}, 'packaging_hierarchy': ['en:Aluminium-can', 'en:Card-box'], 'added_countries_tags': [], 'categories_hierarchy': ['en:beverages', 'en:carbonated-drinks'], 'compared_to_category': 'en:carbonated-drinks', 'ingredients_analysis': {'en:vegan-status-unknown': ['en:pledse-recycle-cans', 'en:cartons-cts-ainer-fructose-corn-syrup-1-can-phosphoric-acid', 'en:natural-carbonated-water', 'en:high-caramel-color', 'en:canned-under-authority-of-the-coca-cola-company-atlanta', 'en:ga-30313', 'en:canner-s-name-and-address-appear-on-each-can', 'en:caffeine-content', 'en:12-fl-oz-02017-the-coca-cola-140-daily-value-0-2-14-g-company-consumer-information-ugars-78-call-1-800-438-2653-coke', 'en:com-l-saturated-fat-tary-fiber-and-potassium-coke-scan-here-for-more-food-information-rchase-floz-cans'], 'en:palm-oil-content-unknown': ['en:pledse-recycle-cans', 'en:cartons-cts-ainer-fructose-corn-syrup-1-can-phosphoric-acid', 'en:natural-carbonated-water', 'en:high-caramel-color', 'en:canned-under-authority-of-the-coca-cola-company-atlanta', 'en:ga-30313', 'en:canner-s-name-and-address-appear-on-each-can', 'en:caffeine-content', 'en:12-fl-oz-02017-the-coca-cola-140-daily-value-0-2-14-g-company-consumer-information-ugars-78-call-1-800-438-2653-coke', 'en:com-l-saturated-fat-tary-fiber-and-potassium-coke-scan-here-for-more-food-information-rchase-floz-cans'], 'en:vegetarian-status-unknown': ['en:pledse-recycle-cans', 'en:cartons-cts-ainer-fructose-corn-syrup-1-can-phosphoric-acid', 'en:natural-carbonated-water', 'en:high-caramel-color', 'en:canned-under-authority-of-the-coca-cola-company-atlanta', 'en:ga-30313', 'en:canner-s-name-and-address-appear-on-each-can', 'en:caffeine-content', 'en:12-fl-oz-02017-the-coca-cola-140-daily-value-0-2-14-g-company-consumer-information-ugars-78-call-1-800-438-2653-coke', 'en:com-l-saturated-fat-tary-fiber-and-potassium-coke-scan-here-for-more-food-information-rchase-floz-cans']}, 'last_edit_dates_tags': ['2024-10-12', '2024-10', '2024'], 'manufacturing_places': '', 'nutrient_levels_tags': ['en:fat-in-low-quantity', 'en:sugars-in-high-quantity', 'en:salt-in-high-quantity'], 'nutriscore_2021_tags': ['e'], 'nutriscore_2023_tags': ['e'], 'packagings_materials': {'all': {}, 'en:metal': {}, 'en:unknown': {}}, 'purchase_places_tags': [], 'amino_acids_prev_tags': [], 'categories_properties': {}, 'ciqual_food_name_tags': ['unknown'], 'image_front_small_url': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/front_en.16.200.jpg', 'image_front_thumb_url': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/front_en.16.100.jpg', 'image_ingredients_url': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/ingredients_en.8.400.jpg', 'ingredients_hierarchy': ['en:pledse-recycle-cans', 'en:cartons-cts-ainer-fructose-corn-syrup-1-can-phosphoric-acid', 'en:natural-carbonated-water', 'en:high-caramel-color', 'en:flavouring', 'en:caffeine', 'en:canned-under-authority-of-the-coca-cola-company-atlanta', 'en:ga-30313', 'en:canner-s-name-and-address-appear-on-each-can', 'en:caffeine-content', 'en:com-l-saturated-fat-tary-fiber-and-potassium-coke-scan-here-for-more-food-information-rchase-floz-cans', 'en:12-fl-oz-02017-the-coca-cola-140-daily-value-0-2-14-g-company-consumer-information-ugars-78-call-1-800-438-2653-coke'], 'ingredients_ids_debug': ['pledse-recycle-cans-cartons-cts-ainer-fructose-corn-syrup-1-can-phosphoric-acid', 'natural-carbonated-water', 'high-caramel-color', 'flavors', 'caffeine', 'canned-under-authority-of-the-coca-cola-company-atlanta', 'ga-30313', 'canner-s-name-and-address-appear-on-each-can', 'caffeine-content', '34-mg', '12-fl-oz-02017-the-coca-cola-140-daily-value-0-2-14-g-company-consumer-information-ugars-78-call-1-800-438-2653-coke-com-l-saturated-fat-tary-fiber-and-potassium-coke-scan-here-for-more-food-information-rchase-floz-cans'], 'last_image_dates_tags': ['2021-12-23', '2021-12', '2021'], 'nucleotides_prev_tags': [], 'nutrition_grades_tags': ['e'], 'nutrition_score_debug': '', 'packaging_shapes_tags': ['en:box', 'en:can'], 'serving_quantity_unit': 'ml', 'unknown_ingredients_n': 10, 'data_quality_bugs_tags': [], 'data_quality_info_tags': ['en:packaging-data-incomplete', 'en:ingredients-percent-analysis-ok', 'en:ecoscore-extended-data-computed', 'en:ecoscore-extended-data-less-precise-than-agribalyse', 'en:food-groups-1-known', 'en:food-groups-2-known', 'en:food-groups-3-unknown'], 'ingredients_text_debug': "pledse recycle cans& cartons cts ainer FRUCTOSE CORN SYRUP 1 Can PHOSPHORIC ACID, NATURAL CARBONATED WATER, HIGH CARAMEL COLOR, FLAVORS, CAFFEINE. CANNED UNDER AUTHORITY OF THE COCA-COLA COMPANY ATLANTA, GA 30313. CANNER'S NAME AND ADDRESS APPEAR ON EACH CAN. CAFFEINE CONTENT: 34 mg/12 fl oz 02017 THE COCA-COLA 140 Daily Value 0% 2% 14% g COMPANY CONSUMER INFORMATION ugars 78%| CALL 1-800-438-2653 coke.com l saturated fat tary fiber and potassium Coke SCAN HERE FoR MORE FOOD INFORMATION RCHASE FLOZ CANS", 'removed_countries_tags': [], 'unknown_nutrients_tags': [], 'additives_original_tags': ['en:e338', 'en:e150c'], 'traces_from_ingredients': '', 'data_quality_errors_tags': [], 'debug_param_sorted_langs': ['en'], 'ingredients_sweeteners_n': 0, 'nutrition_score_beverage': 1, 'packaging_materials_tags': ['en:aluminium'], 'packaging_recycling_tags': [], 'ingredients_analysis_tags': ['en:palm-oil-content-unknown', 'en:vegan-status-unknown', 'en:vegetarian-status-unknown'], 'ingredients_original_tags': ['en:pledse-recycle-cans', 'en:cartons-cts-ainer-fructose-corn-syrup-1-can-phosphoric-acid', 'en:natural-carbonated-water', 'en:high-caramel-color', 'en:flavouring', 'en:caffeine', 'en:canned-under-authority-of-the-coca-cola-company-atlanta', 'en:ga-30313', 'en:canner-s-name-and-address-appear-on-each-can', 'en:caffeine-content', 'en:com-l-saturated-fat-tary-fiber-and-potassium-coke-scan-here-for-more-food-information-rchase-floz-cans', 'en:12-fl-oz-02017-the-coca-cola-140-daily-value-0-2-14-g-company-consumer-information-ugars-78-call-1-800-438-2653-coke'], 'interface_version_created': '20120622', 'manufacturing_places_tags': [], 'nutriscore_score_opposite': -32, 'allergens_from_ingredients': '', 'categories_properties_tags': ['all-products', 'categories-known', 'agribalyse-food-code-unknown', 'agribalyse-proxy-food-code-unknown', 'ciqual-food-code-unknown', 'agribalyse-unknown'], 'data_quality_warnings_tags': ['en:ingredients-unknown-score-above-5', 'en:ingredients-80-percent-unknown', 'en:ingredients-ingredient-tag-length-greater-than-50', 'en:ingredients-ingredient-tag-length-greater-than-100', 'en:nutrition-value-very-high-for-category-salt', 'en:product-quantity-under-1g', 'en:serving-quantity-over-product-quantity', 'en:ecoscore-origins-of-ingredients-origins-are-100-percent-unknown', 'en:ecoscore-packaging-unspecified-material', 'en:ecoscore-production-system-no-label'], 'interface_version_modified': '20150316.jqm2', 'image_ingredients_small_url': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/ingredients_en.8.200.jpg', 'image_ingredients_thumb_url': 'https://images.openfoodfacts.org/images/products/004/900/002/8904/ingredients_en.8.100.jpg', 'ingredients_from_palm_oil_n': 0, 'nutrition_data_prepared_per': '100g', 'ingredients_percent_analysis': 1, 'ingredients_from_palm_oil_tags': [], 'ingredients_text_with_allergens': "pledse recycle cans, cartons cts ainer fructose corn syrup 1 can phosphoric acid, natural carbonated water, high caramel color, flavors, caffeine, canned under authority of the coca-cola company atlanta, ga 30313, canner's name and address appear on each can, caffeine content: 34 mg/12 fl oz 02017 the coca-cola 140 daily value 0% 2% 14% g company consumer information ugars 78%| call 1-800-438-2653 coke,com l saturated fat tary fiber and potassium coke scan here for more food information rchase floz cans", 'ingredients_without_ciqual_codes': ['en:12-fl-oz-02017-the-coca-cola-140-daily-value-0-2-14-g-company-consumer-information-ugars-78-call-1-800-438-2653-coke', 'en:caffeine', 'en:caffeine-content', 'en:canned-under-authority-of-the-coca-cola-company-atlanta', 'en:canner-s-name-and-address-appear-on-each-can', 'en:cartons-cts-ainer-fructose-corn-syrup-1-can-phosphoric-acid', 'en:com-l-saturated-fat-tary-fiber-and-potassium-coke-scan-here-for-more-food-information-rchase-floz-cans', 'en:flavouring', 'en:ga-30313', 'en:high-caramel-color', 'en:natural-carbonated-water', 'en:pledse-recycle-cans'], 'nutrition_score_warning_no_fiber': 1, 'ingredients_without_ecobalyse_ids': ['en:12-fl-oz-02017-the-coca-cola-140-daily-value-0-2-14-g-company-consumer-information-ugars-78-call-1-800-438-2653-coke', 'en:caffeine', 'en:caffeine-content', 'en:canned-under-authority-of-the-coca-cola-company-atlanta', 'en:canner-s-name-and-address-appear-on-each-can', 'en:cartons-cts-ainer-fructose-corn-syrup-1-can-phosphoric-acid', 'en:com-l-saturated-fat-tary-fiber-and-potassium-coke-scan-here-for-more-food-information-rchase-floz-cans', 'en:flavouring', 'en:ga-30313', 'en:high-caramel-color', 'en:natural-carbonated-water', 'en:pledse-recycle-cans'], 'other_nutritional_substances_tags': [], 'ingredients_text_with_allergens_en': "pledse recycle cans, cartons cts ainer fructose corn syrup 1 can phosphoric acid, natural carbonated water, high caramel color, flavors, caffeine, canned under authority of the coca-cola company atlanta, ga 30313, canner's name and address appear on each can, caffeine content: 34 mg/12 fl oz 02017 the coca-cola 140 daily value 0% 2% 14% g company consumer information ugars 78%| call 1-800-438-2653 coke,com l saturated fat tary fiber and potassium coke scan here for more food information rchase floz cans", 'ingredients_without_ciqual_codes_n': 12, 'ingredients_without_ecobalyse_ids_n': 12, 'ingredients_with_specified_percent_n': 0, 'ingredients_non_nutritive_sweeteners_n': 0, 'ingredients_with_specified_percent_sum': 0, 'ingredients_with_unspecified_percent_n': 11, 'ingredients_that_may_be_from_palm_oil_n': 0, 'ingredients_with_unspecified_percent_sum': 100, 'ingredients_that_may_be_from_palm_oil_tags': [], 'ingredients_from_or_that_may_be_from_palm_oil_n': 0, 'nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients': 1, 'nutrition_score_warning_fruits_vegetables_legumes_estimate_from_ingredients': 1, 'nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients_value': 0, 'nutrition_score_warning_fruits_vegetables_legumes_estimate_from_ingredients_value': 0}}}}, - sql='UPDATE main_receipt_items SET name = %s, qty = %s, uom = %s, data = %s WHERE id=%s RETURNING *;') -2025-04-12 14:48:46.046062 --- ERROR --- DatabaseError(message='invalid input syntax for type integer: " Pinch"LINE 1: ...= 'Blueberry bagels, blueberry', qty = '1', uom = ' Pinch', ... ^', - payload={'id': 61, 'update': {'name': 'Blueberry bagels, blueberry', 'qty': '1', 'uom': ' Pinch', 'data': {'cost': '2.43', 'expires': False}}}, - sql='UPDATE main_receipt_items SET name = %s, qty = %s, uom = %s, data = %s WHERE id=%s RETURNING *;') -2025-04-12 14:49:19.676918 --- ERROR --- DatabaseError(message='invalid input syntax for type integer: " Pinch"LINE 1: ..._items SET name = 'Cooked rice', qty = '2', uom = ' Pinch', ... ^', - payload={'id': 63, 'update': {'name': 'Cooked rice', 'qty': '2', 'uom': ' Pinch', 'data': {'cost': '2.48', 'expires': False}}}, - sql='UPDATE main_receipt_items SET name = %s, qty = %s, uom = %s, data = %s WHERE id=%s RETURNING *;') -2025-04-12 14:49:35.333826 --- ERROR --- DatabaseError(message='invalid input syntax for type integer: " Pinch"LINE 1: ..._items SET name = 'Cooked rice', qty = '2', uom = ' Pinch', ... ^', - payload={'id': 63, 'update': {'name': 'Cooked rice', 'qty': '2', 'uom': ' Pinch', 'data': {'cost': '2.48', 'expires': False}}}, - sql='UPDATE main_receipt_items SET name = %s, qty = %s, uom = %s, data = %s WHERE id=%s RETURNING *;') -2025-04-12 15:41:19.681064 --- ERROR --- DatabaseError(message='column "files" of relation "test_recipes" does not existLINE 1: UPDATE test_recipes SET files = '{"Order_details_-_Walmart.c... ^', - payload={'id': '7', 'update': {'files': {'Order_details_-_Walmart.com_04122025.pdf': {'file_path': 'Order_details_-_Walmart.com_04122025.pdf', 'file_type': 'application/pdf', 'file_size': 255703, 'uploaded_by': 'jadowyne'}}}}, - sql='UPDATE test_recipes SET files = %s WHERE id=%s RETURNING *;') -2025-04-12 17:33:28.283678 --- ERROR --- DatabaseError(message='tuple index out of range', - payload=('', 50, 0), - sql='WITH passed_id AS (SELECT %s AS passed_id), info_id AS (SELECT item_info_id FROM test_items WHERE id=(SELECT passed_id FROM passed_id)), sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM test_item_locations mil JOIN test_items mi ON mil.part_id = mi.id GROUP BY mi.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) )SELECT test_items.*, (SELECT COALESCE(row_to_json(ii), '{}') FROM cte_item_info ii) AS item_info, sum_cte.total_sum as total_qohFROM test_itemsLEFT JOIN sum_cte ON test_items.id = sum_cte.idLEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.idWHERE test_items.search_string LIKE '%%' || %s || '%%'ORDER BY test_items.item_name ASCLIMIT %s OFFSET %s;') -2025-04-12 17:36:38.542221 --- ERROR --- DatabaseError(message='subquery must return only one columnLINE 11: (SELECT * FROM units WHERE id=test_item_info.uom) as uom ^', - payload=('', 50, 0), - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM test_item_locations mil JOIN test_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT test_items.*, row_to_json(test_item_info.*) as item_info, sum_cte.total_sum as total_qoh, (SELECT * FROM units WHERE id=test_item_info.uom) as uomFROM test_itemsLEFT JOIN sum_cte ON test_items.id = sum_cte.idLEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.idWHERE test_items.search_string LIKE '%%' || %s || '%%'ORDER BY test_items.item_name ASCLIMIT %s OFFSET %s;') -2025-04-12 17:38:03.263608 --- ERROR --- DatabaseError(message='subquery must return only one columnLINE 11: (SELECT * FROM units WHERE units.id=test_item_info.uom) ... ^', - payload=('', 50, 0), - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM test_item_locations mil JOIN test_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT test_items.*, row_to_json(test_item_info.*) as item_info, sum_cte.total_sum as total_qoh, (SELECT * FROM units WHERE units.id=test_item_info.uom) as uomFROM test_itemsLEFT JOIN sum_cte ON test_items.id = sum_cte.idLEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.idWHERE test_items.search_string LIKE '%%' || %s || '%%'ORDER BY test_items.item_name ASCLIMIT %s OFFSET %s;') -2025-04-12 17:38:40.948842 --- ERROR --- DatabaseError(message='subquery must return only one columnLINE 11: (SELECT units.* FROM units WHERE units.id=test_item_info... ^', - payload=('', 50, 0), - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM test_item_locations mil JOIN test_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT test_items.*, row_to_json(test_item_info.*) as item_info, sum_cte.total_sum as total_qoh, (SELECT units.* FROM units WHERE units.id=test_item_info.uom) as uomFROM test_itemsLEFT JOIN sum_cte ON test_items.id = sum_cte.idLEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.idWHERE test_items.search_string LIKE '%%' || %s || '%%'ORDER BY test_items.item_name ASCLIMIT %s OFFSET %s;') -2025-04-12 18:10:19.256336 --- ERROR --- DatabaseError(message='COALESCE types integer and character varying cannot be matchedLINE 5: COALESCE(test_item_info.uom, items.uom) AS uom, ^', - payload=(2,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:13:23.317269 --- ERROR --- DatabaseError(message='COALESCE types integer and character varying cannot be matchedLINE 5: COALESCE(test_item_info.uom, items.uom) AS uom, ^', - payload=(2,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:29:43.068612 --- ERROR --- DatabaseError(message='column test_item_info.conversions does not existLINE 8: COALESCE(array_agg(test_item_info.conversions), ... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, COALESCE(array_agg(test_item_info.conversions), '[]'::json) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:30:31.073095 --- ERROR --- DatabaseError(message='syntax error at or near "SELECT"LINE 8: COALESCE(array_agg(SELECT * FROM test_conversion... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, COALESCE(array_agg(SELECT * FROM test_conversions WHERE item_id=(SELECT passed_id FROM passed_id)), '[]'::json) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:30:56.976889 --- ERROR --- DatabaseError(message='syntax error at or near "AS"LINE 8: ...s WHERE item_id=(SELECT passed_id FROM passed_id) AS convers... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, (SELECT * FROM test_conversions WHERE item_id=(SELECT passed_id FROM passed_id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:31:32.917433 --- ERROR --- DatabaseError(message='syntax error at or near "AS"LINE 8: ...RE conv.item_id=(SELECT passed_id FROM passed_id) AS convers... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, (SELECT * FROM test_conversions conv WHERE conv.item_id=(SELECT passed_id FROM passed_id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:31:41.215951 --- ERROR --- DatabaseError(message='syntax error at or near "AS"LINE 8: ...RE conv.item_id=(SELECT passed_id FROM passed_id) AS convers... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, (SELECT conv.* FROM test_conversions conv WHERE conv.item_id=(SELECT passed_id FROM passed_id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:32:10.052409 --- ERROR --- DatabaseError(message='subquery must return only one columnLINE 8: (SELECT conv.* FROM test_conversions conv WHERE ... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, (SELECT conv.* FROM test_conversions conv WHERE conv.item_id=(SELECT passed_id FROM passed_id)) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:32:18.359130 --- ERROR --- DatabaseError(message='syntax error at or near "SELECT"LINE 8: array_agg(SELECT conv.* FROM test_conversions co... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, array_agg(SELECT conv.* FROM test_conversions conv WHERE conv.item_id=(SELECT passed_id FROM passed_id)) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:32:47.717764 --- ERROR --- DatabaseError(message='syntax error at or near "SELECT"LINE 8: array_agg(row_to_json(SELECT conv.* FROM test_co... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, array_agg(row_to_json(SELECT conv.* FROM test_conversions conv WHERE conv.item_id=(SELECT passed_id FROM passed_id))) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:32:55.779238 --- ERROR --- DatabaseError(message='syntax error at or near "AS"LINE 8: ...E conv.item_id=(SELECT passed_id FROM passed_id)) AS convers... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, array_agg((SELECT conv.* FROM test_conversions conv WHERE conv.item_id=(SELECT passed_id FROM passed_id)) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:33:11.361795 --- ERROR --- DatabaseError(message='subquery must return only one columnLINE 8: array_agg((SELECT conv.* FROM test_conversions c... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, array_agg((SELECT conv.* FROM test_conversions conv WHERE conv.item_id=(SELECT passed_id FROM passed_id))) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:36:44.331323 --- ERROR --- DatabaseError(message='COALESCE types test_conversions[] and json cannot be matchedLINE 8: ...nversions conv WHERE conv.item_id=test_items.id), '[]'::json... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, COALESCE((SELECT array_agg(conv) FROM test_conversions conv WHERE conv.item_id=test_items.id), '[]'::json) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:37:05.400764 --- ERROR --- DatabaseError(message='COALESCE types test_conversions[] and json cannot be matchedLINE 8: ...nversions conv WHERE conv.item_id=test_items.id), '{}'::json... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, COALESCE((SELECT array_agg(conv) FROM test_conversions conv WHERE conv.item_id=test_items.id), '{}'::json) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:37:34.772339 --- ERROR --- DatabaseError(message='COALESCE types test_conversions[] and json cannot be matchedLINE 8: ...nversions conv WHERE conv.item_id=test_items.id), '[]'::json... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, COALESCE((SELECT array_agg(conv) FROM test_conversions conv WHERE conv.item_id=test_items.id), '[]'::json) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:37:42.827271 --- ERROR --- DatabaseError(message='malformed array literal: "[]"LINE 8: ...nversions conv WHERE conv.item_id=test_items.id), '[]') AS c... ^DETAIL: "[" must introduce explicitly-specified array dimensions.', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, COALESCE((SELECT array_agg(conv) FROM test_conversions conv WHERE conv.item_id=test_items.id), '[]') AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:38:29.456797 --- ERROR --- DatabaseError(message='type "type_of_conversion[]" does not existLINE 8: ... conv WHERE conv.item_id=test_items.id), ARRAY[]::type_of_co... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, COALESCE((SELECT array_agg(conv) FROM test_conversions conv WHERE conv.item_id=test_items.id), ARRAY[]::type_of_conversion[]) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:38:37.378760 --- ERROR --- DatabaseError(message='cannot determine type of empty arrayLINE 8: ...nversions conv WHERE conv.item_id=test_items.id), ARRAY[]) A... ^HINT: Explicitly cast to the desired type, for example ARRAY[]::integer[].', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, COALESCE((SELECT array_agg(conv) FROM test_conversions conv WHERE conv.item_id=test_items.id), ARRAY[]) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:39:17.420643 --- ERROR --- DatabaseError(message='COALESCE could not convert type integer[] to test_conversions[]LINE 8: ...nversions conv WHERE conv.item_id=test_items.id), ARRAY[]::i... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, COALESCE((SELECT array_agg(conv) FROM test_conversions conv WHERE conv.item_id=test_items.id), ARRAY[]::integer[]) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:48:41.423855 --- ERROR --- DatabaseError(message='subquery must return only one columnLINE 5: (SELECT * FROM units WHERE id=COALESCE(test_item... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, (SELECT * FROM units WHERE id=COALESCE(test_item_info.uom, items.uom)) as uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, (SELECT COALESCE(array_agg(conv), '{}') FROM test_conversions conv WHERE conv.item_id=test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:49:05.057244 --- ERROR --- DatabaseError(message='subquery must return only one columnLINE 5: (SELECT * FROM units WHERE units.id=COALESCE(tes... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, (SELECT * FROM units WHERE units.id=COALESCE(test_item_info.uom, items.uom)) as uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, (SELECT COALESCE(array_agg(conv), '{}') FROM test_conversions conv WHERE conv.item_id=test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:49:40.541238 --- ERROR --- DatabaseError(message='subquery must return only one columnLINE 5: (SELECT units.* FROM units WHERE units.id=COALES... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, (SELECT units.* FROM units WHERE units.id=COALESCE(test_item_info.uom, items.uom)) as uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, (SELECT COALESCE(array_agg(conv), '{}') FROM test_conversions conv WHERE conv.item_id=test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 18:50:56.070555 --- ERROR --- DatabaseError(message='invalid reference to FROM-clause entry for table "units"LINE 7: WHERE units.id=COALESCE(test_item_info.uom, ... ^HINT: Perhaps you meant to reference the table alias "u".', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, (SELECT u.* FROM units u JOIN test_item_info si ON u.id = COALESCE(si.uom, items.uom) WHERE units.id=COALESCE(test_item_info.uom, items.uom)) as uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, (SELECT COALESCE(array_agg(conv), '{}') FROM test_conversions conv WHERE conv.item_id=test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:02:26.980825 --- ERROR --- DatabaseError(message='function array_agg(test_conversions, units) does not existLINE 9: (SELECT COALESCE(array_agg(conv.*, units.*), '{}... ^HINT: No function matches the given name and argument types. You might need to add explicit type casts.', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT COALESCE(array_agg(conv.*, units.*), '{}') FROM test_conversions conv JOIN units ON conv.uom_id = units.id WHERE conv.item_id=test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:02:47.287761 --- ERROR --- DatabaseError(message='column "units.id" must appear in the GROUP BY clause or be used in an aggregate functionLINE 9: ... (SELECT COALESCE(array_agg(conv), '{}'), units.* FR... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT COALESCE(array_agg(conv), '{}'), units.* FROM test_conversions conv JOIN units ON conv.uom_id = units.id WHERE conv.item_id=test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:03:21.792399 --- ERROR --- DatabaseError(message='subquery must return only one columnLINE 9: (SELECT COALESCE(array_agg(conv), '{}'), COALESC... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT COALESCE(array_agg(conv), '{}'), COALESCE(array_agg(units.*), '{}') FROM test_conversions conv JOIN units ON conv.uom_id = units.id WHERE conv.item_id=test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:03:28.192710 --- ERROR --- DatabaseError(message='subquery must return only one columnLINE 9: (SELECT COALESCE(array_agg(conv), '{}'), COALESC... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT COALESCE(array_agg(conv), '{}'), COALESCE(array_agg(units), '{}') FROM test_conversions conv JOIN units ON conv.uom_id = units.id WHERE conv.item_id=test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:05:06.060302 --- ERROR --- DatabaseError(message='function row_to_json(test_conversions, units) does not existLINE 9: (SELECT COALESCE(array_agg(row_to_json(conv, un... ^HINT: No function matches the given name and argument types. You might need to add explicit type casts.', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT COALESCE(array_agg(row_to_json(conv, unit_conv.*)), '{}') FROM test_conversions conv LEFT JOIN units unit_conv ON conv.uom_id = unit_conv.id WHERE conv.item_id=test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:06:11.616756 --- ERROR --- DatabaseError(message='subquery must return only one columnLINE 9: (SELECT conv.*, unit_conv.* ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT conv.*, unit_conv.* FROM test_conversions conv LEFT JOIN units unit_conv ON conv.uom_id = unit_conv.id WHERE conv.item_id=test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:06:23.233789 --- ERROR --- DatabaseError(message='function array_agg(test_conversions, units) does not existLINE 9: (SELECT array_agg(conv.*, unit_conv.*) ^HINT: No function matches the given name and argument types. You might need to add explicit type casts.', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT array_agg(conv.*, unit_conv.*) FROM test_conversions conv LEFT JOIN units unit_conv ON conv.uom_id = unit_conv.id WHERE conv.item_id=test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:06:46.193165 --- ERROR --- DatabaseError(message='missing FROM-clause entry for table "unit_conv"LINE 9: (SELECT array_agg(conv.*, unit_conv.*) ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT array_agg(conv.*, unit_conv.*) FROM test_conversions conv LEFT JOIN units ON conv.uom_id = units.id WHERE conv.item_id=test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:07:04.030707 --- ERROR --- DatabaseError(message='function row_to_json(test_conversions, units) does not existLINE 9: (SELECT row_to_json(conv.*, units.*) ^HINT: No function matches the given name and argument types. You might need to add explicit type casts.', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT row_to_json(conv.*, units.*) FROM test_conversions conv LEFT JOIN units ON conv.uom_id = units.id WHERE conv.item_id=test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:07:34.817799 --- ERROR --- DatabaseError(message='subquery must return only one columnLINE 9: (SELECT row_to_json(conv), row_to_json(units) ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT row_to_json(conv), row_to_json(units) FROM test_conversions conv LEFT JOIN units ON conv.uom_id = units.id WHERE conv.item_id=test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:07:58.995085 --- ERROR --- DatabaseError(message='syntax error at or near "AS"LINE 12: WHERE conv.item_id=test_items.id) AS convers... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT COALESCE(array_agg(conv)), '{}') FROM test_conversions conv LEFT JOIN units unit_conv ON conv.uom_id = unit_conv.id WHERE conv.item_id=test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:09:20.023644 --- ERROR --- DatabaseError(message='function array_agg() does not existLINE 9: (SELECT COALESCE(array_agg(*), '{}') FROM test_c... ^HINT: No function matches the given name and argument types. You might need to add explicit type casts.', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT COALESCE(array_agg(*), '{}') FROM test_conversions conv LEFT JOIN units ON conv.uom_id = units.id WHERE conv.item_id=test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:10:15.749310 --- ERROR --- DatabaseError(message='operator does not exist: json || jsonLINE 9: ... (SELECT COALESCE(array_agg(row_to_json(conv) || json_bu... ^HINT: No operator matches the given name and argument types. You might need to add explicit type casts.', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, COALESCE(test_item_info.uom, items.uom) AS uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT COALESCE(array_agg(row_to_json(conv) || json_build_object('unit', row_to_json(units))), '{}') FROM test_conversions conv LEFT JOIN units ON conv.uom_id = units.id WHERE conv.item_id = test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:15:01.594053 --- ERROR --- DatabaseError(message='function row_to_json(integer) does not existLINE 5: row_to_json(test_item_info.uom) AS item_uom, ^HINT: No function matches the given name and argument types. You might need to add explicit type casts.', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, row_to_json(test_item_info.uom) AS item_uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT COALESCE(array_agg(jsonb_build_object('conversion', conv, 'unit', units)), '{}') FROM test_conversions conv LEFT JOIN units ON conv.uom_id = units.id WHERE conv.item_id = test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:17:41.975720 --- ERROR --- DatabaseError(message='malformed record literal: "{}"LINE 5: (SELECT COALESCE(units, '{}') FROM units WHERE u... ^DETAIL: Missing left parenthesis.', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, (SELECT COALESCE(units, '{}') FROM units WHERE units.id=test_item_info.uom) AS item_uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT COALESCE(array_agg(jsonb_build_object('conversion', conv, 'unit', units)), '{}') FROM test_conversions conv LEFT JOIN units ON conv.uom_id = units.id WHERE conv.item_id = test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:18:35.753325 --- ERROR --- DatabaseError(message='cannot cast type units to jsonbLINE 5: (SELECT COALESCE(units::jsonb, '{}'::jsonb) FROM... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, (SELECT COALESCE(units::jsonb, '{}'::jsonb) FROM units WHERE units.id=test_item_info.uom) AS item_uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT COALESCE(array_agg(jsonb_build_object('conversion', conv, 'unit', units)), '{}') FROM test_conversions conv LEFT JOIN units ON conv.uom_id = units.id WHERE conv.item_id = test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:18:44.421031 --- ERROR --- DatabaseError(message='COALESCE types units and jsonb cannot be matchedLINE 5: (SELECT COALESCE(units, '{}'::jsonb) FROM units ... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, (SELECT COALESCE(units, '{}'::jsonb) FROM units WHERE units.id=test_item_info.uom) AS item_uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT COALESCE(array_agg(jsonb_build_object('conversion', conv, 'unit', units)), '{}') FROM test_conversions conv LEFT JOIN units ON conv.uom_id = units.id WHERE conv.item_id = test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:18:55.989049 --- ERROR --- DatabaseError(message='COALESCE could not convert type jsonb to jsonLINE 5: (SELECT COALESCE(row_to_json(units), '{}'::jsonb... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, (SELECT COALESCE(row_to_json(units), '{}'::jsonb) FROM units WHERE units.id=test_item_info.uom) AS item_uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT COALESCE(array_agg(jsonb_build_object('conversion', conv, 'unit', units)), '{}') FROM test_conversions conv LEFT JOIN units ON conv.uom_id = units.id WHERE conv.item_id = test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:19:07.610999 --- ERROR --- DatabaseError(message='function row_to_jsonb(units) does not existLINE 5: (SELECT COALESCE(row_to_jsonb(units), '{}'::json... ^HINT: No function matches the given name and argument types. You might need to add explicit type casts.', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, (SELECT COALESCE(row_to_jsonb(units), '{}'::jsonb) FROM units WHERE units.id=test_item_info.uom) AS item_uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT COALESCE(array_agg(jsonb_build_object('conversion', conv, 'unit', units)), '{}') FROM test_conversions conv LEFT JOIN units ON conv.uom_id = units.id WHERE conv.item_id = test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:19:30.854594 --- ERROR --- DatabaseError(message='COALESCE types units and jsonb cannot be matchedLINE 5: (SELECT COALESCE(units, '{}'::jsonb) FROM units ... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, (SELECT COALESCE(units, '{}'::jsonb) FROM units WHERE units.id=test_item_info.uom) AS item_uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT COALESCE(array_agg(jsonb_build_object('conversion', conv, 'unit', units)), '{}') FROM test_conversions conv LEFT JOIN units ON conv.uom_id = units.id WHERE conv.item_id = test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:19:42.083075 --- ERROR --- DatabaseError(message='COALESCE types units[] and jsonb cannot be matchedLINE 5: (SELECT COALESCE(array_agg(units), '{}'::jsonb) ... ^', - payload=(1,), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_recipe_items AS ( SELECT items.*, COALESCE(test_items.barcode, items.uuid) AS uuid, (SELECT COALESCE(array_agg(units), '{}'::jsonb) FROM units WHERE units.id=test_item_info.uom) AS item_uom, COALESCE(test_items.item_name, items.item_name) AS item_name, COALESCE(test_items.links, items.links) AS links, row_to_json(units.*) as uom, (SELECT COALESCE(array_agg(jsonb_build_object('conversion', conv, 'unit', units)), '{}') FROM test_conversions conv LEFT JOIN units ON conv.uom_id = units.id WHERE conv.item_id = test_items.id) AS conversions FROM test_recipe_items items LEFT JOIN test_items ON items.item_id = test_items.id LEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.id LEFT JOIN units ON units.id = COALESCE(test_item_info.uom, items.uom) WHERE items.rp_id = (SELECT passed_id FROM passed_id) ORDER BY items.item_name ASC )SELECT (SELECT passed_id FROM passed_id) AS passed_id, test_recipes.*, logins.username as author, (SELECT COALESCE(array_agg(row_to_json(ris)), '{}') FROM cte_recipe_items ris) AS recipe_itemsFROM test_recipesJOIN logins ON test_recipes.author = logins.idWHERE test_recipes.id=(SELECT passed_id FROM passed_id)') -2025-04-12 19:41:28.073518 --- ERROR --- DatabaseError(message='can't adapt type 'dict'', - payload=('%024600017008%', 1, 'sku', 'Kosher salt', {'id': 1, 'plural': 'pinches', 'single': ' pinch', 'fullname': ' Pinch', 'description': ' Less than 1/8 teaspoon.'}, 1.0, 141, '{}'), - sql='INSERT INTO main_recipe_items(uuid, rp_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-12 19:41:29.705915 --- ERROR --- DatabaseError(message='can't adapt type 'dict'', - payload=('%024600017008%', 1, 'sku', 'Kosher salt', {'id': 1, 'plural': 'pinches', 'single': ' pinch', 'fullname': ' Pinch', 'description': ' Less than 1/8 teaspoon.'}, 1.0, 141, '{}'), - sql='INSERT INTO main_recipe_items(uuid, rp_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-12 19:41:30.665242 --- ERROR --- DatabaseError(message='can't adapt type 'dict'', - payload=('%024600017008%', 1, 'sku', 'Kosher salt', {'id': 1, 'plural': 'pinches', 'single': ' pinch', 'fullname': ' Pinch', 'description': ' Less than 1/8 teaspoon.'}, 1.0, 141, '{}'), - sql='INSERT INTO main_recipe_items(uuid, rp_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-12 19:41:30.856239 --- ERROR --- DatabaseError(message='can't adapt type 'dict'', - payload=('%024600017008%', 1, 'sku', 'Kosher salt', {'id': 1, 'plural': 'pinches', 'single': ' pinch', 'fullname': ' Pinch', 'description': ' Less than 1/8 teaspoon.'}, 1.0, 141, '{}'), - sql='INSERT INTO main_recipe_items(uuid, rp_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-12 19:41:32.196396 --- ERROR --- DatabaseError(message='can't adapt type 'dict'', - payload=('%024600017008%', 1, 'sku', 'Kosher salt', {'id': 1, 'plural': 'pinches', 'single': ' pinch', 'fullname': ' Pinch', 'description': ' Less than 1/8 teaspoon.'}, 1.0, 141, '{}'), - sql='INSERT INTO main_recipe_items(uuid, rp_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-12 19:41:32.490794 --- ERROR --- DatabaseError(message='can't adapt type 'dict'', - payload=('%024600017008%', 1, 'sku', 'Kosher salt', {'id': 1, 'plural': 'pinches', 'single': ' pinch', 'fullname': ' Pinch', 'description': ' Less than 1/8 teaspoon.'}, 1.0, 141, '{}'), - sql='INSERT INTO main_recipe_items(uuid, rp_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-12 19:41:32.801129 --- ERROR --- DatabaseError(message='can't adapt type 'dict'', - payload=('%024600017008%', 1, 'sku', 'Kosher salt', {'id': 1, 'plural': 'pinches', 'single': ' pinch', 'fullname': ' Pinch', 'description': ' Less than 1/8 teaspoon.'}, 1.0, 141, '{}'), - sql='INSERT INTO main_recipe_items(uuid, rp_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-12 19:41:33.025698 --- ERROR --- DatabaseError(message='can't adapt type 'dict'', - payload=('%024600017008%', 1, 'sku', 'Kosher salt', {'id': 1, 'plural': 'pinches', 'single': ' pinch', 'fullname': ' Pinch', 'description': ' Less than 1/8 teaspoon.'}, 1.0, 141, '{}'), - sql='INSERT INTO main_recipe_items(uuid, rp_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-12 19:41:33.378933 --- ERROR --- DatabaseError(message='can't adapt type 'dict'', - payload=('%024600017008%', 1, 'sku', 'Kosher salt', {'id': 1, 'plural': 'pinches', 'single': ' pinch', 'fullname': ' Pinch', 'description': ' Less than 1/8 teaspoon.'}, 1.0, 141, '{}'), - sql='INSERT INTO main_recipe_items(uuid, rp_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-12 19:41:33.548775 --- ERROR --- DatabaseError(message='can't adapt type 'dict'', - payload=('%024600017008%', 1, 'sku', 'Kosher salt', {'id': 1, 'plural': 'pinches', 'single': ' pinch', 'fullname': ' Pinch', 'description': ' Less than 1/8 teaspoon.'}, 1.0, 141, '{}'), - sql='INSERT INTO main_recipe_items(uuid, rp_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-12 19:41:33.707772 --- ERROR --- DatabaseError(message='can't adapt type 'dict'', - payload=('%024600017008%', 1, 'sku', 'Kosher salt', {'id': 1, 'plural': 'pinches', 'single': ' pinch', 'fullname': ' Pinch', 'description': ' Less than 1/8 teaspoon.'}, 1.0, 141, '{}'), - sql='INSERT INTO main_recipe_items(uuid, rp_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-12 19:41:33.860014 --- ERROR --- DatabaseError(message='can't adapt type 'dict'', - payload=('%024600017008%', 1, 'sku', 'Kosher salt', {'id': 1, 'plural': 'pinches', 'single': ' pinch', 'fullname': ' Pinch', 'description': ' Less than 1/8 teaspoon.'}, 1.0, 141, '{}'), - sql='INSERT INTO main_recipe_items(uuid, rp_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-12 19:41:34.045904 --- ERROR --- DatabaseError(message='can't adapt type 'dict'', - payload=('%024600017008%', 1, 'sku', 'Kosher salt', {'id': 1, 'plural': 'pinches', 'single': ' pinch', 'fullname': ' Pinch', 'description': ' Less than 1/8 teaspoon.'}, 1.0, 141, '{}'), - sql='INSERT INTO main_recipe_items(uuid, rp_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-12 19:41:34.213021 --- ERROR --- DatabaseError(message='can't adapt type 'dict'', - payload=('%024600017008%', 1, 'sku', 'Kosher salt', {'id': 1, 'plural': 'pinches', 'single': ' pinch', 'fullname': ' Pinch', 'description': ' Less than 1/8 teaspoon.'}, 1.0, 141, '{}'), - sql='INSERT INTO main_recipe_items(uuid, rp_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-12 19:41:34.384538 --- ERROR --- DatabaseError(message='can't adapt type 'dict'', - payload=('%024600017008%', 1, 'sku', 'Kosher salt', {'id': 1, 'plural': 'pinches', 'single': ' pinch', 'fullname': ' Pinch', 'description': ' Less than 1/8 teaspoon.'}, 1.0, 141, '{}'), - sql='INSERT INTO main_recipe_items(uuid, rp_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-12 19:41:34.540850 --- ERROR --- DatabaseError(message='can't adapt type 'dict'', - payload=('%024600017008%', 1, 'sku', 'Kosher salt', {'id': 1, 'plural': 'pinches', 'single': ' pinch', 'fullname': ' Pinch', 'description': ' Less than 1/8 teaspoon.'}, 1.0, 141, '{}'), - sql='INSERT INTO main_recipe_items(uuid, rp_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-12 19:42:38.639831 --- ERROR --- DatabaseError(message='can't adapt type 'dict'', - payload=('%024600017008%', 1, 'sku', 'Kosher salt', {'id': 1, 'plural': 'pinches', 'single': ' pinch', 'fullname': ' Pinch', 'description': ' Less than 1/8 teaspoon.'}, 1.0, 141, '{}'), - sql='INSERT INTO main_recipe_items(uuid, rp_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-12 19:43:17.295673 --- ERROR --- DatabaseError(message='can't adapt type 'dict'', - payload=('%024600017008%', 1, 'sku', 'Kosher salt', {'id': 1, 'plural': 'pinches', 'single': ' pinch', 'fullname': ' Pinch', 'description': ' Less than 1/8 teaspoon.'}, 1.0, 141, '{}'), - sql='INSERT INTO main_recipe_items(uuid, rp_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-12 19:43:45.390676 --- ERROR --- DatabaseError(message='can't adapt type 'dict'', - payload=('%024600017008%', 1, 'sku', 'Kosher salt', {'id': 1, 'plural': 'pinches', 'single': ' pinch', 'fullname': ' Pinch', 'description': ' Less than 1/8 teaspoon.'}, 1.0, 141, '{}'), - sql='INSERT INTO main_recipe_items(uuid, rp_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-13 10:06:16.130857 --- ERROR --- DatabaseError(message='unsupported format character ';' (0x3b) at index 42', - payload=(), - sql='SELECT * FROM test_zones LIMIT %s OFFSET %;') -2025-04-17 08:07:14.828153 --- ERROR --- DatabaseError(message='invalid input syntax for type integer: "ShelfA"LINE 17: @ShelfA', '6', 'ShelfA') ^', - payload=('\n \n \n \n \n \n \n \n \n \n \n \n \n \n @ShelfA', '6', 'ShelfA'), - sql='INSERT INTO test_zones(name, description, site_id) VALUES (%s, %s, %s) RETURNING *;') -2025-04-17 08:09:29.519938 --- ERROR --- DatabaseError(message='invalid input syntax for type integer: "ShelfA"LINE 17: @ShelfA', '6', 'ShelfA') ^', - payload=('\n \n \n \n \n \n \n \n \n \n \n \n \n \n @ShelfA', '6', 'ShelfA'), - sql='INSERT INTO test_zones(name, description, site_id) VALUES (%s, %s, %s) RETURNING *;') -2025-04-17 08:12:23.901770 --- ERROR --- DatabaseError(message='value too long for type character varying(32)', - payload=('\n \n \n \n \n \n \n \n \n \n \n \n \n \n ', 'test', 2), - sql='INSERT INTO test_zones(name, description, site_id) VALUES (%s, %s, %s) RETURNING *;') -2025-04-17 08:13:11.019738 --- ERROR --- DatabaseError(message='value too long for type character varying(32)', - payload=('\n \n \n \n \n \n \n \n \n \n \n \n \n \n ', 'test', 2), - sql='INSERT INTO test_zones(name, description, site_id) VALUES (%s, %s, %s) RETURNING *;') -2025-04-17 08:15:02.629959 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_zones_name_key"DETAIL: Key (name)=(KITCHEN) already exists.', - payload=('KITCHEN', 'test', 2), - sql='INSERT INTO test_zones(name, description, site_id) VALUES (%s, %s, %s) RETURNING *;') -2025-04-17 08:16:00.387539 --- ERROR --- DatabaseError(message='insert or update on table "test_zones" violates foreign key constraint "fk_site"DETAIL: Key (site_id)=(2) is not present in table "sites".', - payload=('KITCHEN@test', 'test', 2), - sql='INSERT INTO test_zones(name, description, site_id) VALUES (%s, %s, %s) RETURNING *;') -2025-04-17 08:16:53.559749 --- ERROR --- DatabaseError(message='insert or update on table "test_zones" violates foreign key constraint "fk_site"DETAIL: Key (site_id)=(2) is not present in table "sites".', - payload=('KITCHEN@Fridge', 'Fridge', 2), - sql='INSERT INTO test_zones(name, description, site_id) VALUES (%s, %s, %s) RETURNING *;') -2025-04-17 13:33:53.682228 --- ERROR --- DatabaseError(message='tuple index out of range', - payload=(), - sql='INSERT INTO test_locations(uuid, name, zone_id) VALUES (%s, %s, %s) RETURNING *;') -2025-04-17 17:35:40.178418 --- ERROR --- DatabaseError(message='syntax error at or near "20"LINE 1: WITH 20 AS passed_id, ^', - payload=(20, 20, 0), - sql='WITH %s AS passed_id, cte_item_locations AS ( SELECT DISTINCT ils.zone_id FROM test_item_locations ils WHERE ils.part_id = passed_id; )SELECT DISTINCT zone.* FROM cte_item_locations cilJOIN test_zones zone ON cil.zone_id = zone.idLIMIT %s OFFSET %s;') -2025-04-17 17:36:49.614637 --- ERROR --- DatabaseError(message='syntax error at or near ";"LINE 4: WHERE ils.part_id = passed_id; ^', - payload=(20, 20, 0), - sql='WITH passed_id AS (SELECT %s as passed_id), cte_item_locations AS ( SELECT DISTINCT ils.zone_id FROM test_item_locations ils WHERE ils.part_id = passed_id; )SELECT DISTINCT zone.* FROM cte_item_locations cilJOIN test_zones zone ON cil.zone_id = zone.idLIMIT %s OFFSET %s;') -2025-04-17 17:37:05.249411 --- ERROR --- DatabaseError(message='column ils.zone_id does not existLINE 3: SELECT DISTINCT ils.zone_id FROM test_item_locations... ^', - payload=(20, 20, 0), - sql='WITH passed_id AS (SELECT %s as passed_id), cte_item_locations AS ( SELECT DISTINCT ils.zone_id FROM test_item_locations ils WHERE ils.part_id = passed_id )SELECT DISTINCT zone.* FROM cte_item_locations cilJOIN test_zones zone ON cil.zone_id = zone.idLIMIT %s OFFSET %s;') -2025-04-17 17:48:36.064425 --- ERROR --- DatabaseError(message='column "passed_id" does not existLINE 4: WHERE ils.part_id = passed_id ^', - payload=(20, 20, 0), - sql='WITH passed_id AS (SELECT %s as passed_id), cte_item_locations AS ( SELECT DISTINCT ils.location_id FROM test_item_locations ils WHERE ils.part_id = passed_id ), cte_locations AS ( SELECT DISTINCT locations.zone_id FROM test_locations locations WHERE locations.id IN (SELECT location_id FROM cte_item_locations) )SELECT DISTINCT zone.* FROM cte_locations cilJOIN test_zones zone ON cil.zone_id = zone.idLIMIT %s OFFSET %s;') -2025-04-17 17:48:59.073548 --- ERROR --- DatabaseError(message='syntax error at or near "20"LINE 1: WITH 20 AS passed_id, ^', - payload=(20, 20, 0), - sql='WITH passed_id AS (SELECT %s as passed_id), cte_item_locations AS ( SELECT DISTINCT ils.location_id FROM test_item_locations ils WHERE ils.part_id = (SELECT passed_id FROM passed_id) ), cte_locations AS ( SELECT DISTINCT locations.zone_id FROM test_locations locations WHERE locations.id IN (SELECT location_id FROM cte_item_locations) )SELECT DISTINCT zone.* FROM cte_locations cilJOIN test_zones zone ON cil.zone_id = zone.idLIMIT %s OFFSET %s;') -2025-04-17 17:50:47.491564 --- ERROR --- DatabaseError(message='syntax error at or near "20"LINE 1: WITH 20 AS passed_id, ^', - payload=(20, 20, 0), - sql='WITH passed_id AS (SELECT %s AS passed_id), cte_item_locations AS ( SELECT DISTINCT ils.location_id FROM test_item_locations ils WHERE ils.part_id = (SELECT passed_id FROM passed_id) ), cte_locations AS ( SELECT DISTINCT locations.zone_id FROM test_locations locations WHERE locations.id IN (SELECT location_id FROM cte_item_locations) )SELECT DISTINCT zone.* FROM cte_locations cilJOIN test_zones zone ON cil.zone_id = zone.idLIMIT %s OFFSET %s;') -2025-04-19 15:30:08.126535 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_receipts_receipt_id_key"DETAIL: Key (receipt_id)=(SIR-00000012) already exists.', - payload=('SIR-00000012', 'Unresolved', datetime.datetime(2025, 4, 19, 15, 29, 27, 691584), 1, 1, '{}'), - sql='INSERT INTO test_receipts(receipt_id, receipt_status, date_submitted, submitted_by, vendor_id, files) VALUES (%s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-19 16:06:21.543923 --- ERROR --- DatabaseError(message=''int' object is not iterable', - payload=(25, 0), - sql='SELECT * FROM test_items WHERE row_type = 'list' LIMIT %s OFFSET %s;') -2025-04-19 18:57:04.630250 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_logistics_info_barcode_key"DETAIL: Key (barcode)=(%6111031005064%) already exists.', - payload=('%6111031005064%', 1, 1, 1, 1), - sql='INSERT INTO test_logistics_info(barcode, primary_location, primary_zone, auto_issue_location, auto_issue_zone) VALUES (%s, %s, %s, %s, %s) RETURNING *;') -2025-04-19 19:30:10.634447 --- ERROR --- DatabaseError(message='syntax error at or near "'total_qoh'"LINE 16: ORDER BY test_items.'total_qoh' ASC ^', - payload=('', 'total_qoh', 50, 200), - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM test_item_locations mil JOIN test_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT test_items.*, row_to_json(test_item_info.*) as item_info, sum_cte.total_sum as total_qoh, (SELECT COALESCE(row_to_json(u), '{}') FROM units as u WHERE u.id=test_item_info.uom) as uomFROM test_itemsLEFT JOIN sum_cte ON test_items.id = sum_cte.idLEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.idWHERE test_items.search_string LIKE '%%' || %s || '%%'ORDER BY test_items.%s ASCLIMIT %s OFFSET %s;') -2025-04-19 19:30:46.113871 --- ERROR --- DatabaseError(message='not all arguments converted during string formatting', - payload=('', 'id', 50, 0), - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM test_item_locations mil JOIN test_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT test_items.*, row_to_json(test_item_info.*) as item_info, sum_cte.total_sum as total_qoh, (SELECT COALESCE(row_to_json(u), '{}') FROM units as u WHERE u.id=test_item_info.uom) as uomFROM test_itemsLEFT JOIN sum_cte ON test_items.id = sum_cte.idLEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.idWHERE test_items.search_string LIKE '%%' || %s || '%%'ORDER BY test_items.? ASCLIMIT %s OFFSET %s;') -2025-04-19 19:32:19.050185 --- ERROR --- DatabaseError(message='syntax error at or near "'id'"LINE 16: ORDER BY test_items.'id' ASC ^', - payload=('', 'id', 50, 0), - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM test_item_locations mil JOIN test_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT test_items.*, row_to_json(test_item_info.*) as item_info, sum_cte.total_sum as total_qoh, (SELECT COALESCE(row_to_json(u), '{}') FROM units as u WHERE u.id=test_item_info.uom) as uomFROM test_itemsLEFT JOIN sum_cte ON test_items.id = sum_cte.idLEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.idWHERE test_items.search_string LIKE '%%' || %s || '%%'ORDER BY test_items.%s ASCLIMIT %s OFFSET %s;') -2025-04-19 19:34:18.066682 --- ERROR --- DatabaseError(message='not all arguments converted during string formatting', - payload=('', 50, 0, 'id'), - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM test_item_locations mil JOIN test_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT test_items.*, row_to_json(test_item_info.*) as item_info, sum_cte.total_sum as total_qoh, (SELECT COALESCE(row_to_json(u), '{}') FROM units as u WHERE u.id=test_item_info.uom) as uomFROM test_itemsLEFT JOIN sum_cte ON test_items.id = sum_cte.idLEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.idWHERE test_items.search_string LIKE '%%' || %s || '%%'ORDER BY test_items.id ASCLIMIT %s OFFSET %s;') -2025-04-19 19:35:13.155663 --- ERROR --- DatabaseError(message='string index out of range', - payload=id, - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM test_item_locations mil JOIN test_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT test_items.*, row_to_json(test_item_info.*) as item_info, sum_cte.total_sum as total_qoh, (SELECT COALESCE(row_to_json(u), '{}') FROM units as u WHERE u.id=test_item_info.uom) as uomFROM test_itemsLEFT JOIN sum_cte ON test_items.id = sum_cte.idLEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.idWHERE test_items.search_string LIKE '%%' || %s || '%%'ORDER BY test_items.id ASCLIMIT %s OFFSET %s;') -2025-04-19 19:35:48.262338 --- ERROR --- DatabaseError(message='string index out of range', - payload=id, - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM test_item_locations mil JOIN test_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT test_items.*, row_to_json(test_item_info.*) as item_info, sum_cte.total_sum as total_qoh, (SELECT COALESCE(row_to_json(u), '{}') FROM units as u WHERE u.id=test_item_info.uom) as uomFROM test_itemsLEFT JOIN sum_cte ON test_items.id = sum_cte.idLEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.idWHERE test_items.search_string LIKE '%%' || %s || '%%'ORDER BY test_items.id ASCLIMIT %s OFFSET %s;') -2025-04-19 19:36:33.407176 --- ERROR --- DatabaseError(message='column test_items.total_qoh does not existLINE 16: ORDER BY test_items.total_qoh ASC ^', - payload=['', 50, 100], - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM test_item_locations mil JOIN test_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT test_items.*, row_to_json(test_item_info.*) as item_info, sum_cte.total_sum as total_qoh, (SELECT COALESCE(row_to_json(u), '{}') FROM units as u WHERE u.id=test_item_info.uom) as uomFROM test_itemsLEFT JOIN sum_cte ON test_items.id = sum_cte.idLEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.idWHERE test_items.search_string LIKE '%%' || %s || '%%'ORDER BY test_items.total_qoh ASCLIMIT %s OFFSET %s;') -2025-04-19 19:37:57.421608 --- ERROR --- DatabaseError(message='column test_items.total_qoh does not existLINE 16: ORDER BY test_items.total_qoh ASC ^', - payload=['', 50, 50], - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM test_item_locations mil JOIN test_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT test_items.*, row_to_json(test_item_info.*) as item_info, sum_cte.total_sum as total_qoh, (SELECT COALESCE(row_to_json(u), '{}') FROM units as u WHERE u.id=test_item_info.uom) as uomFROM test_itemsLEFT JOIN sum_cte ON test_items.id = sum_cte.idLEFT JOIN test_item_info ON test_items.item_info_id = test_item_info.idWHERE test_items.search_string LIKE '%%' || %s || '%%'ORDER BY test_items.total_qoh ASCLIMIT %s OFFSET %s;') -2025-04-19 20:14:49.445587 --- ERROR --- DatabaseError(message='syntax error at or near "item_name"LINE 16: ORDER BY main_items.id item_name ^', - payload=['', 50, 0], - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM main_item_locations mil JOIN main_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT main_items.*, row_to_json(main_item_info.*) as item_info, sum_cte.total_sum as total_qoh, (SELECT COALESCE(row_to_json(u), '{}') FROM units as u WHERE u.id=main_item_info.uom) as uomFROM main_itemsLEFT JOIN sum_cte ON main_items.id = sum_cte.idLEFT JOIN main_item_info ON main_items.item_info_id = main_item_info.idWHERE main_items.search_string LIKE '%%' || %s || '%%'ORDER BY main_items.id item_nameLIMIT %s OFFSET %s;') -2025-04-19 20:16:09.867711 --- ERROR --- DatabaseError(message='syntax error at or near "total_qoh"LINE 16: ORDER BY main_items.id total_qoh ^', - payload=['', 50, 0], - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM main_item_locations mil JOIN main_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT main_items.*, row_to_json(main_item_info.*) as item_info, sum_cte.total_sum as total_qoh, (SELECT COALESCE(row_to_json(u), '{}') FROM units as u WHERE u.id=main_item_info.uom) as uomFROM main_itemsLEFT JOIN sum_cte ON main_items.id = sum_cte.idLEFT JOIN main_item_info ON main_items.item_info_id = main_item_info.idWHERE main_items.search_string LIKE '%%' || %s || '%%'ORDER BY main_items.id total_qohLIMIT %s OFFSET %s;') -2025-04-19 20:16:38.335617 --- ERROR --- DatabaseError(message='syntax error at or near "item_name"LINE 16: ORDER BY main_items.id item_name ^', - payload=['', 50, 0], - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM main_item_locations mil JOIN main_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT main_items.*, row_to_json(main_item_info.*) as item_info, sum_cte.total_sum as total_qoh, (SELECT COALESCE(row_to_json(u), '{}') FROM units as u WHERE u.id=main_item_info.uom) as uomFROM main_itemsLEFT JOIN sum_cte ON main_items.id = sum_cte.idLEFT JOIN main_item_info ON main_items.item_info_id = main_item_info.idWHERE main_items.search_string LIKE '%%' || %s || '%%'ORDER BY main_items.id item_nameLIMIT %s OFFSET %s;') -2025-04-20 09:54:33.948670 --- ERROR --- DatabaseError(message=''int' object is not iterable', - payload=(), - sql='SELECT * FROM sites') -2025-04-20 19:52:54.986069 --- ERROR --- DatabaseError(message='table "testsite_zones" does not exist', - payload=DROP TABLE TestSite_zones CASCADE;, - sql='zones') -2025-04-20 20:11:14.230809 --- ERROR --- DatabaseError(message='tuple index out of range', - payload=('main', ''), - sql='INSERT INTO testsite_zones(name, description, site_id) VALUES (%s, %s, %s) RETURNING *;') -2025-04-20 20:32:54.096676 --- ERROR --- DatabaseError(message='relation "testsite_sku_prefix" does not existLINE 1: SELECT * FROM TestSite_sku_prefix LIMIT 25 OFFSET 0; ^', - payload=(25, 0), - sql='SELECT * FROM TestSite_sku_prefix LIMIT %s OFFSET %s;') -2025-04-20 20:33:30.514244 --- ERROR --- DatabaseError(message='relation "testsite_item_locations" does not existLINE 3: FROM TestSite_item_locations mil ^', - payload=['', 50, 0], - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM TestSite_item_locations mil JOIN TestSite_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT TestSite_items.*, row_to_json(TestSite_item_info.*) as item_info, sum_cte.total_sum as total_qoh, (SELECT COALESCE(row_to_json(u), '{}') FROM units as u WHERE u.id=TestSite_item_info.uom) as uomFROM TestSite_itemsLEFT JOIN sum_cte ON TestSite_items.id = sum_cte.idLEFT JOIN TestSite_item_info ON TestSite_items.item_info_id = TestSite_item_info.idWHERE TestSite_items.search_string LIKE '%%' || %s || '%%'ORDER BY TestSite_items.id ASCLIMIT %s OFFSET %s;') -2025-04-20 20:34:46.464320 --- ERROR --- DatabaseError(message='relation "testsite_item_locations" does not existLINE 3: FROM TestSite_item_locations mil ^', - payload=['', 50, 0], - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM TestSite_item_locations mil JOIN TestSite_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT TestSite_items.*, row_to_json(TestSite_item_info.*) as item_info, sum_cte.total_sum as total_qoh, (SELECT COALESCE(row_to_json(u), '{}') FROM units as u WHERE u.id=TestSite_item_info.uom) as uomFROM TestSite_itemsLEFT JOIN sum_cte ON TestSite_items.id = sum_cte.idLEFT JOIN TestSite_item_info ON TestSite_items.item_info_id = TestSite_item_info.idWHERE TestSite_items.search_string LIKE '%%' || %s || '%%'ORDER BY TestSite_items.id ASCLIMIT %s OFFSET %s;') -2025-04-20 21:10:59.263962 --- ERROR --- DatabaseError(message='relation "testsite_item_locations" does not existLINE 3: FROM TestSite_item_locations mil ^', - payload=['', 50, 0], - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM TestSite_item_locations mil JOIN TestSite_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT TestSite_items.*, row_to_json(TestSite_item_info.*) as item_info, sum_cte.total_sum as total_qoh, (SELECT COALESCE(row_to_json(u), '{}') FROM units as u WHERE u.id=TestSite_item_info.uom) as uomFROM TestSite_itemsLEFT JOIN sum_cte ON TestSite_items.id = sum_cte.idLEFT JOIN TestSite_item_info ON TestSite_items.item_info_id = TestSite_item_info.idWHERE TestSite_items.search_string LIKE '%%' || %s || '%%'ORDER BY TestSite_items.id ASCLIMIT %s OFFSET %s;') -2025-04-21 14:42:32.973758 --- ERROR --- DatabaseError(message='new row for relation "logins" violates check constraint "logins_email_check"DETAIL: Failing row contains (29, ScannerDeviceB, 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08, test, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, f, {}, device).', - payload=('ScannerDeviceB', '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08', 'test', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', False, '{}', 'device'), - sql='INSERT INTO logins(username, password, email, favorites, unseen_pantry_items, unseen_groups, unseen_shopping_lists, unseen_recipes, seen_pantry_items, seen_groups, seen_shopping_lists, seen_recipes, sites, site_roles, system_admin, flags, row_type) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-21 14:43:23.959085 --- ERROR --- DatabaseError(message='new row for relation "logins" violates check constraint "logins_email_check"DETAIL: Failing row contains (30, ScannerDeviceB, 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08, test, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, f, {}, device).', - payload=('ScannerDeviceB', '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08', 'test', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', False, '{}', 'device'), - sql='INSERT INTO logins(username, password, email, favorites, unseen_pantry_items, unseen_groups, unseen_shopping_lists, unseen_recipes, seen_pantry_items, seen_groups, seen_shopping_lists, seen_recipes, sites, site_roles, system_admin, flags, row_type) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-21 14:44:16.605030 --- ERROR --- DatabaseError(message='new row for relation "logins" violates check constraint "logins_email_check"DETAIL: Failing row contains (31, ScannerDeviceB, 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08, test, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, f, {}, device).', - payload=('ScannerDeviceB', '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08', 'test', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', False, '{}', 'device'), - sql='INSERT INTO logins(username, password, email, favorites, unseen_pantry_items, unseen_groups, unseen_shopping_lists, unseen_recipes, seen_pantry_items, seen_groups, seen_shopping_lists, seen_recipes, sites, site_roles, system_admin, flags, row_type) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-21 14:45:18.122865 --- ERROR --- DatabaseError(message='new row for relation "logins" violates check constraint "logins_email_check"DETAIL: Failing row contains (32, ScannerDeviceB, 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08, test, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, f, {}, device).', - payload=('ScannerDeviceB', '9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08', 'test', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', '{}', False, '{}', 'device'), - sql='INSERT INTO logins(username, password, email, favorites, unseen_pantry_items, unseen_groups, unseen_shopping_lists, unseen_recipes, seen_pantry_items, seen_groups, seen_shopping_lists, seen_recipes, sites, site_roles, system_admin, flags, row_type) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-26 18:29:30.532818 --- ERROR --- DatabaseError(message=''module' object is not callable. Did you mean: 'config.config(...)'?', - payload=(10, 0), - sql='SELECT *, (SELECT COALESCE(array_agg(row_to_json(g)), '{}') FROM main_recipe_items g WHERE rp_id = main_recipes.id) AS rp_items FROM main_recipes LIMIT %s OFFSET %s;') -2025-04-26 21:18:52.710178 --- ERROR --- DatabaseError(message='duplicate key value violates unique constraint "test_recipe_items_uuid_key"DETAIL: Key (uuid)=(%X0031BMH6V%) already exists.', - payload=('%X0031BMH6V%', 3, 'sku', 'Torani Peppermint syrup', 1, 1.0, 2020, '{}'), - sql='INSERT INTO test_recipe_items(uuid, rp_id, item_type, item_name, uom, qty, item_id, links) VALUES (%s, %s, %s, %s, %s, %s, %s, %s) RETURNING *;') -2025-04-27 12:30:18.960407 --- ERROR --- DatabaseError(message=''int' object does not support indexing', - payload=(1, 50, 0), - sql='SELECT * FROM main_transactions WHERE logistics_info_id=%s LIMIT %s OFFSET %s;') -2025-04-27 12:31:44.319424 --- ERROR --- DatabaseError(message=''int' object does not support indexing', - payload=(1, 50, 0), - sql='SELECT * FROM main_transactions WHERE logistics_info_id=%s LIMIT %s OFFSET %s;') -2025-04-27 12:31:54.929695 --- ERROR --- DatabaseError(message=''int' object does not support indexing', - payload=(1, 50, 0), - sql='SELECT * FROM main_transactions WHERE logistics_info_id=%s LIMIT %s OFFSET %s;') -2025-04-27 12:33:02.937669 --- ERROR --- DatabaseError(message=''int' object does not support indexing', - payload=(1, 50, 0), - sql='SELECT * FROM main_transactions WHERE logistics_info_id=%s LIMIT %s OFFSET %s;') -2025-04-27 12:33:44.164898 --- ERROR --- DatabaseError(message=''int' object is not iterable', - payload=(1, 50, 0), - sql='SELECT * FROM main_transactions WHERE logistics_info_id=%s LIMIT %s OFFSET %s;') -2025-04-27 12:33:59.076867 --- ERROR --- DatabaseError(message=''int' object is not iterable', - payload=(1, 50, 0), - sql='SELECT * FROM main_transactions WHERE logistics_info_id=%s LIMIT %s OFFSET %s;') -2025-04-27 12:34:13.060975 --- ERROR --- DatabaseError(message=''int' object is not iterable', - payload=(1, 50, 0), - sql='SELECT * FROM main_transactions WHERE logistics_info_id=%s LIMIT %s OFFSET %s;') -2025-04-27 12:34:27.956278 --- ERROR --- DatabaseError(message=''int' object does not support indexing', - payload=(1, 50, 0), - sql='SELECT * FROM main_transactions WHERE logistics_info_id=%s LIMIT %s OFFSET %s;') -2025-04-27 12:34:37.123332 --- ERROR --- DatabaseError(message=''int' object does not support indexing', - payload=(1, 50, 0), - sql='SELECT * FROM main_transactions WHERE logistics_info_id=%s LIMIT %s OFFSET %s;') -2025-04-27 12:35:10.632770 --- ERROR --- DatabaseError(message=''int' object does not support indexing', - payload=(1, 50, 0), - sql='SELECT * FROM main_transactions WHERE logistics_info_id=%s LIMIT %s OFFSET %s;') -2025-04-27 13:18:16.283058 --- ERROR --- DatabaseError(message='invalid reference to FROM-clause entry for table "main_items"LINE 14: ORDER BY main_items.id ASC ^HINT: Perhaps you meant to reference the table alias "item".', - payload=['', 50, 0], - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM main_item_locations mil JOIN main_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT item.id, item.description, item.item_name, sum_cte.total_sum as total_qoh, u.fullnameFROM main_items itemLEFT JOIN sum_cte ON item.id = sum_cte.idLEFT JOIN main_item_info item_info ON item.item_info_id = item_info.idLEFT JOIN units u ON item_info.uom = u.idWHERE item.search_string LIKE '%%' || %s || '%%'ORDER BY main_items.id ASCLIMIT %s OFFSET %s;') -2025-04-27 13:19:31.121839 --- ERROR --- DatabaseError(message='invalid reference to FROM-clause entry for table "main_items"LINE 14: ORDER BY main_items.id ASC ^HINT: Perhaps you meant to reference the table alias "item".', - payload=['', 50, 0], - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM main_item_locations mil JOIN main_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT item.id, item.description, item.item_name, sum_cte.total_sum as total_qoh, u.fullnameFROM main_items itemLEFT JOIN sum_cte ON item.id = sum_cte.idLEFT JOIN main_item_info item_info ON item.item_info_id = item_info.idLEFT JOIN units u ON item_info.uom = u.idWHERE item.search_string LIKE '%%' || %s || '%%'ORDER BY main_items.id ASCLIMIT %s OFFSET %s;') -2025-04-27 13:19:53.062262 --- ERROR --- DatabaseError(message='invalid reference to FROM-clause entry for table "main_items"LINE 14: ORDER BY main_items.id ASC ^HINT: Perhaps you meant to reference the table alias "item".', - payload=['', 50, 0], - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM main_item_locations mil JOIN main_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT item.id, item.description, item.item_name, sum_cte.total_sum as total_qoh, u.fullnameFROM main_items itemLEFT JOIN sum_cte ON item.id = sum_cte.idLEFT JOIN main_item_info item_info ON item.item_info_id = item_info.idLEFT JOIN units u ON item_info.uom = u.idWHERE item.search_string LIKE '%%' || %s || '%%'ORDER BY main_items.id ASCLIMIT %s OFFSET %s;') -2025-04-27 13:20:02.283977 --- ERROR --- DatabaseError(message='invalid reference to FROM-clause entry for table "main_items"LINE 14: ORDER BY main_items.id ASC ^HINT: Perhaps you meant to reference the table alias "item".', - payload=['', 50, 0], - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM main_item_locations mil JOIN main_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT item.id, item.description, item.item_name, sum_cte.total_sum as total_qoh, u.fullnameFROM main_items itemLEFT JOIN sum_cte ON item.id = sum_cte.idLEFT JOIN main_item_info item_info ON item.item_info_id = item_info.idLEFT JOIN units u ON item_info.uom = u.idWHERE item.search_string LIKE '%%' || %s || '%%'ORDER BY main_items.id ASCLIMIT %s OFFSET %s;') -2025-04-27 13:20:51.587376 --- ERROR --- DatabaseError(message='invalid reference to FROM-clause entry for table "main_items"LINE 14: ORDER BY main_items.id ASC ^HINT: Perhaps you meant to reference the table alias "item".', - payload=['', 50, 0], - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM main_item_locations mil JOIN main_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT item.id, item.description, item.item_name, sum_cte.total_sum as total_qoh, u.fullnameFROM main_items itemLEFT JOIN sum_cte ON item.id = sum_cte.idLEFT JOIN main_item_info item_info ON item.item_info_id = item_info.idLEFT JOIN units u ON item_info.uom = u.idWHERE item.search_string LIKE '%%' || %s || '%%'ORDER BY main_items.id ASCLIMIT %s OFFSET %s;') -2025-04-27 13:21:15.614158 --- ERROR --- DatabaseError(message='invalid reference to FROM-clause entry for table "main_items"LINE 14: ORDER BY main_items.id ASC ^HINT: Perhaps you meant to reference the table alias "item".', - payload=['', 50, 0], - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM main_item_locations mil JOIN main_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT item.id, item.description, item.item_name, sum_cte.total_sum as total_qoh, u.fullnameFROM main_items itemLEFT JOIN sum_cte ON item.id = sum_cte.idLEFT JOIN main_item_info item_info ON item.item_info_id = item_info.idLEFT JOIN units u ON item_info.uom = u.idWHERE item.search_string LIKE '%%' || %s || '%%'ORDER BY main_items.id ASCLIMIT %s OFFSET %s;') -2025-04-27 13:22:17.783755 --- ERROR --- DatabaseError(message='invalid reference to FROM-clause entry for table "main_items"LINE 14: ORDER BY main_items.id ASC ^HINT: Perhaps you meant to reference the table alias "item".', - payload=['', 50, 0], - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM main_item_locations mil JOIN main_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT item.id, item.description, item.item_name, sum_cte.total_sum as total_qoh, u.fullnameFROM main_items itemLEFT JOIN sum_cte ON item.id = sum_cte.idLEFT JOIN main_item_info item_info ON item.item_info_id = item_info.idLEFT JOIN units u ON item_info.uom = u.idWHERE item.search_string LIKE '%%' || %s || '%%'ORDER BY main_items.id ASCLIMIT %s OFFSET %s;') -2025-04-27 13:32:50.773052 --- ERROR --- DatabaseError(message='syntax error at or near "5"LINE 15: LIMIT 5 OFFSET 5; ^', - payload=['', 5, 5], - sql='WITH sum_cte AS ( SELECT mi.id, SUM(mil.quantity_on_hand)::FLOAT8 AS total_sum FROM main_item_locations mil JOIN main_items mi ON mil.part_id = mi.id GROUP BY mi.id )SELECT item.id, item.description, item.item_name, sum_cte.total_sum as total_qoh, u.fullnameFROM main_items itemLEFT JOIN sum_cte ON item.id = sum_cte.idLEFT JOIN main_item_info item_info ON item.item_info_id = item_info.idLEFT JOIN units u ON item_info.uom = u.idWHERE item.search_string LIKE '%%' || %s || '%%'ORDER BY item. LIMIT %s OFFSET %s;') -2025-04-27 16:28:48.252706 --- ERROR --- DatabaseError(message='tuple index out of range', - payload=(2, 0), - sql='SELECT item.id, item.barcode, item.item_name FROM test_items itemWHERE item.search_string LIKE '%%' || %s || '%%'LIMIT %s OFFSET %s;') -2025-04-27 17:37:09.434012 --- ERROR --- DatabaseError(message='tupleDictionaryFactory() missing 1 required positional argument: 'row'', - payload=(25, 0), - sql='SELECT * FROM test_brands LIMIT %s OFFSET %s;') -2025-04-27 18:14:06.368648 --- ERROR --- DatabaseError(message='can't adapt type 'builtin_function_or_method'', - payload=(,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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_conversions AS ( SELECT test_conversions.id as conv_id, test_conversions.conv_factor as conv_factor, units.* as uom FROM test_conversions LEFT JOIN units ON test_conversions.uom_id = units.id WHERE test_conversions.item_id = (SELECT passed_id FROM passed_id) ), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom, COALESCE((SELECT json_agg(convs) FROM cte_conversions convs), '[]'::json) AS conversions, COALESCE((SELECT json_agg(p.*) FROM test_sku_prefix as p WHERE p.id = ANY(test_item_info.prefixes)), '[]'::json) as prefixes 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-04-27 18:16:25.663980 --- ERROR --- DatabaseError(message='can't adapt type 'builtin_function_or_method'', - payload=(,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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_conversions AS ( SELECT test_conversions.id as conv_id, test_conversions.conv_factor as conv_factor, units.* as uom FROM test_conversions LEFT JOIN units ON test_conversions.uom_id = units.id WHERE test_conversions.item_id = (SELECT passed_id FROM passed_id) ), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom, COALESCE((SELECT json_agg(convs) FROM cte_conversions convs), '[]'::json) AS conversions, COALESCE((SELECT json_agg(p.*) FROM test_sku_prefix as p WHERE p.id = ANY(test_item_info.prefixes)), '[]'::json) as prefixes 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-04-27 18:16:52.992559 --- ERROR --- DatabaseError(message='can't adapt type 'builtin_function_or_method'', - payload=(,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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_conversions AS ( SELECT test_conversions.id as conv_id, test_conversions.conv_factor as conv_factor, units.* as uom FROM test_conversions LEFT JOIN units ON test_conversions.uom_id = units.id WHERE test_conversions.item_id = (SELECT passed_id FROM passed_id) ), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom, COALESCE((SELECT json_agg(convs) FROM cte_conversions convs), '[]'::json) AS conversions, COALESCE((SELECT json_agg(p.*) FROM test_sku_prefix as p WHERE p.id = ANY(test_item_info.prefixes)), '[]'::json) as prefixes 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-04-27 18:17:17.600118 --- ERROR --- DatabaseError(message='can't adapt type 'builtin_function_or_method'', - payload=(,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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_conversions AS ( SELECT test_conversions.id as conv_id, test_conversions.conv_factor as conv_factor, units.* as uom FROM test_conversions LEFT JOIN units ON test_conversions.uom_id = units.id WHERE test_conversions.item_id = (SELECT passed_id FROM passed_id) ), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom, COALESCE((SELECT json_agg(convs) FROM cte_conversions convs), '[]'::json) AS conversions, COALESCE((SELECT json_agg(p.*) FROM test_sku_prefix as p WHERE p.id = ANY(test_item_info.prefixes)), '[]'::json) as prefixes 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-04-27 18:18:01.277027 --- ERROR --- DatabaseError(message='can't adapt type 'builtin_function_or_method'', - payload=(,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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_conversions AS ( SELECT test_conversions.id as conv_id, test_conversions.conv_factor as conv_factor, units.* as uom FROM test_conversions LEFT JOIN units ON test_conversions.uom_id = units.id WHERE test_conversions.item_id = (SELECT passed_id FROM passed_id) ), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom, COALESCE((SELECT json_agg(convs) FROM cte_conversions convs), '[]'::json) AS conversions, COALESCE((SELECT json_agg(p.*) FROM test_sku_prefix as p WHERE p.id = ANY(test_item_info.prefixes)), '[]'::json) as prefixes 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-04-27 18:18:08.507049 --- ERROR --- DatabaseError(message='can't adapt type 'builtin_function_or_method'', - payload=(,), - sql='WITH passed_id AS (SELECT %s AS passed_id), 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_conversions AS ( SELECT test_conversions.id as conv_id, test_conversions.conv_factor as conv_factor, units.* as uom FROM test_conversions LEFT JOIN units ON test_conversions.uom_id = units.id WHERE test_conversions.item_id = (SELECT passed_id FROM passed_id) ), cte_item_info AS ( SELECT test_item_info.*, row_to_json(units.*) as uom, COALESCE((SELECT json_agg(convs) FROM cte_conversions convs), '[]'::json) AS conversions, COALESCE((SELECT json_agg(p.*) FROM test_sku_prefix as p WHERE p.id = ANY(test_item_info.prefixes)), '[]'::json) as prefixes 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-04-27 18:18:39.724692 --- ERROR --- DatabaseError(message='can't adapt type 'builtin_function_or_method'', - payload={'id': , 'update': {'brand': 1066, 'item_type': 'FOOD_PLU'}}, - sql='UPDATE test_items SET brand = %s, item_type = %s WHERE id=%s RETURNING *;') -2025-04-27 18:19:35.001736 --- ERROR --- DatabaseError(message='can't adapt type 'builtin_function_or_method'', - payload={'id': , 'update': {'brand': 1066, 'item_type': 'FOOD_PLU'}}, - sql='UPDATE test_items SET brand = %s, item_type = %s WHERE id=%s RETURNING *;') -2025-04-27 18:20:02.983151 --- ERROR --- DatabaseError(message='can't adapt type 'builtin_function_or_method'', - payload={'id': , 'update': {'brand': 1066, 'item_type': 'FOOD_PLU'}}, - sql='UPDATE test_items SET brand = %s, item_type = %s WHERE id=%s RETURNING *;') -2025-04-28 06:46:35.145654 --- ERROR --- DatabaseError(message='can't adapt type 'builtin_function_or_method'', - payload={'id': , 'update': {'conv_factor': 3}}, - sql='UPDATE test_itemlinks SET conv_factor = %s WHERE id=%s RETURNING *;') \ No newline at end of file diff --git a/database.md b/database.md deleted file mode 100644 index c5ed5d0..0000000 --- a/database.md +++ /dev/null @@ -1,18 +0,0 @@ -# Database Management - -- the way I look at it is - -## Adding a new item -- item info, food info, logistics info created using the barcode and then attached to item. -- Transcation created against logistics info description "Item added", qty X into primary location within logistics info. -- QTY of X inserted into sites default location with {logistics_info_id: X} -- returns location_id and adds the location to the logistics info, location_data {location_id: X} - - - - - -## Associating a item to a linkedItem - -All transaction history needs to have its associated logistic id changed to the new number (barcode stays the same?) and the new items location info and qty on hand needs to be updated. - diff --git a/database_admin.py b/database_admin.py deleted file mode 100644 index 2b6f3bc..0000000 --- a/database_admin.py +++ /dev/null @@ -1,18 +0,0 @@ -import postsqldb -import psycopg2 -import config - -def selectLoginsUser(login_id): - database_config = config.config() - try: - with psycopg2.connect(**database_config) as conn: - with open("sql/SELECT/admin/selectLoginsUser.sql", "r") as file: - sql = file.read() - with conn.cursor() as cur: - cur.execute(sql, (login_id,)) - user = cur.fetchone() - if user: - user = postsqldb.tupleDictionaryFactory(cur.description, user) - return user - except Exception as error: - raise postsqldb.DatabaseError(error, login_id, sql) \ No newline at end of file diff --git a/external_API.py b/external_API.py deleted file mode 100644 index 64ac9a6..0000000 --- a/external_API.py +++ /dev/null @@ -1,120 +0,0 @@ -from flask import Blueprint, request, render_template, redirect, session, url_for, send_file, jsonify, Response -import psycopg2, math, json, datetime, main, copy, requests, process, database, pprint, MyDataclasses -from config import config, sites_config -from main import unfoldCostLayers -from threading import Thread -from queue import Queue -import time, process -from user_api import login_required -import webpush - -external_api = Blueprint('external', __name__) - -@external_api.route('/external/getItemLocations', methods=["GET"]) -def getItemLocations(): - recordset = [] - count = 0 - if request.method == "GET": - item_id = int(request.args.get('id', 1)) - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 10)) - site_name = session['selected_site'] - offset = (page - 1) * limit - database_config = config() - with psycopg2.connect(**database_config) as conn: - recordset, count = database.getItemLocations(conn, site_name, (item_id, limit, offset), convert=True) - return jsonify({"locations":recordset, "end":math.ceil(count/limit), "error":False, "message":"item fetched succesfully!"}) - return jsonify({"locations":recordset, "end": math.ceil(count/limit), "error":True, "message":"There was an error with this GET statement"}) - -@external_api.route('/external/getItem', methods=["GET"]) -def getItem(): - record = {} - if request.method == "GET": - item_id = int(request.args.get('id', 1)) - site_name = session['selected_site'] - database_config = config() - with psycopg2.connect(**database_config) as conn: - record = database.getItemAllByID(conn, site_name, (item_id, ), convert=True) - return jsonify({"item":record, "error":False, "message":"item fetched succesfully!"}) - return jsonify({"item":record, "error":True, "message":"There was an error with this GET statement"}) - -@external_api.route('/external/getItem/barcode', methods=["GET"]) -def getItemBarcode(): - record = {} - if request.method == "GET": - item_barcode = f"%{str(request.args.get('barcode', 1))}%" - site_name = session['selected_site'] - database_config = config() - with psycopg2.connect(**database_config) as conn: - record = database.getItemAllByBarcode(conn, site_name, (item_barcode, ), convert=True) - if record == {}: - return jsonify({"item":None, "error":True, "message":"Item either does not exist or there was a larger problem!"}) - else: - return jsonify({"item":record, "error":False, "message":"item fetched succesfully!"}) - return jsonify({"item":record, "error":True, "message":"There was an error with this GET statement"}) - -@external_api.route('/external/getModalItems', methods=["GET"]) -@login_required -def getModalItems(): - recordset = [] - count = {'count': 0} - if request.method == "GET": - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 10)) - search_string = request.args.get('search_string', '') - site_name = session['selected_site'] - offset = (page - 1) * limit - database_config = config() - with psycopg2.connect(**database_config) as conn: - payload = (search_string, limit, offset) - recordset, count = database.getItemsForModal(conn, site_name, payload, convert=True) - return jsonify({"items":recordset, "end":math.ceil(count['count']/limit), "error":False, "message":"items fetched succesfully!"}) - return jsonify({"items":recordset, "end":math.ceil(count['count']/limit), "error":True, "message":"There was an error with this GET statement"}) - -@external_api.route('/external/postTransaction', methods=["POST"]) -def post_transaction(): - if request.method == "POST": - database_config = config() - with psycopg2.connect(**database_config) as conn: - result = process.postTransaction( - conn=conn, - site_name=session['selected_site'], - user_id=session['user_id'], - data=dict(request.json) - ) - return jsonify(result) - return jsonify({"error":True, "message":"There was an error with this POST statement"}) - - -@external_api.route('/external/postReceipt', methods=["POST"]) -def post_receipt(): - if request.method == "POST": - site_name = session['selected_site'] - user_id = session['user_id'] - database_config = config() - with psycopg2.connect(**database_config) as conn: - items = request.json['items'] - receipt_id = database.request_receipt_id(conn, site_name) - receipt_id = f"SIR-{receipt_id}" - receipt = MyDataclasses.ReceiptPayload( - receipt_id=receipt_id, - submitted_by=user_id - ) - receipt = database.insertReceiptsTuple(conn, site_name, receipt.payload(), convert=True) - - for item in items: - - receipt_item = MyDataclasses.ReceiptItemPayload( - type=item['type'], - receipt_id=receipt['id'], - barcode=item['item']['barcode'], - name=item['item']['item_name'], - qty=item['item']['qty'], - uom=item['item']['uom'], - data=item['item']['data'] - ) - database.insertReceiptItemsTuple(conn, site_name, receipt_item.payload()) - #webpush.push_notifications('New Receipt', f"Receipt {receipt['receipt_id']} was added to Site -> {site_name}!") - webpush.push_ntfy('New Receipt', f"Receipt {receipt['receipt_id']} was added to Site -> {site_name}!") - return jsonify({"error":False, "message":"Transaction Complete!"}) - return jsonify({"error":True, "message":"There was an error with this POST statement"}) \ No newline at end of file diff --git a/group_api.py b/group_api.py deleted file mode 100644 index f0066ee..0000000 --- a/group_api.py +++ /dev/null @@ -1,34 +0,0 @@ -from flask import Blueprint, request, render_template, redirect, session, url_for, send_file, jsonify, Response -import psycopg2, math, json, datetime, main, copy, requests, process, database, pprint, MyDataclasses -from config import config, sites_config -from main import unfoldCostLayers -from user_api import login_required - -groups_api = Blueprint('groups_api', __name__) - -@groups_api.route("/groups") -@login_required -def groups(): - sites = [site[1] for site in main.get_sites(session['user']['sites'])] - return render_template("groups/index.html", - current_site=session['selected_site'], - sites=sites) - -@groups_api.route("/group/") -@login_required -def group(id): - sites = [site[1] for site in main.get_sites(session['user']['sites'])] - return render_template("groups/group.html", id=id, current_site=session['selected_site'], sites=sites) - -@groups_api.route('/groups/getGroups', methods=["GET"]) -def getGroups(): - groups = [] - if request.method == "GET": - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 1)) - offset = (page-1)*limit - database_config = config() - site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - groups, count = database.getGroups(conn, site_name, (limit, offset), convert=True) - return jsonify({'groups': groups, 'end': math.ceil(count/limit), 'error': False, 'message': 'bleh'}) \ No newline at end of file diff --git a/item_API.py b/item_API.py deleted file mode 100644 index b4ebcab..0000000 --- a/item_API.py +++ /dev/null @@ -1,546 +0,0 @@ -from flask import Blueprint, request, render_template, redirect, session, url_for, send_file, jsonify, Response -import psycopg2, math, json, datetime, main, copy, requests, process, database, pprint, MyDataclasses -from config import config, sites_config -from main import unfoldCostLayers -from user_api import login_required -import postsqldb - -items_api = Blueprint('items_api', __name__) - -@items_api.route("/item//itemLink/") -@login_required -def itemLink(parent_id, id): - sites = [site[1] for site in main.get_sites(session['user']['sites'])] - return render_template("items/itemlink.html", current_site=session['selected_site'], sites=sites, proto={'referrer': request.referrer}, id=id) - -@items_api.route("/item/getTransactions", methods=["GET"]) -def getTransactions(): - if request.method == "GET": - recordset = [] - count = 0 - logistics_info_id = int(request.args.get('logistics_info_id', 1)) - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 50)) - site_name = session['selected_site'] - offset = (page - 1) * limit - database_config = config() - with psycopg2.connect(**database_config) as conn: - sql = f"SELECT * FROM {site_name}_transactions WHERE logistics_info_id=%s LIMIT %s OFFSET %s;" - recordset = database.queryTuples(conn, sql, (logistics_info_id, limit, offset), convert=True) - sql = f"SELECT COUNT(*) FROM {site_name}_transactions WHERE logistics_info_id=%s;" - count = database.queryTuple(conn, sql, payload=(logistics_info_id, )) - return jsonify({"transactions": recordset, "end": math.ceil(count[0]/limit), "error": False, "message": ""}) - return jsonify({"transactions": recordset, "end": math.ceil(count[0]/limit), "error": True, "message": "There was an error in your GET request!"}) - -@items_api.route("/item/getTransaction", methods=["GET"]) -def getTransaction(): - transaction = {} - if request.method == "GET": - id = int(request.args.get('id', 1)) - database_config = config() - site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - transaction = database.__selectTuple(conn, site_name, f"{site_name}_transactions", payload=(id, ), convert=True) - return jsonify({"transaction": transaction, "error": False, "message": ""}) - return jsonify({"transaction": transaction, "error": True, "message": "There was an error in your GET request!"}) - -@items_api.route("/item/getItem") -def get_item(): - id = int(request.args.get('id', 1)) - database_config = config() - site_name = session['selected_site'] - item = [] - with psycopg2.connect(**database_config) as conn: - item = database.getItemAllByID(conn, site_name, payload=(id, ), convert=True) - return jsonify(item=item) - -@items_api.route("/item/getItemsWithQOH", methods=['GET']) -@login_required -def pagninate_items(): - pantry_inventory = [] - count = {'count': 0} - if request.method == "GET": - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 10)) - search_string = str(request.args.get('search_text', "")) - sort = request.args.get('sort', "") - order = request.args.get('order', "") - - view = request.args.get('view', "") - site_name = session['selected_site'] - offset = (page - 1) * limit - if sort == 'total_qoh': - sort_order = f"{sort} {order}" - else: - sort_order = f"{site_name}_items.{sort} {order}" - print(sort_order) - database_config = config() - with psycopg2.connect(**database_config) as conn: - pantry_inventory, count = database.getItemsWithQOH(conn, site_name, (search_string, limit, offset, sort_order), convert=True) - - return jsonify({'items': pantry_inventory, "end": math.ceil(count['count']/limit), 'error':False, 'message': 'Items Loaded Successfully!'}) - return jsonify({'items': pantry_inventory, "end": math.ceil(count['count']/limit), 'error':True, 'message': 'There was a problem loading the items!'}) - -@items_api.route('/item/getModalItems', methods=["GET"]) -@login_required -def getModalItems(): - recordset = [] - count = {'count': 0} - if request.method == "GET": - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 10)) - search_string = request.args.get('search_string', '') - site_name = session['selected_site'] - offset = (page - 1) * limit - database_config = config() - with psycopg2.connect(**database_config) as conn: - payload = (search_string, limit, offset) - recordset, count = database.getItemsForModal(conn, site_name, payload, convert=True) - return jsonify({"items":recordset, "end":math.ceil(count['count']/limit), "error":False, "message":"items fetched succesfully!"}) - return jsonify({"items":recordset, "end":math.ceil(count['count']/limit), "error":True, "message":"There was an error with this GET statement"}) - -@items_api.route('/item/getPrefixes', methods=["GET"]) -@login_required -def getModalPrefixes(): - recordset = [] - count = {'count': 0} - if request.method == "GET": - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 10)) - site_name = session['selected_site'] - offset = (page - 1) * limit - database_config = config() - with psycopg2.connect(**database_config) as conn: - payload = (limit, offset) - recordset, count = postsqldb.SKUPrefixTable.paginatePrefixes(conn, site_name, payload, convert=True) - return jsonify({"prefixes":recordset, "end":math.ceil(count/limit), "error":False, "message":"items fetched succesfully!"}) - return jsonify({"prefixes":recordset, "end":math.ceil(count/limit), "error":True, "message":"There was an error with this GET statement"}) - - -@items_api.route('/item/getZones', methods=['GET']) -def getZones(): - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 1)) - database_config = config() - site_name = session['selected_site'] - zones = [] - offset = (page - 1) * limit - payload = (limit, offset) - count = 0 - with psycopg2.connect(**database_config) as conn: - zones, count = database.getZonesWithCount(conn, site_name, payload, convert=True) - print(count, len(zones)) - return jsonify(zones=zones, endpage=math.ceil(count[0]/limit)) - - -@items_api.route('/item/getZonesBySku', methods=["GET"]) -def getZonesbySku(): - if request.method == "GET": - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 1)) - item_id = int(request.args.get('item_id')) - database_config = config() - site_name = session['selected_site'] - zones = [] - offset = (page - 1) * limit - payload = (item_id, limit, offset) - count = 0 - with psycopg2.connect(**database_config) as conn: - zones, count = postsqldb.ZonesTable.paginateZonesBySku(conn, site_name, payload) - print(zones, count) - return jsonify(zones=zones, endpage=math.ceil(count/limit)) - -@items_api.route('/item/getLocationsBySkuZone', methods=['get']) -def getLocationsBySkuZone(): - zone_id = int(request.args.get('zone_id', 1)) - part_id = int(request.args.get('part_id', 1)) - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 1)) - - offset = (page-1)*limit - database_config = config() - site_name = session['selected_site'] - locations = [] - count=0 - with psycopg2.connect(**database_config) as conn: - payload = (part_id, zone_id, limit, offset) - locations, count = postsqldb.LocationsTable.paginateLocationsBySkuZone(conn, site_name, payload) - return jsonify(locations=locations, endpage=math.ceil(count/limit)) - - -@items_api.route('/item/getLocations', methods=['get']) -def getLocationsByZone(): - zone_id = int(request.args.get('zone_id', 1)) - part_id = int(request.args.get('part_id', 1)) - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 1)) - - offset = (page-1)*limit - database_config = config() - site_name = session['selected_site'] - locations = [] - count=0 - with psycopg2.connect(**database_config) as conn: - sql = f"SELECT * FROM {site_name}_locations WHERE zone_id=%s LIMIT %s OFFSET %s;" - locations = database.queryTuples(conn, sql, (zone_id, limit, offset), convert=True) - sql = f"SELECT COUNT(*) FROM {site_name}_locations WHERE zone_id=%s;" - count = database.queryTuple(conn, sql, (zone_id, )) - return jsonify(locations=locations, endpage=math.ceil(count[0]/limit)) - -@items_api.route('/item/getBrands', methods=['GET']) -def getBrands(): - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 1)) - offset = (page-1)*limit - database_config = config() - site_name = session['selected_site'] - brands = [] - count = 0 - with psycopg2.connect(**database_config) as conn: - brands, count = database._paginateTableTuples(conn, site_name, f"{site_name}_brands", (limit, offset), convert=True) - return jsonify(brands=brands, endpage=math.ceil(count['count']/limit)) - -@items_api.route('/item/updateItem', methods=['POST']) -def updateItem(): - if request.method == "POST": - id = request.get_json()['id'] - data = request.get_json()['data'] - - database_config = config() - site_name = session['selected_site'] - - transaction_data = {} - for key in data.keys(): - for key_2 in data[key].keys(): - transaction_data[f"{key_2}_new"] = data[key][key_2] - - with psycopg2.connect(**database_config) as conn: - item = database.getItemAllByID(conn, site_name, (id, ), convert=True) - if 'item_info' in data.keys() and data['item_info'] != {}: - for key in data['item_info'].keys(): - transaction_data[f"{key}_old"] = item['item_info'][key] - item_info_id = item['item_info_id'] - item_info = database.__updateTuple(conn, site_name, f"{site_name}_item_info", {'id': item_info_id, 'update': data['item_info']}, convert=True) - if 'food_info' in data.keys() and data['food_info'] != {}: - for key in data['food_info'].keys(): - transaction_data[f"{key}_old"] = item['food_info'][key] - food_info_id = item['food_info_id'] - print(food_info_id, data['food_info']) - food_info = database.__updateTuple(conn, site_name, f"{site_name}_food_info", {'id': food_info_id, 'update': data['food_info']}, convert=True) - if 'logistics_info' in data.keys() and data['logistics_info'] != {}: - for key in data['logistics_info'].keys(): - transaction_data[f"{key}_old"] = item['logistics_info'][key] - logistics_info_id = item['logistics_info_id'] - print(logistics_info_id, data['logistics_info']) - logistics_info = database.__updateTuple(conn, site_name, f"{site_name}_logistics_info", {'id': logistics_info_id, 'update': data['logistics_info']}, convert=True) - if 'item' in data.keys() and data['item'] != {}: - for key in data['item'].keys(): - if key == "brand": - transaction_data[f"{key}_old"] = item['brand']['id'] - else: - transaction_data[f"{key}_old"] = item[key] - item = database.__updateTuple(conn, site_name, f"{site_name}_items", {'id': id, 'update': data['item']}, convert=True) - - trans = MyDataclasses.TransactionPayload( - timestamp=datetime.datetime.now(), - logistics_info_id=item['logistics_info_id'], - barcode=item['barcode'], - name=item['item_name'], - transaction_type="UPDATE", - quantity=0.0, - description="Item was updated!", - user_id=session['user_id'], - data=transaction_data - ) - database.insertTransactionsTuple(conn, site_name, trans.payload()) - - return jsonify(error=False, message="Item updated successfully!") - return jsonify(error=True, message="Unable to save, ERROR!") - -@items_api.route('/item/updateItemLink', methods=['POST']) -def updateItemLink(): - if request.method == "POST": - id = request.get_json()['id'] - conv_factor = request.get_json()['conv_factor'] - barcode = request.get_json()['barcode'] - old_conv_factor = request.get_json()['old_conv'] - - - database_config = config() - site_name = session['selected_site'] - user_id = session['user_id'] - transaction_time = datetime.datetime.now() - with psycopg2.connect(**database_config) as conn: - linkedItem = database.getItemAllByBarcode(conn, site_name, (barcode, ), convert=True) - - transaction = MyDataclasses.TransactionPayload( - timestamp=transaction_time, - logistics_info_id=linkedItem['logistics_info_id'], - barcode=barcode, - name=linkedItem['item_name'], - transaction_type='UPDATE', - quantity=0.0, - description='Link updated!', - user_id=user_id, - data={'new_conv_factor': conv_factor, 'old_conv_factor': old_conv_factor} - ) - - database.__updateTuple(conn, site_name, f"{site_name}_itemlinks", {'id': id, 'update': {'conv_factor': conv_factor}}) - database.insertTransactionsTuple(conn, site_name, transaction.payload()) - return jsonify(error=False, message="Linked Item was updated successfully") - return jsonify(error=True, message="Unable to save this change, ERROR!") - - -@items_api.route('/item/getPossibleLocations', methods=["GET"]) -@login_required -def getPossibleLocations(): - if request.method == "GET": - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 1)) - offset = (page-1)*limit - database_config = config() - site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - locations, count = postsqldb.LocationsTable.paginateLocationsWithZone(conn, site_name, (limit, offset)) - return jsonify(locations=locations, end=math.ceil(count/limit)) - -@items_api.route('/item/getLinkedItem', methods=["GET"]) -@login_required -def getLinkedItem(): - linked_item = {} - if request.method == "GET": - id = int(request.args.get('id', 1)) - database_config = config() - site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - linked_item = database.__selectTuple(conn, site_name, f"{site_name}_itemlinks", (id, ), convert=True) - return jsonify({'linked_item': linked_item, 'error': False, 'message': 'Linked Item added!!'}) - return jsonify({'linked_item': linked_item, 'error': True, 'message': 'These was an error with adding to the linked list!'}) - -@items_api.route('/item/addLinkedItem', methods=["POST"]) -def addLinkedItem(): - if request.method == "POST": - parent_id = request.get_json()['parent_id'] - child_id = request.get_json()['child_id'] - conv_factor = request.get_json()['conv_factor'] - - database_config = config() - site_name = session['selected_site'] - user_id = session['user_id'] - with psycopg2.connect(**database_config) as conn: - print(parent_id, child_id, conv_factor) - parent_item = database.getItemAllByID(conn, site_name, (parent_id, ), convert=True) - child_item = database.getItemAllByID(conn, site_name, (child_id, ), convert=True) - - # i need to transact out ALL locations for child item. - pprint.pprint(child_item) - sum_child_qoh = 0 - for location in child_item['item_locations']: - print(location) - sum_child_qoh += location['quantity_on_hand'] - payload = { - 'item_id': child_item['id'], - 'logistics_info_id': child_item['logistics_info_id'], - 'barcode': child_item['barcode'], - 'item_name': child_item['item_name'], - 'transaction_type': 'Adjust Out', - 'quantity': location['quantity_on_hand'], - 'description': f'Converted to {parent_item['barcode']}', - 'cost': child_item['item_info']['cost'], - 'vendor': 1, - 'expires': False, - 'location_id': location['location_id'] - } - process.postTransaction(conn, site_name, user_id, payload) - - print(sum_child_qoh) - - primary_location = database.selectItemLocationsTuple(conn, site_name, (parent_item['id'], parent_item['logistics_info']['primary_location']['id']), convert=True) - - - payload = { - 'item_id': parent_item['id'], - 'logistics_info_id': parent_item['logistics_info_id'], - 'barcode': parent_item['barcode'], - 'item_name': parent_item['item_name'], - 'transaction_type': 'Adjust In', - 'quantity': (float(sum_child_qoh)*float(conv_factor)), - 'description': f'Converted from {child_item['barcode']}', - 'cost': child_item['item_info']['cost'], - 'vendor': 1, - 'expires': None, - 'location_id': primary_location['location_id'] - } - - pprint.pprint(payload) - result = process.postTransaction(conn, site_name, user_id, payload) - - if result['error']: - return jsonify(result) - - itemLink = MyDataclasses.ItemLinkPayload( - barcode=child_item['barcode'], - link=parent_item['id'], - data=child_item, - conv_factor=conv_factor - ) - - database.insertItemLinksTuple(conn, site_name, itemLink.payload()) - - database.__updateTuple(conn, site_name, f"{site_name}_items", {'id': child_item['id'], 'update': {'row_type': 'link'}}) - - return jsonify({'error': False, 'message': 'Linked Item added!!'}) - return jsonify({'error': True, 'message': 'These was an error with adding to the linked list!'}) - -@items_api.route('/items/addBlankItem', methods=["POST"]) -def addBlankItem(): - if request.method == "POST": - data = { - 'barcode': request.get_json()['barcode'], - 'name': request.get_json()['name'], - 'subtype': request.get_json()['subtype'] - } - pprint.pprint(data) - database_config = config() - site_name = session['selected_site'] - user_id = session['user_id'] - try: - with psycopg2.connect(**database_config) as conn: - process.postNewBlankItem(conn, site_name, user_id, data) - except Exception as error: - conn.rollback() - return jsonify({'error': True, 'message': error}) - return jsonify({'error': False, 'message': 'Item added!!'}) - return jsonify({'error': True, 'message': 'These was an error with adding Item!'}) - -@items_api.route('/items/addSKUPrefix', methods=["POST"]) -def addSKUPrefix(): - if request.method == "POST": - database_config = config() - site_name = session['selected_site'] - try: - with psycopg2.connect(**database_config) as conn: - prefix = postsqldb.SKUPrefixTable.Payload( - request.get_json()['uuid'], - request.get_json()['name'], - request.get_json()['description'] - ) - postsqldb.SKUPrefixTable.insert_tuple(conn, site_name, prefix.payload()) - except Exception as error: - conn.rollback() - return jsonify({'error': True, 'message': error}) - return jsonify({'error': False, 'message': 'Prefix added!!'}) - return jsonify({'error': True, 'message': 'These was an error with adding this Prefix!'}) - -@items_api.route('/item/addConversion', methods=['POST']) -def addConversion(): - 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 = postsqldb.ConversionsTable.Payload( - item_id, uom_id, conv_factor - ) - postsqldb.ConversionsTable.insert_tuple(conn, site_name, conversion.payload()) - - return jsonify(error=False, message="Conversion was added successfully") - return jsonify(error=True, message="Unable to save this conversion, ERROR!") - -@items_api.route('/item/deleteConversion', methods=['POST']) -def deleteConversion(): - if request.method == "POST": - conversion_id = request.get_json()['conversion_id'] - print(conversion_id) - database_config = config() - site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - postsqldb.ConversionsTable.delete_item_tuple(conn, site_name, (conversion_id,)) - - return jsonify(error=False, message="Conversion was deleted successfully") - return jsonify(error=True, message="Unable to delete this conversion, ERROR!") - -@items_api.route('/item/updateConversion', methods=['POST']) -def updateConversion(): - if request.method == "POST": - conversion_id = request.get_json()['conversion_id'] - update_dictionary = request.get_json()['update'] - - database_config = config() - site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - postsqldb.ConversionsTable.update_item_tuple(conn, site_name, {'id': conversion_id, 'update': update_dictionary}) - return jsonify(error=False, message="Conversion was updated successfully") - return jsonify(error=True, message="Unable to save this conversion, ERROR!") - -@items_api.route('/item/addPrefix', methods=['POST']) -def addPrefix(): - if request.method == "POST": - item_info_id = request.get_json()['parent_id'] - prefix_id = request.get_json()['prefix_id'] - print(item_info_id) - print(prefix_id) - database_config = config() - site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - prefixes = postsqldb.ItemInfoTable.select_tuple(conn, site_name, (item_info_id,))['prefixes'] - print(prefixes) - prefixes.append(prefix_id) - postsqldb.ItemInfoTable.update_tuple(conn, site_name, {'id': item_info_id, 'update':{'prefixes': prefixes}}) - return jsonify(error=False, message="Prefix was added successfully") - return jsonify(error=True, message="Unable to save this prefix, ERROR!") - -@items_api.route('/item/deletePrefix', methods=['POST']) -def deletePrefix(): - if request.method == "POST": - item_info_id = request.get_json()['item_info_id'] - prefix_id = request.get_json()['prefix_id'] - - database_config = config() - site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - prefixes = postsqldb.ItemInfoTable.select_tuple(conn, site_name, (item_info_id,))['prefixes'] - prefixes.remove(prefix_id) - postsqldb.ItemInfoTable.update_tuple(conn, site_name, {'id': item_info_id, 'update':{'prefixes': prefixes}}) - return jsonify(error=False, message="Prefix was deleted successfully") - return jsonify(error=True, message="Unable to delete this prefix, ERROR!") - -@items_api.route('/item/refreshSearchString', methods=['POST']) -def refreshSearchString(): - if request.method == "POST": - item_id = request.get_json()['item_id'] - - database_config = config() - site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - item = postsqldb.ItemTable.getItemAllByID(conn, site_name, (item_id,)) - parameters = [f"id::{item['id']}", f"barcode::{item['barcode']}", f"name::{item['item_name']}", f"brand::{item['brand']['name']}", - f"expires::{item['food_info']['expires']}", f"row_type::{item['row_type']}", f"item_type::{item['item_type']}"] - - for prefix in item['item_info']['prefixes']: - parameters.append(f"prefix::{prefix['name']}") - - search_string = "&&".join(parameters) - postsqldb.ItemTable.update_tuple(conn, site_name, {'id': item_id, 'update':{'search_string': search_string}}) - - return jsonify(error=False, message="Search String was updated successfully") - return jsonify(error=True, message="Unable to update this search string, ERROR!") - -@items_api.route('/item/postNewItemLocation', methods=['POST']) -def postNewItemLocation(): - if request.method == "POST": - item_id = request.get_json()['item_id'] - location_id = request.get_json()['location_id'] - database_config = config() - site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - item_location = postsqldb.ItemLocationsTable.Payload( - item_id, - location_id - ) - postsqldb.ItemLocationsTable.insert_tuple(conn, site_name, item_location.payload()) - return jsonify(error=False, message="Location was added successfully") - return jsonify(error=True, message="Unable to save this location, ERROR!") \ No newline at end of file diff --git a/logs/database.log b/logs/database.log new file mode 100644 index 0000000..4b21554 --- /dev/null +++ b/logs/database.log @@ -0,0 +1,4 @@ + +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 diff --git a/logs/process.log b/logs/process.log new file mode 100644 index 0000000..9db2238 --- /dev/null +++ b/logs/process.log @@ -0,0 +1,373 @@ +2025-08-02 17:36:03.821628 --- ERROR --- name 'database' is not defined +2025-08-02 17:37:08.215424 --- ERROR --- name 'database' is not defined +2025-08-02 17:37:30.670854 --- ERROR --- name 'database' is not defined +2025-08-02 17:38:43.505273 --- ERROR --- name 'database' is not defined +2025-08-02 17:42:54.590907 --- INFO --- logins Created! +2025-08-02 17:42:54.598471 --- INFO --- sites Created! +2025-08-02 17:42:54.605416 --- INFO --- roles Created! +2025-08-02 17:42:54.611444 --- INFO --- units Created! +2025-08-02 17:42:54.627265 --- INFO --- cost_layers Created! +2025-08-02 17:42:54.635985 --- INFO --- linked_items Created! +2025-08-02 17:42:54.643245 --- INFO --- brands Created! +2025-08-02 17:42:54.651461 --- INFO --- food_info Created! +2025-08-02 17:42:54.660454 --- INFO --- item_info Created! +2025-08-02 17:42:54.668702 --- INFO --- zones Created! +2025-08-02 17:42:54.677999 --- INFO --- locations Created! +2025-08-02 17:42:54.686410 --- INFO --- logistics_info Created! +2025-08-02 17:42:54.694318 --- INFO --- transactions Created! +2025-08-02 17:42:54.704109 --- INFO --- item Created! +2025-08-02 17:42:54.712218 --- INFO --- vendors Created! +2025-08-02 17:42:54.721027 --- INFO --- groups Created! +2025-08-02 17:42:54.730414 --- INFO --- group_items Created! +2025-08-02 17:42:54.739860 --- INFO --- receipts Created! +2025-08-02 17:42:54.748305 --- INFO --- receipt_items Created! +2025-08-02 17:42:54.756246 --- INFO --- recipes Created! +2025-08-02 17:42:54.765949 --- INFO --- recipe_items Created! +2025-08-02 17:42:54.775736 --- INFO --- shopping_lists Created! +2025-08-02 17:42:54.785212 --- INFO --- shopping_list_items Created! +2025-08-02 17:42:54.795440 --- INFO --- item_locations Created! +2025-08-02 17:42:54.803953 --- INFO --- conversions Created! +2025-08-02 17:42:54.808022 --- INFO --- Admin User Created! +2025-08-02 17:43:14.105719 --- INFO --- logins Created! +2025-08-02 17:43:14.109485 --- INFO --- sites Created! +2025-08-02 17:43:14.113017 --- INFO --- roles Created! +2025-08-02 17:43:14.116541 --- INFO --- units Created! +2025-08-02 17:43:14.122976 --- INFO --- cost_layers Created! +2025-08-02 17:43:14.129403 --- INFO --- linked_items Created! +2025-08-02 17:43:14.134059 --- INFO --- brands Created! +2025-08-02 17:43:14.139917 --- INFO --- food_info Created! +2025-08-02 17:43:14.146866 --- INFO --- item_info Created! +2025-08-02 17:43:14.153027 --- INFO --- zones Created! +2025-08-02 17:43:14.158782 --- INFO --- locations Created! +2025-08-02 17:43:14.164872 --- INFO --- logistics_info Created! +2025-08-02 17:43:14.170766 --- INFO --- transactions Created! +2025-08-02 17:43:14.178190 --- INFO --- item Created! +2025-08-02 17:43:14.183717 --- INFO --- vendors Created! +2025-08-02 17:43:14.189851 --- INFO --- groups Created! +2025-08-02 17:43:14.197086 --- INFO --- group_items Created! +2025-08-02 17:43:14.203797 --- INFO --- receipts Created! +2025-08-02 17:43:14.209943 --- INFO --- receipt_items Created! +2025-08-02 17:43:14.215472 --- INFO --- recipes Created! +2025-08-02 17:43:14.222578 --- INFO --- recipe_items Created! +2025-08-02 17:43:14.229450 --- INFO --- shopping_lists Created! +2025-08-02 17:43:14.237020 --- INFO --- shopping_list_items Created! +2025-08-02 17:43:14.244526 --- INFO --- item_locations Created! +2025-08-02 17:43:14.250619 --- INFO --- conversions Created! +2025-08-02 17:43:14.254671 --- INFO --- Admin User Created! +2025-08-02 18:17:38.525725 --- INFO --- item_info DROPPED! +2025-08-02 18:17:38.534293 --- INFO --- items DROPPED! +2025-08-02 18:17:38.540958 --- INFO --- cost_layers DROPPED! +2025-08-02 18:17:38.547807 --- INFO --- linked_items DROPPED! +2025-08-02 18:17:38.554534 --- INFO --- transactions DROPPED! +2025-08-02 18:17:38.560954 --- INFO --- brands DROPPED! +2025-08-02 18:17:38.567781 --- INFO --- food_info DROPPED! +2025-08-02 18:17:38.574657 --- INFO --- logistics_info DROPPED! +2025-08-02 18:17:38.581696 --- INFO --- zones DROPPED! +2025-08-02 18:17:38.588647 --- INFO --- locations DROPPED! +2025-08-02 18:17:38.595646 --- INFO --- vendors DROPPED! +2025-08-02 18:17:38.602703 --- INFO --- group_items DROPPED! +2025-08-02 18:17:38.609603 --- INFO --- groups DROPPED! +2025-08-02 18:17:38.616542 --- INFO --- receipt_items DROPPED! +2025-08-02 18:17:38.623379 --- INFO --- receipts DROPPED! +2025-08-02 18:17:38.630435 --- INFO --- recipe_items DROPPED! +2025-08-02 18:17:38.637322 --- INFO --- recipes DROPPED! +2025-08-02 18:17:38.644400 --- INFO --- shopping_list_items DROPPED! +2025-08-02 18:17:38.651263 --- INFO --- shopping_lists DROPPED! +2025-08-02 18:17:38.658144 --- INFO --- item_locations DROPPED! +2025-08-02 18:17:38.664832 --- INFO --- conversions DROPPED! +2025-08-02 18:17:38.671963 --- ERROR --- DatabaseError(message='table "testa_sku_prefix" does not exist', payload=DROP TABLE testa_sku_prefix CASCADE;, sql='sku_prefix') +2025-08-02 18:18:33.762077 --- INFO --- item_info DROPPED! +2025-08-02 18:18:33.769451 --- INFO --- items DROPPED! +2025-08-02 18:18:33.773873 --- INFO --- cost_layers DROPPED! +2025-08-02 18:18:33.778329 --- INFO --- linked_items DROPPED! +2025-08-02 18:18:33.783414 --- INFO --- transactions DROPPED! +2025-08-02 18:18:33.787465 --- INFO --- brands DROPPED! +2025-08-02 18:18:33.791576 --- INFO --- food_info DROPPED! +2025-08-02 18:18:33.796560 --- INFO --- logistics_info DROPPED! +2025-08-02 18:18:33.801151 --- INFO --- zones DROPPED! +2025-08-02 18:18:33.805538 --- INFO --- locations DROPPED! +2025-08-02 18:18:33.809589 --- INFO --- vendors DROPPED! +2025-08-02 18:18:33.813623 --- INFO --- group_items DROPPED! +2025-08-02 18:18:33.817500 --- INFO --- groups DROPPED! +2025-08-02 18:18:33.821491 --- INFO --- receipt_items DROPPED! +2025-08-02 18:18:33.825404 --- INFO --- receipts DROPPED! +2025-08-02 18:18:33.829525 --- INFO --- recipe_items DROPPED! +2025-08-02 18:18:33.833380 --- INFO --- recipes DROPPED! +2025-08-02 18:18:33.837410 --- INFO --- shopping_list_items DROPPED! +2025-08-02 18:18:33.841363 --- INFO --- shopping_lists DROPPED! +2025-08-02 18:18:33.845368 --- INFO --- item_locations DROPPED! +2025-08-02 18:18:33.849277 --- INFO --- conversions DROPPED! +2025-08-02 18:18:33.857471 --- ERROR --- DatabaseError(message='table "testa_sku_prefix" does not exist', payload=DROP TABLE testa_sku_prefix CASCADE;, sql='sku_prefix') +2025-08-02 18:21:04.309258 --- INFO --- logins Created! +2025-08-02 18:21:04.318315 --- INFO --- sites Created! +2025-08-02 18:21:04.322035 --- INFO --- roles Created! +2025-08-02 18:21:04.325716 --- INFO --- units Created! +2025-08-02 18:21:04.332729 --- INFO --- cost_layers Created! +2025-08-02 18:21:04.340251 --- INFO --- linked_items Created! +2025-08-02 18:21:04.345274 --- INFO --- brands Created! +2025-08-02 18:21:04.351605 --- INFO --- food_info Created! +2025-08-02 18:21:04.358995 --- INFO --- item_info Created! +2025-08-02 18:21:04.366026 --- INFO --- zones Created! +2025-08-02 18:21:04.372607 --- INFO --- locations Created! +2025-08-02 18:21:04.379748 --- INFO --- logistics_info Created! +2025-08-02 18:21:04.386304 --- INFO --- transactions Created! +2025-08-02 18:21:04.394657 --- INFO --- item Created! +2025-08-02 18:21:04.400126 --- INFO --- vendors Created! +2025-08-02 18:21:04.407038 --- INFO --- groups Created! +2025-08-02 18:21:04.414685 --- INFO --- group_items Created! +2025-08-02 18:21:04.421843 --- INFO --- receipts Created! +2025-08-02 18:21:04.428601 --- INFO --- receipt_items Created! +2025-08-02 18:21:04.434706 --- INFO --- recipes Created! +2025-08-02 18:21:04.442442 --- INFO --- recipe_items Created! +2025-08-02 18:21:04.449400 --- INFO --- shopping_lists Created! +2025-08-02 18:21:04.457406 --- INFO --- shopping_list_items Created! +2025-08-02 18:21:04.465015 --- INFO --- item_locations Created! +2025-08-02 18:21:04.471077 --- INFO --- conversions Created! +2025-08-02 18:21:04.475386 --- INFO --- Admin User Created! +2025-08-02 18:21:15.697984 --- INFO --- item_info DROPPED! +2025-08-02 18:21:15.707335 --- INFO --- items DROPPED! +2025-08-02 18:21:15.711647 --- INFO --- cost_layers DROPPED! +2025-08-02 18:21:15.715884 --- INFO --- linked_items DROPPED! +2025-08-02 18:21:15.720256 --- INFO --- transactions DROPPED! +2025-08-02 18:21:15.724344 --- INFO --- brands DROPPED! +2025-08-02 18:21:15.728559 --- INFO --- food_info DROPPED! +2025-08-02 18:21:15.733749 --- INFO --- logistics_info DROPPED! +2025-08-02 18:21:15.738026 --- INFO --- zones DROPPED! +2025-08-02 18:21:15.742003 --- INFO --- locations DROPPED! +2025-08-02 18:21:15.746147 --- INFO --- vendors DROPPED! +2025-08-02 18:21:15.750367 --- INFO --- group_items DROPPED! +2025-08-02 18:21:15.754295 --- INFO --- groups DROPPED! +2025-08-02 18:21:15.758458 --- INFO --- receipt_items DROPPED! +2025-08-02 18:21:15.762403 --- INFO --- receipts DROPPED! +2025-08-02 18:21:15.766757 --- INFO --- recipe_items DROPPED! +2025-08-02 18:21:15.770751 --- INFO --- recipes DROPPED! +2025-08-02 18:21:15.775030 --- INFO --- shopping_list_items DROPPED! +2025-08-02 18:21:15.779021 --- INFO --- shopping_lists DROPPED! +2025-08-02 18:21:15.783189 --- INFO --- item_locations DROPPED! +2025-08-02 18:21:15.787297 --- INFO --- conversions DROPPED! +2025-08-02 18:21:15.795686 --- ERROR --- DatabaseError(message='table "tesc_sku_prefix" does not exist', payload=DROP TABLE tesc_sku_prefix CASCADE;, sql='sku_prefix') +2025-08-02 18:21:39.494823 --- INFO --- logins Created! +2025-08-02 18:21:39.501922 --- INFO --- sites Created! +2025-08-02 18:21:39.506715 --- INFO --- roles Created! +2025-08-02 18:21:39.510848 --- INFO --- units Created! +2025-08-02 18:21:39.517874 --- INFO --- cost_layers Created! +2025-08-02 18:21:39.524903 --- INFO --- linked_items Created! +2025-08-02 18:21:39.529872 --- INFO --- brands Created! +2025-08-02 18:21:39.536513 --- INFO --- food_info Created! +2025-08-02 18:21:39.543806 --- INFO --- item_info Created! +2025-08-02 18:21:39.551659 --- INFO --- zones Created! +2025-08-02 18:21:39.558627 --- INFO --- locations Created! +2025-08-02 18:21:39.566378 --- INFO --- logistics_info Created! +2025-08-02 18:21:39.573581 --- INFO --- transactions Created! +2025-08-02 18:21:39.582850 --- INFO --- item Created! +2025-08-02 18:21:39.586437 --- INFO --- vendors Created! +2025-08-02 18:21:39.593704 --- INFO --- groups Created! +2025-08-02 18:21:39.601914 --- INFO --- group_items Created! +2025-08-02 18:21:39.609446 --- INFO --- receipts Created! +2025-08-02 18:21:39.616274 --- INFO --- receipt_items Created! +2025-08-02 18:21:39.622822 --- INFO --- recipes Created! +2025-08-02 18:21:39.631045 --- INFO --- recipe_items Created! +2025-08-02 18:21:39.638724 --- INFO --- shopping_lists Created! +2025-08-02 18:21:39.646926 --- INFO --- shopping_list_items Created! +2025-08-02 18:21:39.654793 --- INFO --- item_locations Created! +2025-08-02 18:21:39.661064 --- INFO --- conversions Created! +2025-08-02 18:21:39.665273 --- INFO --- Admin User Created! +2025-08-02 18:22:19.097726 --- INFO --- item_info DROPPED! +2025-08-02 18:22:19.106429 --- INFO --- items DROPPED! +2025-08-02 18:22:19.110619 --- INFO --- cost_layers DROPPED! +2025-08-02 18:22:19.114650 --- INFO --- linked_items DROPPED! +2025-08-02 18:22:19.118889 --- INFO --- transactions DROPPED! +2025-08-02 18:22:19.122806 --- INFO --- brands DROPPED! +2025-08-02 18:22:19.126903 --- INFO --- food_info DROPPED! +2025-08-02 18:22:19.131615 --- INFO --- logistics_info DROPPED! +2025-08-02 18:22:19.135869 --- INFO --- zones DROPPED! +2025-08-02 18:22:19.139903 --- INFO --- locations DROPPED! +2025-08-02 18:22:19.144155 --- INFO --- vendors DROPPED! +2025-08-02 18:22:19.148457 --- INFO --- group_items DROPPED! +2025-08-02 18:22:19.152510 --- INFO --- groups DROPPED! +2025-08-02 18:22:19.156745 --- INFO --- receipt_items DROPPED! +2025-08-02 18:22:19.161235 --- INFO --- receipts DROPPED! +2025-08-02 18:22:19.166118 --- INFO --- recipe_items DROPPED! +2025-08-02 18:22:19.170322 --- INFO --- recipes DROPPED! +2025-08-02 18:22:19.174853 --- INFO --- shopping_list_items DROPPED! +2025-08-02 18:22:19.179479 --- INFO --- shopping_lists DROPPED! +2025-08-02 18:22:19.183063 --- INFO --- item_locations DROPPED! +2025-08-02 18:22:19.187254 --- INFO --- conversions DROPPED! +2025-08-02 18:22:19.195739 --- ERROR --- DatabaseError(message='table "tesc_sku_prefix" does not exist', payload=DROP TABLE tesc_sku_prefix CASCADE;, sql='sku_prefix') +2025-08-02 18:22:55.730401 --- INFO --- item_info DROPPED! +2025-08-02 18:22:55.739583 --- INFO --- items DROPPED! +2025-08-02 18:22:55.743911 --- INFO --- cost_layers DROPPED! +2025-08-02 18:22:55.748244 --- INFO --- linked_items DROPPED! +2025-08-02 18:22:55.752754 --- INFO --- transactions DROPPED! +2025-08-02 18:22:55.756804 --- INFO --- brands DROPPED! +2025-08-02 18:22:55.760914 --- INFO --- food_info DROPPED! +2025-08-02 18:22:55.765817 --- INFO --- logistics_info DROPPED! +2025-08-02 18:22:55.770411 --- INFO --- zones DROPPED! +2025-08-02 18:22:55.774706 --- INFO --- locations DROPPED! +2025-08-02 18:22:55.779111 --- INFO --- vendors DROPPED! +2025-08-02 18:22:55.783646 --- INFO --- group_items DROPPED! +2025-08-02 18:22:55.787896 --- INFO --- groups DROPPED! +2025-08-02 18:22:55.792318 --- INFO --- receipt_items DROPPED! +2025-08-02 18:22:55.796560 --- INFO --- receipts DROPPED! +2025-08-02 18:22:55.801016 --- INFO --- recipe_items DROPPED! +2025-08-02 18:22:55.805185 --- INFO --- recipes DROPPED! +2025-08-02 18:22:55.809664 --- INFO --- shopping_list_items DROPPED! +2025-08-02 18:22:55.813894 --- INFO --- shopping_lists DROPPED! +2025-08-02 18:22:55.818120 --- INFO --- item_locations DROPPED! +2025-08-02 18:22:55.822243 --- INFO --- conversions DROPPED! +2025-08-02 18:22:55.830589 --- ERROR --- DatabaseError(message='table "tesc_sku_prefix" does not exist', payload=DROP TABLE tesc_sku_prefix CASCADE;, sql='sku_prefix') +2025-08-02 18:24:27.267149 --- INFO --- logins Created! +2025-08-02 18:24:27.274683 --- INFO --- sites Created! +2025-08-02 18:24:27.279507 --- INFO --- roles Created! +2025-08-02 18:24:27.283605 --- INFO --- units Created! +2025-08-02 18:24:27.291352 --- INFO --- cost_layers Created! +2025-08-02 18:24:27.298690 --- INFO --- linked_items Created! +2025-08-02 18:24:27.304349 --- INFO --- brands Created! +2025-08-02 18:24:27.310778 --- INFO --- food_info Created! +2025-08-02 18:24:27.318536 --- INFO --- item_info Created! +2025-08-02 18:24:27.325567 --- INFO --- zones Created! +2025-08-02 18:24:27.332454 --- INFO --- locations Created! +2025-08-02 18:24:27.339921 --- INFO --- logistics_info Created! +2025-08-02 18:24:27.346686 --- INFO --- transactions Created! +2025-08-02 18:24:27.355421 --- INFO --- item Created! +2025-08-02 18:24:27.361561 --- INFO --- vendors Created! +2025-08-02 18:24:27.369016 --- INFO --- groups Created! +2025-08-02 18:24:27.377229 --- INFO --- group_items Created! +2025-08-02 18:24:27.384953 --- INFO --- receipts Created! +2025-08-02 18:24:27.391473 --- INFO --- receipt_items Created! +2025-08-02 18:24:27.397204 --- INFO --- recipes Created! +2025-08-02 18:24:27.404108 --- INFO --- recipe_items Created! +2025-08-02 18:24:27.410341 --- INFO --- shopping_lists Created! +2025-08-02 18:24:27.417144 --- INFO --- shopping_list_items Created! +2025-08-02 18:24:27.424318 --- INFO --- item_locations Created! +2025-08-02 18:24:27.430403 --- INFO --- conversions Created! +2025-08-02 18:24:27.437113 --- INFO --- sku_prefix Created! +2025-08-02 18:24:27.441214 --- INFO --- Admin User Created! +2025-08-02 18:24:48.552044 --- INFO --- item_info DROPPED! +2025-08-02 18:24:48.558982 --- INFO --- items DROPPED! +2025-08-02 18:24:48.563515 --- INFO --- cost_layers DROPPED! +2025-08-02 18:24:48.568029 --- INFO --- linked_items DROPPED! +2025-08-02 18:24:48.572525 --- INFO --- transactions DROPPED! +2025-08-02 18:24:48.576655 --- INFO --- brands DROPPED! +2025-08-02 18:24:48.580796 --- INFO --- food_info DROPPED! +2025-08-02 18:24:48.585973 --- INFO --- logistics_info DROPPED! +2025-08-02 18:24:48.590455 --- INFO --- zones DROPPED! +2025-08-02 18:24:48.594769 --- INFO --- locations DROPPED! +2025-08-02 18:24:48.599463 --- INFO --- vendors DROPPED! +2025-08-02 18:24:48.603895 --- INFO --- group_items DROPPED! +2025-08-02 18:24:48.608092 --- INFO --- groups DROPPED! +2025-08-02 18:24:48.612422 --- INFO --- receipt_items DROPPED! +2025-08-02 18:24:48.616603 --- INFO --- receipts DROPPED! +2025-08-02 18:24:48.621086 --- INFO --- recipe_items DROPPED! +2025-08-02 18:24:48.625294 --- INFO --- recipes DROPPED! +2025-08-02 18:24:48.629821 --- INFO --- shopping_list_items DROPPED! +2025-08-02 18:24:48.634125 --- INFO --- shopping_lists DROPPED! +2025-08-02 18:24:48.638433 --- INFO --- item_locations DROPPED! +2025-08-02 18:24:48.642509 --- INFO --- conversions DROPPED! +2025-08-02 18:24:48.646827 --- INFO --- sku_prefix DROPPED! +2025-08-02 18:26:20.489233 --- INFO --- item_info DROPPED! +2025-08-02 18:26:20.495014 --- INFO --- items DROPPED! +2025-08-02 18:26:20.499055 --- INFO --- cost_layers DROPPED! +2025-08-02 18:26:20.503107 --- INFO --- linked_items DROPPED! +2025-08-02 18:26:20.507497 --- INFO --- transactions DROPPED! +2025-08-02 18:26:20.511634 --- INFO --- brands DROPPED! +2025-08-02 18:26:20.515839 --- INFO --- food_info DROPPED! +2025-08-02 18:26:20.520888 --- INFO --- logistics_info DROPPED! +2025-08-02 18:26:20.525258 --- INFO --- zones DROPPED! +2025-08-02 18:26:20.529569 --- INFO --- locations DROPPED! +2025-08-02 18:26:20.534098 --- INFO --- vendors DROPPED! +2025-08-02 18:26:20.538631 --- INFO --- group_items DROPPED! +2025-08-02 18:26:20.542828 --- INFO --- groups DROPPED! +2025-08-02 18:26:20.547157 --- INFO --- receipt_items DROPPED! +2025-08-02 18:26:20.551313 --- INFO --- receipts DROPPED! +2025-08-02 18:26:20.555830 --- INFO --- recipe_items DROPPED! +2025-08-02 18:26:20.559942 --- INFO --- recipes DROPPED! +2025-08-02 18:26:20.564471 --- INFO --- shopping_list_items DROPPED! +2025-08-02 18:26:20.568722 --- INFO --- shopping_lists DROPPED! +2025-08-02 18:26:20.572906 --- INFO --- item_locations DROPPED! +2025-08-02 18:26:20.576984 --- INFO --- conversions DROPPED! +2025-08-02 18:26:20.580751 --- INFO --- sku_prefix DROPPED! +2025-08-02 18:26:50.901713 --- INFO --- item_info DROPPED! +2025-08-02 18:26:50.908050 --- INFO --- items DROPPED! +2025-08-02 18:26:50.912340 --- INFO --- cost_layers DROPPED! +2025-08-02 18:26:50.916637 --- INFO --- linked_items DROPPED! +2025-08-02 18:26:50.921024 --- INFO --- transactions DROPPED! +2025-08-02 18:26:50.925016 --- INFO --- brands DROPPED! +2025-08-02 18:26:50.929134 --- INFO --- food_info DROPPED! +2025-08-02 18:26:50.934046 --- INFO --- logistics_info DROPPED! +2025-08-02 18:26:50.938560 --- INFO --- zones DROPPED! +2025-08-02 18:26:50.942916 --- INFO --- locations DROPPED! +2025-08-02 18:26:50.947325 --- INFO --- vendors DROPPED! +2025-08-02 18:26:50.951778 --- INFO --- group_items DROPPED! +2025-08-02 18:26:50.956021 --- INFO --- groups DROPPED! +2025-08-02 18:26:50.960452 --- INFO --- receipt_items DROPPED! +2025-08-02 18:26:50.964739 --- INFO --- receipts DROPPED! +2025-08-02 18:26:50.969244 --- INFO --- recipe_items DROPPED! +2025-08-02 18:26:50.973415 --- INFO --- recipes DROPPED! +2025-08-02 18:26:50.978248 --- INFO --- shopping_list_items DROPPED! +2025-08-02 18:26:50.982442 --- INFO --- shopping_lists DROPPED! +2025-08-02 18:26:50.986611 --- INFO --- item_locations DROPPED! +2025-08-02 18:26:50.990758 --- INFO --- conversions DROPPED! +2025-08-02 18:26:50.994543 --- INFO --- sku_prefix DROPPED! +2025-08-02 18:29:18.712464 --- INFO --- logins Created! +2025-08-02 18:29:18.716965 --- INFO --- sites Created! +2025-08-02 18:29:18.720695 --- INFO --- roles Created! +2025-08-02 18:29:18.724324 --- INFO --- units Created! +2025-08-02 18:29:18.732922 --- ERROR --- DatabaseError(message='syntax error at or near "Site_cost_layers"LINE 1: CREATE TABLE IF NOT EXISTS Test Site_cost_layers ( ^', payload=CREATE TABLE IF NOT EXISTS Test Site_cost_layers ( + id SERIAL PRIMARY KEY, + aquisition_date TIMESTAMP NOT NULL, + quantity FLOAT8 NOT NULL, + cost FLOAT8 NOT NULL, + currency_type VARCHAR(16) NOT NULL, + expires TIMESTAMP, + vendor INTEGER DEFAULT 0 +);, sql='cost_layers') +2025-08-02 18:29:41.466678 --- INFO --- logins Created! +2025-08-02 18:29:41.470676 --- INFO --- sites Created! +2025-08-02 18:29:41.474490 --- INFO --- roles Created! +2025-08-02 18:29:41.478247 --- INFO --- units Created! +2025-08-02 18:29:41.485739 --- INFO --- cost_layers Created! +2025-08-02 18:29:41.493886 --- INFO --- linked_items Created! +2025-08-02 18:29:41.499122 --- INFO --- brands Created! +2025-08-02 18:29:41.505196 --- INFO --- food_info Created! +2025-08-02 18:29:41.512272 --- INFO --- item_info Created! +2025-08-02 18:29:41.518926 --- INFO --- zones Created! +2025-08-02 18:29:41.525031 --- INFO --- locations Created! +2025-08-02 18:29:41.531342 --- INFO --- logistics_info Created! +2025-08-02 18:29:41.537275 --- INFO --- transactions Created! +2025-08-02 18:29:41.544813 --- INFO --- item Created! +2025-08-02 18:29:41.550784 --- INFO --- vendors Created! +2025-08-02 18:29:41.557165 --- INFO --- groups Created! +2025-08-02 18:29:41.564073 --- INFO --- group_items Created! +2025-08-02 18:29:41.570683 --- INFO --- receipts Created! +2025-08-02 18:29:41.576683 --- INFO --- receipt_items Created! +2025-08-02 18:29:41.582667 --- INFO --- recipes Created! +2025-08-02 18:29:41.589472 --- INFO --- recipe_items Created! +2025-08-02 18:29:41.595473 --- INFO --- shopping_lists Created! +2025-08-02 18:29:41.602034 --- INFO --- shopping_list_items Created! +2025-08-02 18:29:41.608539 --- INFO --- item_locations Created! +2025-08-02 18:29:41.614052 --- INFO --- conversions Created! +2025-08-02 18:29:41.619896 --- INFO --- sku_prefix Created! +2025-08-02 18:29:41.623834 --- INFO --- Admin User Created! +2025-08-02 18:29:58.848852 --- INFO --- item_info DROPPED! +2025-08-02 18:29:58.855462 --- INFO --- items DROPPED! +2025-08-02 18:29:58.859968 --- INFO --- cost_layers DROPPED! +2025-08-02 18:29:58.864374 --- INFO --- linked_items DROPPED! +2025-08-02 18:29:58.869202 --- INFO --- transactions DROPPED! +2025-08-02 18:29:58.873266 --- INFO --- brands DROPPED! +2025-08-02 18:29:58.877586 --- INFO --- food_info DROPPED! +2025-08-02 18:29:58.882732 --- INFO --- logistics_info DROPPED! +2025-08-02 18:29:58.887276 --- INFO --- zones DROPPED! +2025-08-02 18:29:58.891650 --- INFO --- locations DROPPED! +2025-08-02 18:29:58.898845 --- INFO --- vendors DROPPED! +2025-08-02 18:29:58.903407 --- INFO --- group_items DROPPED! +2025-08-02 18:29:58.907658 --- INFO --- groups DROPPED! +2025-08-02 18:29:58.912101 --- INFO --- receipt_items DROPPED! +2025-08-02 18:29:58.916474 --- INFO --- receipts DROPPED! +2025-08-02 18:29:58.920960 --- INFO --- recipe_items DROPPED! +2025-08-02 18:29:58.925484 --- INFO --- recipes DROPPED! +2025-08-02 18:29:58.930078 --- INFO --- shopping_list_items DROPPED! +2025-08-02 18:29:58.934443 --- INFO --- shopping_lists DROPPED! +2025-08-02 18:29:58.939191 --- INFO --- item_locations DROPPED! +2025-08-02 18:29:58.943407 --- INFO --- conversions DROPPED! +2025-08-02 18:29:58.947995 --- INFO --- sku_prefix DROPPED! diff --git a/outh.py b/outh.py new file mode 100644 index 0000000..a2ded98 --- /dev/null +++ b/outh.py @@ -0,0 +1,4 @@ +from authlib.integrations.flask_client import OAuth + +# Initialize OAuth instance +oauth = OAuth() \ No newline at end of file diff --git a/process.log b/process.log deleted file mode 100644 index b4bf39d..0000000 --- a/process.log +++ /dev/null @@ -1,988 +0,0 @@ - -2025-04-07 18:07:48.193728 --- CAUTION --- 0 - {"Plural": "pinches", " Single": " pinch", " Fullname": " Pinch", " Description": " Less than 1/8 teaspoon."} -2025-04-07 18:07:48.198811 --- CAUTION --- 0 - {"Plural": "tsp", " Single": " tsp", " Fullname": " Teaspoon", " Description": " 5 millilitres in Australia New Zealand UK Canada and the US but approximately 4.93 millilitres in the US."} -2025-04-07 18:07:48.202723 --- CAUTION --- 0 - {"Plural": "dsp", " Single": " dsp", " Fullname": " Dessertspoon", " Description": " 10 millilitres in Australia."} -2025-04-07 18:07:48.205733 --- CAUTION --- 0 - {"Plural": "tbsp", " Single": " tbsp", " Fullname": " Tablespoon", " Description": " 20 millilitres in Australia or 15 millilitres in New Zealand the UK Canada and the US."} -2025-04-07 18:07:48.208306 --- CAUTION --- 0 - {"Plural": "fl oz", " Single": " fl oz", " Fullname": " Fluid ounce", " Description": " 28.41 millilitres in the UK or approximately 29.57 millilitres in the US."} -2025-04-07 18:07:48.212832 --- CAUTION --- 0 - {"Plural": "cups", " Single": " cup", " Fullname": " Cup", " Description": " 250 millilitres in Australia and New Zealand or approximately 170.48 millilitres in the UK or approximately 227.31 millilitres in Canada and approximately 236.59 millilitres in the US."} -2025-04-07 18:07:48.215843 --- CAUTION --- 0 - {"Plural": "pt", " Single": " pt", " Fullname": " Pint", " Description": " 570 millilitres in Australia approximately 568.26 millilitres in New Zealand the UK and Canada and approximately 473.18 millilitres in the US."} -2025-04-07 18:07:48.219306 --- CAUTION --- 0 - {"Plural": "qt", " Single": " qt", " Fullname": " Quart", " Description": " Approximately 1136.52 millilitres in Australia New Zealand the UK and Canada and approximately 946.35 millilitres in the US."} -2025-04-07 18:07:48.222204 --- CAUTION --- 0 - {"Plural": "gal", " Single": " gal", " Fullname": " Gallon", " Description": " Approximately 4546.09 millilitres in Australia New Zealand the UK and Canada and approximately 3785.41 millilitres in the US."} -2025-04-07 18:07:48.226717 --- CAUTION --- 0 - {"Plural": "jiggers", " Single": " jigger", " Fullname": " Jigger", " Description": " 1.5 fluid ounces."} -2025-04-07 18:07:48.230038 --- CAUTION --- 0 - {"Plural": "oz", " Single": " oz", " Fullname": " Ounce", " Description": " 1/4 lb for butter which can also be measured as 3 tablespoons."} -2025-04-07 18:07:48.233496 --- CAUTION --- 0 - {"Plural": "L", " Single": " L", " Fullname": " Liter", " Description": " Commonly used for volume measurement in the metric system."} -2025-04-07 18:07:48.236507 --- CAUTION --- 0 - {"Plural": "mL", " Single": " mL", " Fullname": " Milliliter", " Description": " Commonly used for volume measurement in the metric system."} -2025-04-07 18:07:48.240296 --- CAUTION --- 0 - {"Plural": "dm3", " Single": " dm3", " Fullname": " Cubic decimeter", " Description": " Equivalent to 1 liter."} -2025-04-07 18:07:48.242309 --- CAUTION --- 0 - {"Plural": "g", " Single": " g", " Fullname": " Gram", " Description": " Commonly used for weight measurement in the metric system."} -2025-04-07 18:07:48.246896 --- CAUTION --- 0 - {"Plural": "kg", " Single": " kg", " Fullname": " Kilogram", " Description": " Commonly used for weight measurement in the metric system."} -2025-04-07 18:07:48.250308 --- CAUTION --- 0 - {"Plural": "lbs", " Single": " lb", " Fullname": " Pound", " Description": " Used for weight measurement in the US."} -2025-04-07 18:07:48.253557 --- CAUTION --- 0 - {"Plural": "fluid scruples", " Single": " fluid scruple", " Fullname": " Fluid scruple", " Description": " A unit used in the apothecaries' system but not commonly used in cooking."} -2025-04-07 18:07:48.257236 --- CAUTION --- 0 - {"Plural": "cm3", " Single": " cm3", " Fullname": " Cubic centimeter", " Description": " Equivalent to 1 milliliter."} -2025-04-07 18:07:48.261287 --- CAUTION --- 0 - {"Plural": "breakfast cups", " Single": " breakfast cup", " Fullname": " Breakfast cup", " Description": " Similar in size to the US customary cup and the metric cup."} -2025-04-07 18:07:48.263881 --- CAUTION --- 0 - {"Plural": "tumblers", " Single": " tumbler", " Fullname": " Tumblerful", " Description": " A unit used in British cookery books and recipes."} -2025-04-07 18:07:48.266919 --- CAUTION --- 0 - {"Plural": "winefulls", " Single": " winefull", " Fullname": " Wineglassful", " Description": " A unit used in British cookery books and recipes."} -2025-04-07 18:07:48.270307 --- CAUTION --- 0 - {"Plural": "coffee cups", " Single": " coffee cup", " Fullname": " Coffee cup", " Description": " Can vary from 100 to 200 millilitres."} -2025-04-07 18:07:48.273839 --- CAUTION --- 0 - {"Plural": "sticks of butter", " Single": " stick of butter", " Fullname": " Stick of butter", " Description": " 1/4 lb or 3 tablespoons."} -2025-04-07 18:07:48.277370 --- CAUTION --- 0 - {"Plural": "smidgens", " Single": " smidgen", " Fullname": " Smidgen", " Description": " An approximate unit of measure."} -2025-04-07 18:07:48.280470 --- CAUTION --- 0 - {"Plural": "dashes", " Single": " dash", " Fullname": " Dash", " Description": " An approximate unit of measure."} -2025-04-07 18:07:48.283908 --- CAUTION --- 0 - {"Plural": "drops", " Single": " drop", " Fullname": " Drop", " Description": " An approximate unit of measure."} -2025-04-07 18:07:48.286954 --- CAUTION --- 0 - {"Plural": "eaches", " Single": " each", " Fullname": " Each", " Description": " A single unit."} -2025-04-07 18:07:48.290199 --- CAUTION --- 0 - {"Plural": "boxes", " Single": " box", " Fullname": " Box", " Description": " A Single box of a unit."} -2025-04-07 18:07:48.293848 --- CAUTION --- 0 - {"Plural": "crates", " Single": " crate", " Fullname": " Crate", " Description": " a single crate of a unit."} -2025-04-07 18:07:48.297999 --- CAUTION --- 0 - {"Plural": "jars", " Single": " jar", " Fullname": " Jar", " Description": " A single Jar of a unit."} -2025-04-07 18:07:48.301330 --- CAUTION --- 0 - {"Plural": "cans", " Single": " can", " Fullname": " Can", " Description": " A Single Can of a unit."} -2025-04-07 18:07:48.304665 --- CAUTION --- 0 - {"Plural": "bars", " Single": " bar", " Fullname": " Bars", " Description": " A Single bar of a unit."} -2025-04-07 18:07:48.307969 --- CAUTION --- 0 - {"Plural": "loaves", " Single": " loaf", " Fullname": " Loaf", " Description": " A single loaf of a unit."} -2025-04-07 18:07:48.311119 --- CAUTION --- 0 - {"Plural": "packs", " Single": " pack", " Fullname": " Pack", " Description": " A Single Pack of a unit."} -2025-04-07 18:08:49.486023 --- CAUTION --- 0 - {"Plural": "pinches", " Single": " pinch", " Fullname": " Pinch", " Description": " Less than 1/8 teaspoon."} -2025-04-07 18:08:49.492309 --- CAUTION --- 0 - {"Plural": "tsp", " Single": " tsp", " Fullname": " Teaspoon", " Description": " 5 millilitres in Australia New Zealand UK Canada and the US but approximately 4.93 millilitres in the US."} -2025-04-07 18:08:49.496834 --- CAUTION --- 0 - {"Plural": "dsp", " Single": " dsp", " Fullname": " Dessertspoon", " Description": " 10 millilitres in Australia."} -2025-04-07 18:08:49.500191 --- CAUTION --- 0 - {"Plural": "tbsp", " Single": " tbsp", " Fullname": " Tablespoon", " Description": " 20 millilitres in Australia or 15 millilitres in New Zealand the UK Canada and the US."} -2025-04-07 18:08:49.504607 --- CAUTION --- 0 - {"Plural": "fl oz", " Single": " fl oz", " Fullname": " Fluid ounce", " Description": " 28.41 millilitres in the UK or approximately 29.57 millilitres in the US."} -2025-04-07 18:08:49.508006 --- CAUTION --- 0 - {"Plural": "cups", " Single": " cup", " Fullname": " Cup", " Description": " 250 millilitres in Australia and New Zealand or approximately 170.48 millilitres in the UK or approximately 227.31 millilitres in Canada and approximately 236.59 millilitres in the US."} -2025-04-07 18:08:49.512009 --- CAUTION --- 0 - {"Plural": "pt", " Single": " pt", " Fullname": " Pint", " Description": " 570 millilitres in Australia approximately 568.26 millilitres in New Zealand the UK and Canada and approximately 473.18 millilitres in the US."} -2025-04-07 18:08:49.514519 --- CAUTION --- 0 - {"Plural": "qt", " Single": " qt", " Fullname": " Quart", " Description": " Approximately 1136.52 millilitres in Australia New Zealand the UK and Canada and approximately 946.35 millilitres in the US."} -2025-04-07 18:08:49.519512 --- CAUTION --- 0 - {"Plural": "gal", " Single": " gal", " Fullname": " Gallon", " Description": " Approximately 4546.09 millilitres in Australia New Zealand the UK and Canada and approximately 3785.41 millilitres in the US."} -2025-04-07 18:08:49.522787 --- CAUTION --- 0 - {"Plural": "jiggers", " Single": " jigger", " Fullname": " Jigger", " Description": " 1.5 fluid ounces."} -2025-04-07 18:08:49.526796 --- CAUTION --- 0 - {"Plural": "oz", " Single": " oz", " Fullname": " Ounce", " Description": " 1/4 lb for butter which can also be measured as 3 tablespoons."} -2025-04-07 18:08:49.529796 --- CAUTION --- 0 - {"Plural": "L", " Single": " L", " Fullname": " Liter", " Description": " Commonly used for volume measurement in the metric system."} -2025-04-07 18:08:49.533807 --- CAUTION --- 0 - {"Plural": "mL", " Single": " mL", " Fullname": " Milliliter", " Description": " Commonly used for volume measurement in the metric system."} -2025-04-07 18:08:49.537268 --- CAUTION --- 0 - {"Plural": "dm3", " Single": " dm3", " Fullname": " Cubic decimeter", " Description": " Equivalent to 1 liter."} -2025-04-07 18:08:49.541002 --- CAUTION --- 0 - {"Plural": "g", " Single": " g", " Fullname": " Gram", " Description": " Commonly used for weight measurement in the metric system."} -2025-04-07 18:08:49.544953 --- CAUTION --- 0 - {"Plural": "kg", " Single": " kg", " Fullname": " Kilogram", " Description": " Commonly used for weight measurement in the metric system."} -2025-04-07 18:08:49.548961 --- CAUTION --- 0 - {"Plural": "lbs", " Single": " lb", " Fullname": " Pound", " Description": " Used for weight measurement in the US."} -2025-04-07 18:08:49.551999 --- CAUTION --- 0 - {"Plural": "fluid scruples", " Single": " fluid scruple", " Fullname": " Fluid scruple", " Description": " A unit used in the apothecaries' system but not commonly used in cooking."} -2025-04-07 18:08:49.556000 --- CAUTION --- 0 - {"Plural": "cm3", " Single": " cm3", " Fullname": " Cubic centimeter", " Description": " Equivalent to 1 milliliter."} -2025-04-07 18:08:49.560003 --- CAUTION --- 0 - {"Plural": "breakfast cups", " Single": " breakfast cup", " Fullname": " Breakfast cup", " Description": " Similar in size to the US customary cup and the metric cup."} -2025-04-07 18:08:49.564002 --- CAUTION --- 0 - {"Plural": "tumblers", " Single": " tumbler", " Fullname": " Tumblerful", " Description": " A unit used in British cookery books and recipes."} -2025-04-07 18:08:49.567064 --- CAUTION --- 0 - {"Plural": "winefulls", " Single": " winefull", " Fullname": " Wineglassful", " Description": " A unit used in British cookery books and recipes."} -2025-04-07 18:08:49.571455 --- CAUTION --- 0 - {"Plural": "coffee cups", " Single": " coffee cup", " Fullname": " Coffee cup", " Description": " Can vary from 100 to 200 millilitres."} -2025-04-07 18:08:49.574950 --- CAUTION --- 0 - {"Plural": "sticks of butter", " Single": " stick of butter", " Fullname": " Stick of butter", " Description": " 1/4 lb or 3 tablespoons."} -2025-04-07 18:08:49.578958 --- CAUTION --- 0 - {"Plural": "smidgens", " Single": " smidgen", " Fullname": " Smidgen", " Description": " An approximate unit of measure."} -2025-04-07 18:08:49.582103 --- CAUTION --- 0 - {"Plural": "dashes", " Single": " dash", " Fullname": " Dash", " Description": " An approximate unit of measure."} -2025-04-07 18:08:49.584615 --- CAUTION --- 0 - {"Plural": "drops", " Single": " drop", " Fullname": " Drop", " Description": " An approximate unit of measure."} -2025-04-07 18:08:49.589280 --- CAUTION --- 0 - {"Plural": "eaches", " Single": " each", " Fullname": " Each", " Description": " A single unit."} -2025-04-07 18:08:49.592278 --- CAUTION --- 0 - {"Plural": "boxes", " Single": " box", " Fullname": " Box", " Description": " A Single box of a unit."} -2025-04-07 18:08:49.595790 --- CAUTION --- 0 - {"Plural": "crates", " Single": " crate", " Fullname": " Crate", " Description": " a single crate of a unit."} -2025-04-07 18:08:49.599333 --- CAUTION --- 0 - {"Plural": "jars", " Single": " jar", " Fullname": " Jar", " Description": " A single Jar of a unit."} -2025-04-07 18:08:49.603568 --- CAUTION --- 0 - {"Plural": "cans", " Single": " can", " Fullname": " Can", " Description": " A Single Can of a unit."} -2025-04-07 18:08:49.607011 --- CAUTION --- 0 - {"Plural": "bars", " Single": " bar", " Fullname": " Bars", " Description": " A Single bar of a unit."} -2025-04-07 18:08:49.611167 --- CAUTION --- 0 - {"Plural": "loaves", " Single": " loaf", " Fullname": " Loaf", " Description": " A single loaf of a unit."} -2025-04-07 18:08:49.614706 --- CAUTION --- 0 - {"Plural": "packs", " Single": " pack", " Fullname": " Pack", " Description": " A Single Pack of a unit."} -2025-04-07 18:10:43.995134 --- CAUTION --- DatabaseError(message='duplicate key value violates unique constraint "units_plural_key"DETAIL: Key (plural)=(pinches) already exists.', payload=('pinches', ' pinch', ' Pinch', ' Less than 1/8 teaspoon.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["pinches", " pinch", " Pinch", " Less than 1/8 teaspoon."] -2025-04-07 18:10:44.005096 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('tsp', ' tsp', ' Teaspoon', ' 5 millilitres in Australia New Zealand UK Canada and the US but approximately 4.93 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["tsp", " tsp", " Teaspoon", " 5 millilitres in Australia New Zealand UK Canada and the US but approximately 4.93 millilitres in the US."] -2025-04-07 18:10:44.012695 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('dsp', ' dsp', ' Dessertspoon', ' 10 millilitres in Australia.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["dsp", " dsp", " Dessertspoon", " 10 millilitres in Australia."] -2025-04-07 18:10:44.020587 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('tbsp', ' tbsp', ' Tablespoon', ' 20 millilitres in Australia or 15 millilitres in New Zealand the UK Canada and the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["tbsp", " tbsp", " Tablespoon", " 20 millilitres in Australia or 15 millilitres in New Zealand the UK Canada and the US."] -2025-04-07 18:10:44.027752 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('fl oz', ' fl oz', ' Fluid ounce', ' 28.41 millilitres in the UK or approximately 29.57 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["fl oz", " fl oz", " Fluid ounce", " 28.41 millilitres in the UK or approximately 29.57 millilitres in the US."] -2025-04-07 18:10:44.036113 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('cups', ' cup', ' Cup', ' 250 millilitres in Australia and New Zealand or approximately 170.48 millilitres in the UK or approximately 227.31 millilitres in Canada and approximately 236.59 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["cups", " cup", " Cup", " 250 millilitres in Australia and New Zealand or approximately 170.48 millilitres in the UK or approximately 227.31 millilitres in Canada and approximately 236.59 millilitres in the US."] -2025-04-07 18:10:44.043799 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('pt', ' pt', ' Pint', ' 570 millilitres in Australia approximately 568.26 millilitres in New Zealand the UK and Canada and approximately 473.18 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["pt", " pt", " Pint", " 570 millilitres in Australia approximately 568.26 millilitres in New Zealand the UK and Canada and approximately 473.18 millilitres in the US."] -2025-04-07 18:10:44.051856 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('qt', ' qt', ' Quart', ' Approximately 1136.52 millilitres in Australia New Zealand the UK and Canada and approximately 946.35 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["qt", " qt", " Quart", " Approximately 1136.52 millilitres in Australia New Zealand the UK and Canada and approximately 946.35 millilitres in the US."] -2025-04-07 18:10:44.059206 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('gal', ' gal', ' Gallon', ' Approximately 4546.09 millilitres in Australia New Zealand the UK and Canada and approximately 3785.41 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["gal", " gal", " Gallon", " Approximately 4546.09 millilitres in Australia New Zealand the UK and Canada and approximately 3785.41 millilitres in the US."] -2025-04-07 18:10:44.067014 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('jiggers', ' jigger', ' Jigger', ' 1.5 fluid ounces.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["jiggers", " jigger", " Jigger", " 1.5 fluid ounces."] -2025-04-07 18:10:44.074033 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('oz', ' oz', ' Ounce', ' 1/4 lb for butter which can also be measured as 3 tablespoons.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["oz", " oz", " Ounce", " 1/4 lb for butter which can also be measured as 3 tablespoons."] -2025-04-07 18:10:44.081603 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('L', ' L', ' Liter', ' Commonly used for volume measurement in the metric system.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["L", " L", " Liter", " Commonly used for volume measurement in the metric system."] -2025-04-07 18:10:44.089592 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('mL', ' mL', ' Milliliter', ' Commonly used for volume measurement in the metric system.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["mL", " mL", " Milliliter", " Commonly used for volume measurement in the metric system."] -2025-04-07 18:10:44.097342 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('dm3', ' dm3', ' Cubic decimeter', ' Equivalent to 1 liter.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["dm3", " dm3", " Cubic decimeter", " Equivalent to 1 liter."] -2025-04-07 18:10:44.104724 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('g', ' g', ' Gram', ' Commonly used for weight measurement in the metric system.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["g", " g", " Gram", " Commonly used for weight measurement in the metric system."] -2025-04-07 18:10:44.112144 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('kg', ' kg', ' Kilogram', ' Commonly used for weight measurement in the metric system.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["kg", " kg", " Kilogram", " Commonly used for weight measurement in the metric system."] -2025-04-07 18:10:44.120135 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('lbs', ' lb', ' Pound', ' Used for weight measurement in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["lbs", " lb", " Pound", " Used for weight measurement in the US."] -2025-04-07 18:10:44.127804 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('fluid scruples', ' fluid scruple', ' Fluid scruple', " A unit used in the apothecaries' system but not commonly used in cooking."), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["fluid scruples", " fluid scruple", " Fluid scruple", " A unit used in the apothecaries' system but not commonly used in cooking."] -2025-04-07 18:10:44.135113 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('cm3', ' cm3', ' Cubic centimeter', ' Equivalent to 1 milliliter.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["cm3", " cm3", " Cubic centimeter", " Equivalent to 1 milliliter."] -2025-04-07 18:10:44.142675 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('breakfast cups', ' breakfast cup', ' Breakfast cup', ' Similar in size to the US customary cup and the metric cup.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["breakfast cups", " breakfast cup", " Breakfast cup", " Similar in size to the US customary cup and the metric cup."] -2025-04-07 18:10:44.151374 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('tumblers', ' tumbler', ' Tumblerful', ' A unit used in British cookery books and recipes.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["tumblers", " tumbler", " Tumblerful", " A unit used in British cookery books and recipes."] -2025-04-07 18:10:44.158807 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('winefulls', ' winefull', ' Wineglassful', ' A unit used in British cookery books and recipes.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["winefulls", " winefull", " Wineglassful", " A unit used in British cookery books and recipes."] -2025-04-07 18:10:44.167004 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('coffee cups', ' coffee cup', ' Coffee cup', ' Can vary from 100 to 200 millilitres.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["coffee cups", " coffee cup", " Coffee cup", " Can vary from 100 to 200 millilitres."] -2025-04-07 18:10:44.174449 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('sticks of butter', ' stick of butter', ' Stick of butter', ' 1/4 lb or 3 tablespoons.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["sticks of butter", " stick of butter", " Stick of butter", " 1/4 lb or 3 tablespoons."] -2025-04-07 18:10:44.183729 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('smidgens', ' smidgen', ' Smidgen', ' An approximate unit of measure.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["smidgens", " smidgen", " Smidgen", " An approximate unit of measure."] -2025-04-07 18:10:44.191339 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('dashes', ' dash', ' Dash', ' An approximate unit of measure.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["dashes", " dash", " Dash", " An approximate unit of measure."] -2025-04-07 18:10:44.198886 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('drops', ' drop', ' Drop', ' An approximate unit of measure.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["drops", " drop", " Drop", " An approximate unit of measure."] -2025-04-07 18:10:44.206287 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('eaches', ' each', ' Each', ' A single unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["eaches", " each", " Each", " A single unit."] -2025-04-07 18:10:44.213758 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('boxes', ' box', ' Box', ' A Single box of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["boxes", " box", " Box", " A Single box of a unit."] -2025-04-07 18:10:44.221833 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('crates', ' crate', ' Crate', ' a single crate of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["crates", " crate", " Crate", " a single crate of a unit."] -2025-04-07 18:10:44.229839 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('jars', ' jar', ' Jar', ' A single Jar of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["jars", " jar", " Jar", " A single Jar of a unit."] -2025-04-07 18:10:44.237064 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('cans', ' can', ' Can', ' A Single Can of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["cans", " can", " Can", " A Single Can of a unit."] -2025-04-07 18:10:44.244118 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('bars', ' bar', ' Bars', ' A Single bar of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["bars", " bar", " Bars", " A Single bar of a unit."] -2025-04-07 18:10:44.252959 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('loaves', ' loaf', ' Loaf', ' A single loaf of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["loaves", " loaf", " Loaf", " A single loaf of a unit."] -2025-04-07 18:10:44.260249 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('packs', ' pack', ' Pack', ' A Single Pack of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["packs", " pack", " Pack", " A Single Pack of a unit."] -2025-04-07 18:11:11.901876 --- CAUTION --- DatabaseError(message='duplicate key value violates unique constraint "units_plural_key"DETAIL: Key (plural)=(pinches) already exists.', payload=('pinches', ' pinch', ' Pinch', ' Less than 1/8 teaspoon.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["pinches", " pinch", " Pinch", " Less than 1/8 teaspoon."] -2025-04-07 18:11:11.913095 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('tsp', ' tsp', ' Teaspoon', ' 5 millilitres in Australia New Zealand UK Canada and the US but approximately 4.93 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["tsp", " tsp", " Teaspoon", " 5 millilitres in Australia New Zealand UK Canada and the US but approximately 4.93 millilitres in the US."] -2025-04-07 18:11:11.920834 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('dsp', ' dsp', ' Dessertspoon', ' 10 millilitres in Australia.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["dsp", " dsp", " Dessertspoon", " 10 millilitres in Australia."] -2025-04-07 18:11:11.928118 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('tbsp', ' tbsp', ' Tablespoon', ' 20 millilitres in Australia or 15 millilitres in New Zealand the UK Canada and the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["tbsp", " tbsp", " Tablespoon", " 20 millilitres in Australia or 15 millilitres in New Zealand the UK Canada and the US."] -2025-04-07 18:11:11.935834 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('fl oz', ' fl oz', ' Fluid ounce', ' 28.41 millilitres in the UK or approximately 29.57 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["fl oz", " fl oz", " Fluid ounce", " 28.41 millilitres in the UK or approximately 29.57 millilitres in the US."] -2025-04-07 18:11:11.943995 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('cups', ' cup', ' Cup', ' 250 millilitres in Australia and New Zealand or approximately 170.48 millilitres in the UK or approximately 227.31 millilitres in Canada and approximately 236.59 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["cups", " cup", " Cup", " 250 millilitres in Australia and New Zealand or approximately 170.48 millilitres in the UK or approximately 227.31 millilitres in Canada and approximately 236.59 millilitres in the US."] -2025-04-07 18:11:11.951271 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('pt', ' pt', ' Pint', ' 570 millilitres in Australia approximately 568.26 millilitres in New Zealand the UK and Canada and approximately 473.18 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["pt", " pt", " Pint", " 570 millilitres in Australia approximately 568.26 millilitres in New Zealand the UK and Canada and approximately 473.18 millilitres in the US."] -2025-04-07 18:11:11.958833 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('qt', ' qt', ' Quart', ' Approximately 1136.52 millilitres in Australia New Zealand the UK and Canada and approximately 946.35 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["qt", " qt", " Quart", " Approximately 1136.52 millilitres in Australia New Zealand the UK and Canada and approximately 946.35 millilitres in the US."] -2025-04-07 18:11:11.966926 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('gal', ' gal', ' Gallon', ' Approximately 4546.09 millilitres in Australia New Zealand the UK and Canada and approximately 3785.41 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["gal", " gal", " Gallon", " Approximately 4546.09 millilitres in Australia New Zealand the UK and Canada and approximately 3785.41 millilitres in the US."] -2025-04-07 18:11:11.974434 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('jiggers', ' jigger', ' Jigger', ' 1.5 fluid ounces.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["jiggers", " jigger", " Jigger", " 1.5 fluid ounces."] -2025-04-07 18:11:11.982214 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('oz', ' oz', ' Ounce', ' 1/4 lb for butter which can also be measured as 3 tablespoons.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["oz", " oz", " Ounce", " 1/4 lb for butter which can also be measured as 3 tablespoons."] -2025-04-07 18:11:11.989518 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('L', ' L', ' Liter', ' Commonly used for volume measurement in the metric system.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["L", " L", " Liter", " Commonly used for volume measurement in the metric system."] -2025-04-07 18:11:11.997321 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('mL', ' mL', ' Milliliter', ' Commonly used for volume measurement in the metric system.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["mL", " mL", " Milliliter", " Commonly used for volume measurement in the metric system."] -2025-04-07 18:11:12.005157 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('dm3', ' dm3', ' Cubic decimeter', ' Equivalent to 1 liter.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["dm3", " dm3", " Cubic decimeter", " Equivalent to 1 liter."] -2025-04-07 18:11:12.012662 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('g', ' g', ' Gram', ' Commonly used for weight measurement in the metric system.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["g", " g", " Gram", " Commonly used for weight measurement in the metric system."] -2025-04-07 18:11:12.020544 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('kg', ' kg', ' Kilogram', ' Commonly used for weight measurement in the metric system.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["kg", " kg", " Kilogram", " Commonly used for weight measurement in the metric system."] -2025-04-07 18:11:12.028832 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('lbs', ' lb', ' Pound', ' Used for weight measurement in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["lbs", " lb", " Pound", " Used for weight measurement in the US."] -2025-04-07 18:11:12.035928 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('fluid scruples', ' fluid scruple', ' Fluid scruple', " A unit used in the apothecaries' system but not commonly used in cooking."), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["fluid scruples", " fluid scruple", " Fluid scruple", " A unit used in the apothecaries' system but not commonly used in cooking."] -2025-04-07 18:11:12.044169 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('cm3', ' cm3', ' Cubic centimeter', ' Equivalent to 1 milliliter.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["cm3", " cm3", " Cubic centimeter", " Equivalent to 1 milliliter."] -2025-04-07 18:11:12.051848 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('breakfast cups', ' breakfast cup', ' Breakfast cup', ' Similar in size to the US customary cup and the metric cup.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["breakfast cups", " breakfast cup", " Breakfast cup", " Similar in size to the US customary cup and the metric cup."] -2025-04-07 18:11:12.059081 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('tumblers', ' tumbler', ' Tumblerful', ' A unit used in British cookery books and recipes.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["tumblers", " tumbler", " Tumblerful", " A unit used in British cookery books and recipes."] -2025-04-07 18:11:12.067370 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('winefulls', ' winefull', ' Wineglassful', ' A unit used in British cookery books and recipes.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["winefulls", " winefull", " Wineglassful", " A unit used in British cookery books and recipes."] -2025-04-07 18:11:12.074897 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('coffee cups', ' coffee cup', ' Coffee cup', ' Can vary from 100 to 200 millilitres.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["coffee cups", " coffee cup", " Coffee cup", " Can vary from 100 to 200 millilitres."] -2025-04-07 18:11:12.082570 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('sticks of butter', ' stick of butter', ' Stick of butter', ' 1/4 lb or 3 tablespoons.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["sticks of butter", " stick of butter", " Stick of butter", " 1/4 lb or 3 tablespoons."] -2025-04-07 18:11:12.090585 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('smidgens', ' smidgen', ' Smidgen', ' An approximate unit of measure.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["smidgens", " smidgen", " Smidgen", " An approximate unit of measure."] -2025-04-07 18:11:12.099307 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('dashes', ' dash', ' Dash', ' An approximate unit of measure.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["dashes", " dash", " Dash", " An approximate unit of measure."] -2025-04-07 18:11:12.106924 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('drops', ' drop', ' Drop', ' An approximate unit of measure.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["drops", " drop", " Drop", " An approximate unit of measure."] -2025-04-07 18:11:12.114986 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('eaches', ' each', ' Each', ' A single unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["eaches", " each", " Each", " A single unit."] -2025-04-07 18:11:12.123785 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('boxes', ' box', ' Box', ' A Single box of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["boxes", " box", " Box", " A Single box of a unit."] -2025-04-07 18:11:12.132171 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('crates', ' crate', ' Crate', ' a single crate of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["crates", " crate", " Crate", " a single crate of a unit."] -2025-04-07 18:11:12.140032 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('jars', ' jar', ' Jar', ' A single Jar of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["jars", " jar", " Jar", " A single Jar of a unit."] -2025-04-07 18:11:12.148143 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('cans', ' can', ' Can', ' A Single Can of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["cans", " can", " Can", " A Single Can of a unit."] -2025-04-07 18:11:12.157037 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('bars', ' bar', ' Bars', ' A Single bar of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["bars", " bar", " Bars", " A Single bar of a unit."] -2025-04-07 18:11:12.165175 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('loaves', ' loaf', ' Loaf', ' A single loaf of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["loaves", " loaf", " Loaf", " A single loaf of a unit."] -2025-04-07 18:11:12.172983 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('packs', ' pack', ' Pack', ' A Single Pack of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["packs", " pack", " Pack", " A Single Pack of a unit."] -2025-04-07 18:12:49.005060 --- CAUTION --- DatabaseError(message='duplicate key value violates unique constraint "units_plural_key"DETAIL: Key (plural)=(Plural) already exists.', payload=('Plural', ' Single', ' Fullname', ' Description'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["Plural", " Single", " Fullname", " Description"] -2025-04-07 18:12:49.018692 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('tsp', ' tsp', ' Teaspoon', ' 5 millilitres in Australia New Zealand UK Canada and the US but approximately 4.93 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["tsp", " tsp", " Teaspoon", " 5 millilitres in Australia New Zealand UK Canada and the US but approximately 4.93 millilitres in the US."] -2025-04-07 18:12:49.026767 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('dsp', ' dsp', ' Dessertspoon', ' 10 millilitres in Australia.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["dsp", " dsp", " Dessertspoon", " 10 millilitres in Australia."] -2025-04-07 18:12:49.035142 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('tbsp', ' tbsp', ' Tablespoon', ' 20 millilitres in Australia or 15 millilitres in New Zealand the UK Canada and the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["tbsp", " tbsp", " Tablespoon", " 20 millilitres in Australia or 15 millilitres in New Zealand the UK Canada and the US."] -2025-04-07 18:12:49.043176 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('fl oz', ' fl oz', ' Fluid ounce', ' 28.41 millilitres in the UK or approximately 29.57 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["fl oz", " fl oz", " Fluid ounce", " 28.41 millilitres in the UK or approximately 29.57 millilitres in the US."] -2025-04-07 18:12:49.052311 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('cups', ' cup', ' Cup', ' 250 millilitres in Australia and New Zealand or approximately 170.48 millilitres in the UK or approximately 227.31 millilitres in Canada and approximately 236.59 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["cups", " cup", " Cup", " 250 millilitres in Australia and New Zealand or approximately 170.48 millilitres in the UK or approximately 227.31 millilitres in Canada and approximately 236.59 millilitres in the US."] -2025-04-07 18:12:49.060527 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('pt', ' pt', ' Pint', ' 570 millilitres in Australia approximately 568.26 millilitres in New Zealand the UK and Canada and approximately 473.18 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["pt", " pt", " Pint", " 570 millilitres in Australia approximately 568.26 millilitres in New Zealand the UK and Canada and approximately 473.18 millilitres in the US."] -2025-04-07 18:12:49.068511 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('qt', ' qt', ' Quart', ' Approximately 1136.52 millilitres in Australia New Zealand the UK and Canada and approximately 946.35 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["qt", " qt", " Quart", " Approximately 1136.52 millilitres in Australia New Zealand the UK and Canada and approximately 946.35 millilitres in the US."] -2025-04-07 18:12:49.076951 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('gal', ' gal', ' Gallon', ' Approximately 4546.09 millilitres in Australia New Zealand the UK and Canada and approximately 3785.41 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["gal", " gal", " Gallon", " Approximately 4546.09 millilitres in Australia New Zealand the UK and Canada and approximately 3785.41 millilitres in the US."] -2025-04-07 18:12:49.086062 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('jiggers', ' jigger', ' Jigger', ' 1.5 fluid ounces.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["jiggers", " jigger", " Jigger", " 1.5 fluid ounces."] -2025-04-07 18:12:49.095057 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('oz', ' oz', ' Ounce', ' 1/4 lb for butter which can also be measured as 3 tablespoons.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["oz", " oz", " Ounce", " 1/4 lb for butter which can also be measured as 3 tablespoons."] -2025-04-07 18:12:49.102906 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('L', ' L', ' Liter', ' Commonly used for volume measurement in the metric system.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["L", " L", " Liter", " Commonly used for volume measurement in the metric system."] -2025-04-07 18:12:49.111927 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('mL', ' mL', ' Milliliter', ' Commonly used for volume measurement in the metric system.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["mL", " mL", " Milliliter", " Commonly used for volume measurement in the metric system."] -2025-04-07 18:12:49.119508 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('dm3', ' dm3', ' Cubic decimeter', ' Equivalent to 1 liter.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["dm3", " dm3", " Cubic decimeter", " Equivalent to 1 liter."] -2025-04-07 18:12:49.128094 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('g', ' g', ' Gram', ' Commonly used for weight measurement in the metric system.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["g", " g", " Gram", " Commonly used for weight measurement in the metric system."] -2025-04-07 18:12:49.136293 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('kg', ' kg', ' Kilogram', ' Commonly used for weight measurement in the metric system.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["kg", " kg", " Kilogram", " Commonly used for weight measurement in the metric system."] -2025-04-07 18:12:49.144897 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('lbs', ' lb', ' Pound', ' Used for weight measurement in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["lbs", " lb", " Pound", " Used for weight measurement in the US."] -2025-04-07 18:12:49.153354 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('fluid scruples', ' fluid scruple', ' Fluid scruple', " A unit used in the apothecaries' system but not commonly used in cooking."), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["fluid scruples", " fluid scruple", " Fluid scruple", " A unit used in the apothecaries' system but not commonly used in cooking."] -2025-04-07 18:12:49.162476 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('cm3', ' cm3', ' Cubic centimeter', ' Equivalent to 1 milliliter.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["cm3", " cm3", " Cubic centimeter", " Equivalent to 1 milliliter."] -2025-04-07 18:12:49.170611 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('breakfast cups', ' breakfast cup', ' Breakfast cup', ' Similar in size to the US customary cup and the metric cup.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["breakfast cups", " breakfast cup", " Breakfast cup", " Similar in size to the US customary cup and the metric cup."] -2025-04-07 18:12:49.178357 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('tumblers', ' tumbler', ' Tumblerful', ' A unit used in British cookery books and recipes.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["tumblers", " tumbler", " Tumblerful", " A unit used in British cookery books and recipes."] -2025-04-07 18:12:49.186429 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('winefulls', ' winefull', ' Wineglassful', ' A unit used in British cookery books and recipes.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["winefulls", " winefull", " Wineglassful", " A unit used in British cookery books and recipes."] -2025-04-07 18:12:49.195941 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('coffee cups', ' coffee cup', ' Coffee cup', ' Can vary from 100 to 200 millilitres.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["coffee cups", " coffee cup", " Coffee cup", " Can vary from 100 to 200 millilitres."] -2025-04-07 18:12:49.205197 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('sticks of butter', ' stick of butter', ' Stick of butter', ' 1/4 lb or 3 tablespoons.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["sticks of butter", " stick of butter", " Stick of butter", " 1/4 lb or 3 tablespoons."] -2025-04-07 18:12:49.212492 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('smidgens', ' smidgen', ' Smidgen', ' An approximate unit of measure.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["smidgens", " smidgen", " Smidgen", " An approximate unit of measure."] -2025-04-07 18:12:49.221728 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('dashes', ' dash', ' Dash', ' An approximate unit of measure.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["dashes", " dash", " Dash", " An approximate unit of measure."] -2025-04-07 18:12:49.231128 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('drops', ' drop', ' Drop', ' An approximate unit of measure.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["drops", " drop", " Drop", " An approximate unit of measure."] -2025-04-07 18:12:49.239584 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('eaches', ' each', ' Each', ' A single unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["eaches", " each", " Each", " A single unit."] -2025-04-07 18:12:49.248671 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('boxes', ' box', ' Box', ' A Single box of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["boxes", " box", " Box", " A Single box of a unit."] -2025-04-07 18:12:49.257268 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('crates', ' crate', ' Crate', ' a single crate of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["crates", " crate", " Crate", " a single crate of a unit."] -2025-04-07 18:12:49.266294 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('jars', ' jar', ' Jar', ' A single Jar of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["jars", " jar", " Jar", " A single Jar of a unit."] -2025-04-07 18:12:49.275199 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('cans', ' can', ' Can', ' A Single Can of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["cans", " can", " Can", " A Single Can of a unit."] -2025-04-07 18:12:49.282805 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('bars', ' bar', ' Bars', ' A Single bar of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["bars", " bar", " Bars", " A Single bar of a unit."] -2025-04-07 18:12:49.291482 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('loaves', ' loaf', ' Loaf', ' A single loaf of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["loaves", " loaf", " Loaf", " A single loaf of a unit."] -2025-04-07 18:12:49.301205 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('packs', ' pack', ' Pack', ' A Single Pack of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["packs", " pack", " Pack", " A Single Pack of a unit."] -2025-04-07 18:13:10.286385 --- CAUTION --- DatabaseError(message='duplicate key value violates unique constraint "units_plural_key"DETAIL: Key (plural)=(Plural) already exists.', payload=('Plural', ' Single', ' Fullname', ' Description'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["Plural", " Single", " Fullname", " Description"] -2025-04-07 18:13:10.298389 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('tsp', ' tsp', ' Teaspoon', ' 5 millilitres in Australia New Zealand UK Canada and the US but approximately 4.93 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["tsp", " tsp", " Teaspoon", " 5 millilitres in Australia New Zealand UK Canada and the US but approximately 4.93 millilitres in the US."] -2025-04-07 18:13:10.307226 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('dsp', ' dsp', ' Dessertspoon', ' 10 millilitres in Australia.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["dsp", " dsp", " Dessertspoon", " 10 millilitres in Australia."] -2025-04-07 18:13:10.316278 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('tbsp', ' tbsp', ' Tablespoon', ' 20 millilitres in Australia or 15 millilitres in New Zealand the UK Canada and the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["tbsp", " tbsp", " Tablespoon", " 20 millilitres in Australia or 15 millilitres in New Zealand the UK Canada and the US."] -2025-04-07 18:13:10.324427 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('fl oz', ' fl oz', ' Fluid ounce', ' 28.41 millilitres in the UK or approximately 29.57 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["fl oz", " fl oz", " Fluid ounce", " 28.41 millilitres in the UK or approximately 29.57 millilitres in the US."] -2025-04-07 18:13:10.333981 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('cups', ' cup', ' Cup', ' 250 millilitres in Australia and New Zealand or approximately 170.48 millilitres in the UK or approximately 227.31 millilitres in Canada and approximately 236.59 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["cups", " cup", " Cup", " 250 millilitres in Australia and New Zealand or approximately 170.48 millilitres in the UK or approximately 227.31 millilitres in Canada and approximately 236.59 millilitres in the US."] -2025-04-07 18:13:10.343232 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('pt', ' pt', ' Pint', ' 570 millilitres in Australia approximately 568.26 millilitres in New Zealand the UK and Canada and approximately 473.18 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["pt", " pt", " Pint", " 570 millilitres in Australia approximately 568.26 millilitres in New Zealand the UK and Canada and approximately 473.18 millilitres in the US."] -2025-04-07 18:13:10.350877 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('qt', ' qt', ' Quart', ' Approximately 1136.52 millilitres in Australia New Zealand the UK and Canada and approximately 946.35 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["qt", " qt", " Quart", " Approximately 1136.52 millilitres in Australia New Zealand the UK and Canada and approximately 946.35 millilitres in the US."] -2025-04-07 18:13:10.359701 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('gal', ' gal', ' Gallon', ' Approximately 4546.09 millilitres in Australia New Zealand the UK and Canada and approximately 3785.41 millilitres in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["gal", " gal", " Gallon", " Approximately 4546.09 millilitres in Australia New Zealand the UK and Canada and approximately 3785.41 millilitres in the US."] -2025-04-07 18:13:10.367839 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('jiggers', ' jigger', ' Jigger', ' 1.5 fluid ounces.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["jiggers", " jigger", " Jigger", " 1.5 fluid ounces."] -2025-04-07 18:13:10.376504 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('oz', ' oz', ' Ounce', ' 1/4 lb for butter which can also be measured as 3 tablespoons.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["oz", " oz", " Ounce", " 1/4 lb for butter which can also be measured as 3 tablespoons."] -2025-04-07 18:13:10.384509 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('L', ' L', ' Liter', ' Commonly used for volume measurement in the metric system.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["L", " L", " Liter", " Commonly used for volume measurement in the metric system."] -2025-04-07 18:13:10.392478 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('mL', ' mL', ' Milliliter', ' Commonly used for volume measurement in the metric system.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["mL", " mL", " Milliliter", " Commonly used for volume measurement in the metric system."] -2025-04-07 18:13:10.401408 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('dm3', ' dm3', ' Cubic decimeter', ' Equivalent to 1 liter.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["dm3", " dm3", " Cubic decimeter", " Equivalent to 1 liter."] -2025-04-07 18:13:10.410222 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('g', ' g', ' Gram', ' Commonly used for weight measurement in the metric system.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["g", " g", " Gram", " Commonly used for weight measurement in the metric system."] -2025-04-07 18:13:10.418352 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('kg', ' kg', ' Kilogram', ' Commonly used for weight measurement in the metric system.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["kg", " kg", " Kilogram", " Commonly used for weight measurement in the metric system."] -2025-04-07 18:13:10.426544 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('lbs', ' lb', ' Pound', ' Used for weight measurement in the US.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["lbs", " lb", " Pound", " Used for weight measurement in the US."] -2025-04-07 18:13:10.435351 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('fluid scruples', ' fluid scruple', ' Fluid scruple', " A unit used in the apothecaries' system but not commonly used in cooking."), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["fluid scruples", " fluid scruple", " Fluid scruple", " A unit used in the apothecaries' system but not commonly used in cooking."] -2025-04-07 18:13:10.444346 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('cm3', ' cm3', ' Cubic centimeter', ' Equivalent to 1 milliliter.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["cm3", " cm3", " Cubic centimeter", " Equivalent to 1 milliliter."] -2025-04-07 18:13:10.452199 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('breakfast cups', ' breakfast cup', ' Breakfast cup', ' Similar in size to the US customary cup and the metric cup.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["breakfast cups", " breakfast cup", " Breakfast cup", " Similar in size to the US customary cup and the metric cup."] -2025-04-07 18:13:10.461058 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('tumblers', ' tumbler', ' Tumblerful', ' A unit used in British cookery books and recipes.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["tumblers", " tumbler", " Tumblerful", " A unit used in British cookery books and recipes."] -2025-04-07 18:13:10.469292 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('winefulls', ' winefull', ' Wineglassful', ' A unit used in British cookery books and recipes.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["winefulls", " winefull", " Wineglassful", " A unit used in British cookery books and recipes."] -2025-04-07 18:13:10.478094 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('coffee cups', ' coffee cup', ' Coffee cup', ' Can vary from 100 to 200 millilitres.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["coffee cups", " coffee cup", " Coffee cup", " Can vary from 100 to 200 millilitres."] -2025-04-07 18:13:10.486368 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('sticks of butter', ' stick of butter', ' Stick of butter', ' 1/4 lb or 3 tablespoons.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["sticks of butter", " stick of butter", " Stick of butter", " 1/4 lb or 3 tablespoons."] -2025-04-07 18:13:10.494021 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('smidgens', ' smidgen', ' Smidgen', ' An approximate unit of measure.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["smidgens", " smidgen", " Smidgen", " An approximate unit of measure."] -2025-04-07 18:13:10.502494 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('dashes', ' dash', ' Dash', ' An approximate unit of measure.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["dashes", " dash", " Dash", " An approximate unit of measure."] -2025-04-07 18:13:10.510827 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('drops', ' drop', ' Drop', ' An approximate unit of measure.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["drops", " drop", " Drop", " An approximate unit of measure."] -2025-04-07 18:13:10.519133 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('eaches', ' each', ' Each', ' A single unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["eaches", " each", " Each", " A single unit."] -2025-04-07 18:13:10.528226 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('boxes', ' box', ' Box', ' A Single box of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["boxes", " box", " Box", " A Single box of a unit."] -2025-04-07 18:13:10.537276 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('crates', ' crate', ' Crate', ' a single crate of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["crates", " crate", " Crate", " a single crate of a unit."] -2025-04-07 18:13:10.544973 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('jars', ' jar', ' Jar', ' A single Jar of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["jars", " jar", " Jar", " A single Jar of a unit."] -2025-04-07 18:13:10.554072 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('cans', ' can', ' Can', ' A Single Can of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["cans", " can", " Can", " A Single Can of a unit."] -2025-04-07 18:13:10.561977 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('bars', ' bar', ' Bars', ' A Single bar of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["bars", " bar", " Bars", " A Single bar of a unit."] -2025-04-07 18:13:10.570396 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('loaves', ' loaf', ' Loaf', ' A single loaf of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["loaves", " loaf", " Loaf", " A single loaf of a unit."] -2025-04-07 18:13:10.579705 --- CAUTION --- DatabaseError(message='current transaction is aborted, commands ignored until end of transaction block', payload=('packs', ' pack', ' Pack', ' A Single Pack of a unit.'), sql='INSERT INTO units(plural, single, fullname, description) VALUES (%s, %s, %s, %s) RETURNING *;') - ["packs", " pack", " Pack", " A Single Pack of a unit."]2025-04-20 19:12:42.901904 --- INFO --- logins Created! -2025-04-20 19:12:42.907042 --- INFO --- sites Created! -2025-04-20 19:12:42.916090 --- INFO --- roles Created! -2025-04-20 19:12:42.924299 --- INFO --- units Created! -2025-04-20 19:12:42.936431 --- INFO --- cost_layers Created! -2025-04-20 19:12:42.948063 --- INFO --- linked_items Created! -2025-04-20 19:12:42.956357 --- INFO --- brands Created! -2025-04-20 19:12:42.965966 --- INFO --- food_info Created! -2025-04-20 19:12:42.978005 --- INFO --- item_info Created! -2025-04-20 19:12:42.989756 --- INFO --- zones Created! -2025-04-20 19:12:42.999753 --- INFO --- locations Created! -2025-04-20 19:12:43.010766 --- INFO --- logistics_info Created! -2025-04-20 19:12:43.020793 --- INFO --- transactions Created! -2025-04-20 19:12:43.032889 --- INFO --- item Created! -2025-04-20 19:12:43.042155 --- INFO --- vendors Created! -2025-04-20 19:12:43.052984 --- INFO --- groups Created! -2025-04-20 19:12:43.065257 --- INFO --- group_items Created! -2025-04-20 19:12:43.075250 --- INFO --- receipts Created! -2025-04-20 19:12:43.085279 --- INFO --- receipt_items Created! -2025-04-20 19:12:43.095708 --- INFO --- recipes Created! -2025-04-20 19:12:43.108432 --- INFO --- recipe_items Created! -2025-04-20 19:12:43.118248 --- INFO --- shopping_lists Created! -2025-04-20 19:12:43.130093 --- INFO --- shopping_list_items Created! -2025-04-20 19:12:43.142255 --- INFO --- item_locations Created! -2025-04-20 19:12:43.152766 --- INFO --- conversions Created! -2025-04-20 19:12:43.157756 --- INFO --- Admin User Created! -2025-04-20 19:12:43.173869 --- ERROR --- module 'MyDataclasses' has no attribute 'ZonePayload' -2025-04-20 19:13:09.179803 --- INFO --- logins Created! -2025-04-20 19:13:09.186834 --- INFO --- sites Created! -2025-04-20 19:13:09.191988 --- INFO --- roles Created! -2025-04-20 19:13:09.196031 --- INFO --- units Created! -2025-04-20 19:13:09.203142 --- INFO --- cost_layers Created! -2025-04-20 19:13:09.211122 --- INFO --- linked_items Created! -2025-04-20 19:13:09.217381 --- INFO --- brands Created! -2025-04-20 19:13:09.223367 --- INFO --- food_info Created! -2025-04-20 19:13:09.231980 --- INFO --- item_info Created! -2025-04-20 19:13:09.239962 --- INFO --- zones Created! -2025-04-20 19:13:09.247043 --- INFO --- locations Created! -2025-04-20 19:13:09.254389 --- INFO --- logistics_info Created! -2025-04-20 19:13:09.261528 --- INFO --- transactions Created! -2025-04-20 19:13:09.270171 --- INFO --- item Created! -2025-04-20 19:13:09.276674 --- INFO --- vendors Created! -2025-04-20 19:13:09.283569 --- INFO --- groups Created! -2025-04-20 19:13:09.291142 --- INFO --- group_items Created! -2025-04-20 19:13:09.300047 --- INFO --- receipts Created! -2025-04-20 19:13:09.307082 --- INFO --- receipt_items Created! -2025-04-20 19:13:09.314189 --- INFO --- recipes Created! -2025-04-20 19:13:09.323320 --- INFO --- recipe_items Created! -2025-04-20 19:13:09.331286 --- INFO --- shopping_lists Created! -2025-04-20 19:13:09.338671 --- INFO --- shopping_list_items Created! -2025-04-20 19:13:09.347666 --- INFO --- item_locations Created! -2025-04-20 19:13:09.354290 --- INFO --- conversions Created! -2025-04-20 19:13:09.358352 --- INFO --- Admin User Created! -2025-04-20 19:13:09.373201 --- ERROR --- module 'MyDataclasses' has no attribute 'ZonePayload' -2025-04-20 19:14:30.040093 --- INFO --- logins Created! -2025-04-20 19:14:30.047388 --- INFO --- sites Created! -2025-04-20 19:14:30.053137 --- INFO --- roles Created! -2025-04-20 19:14:30.058339 --- INFO --- units Created! -2025-04-20 19:14:30.066445 --- INFO --- cost_layers Created! -2025-04-20 19:14:30.074589 --- INFO --- linked_items Created! -2025-04-20 19:14:30.080372 --- INFO --- brands Created! -2025-04-20 19:14:30.088112 --- INFO --- food_info Created! -2025-04-20 19:14:30.095435 --- INFO --- item_info Created! -2025-04-20 19:14:30.104268 --- INFO --- zones Created! -2025-04-20 19:14:30.111070 --- INFO --- locations Created! -2025-04-20 19:14:30.118747 --- INFO --- logistics_info Created! -2025-04-20 19:14:30.126464 --- INFO --- transactions Created! -2025-04-20 19:14:30.136123 --- INFO --- item Created! -2025-04-20 19:14:30.142326 --- INFO --- vendors Created! -2025-04-20 19:14:30.150179 --- INFO --- groups Created! -2025-04-20 19:14:30.159002 --- INFO --- group_items Created! -2025-04-20 19:14:30.165728 --- INFO --- receipts Created! -2025-04-20 19:14:30.173195 --- INFO --- receipt_items Created! -2025-04-20 19:14:30.180307 --- INFO --- recipes Created! -2025-04-20 19:14:30.188377 --- INFO --- recipe_items Created! -2025-04-20 19:14:30.195275 --- INFO --- shopping_lists Created! -2025-04-20 19:14:30.204333 --- INFO --- shopping_list_items Created! -2025-04-20 19:14:30.212189 --- INFO --- item_locations Created! -2025-04-20 19:14:30.218980 --- INFO --- conversions Created! -2025-04-20 19:14:30.223144 --- INFO --- Admin User Created! -2025-04-20 19:14:30.237347 --- ERROR --- module 'MyDataclasses' has no attribute 'ZonePayload' -2025-04-20 19:15:37.294592 --- INFO --- logins Created! -2025-04-20 19:15:37.300684 --- INFO --- sites Created! -2025-04-20 19:15:37.306214 --- INFO --- roles Created! -2025-04-20 19:15:37.310743 --- INFO --- units Created! -2025-04-20 19:15:37.320253 --- INFO --- cost_layers Created! -2025-04-20 19:15:37.328204 --- INFO --- linked_items Created! -2025-04-20 19:15:37.334340 --- INFO --- brands Created! -2025-04-20 19:15:37.341236 --- INFO --- food_info Created! -2025-04-20 19:15:37.348720 --- INFO --- item_info Created! -2025-04-20 19:15:37.358766 --- INFO --- zones Created! -2025-04-20 19:15:37.365313 --- INFO --- locations Created! -2025-04-20 19:15:37.373227 --- INFO --- logistics_info Created! -2025-04-20 19:15:37.379296 --- INFO --- transactions Created! -2025-04-20 19:15:37.387641 --- INFO --- item Created! -2025-04-20 19:15:37.395209 --- INFO --- vendors Created! -2025-04-20 19:15:37.402427 --- INFO --- groups Created! -2025-04-20 19:15:37.410391 --- INFO --- group_items Created! -2025-04-20 19:15:37.418421 --- INFO --- receipts Created! -2025-04-20 19:15:37.425524 --- INFO --- receipt_items Created! -2025-04-20 19:15:37.432240 --- INFO --- recipes Created! -2025-04-20 19:15:37.441206 --- INFO --- recipe_items Created! -2025-04-20 19:15:37.448373 --- INFO --- shopping_lists Created! -2025-04-20 19:15:37.456919 --- INFO --- shopping_list_items Created! -2025-04-20 19:15:37.465857 --- INFO --- item_locations Created! -2025-04-20 19:15:37.471974 --- INFO --- conversions Created! -2025-04-20 19:15:37.477332 --- INFO --- Admin User Created! -2025-04-20 19:15:37.488490 --- ERROR --- module 'MyDataclasses' has no attribute 'ZonePayload' -2025-04-20 19:16:04.245426 --- INFO --- logins Created! -2025-04-20 19:16:04.252369 --- INFO --- sites Created! -2025-04-20 19:16:04.257457 --- INFO --- roles Created! -2025-04-20 19:16:04.262528 --- INFO --- units Created! -2025-04-20 19:16:04.268813 --- INFO --- cost_layers Created! -2025-04-20 19:16:04.277403 --- INFO --- linked_items Created! -2025-04-20 19:16:04.282454 --- INFO --- brands Created! -2025-04-20 19:16:04.289349 --- INFO --- food_info Created! -2025-04-20 19:16:04.297588 --- INFO --- item_info Created! -2025-04-20 19:16:04.304872 --- INFO --- zones Created! -2025-04-20 19:16:04.312242 --- INFO --- locations Created! -2025-04-20 19:16:04.320032 --- INFO --- logistics_info Created! -2025-04-20 19:16:04.327526 --- INFO --- transactions Created! -2025-04-20 19:16:04.336107 --- INFO --- item Created! -2025-04-20 19:16:04.342583 --- INFO --- vendors Created! -2025-04-20 19:16:04.350295 --- INFO --- groups Created! -2025-04-20 19:16:04.357531 --- INFO --- group_items Created! -2025-04-20 19:16:04.365626 --- INFO --- receipts Created! -2025-04-20 19:16:04.372230 --- INFO --- receipt_items Created! -2025-04-20 19:16:04.379414 --- INFO --- recipes Created! -2025-04-20 19:16:04.387527 --- INFO --- recipe_items Created! -2025-04-20 19:16:04.394398 --- INFO --- shopping_lists Created! -2025-04-20 19:16:04.403440 --- INFO --- shopping_list_items Created! -2025-04-20 19:16:04.410510 --- INFO --- item_locations Created! -2025-04-20 19:16:04.418073 --- INFO --- conversions Created! -2025-04-20 19:16:04.423218 --- INFO --- Admin User Created! -2025-04-20 19:16:04.436197 --- ERROR --- module 'MyDataclasses' has no attribute 'ZonePayload' -2025-04-20 19:16:58.466588 --- INFO --- logins Created! -2025-04-20 19:16:58.472688 --- INFO --- sites Created! -2025-04-20 19:16:58.477737 --- INFO --- roles Created! -2025-04-20 19:16:58.481251 --- INFO --- units Created! -2025-04-20 19:16:58.489772 --- INFO --- cost_layers Created! -2025-04-20 19:16:58.497672 --- INFO --- linked_items Created! -2025-04-20 19:16:58.502626 --- INFO --- brands Created! -2025-04-20 19:16:58.509339 --- INFO --- food_info Created! -2025-04-20 19:16:58.516796 --- INFO --- item_info Created! -2025-04-20 19:16:58.524536 --- INFO --- zones Created! -2025-04-20 19:16:58.532376 --- INFO --- locations Created! -2025-04-20 19:16:58.540104 --- INFO --- logistics_info Created! -2025-04-20 19:16:58.547122 --- INFO --- transactions Created! -2025-04-20 19:16:58.555955 --- INFO --- item Created! -2025-04-20 19:16:58.562475 --- INFO --- vendors Created! -2025-04-20 19:16:58.570565 --- INFO --- groups Created! -2025-04-20 19:16:58.578991 --- INFO --- group_items Created! -2025-04-20 19:16:58.586669 --- INFO --- receipts Created! -2025-04-20 19:16:58.594838 --- INFO --- receipt_items Created! -2025-04-20 19:16:58.601902 --- INFO --- recipes Created! -2025-04-20 19:16:58.608915 --- INFO --- recipe_items Created! -2025-04-20 19:16:58.617684 --- INFO --- shopping_lists Created! -2025-04-20 19:16:58.625427 --- INFO --- shopping_list_items Created! -2025-04-20 19:16:58.635479 --- INFO --- item_locations Created! -2025-04-20 19:16:58.642372 --- INFO --- conversions Created! -2025-04-20 19:16:58.646415 --- INFO --- Admin User Created! -2025-04-20 19:16:58.668418 --- ERROR --- module 'MyDataclasses' has no attribute 'VendorPayload' -2025-04-20 19:17:15.674844 --- INFO --- logins Created! -2025-04-20 19:17:15.682368 --- INFO --- sites Created! -2025-04-20 19:17:15.687761 --- INFO --- roles Created! -2025-04-20 19:17:15.692281 --- INFO --- units Created! -2025-04-20 19:17:15.700205 --- INFO --- cost_layers Created! -2025-04-20 19:17:15.707736 --- INFO --- linked_items Created! -2025-04-20 19:17:15.714280 --- INFO --- brands Created! -2025-04-20 19:17:15.720500 --- INFO --- food_info Created! -2025-04-20 19:17:15.728902 --- INFO --- item_info Created! -2025-04-20 19:17:15.735575 --- INFO --- zones Created! -2025-04-20 19:17:15.743577 --- INFO --- locations Created! -2025-04-20 19:17:15.750537 --- INFO --- logistics_info Created! -2025-04-20 19:17:15.757739 --- INFO --- transactions Created! -2025-04-20 19:17:15.767727 --- INFO --- item Created! -2025-04-20 19:17:15.773470 --- INFO --- vendors Created! -2025-04-20 19:17:15.781078 --- INFO --- groups Created! -2025-04-20 19:17:15.791354 --- INFO --- group_items Created! -2025-04-20 19:17:15.799134 --- INFO --- receipts Created! -2025-04-20 19:17:15.806841 --- INFO --- receipt_items Created! -2025-04-20 19:17:15.813370 --- INFO --- recipes Created! -2025-04-20 19:17:15.821296 --- INFO --- recipe_items Created! -2025-04-20 19:17:15.828999 --- INFO --- shopping_lists Created! -2025-04-20 19:17:15.837757 --- INFO --- shopping_list_items Created! -2025-04-20 19:17:15.846351 --- INFO --- item_locations Created! -2025-04-20 19:17:15.853372 --- INFO --- conversions Created! -2025-04-20 19:17:15.856625 --- INFO --- Admin User Created! -2025-04-20 19:17:15.871202 --- ERROR --- module 'MyDataclasses' has no attribute 'VendorPayload' -2025-04-20 19:17:59.229086 --- INFO --- logins Created! -2025-04-20 19:17:59.236178 --- INFO --- sites Created! -2025-04-20 19:17:59.241179 --- INFO --- roles Created! -2025-04-20 19:17:59.244639 --- INFO --- units Created! -2025-04-20 19:17:59.252556 --- INFO --- cost_layers Created! -2025-04-20 19:17:59.258931 --- INFO --- linked_items Created! -2025-04-20 19:17:59.265640 --- INFO --- brands Created! -2025-04-20 19:17:59.271635 --- INFO --- food_info Created! -2025-04-20 19:17:59.281402 --- INFO --- item_info Created! -2025-04-20 19:17:59.289153 --- INFO --- zones Created! -2025-04-20 19:17:59.295595 --- INFO --- locations Created! -2025-04-20 19:17:59.303510 --- INFO --- logistics_info Created! -2025-04-20 19:17:59.310620 --- INFO --- transactions Created! -2025-04-20 19:17:59.318745 --- INFO --- item Created! -2025-04-20 19:17:59.325400 --- INFO --- vendors Created! -2025-04-20 19:17:59.333182 --- INFO --- groups Created! -2025-04-20 19:17:59.341367 --- INFO --- group_items Created! -2025-04-20 19:17:59.348914 --- INFO --- receipts Created! -2025-04-20 19:17:59.355674 --- INFO --- receipt_items Created! -2025-04-20 19:17:59.363428 --- INFO --- recipes Created! -2025-04-20 19:17:59.371858 --- INFO --- recipe_items Created! -2025-04-20 19:17:59.378939 --- INFO --- shopping_lists Created! -2025-04-20 19:17:59.388138 --- INFO --- shopping_list_items Created! -2025-04-20 19:17:59.395999 --- INFO --- item_locations Created! -2025-04-20 19:17:59.402528 --- INFO --- conversions Created! -2025-04-20 19:17:59.406967 --- INFO --- Admin User Created! -2025-04-20 19:43:36.914652 --- INFO --- logins Created! -2025-04-20 19:43:36.922436 --- INFO --- sites Created! -2025-04-20 19:43:36.927458 --- INFO --- roles Created! -2025-04-20 19:43:36.931555 --- INFO --- units Created! -2025-04-20 19:43:36.939094 --- INFO --- cost_layers Created! -2025-04-20 19:43:36.947628 --- INFO --- linked_items Created! -2025-04-20 19:43:36.953631 --- INFO --- brands Created! -2025-04-20 19:43:36.959852 --- INFO --- food_info Created! -2025-04-20 19:43:36.968778 --- INFO --- item_info Created! -2025-04-20 19:43:36.976558 --- INFO --- zones Created! -2025-04-20 19:43:36.983310 --- INFO --- locations Created! -2025-04-20 19:43:36.990780 --- INFO --- logistics_info Created! -2025-04-20 19:43:36.998082 --- INFO --- transactions Created! -2025-04-20 19:43:37.005780 --- INFO --- item Created! -2025-04-20 19:43:37.013460 --- INFO --- vendors Created! -2025-04-20 19:43:37.020215 --- INFO --- groups Created! -2025-04-20 19:43:37.028782 --- INFO --- group_items Created! -2025-04-20 19:43:37.036257 --- INFO --- receipts Created! -2025-04-20 19:43:37.043565 --- INFO --- receipt_items Created! -2025-04-20 19:43:37.049814 --- INFO --- recipes Created! -2025-04-20 19:43:37.057702 --- INFO --- recipe_items Created! -2025-04-20 19:43:37.065761 --- INFO --- shopping_lists Created! -2025-04-20 19:43:37.073370 --- INFO --- shopping_list_items Created! -2025-04-20 19:43:37.081053 --- INFO --- item_locations Created! -2025-04-20 19:43:37.088088 --- INFO --- conversions Created! -2025-04-20 19:43:37.093156 --- INFO --- Admin User Created! -2025-04-20 19:45:44.395265 --- INFO --- item_info DROPPED! -2025-04-20 19:45:44.405900 --- INFO --- items DROPPED! -2025-04-20 19:45:44.414804 --- INFO --- cost_layers DROPPED! -2025-04-20 19:45:44.422703 --- INFO --- linked_items DROPPED! -2025-04-20 19:45:44.430346 --- INFO --- transactions DROPPED! -2025-04-20 19:45:44.437350 --- INFO --- brands DROPPED! -2025-04-20 19:45:44.444569 --- INFO --- food_info DROPPED! -2025-04-20 19:45:44.452885 --- INFO --- logistics_info DROPPED! -2025-04-20 19:48:31.583108 --- INFO --- item_info DROPPED! -2025-04-20 19:48:31.591460 --- INFO --- items DROPPED! -2025-04-20 19:48:31.596408 --- INFO --- cost_layers DROPPED! -2025-04-20 19:48:31.601566 --- INFO --- linked_items DROPPED! -2025-04-20 19:48:31.607329 --- INFO --- transactions DROPPED! -2025-04-20 19:48:31.611822 --- INFO --- brands DROPPED! -2025-04-20 19:48:31.615984 --- INFO --- food_info DROPPED! -2025-04-20 19:48:31.621444 --- INFO --- logistics_info DROPPED! -2025-04-20 19:51:08.211394 --- INFO --- item_info DROPPED! -2025-04-20 19:51:08.219628 --- INFO --- items DROPPED! -2025-04-20 19:51:08.225163 --- INFO --- cost_layers DROPPED! -2025-04-20 19:51:08.231236 --- INFO --- linked_items DROPPED! -2025-04-20 19:51:08.236599 --- INFO --- transactions DROPPED! -2025-04-20 19:51:08.241802 --- INFO --- brands DROPPED! -2025-04-20 19:51:08.247341 --- INFO --- food_info DROPPED! -2025-04-20 19:51:08.251883 --- INFO --- logistics_info DROPPED! -2025-04-20 19:52:54.948592 --- INFO --- item_info DROPPED! -2025-04-20 19:52:54.956447 --- INFO --- items DROPPED! -2025-04-20 19:52:54.962023 --- INFO --- cost_layers DROPPED! -2025-04-20 19:52:54.967556 --- INFO --- linked_items DROPPED! -2025-04-20 19:52:54.973165 --- INFO --- transactions DROPPED! -2025-04-20 19:52:54.976632 --- INFO --- brands DROPPED! -2025-04-20 19:52:54.981398 --- INFO --- food_info DROPPED! -2025-04-20 19:52:54.985072 --- INFO --- logistics_info DROPPED! -2025-04-20 19:52:54.989456 --- ERROR --- DatabaseError(message='table "testsite_zones" does not exist', payload=DROP TABLE TestSite_zones CASCADE;, sql='zones') -2025-04-20 19:56:25.272595 --- INFO --- item_info DROPPED! -2025-04-20 19:56:25.282064 --- INFO --- items DROPPED! -2025-04-20 19:56:25.287581 --- INFO --- cost_layers DROPPED! -2025-04-20 19:56:25.293563 --- INFO --- linked_items DROPPED! -2025-04-20 19:56:25.298578 --- INFO --- transactions DROPPED! -2025-04-20 19:56:25.303670 --- INFO --- brands DROPPED! -2025-04-20 19:56:25.307742 --- INFO --- food_info DROPPED! -2025-04-20 19:56:25.313677 --- INFO --- logistics_info DROPPED! -2025-04-20 19:56:25.317716 --- INFO --- zones DROPPED! -2025-04-20 19:56:25.325855 --- INFO --- locations DROPPED! -2025-04-20 19:56:25.330990 --- INFO --- vendors DROPPED! -2025-04-20 19:56:25.337850 --- INFO --- group_items DROPPED! -2025-04-20 19:56:25.346723 --- INFO --- groups DROPPED! -2025-04-20 19:56:25.354480 --- INFO --- receipt_items DROPPED! -2025-04-20 19:56:25.362108 --- INFO --- receipts DROPPED! -2025-04-20 19:56:25.369684 --- INFO --- recipe_items DROPPED! -2025-04-20 19:56:25.377807 --- INFO --- recipes DROPPED! -2025-04-20 19:56:25.385620 --- INFO --- shopping_list_items DROPPED! -2025-04-20 19:56:25.393541 --- INFO --- shopping_lists DROPPED! -2025-04-20 19:56:25.401384 --- INFO --- item_locations DROPPED! -2025-04-20 19:56:25.405523 --- INFO --- conversions DROPPED! -2025-04-20 19:58:10.901757 --- INFO --- item_info DROPPED! -2025-04-20 19:58:10.911845 --- INFO --- items DROPPED! -2025-04-20 19:58:10.917872 --- INFO --- cost_layers DROPPED! -2025-04-20 19:58:10.922065 --- INFO --- linked_items DROPPED! -2025-04-20 19:58:10.928478 --- INFO --- transactions DROPPED! -2025-04-20 19:58:10.932582 --- INFO --- brands DROPPED! -2025-04-20 19:58:10.936689 --- INFO --- food_info DROPPED! -2025-04-20 19:58:10.941754 --- INFO --- logistics_info DROPPED! -2025-04-20 19:58:36.985976 --- INFO --- item_info DROPPED! -2025-04-20 19:58:36.996149 --- INFO --- items DROPPED! -2025-04-20 19:58:37.001166 --- INFO --- cost_layers DROPPED! -2025-04-20 19:58:37.006862 --- INFO --- linked_items DROPPED! -2025-04-20 19:58:37.012179 --- INFO --- transactions DROPPED! -2025-04-20 19:58:37.016694 --- INFO --- brands DROPPED! -2025-04-20 19:58:37.020758 --- INFO --- food_info DROPPED! -2025-04-20 19:58:37.026061 --- INFO --- logistics_info DROPPED! -2025-04-20 20:07:37.732426 --- INFO --- item_info DROPPED! -2025-04-20 20:07:37.740467 --- INFO --- items DROPPED! -2025-04-20 20:07:37.745042 --- INFO --- cost_layers DROPPED! -2025-04-20 20:07:37.750893 --- INFO --- linked_items DROPPED! -2025-04-20 20:07:37.754429 --- INFO --- transactions DROPPED! -2025-04-20 20:07:37.758729 --- INFO --- brands DROPPED! -2025-04-20 20:07:37.763189 --- INFO --- food_info DROPPED! -2025-04-20 20:07:37.767020 --- INFO --- logistics_info DROPPED! -2025-04-20 20:07:37.771055 --- INFO --- zones DROPPED! -2025-04-20 20:07:37.775628 --- INFO --- locations DROPPED! -2025-04-20 20:07:37.779735 --- INFO --- vendors DROPPED! -2025-04-20 20:07:37.784456 --- INFO --- group_items DROPPED! -2025-04-20 20:07:37.788915 --- INFO --- groups DROPPED! -2025-04-20 20:07:37.793395 --- INFO --- receipt_items DROPPED! -2025-04-20 20:07:37.798563 --- INFO --- receipts DROPPED! -2025-04-20 20:07:37.803691 --- INFO --- recipe_items DROPPED! -2025-04-20 20:07:37.808903 --- INFO --- recipes DROPPED! -2025-04-20 20:07:37.813005 --- INFO --- shopping_list_items DROPPED! -2025-04-20 20:07:37.818899 --- INFO --- shopping_lists DROPPED! -2025-04-20 20:07:37.823062 --- INFO --- item_locations DROPPED! -2025-04-20 20:07:37.827577 --- INFO --- conversions DROPPED! -2025-04-20 20:10:51.725827 --- INFO --- item_info DROPPED! -2025-04-20 20:10:51.735709 --- INFO --- items DROPPED! -2025-04-20 20:10:51.741311 --- INFO --- cost_layers DROPPED! -2025-04-20 20:10:51.745890 --- INFO --- linked_items DROPPED! -2025-04-20 20:10:51.750915 --- INFO --- transactions DROPPED! -2025-04-20 20:10:51.755599 --- INFO --- brands DROPPED! -2025-04-20 20:10:51.761188 --- INFO --- food_info DROPPED! -2025-04-20 20:10:51.765063 --- INFO --- logistics_info DROPPED! -2025-04-20 20:10:51.769585 --- INFO --- zones DROPPED! -2025-04-20 20:10:51.774893 --- INFO --- locations DROPPED! -2025-04-20 20:10:51.779100 --- INFO --- vendors DROPPED! -2025-04-20 20:10:51.784704 --- INFO --- group_items DROPPED! -2025-04-20 20:10:51.789211 --- INFO --- groups DROPPED! -2025-04-20 20:10:51.793357 --- INFO --- receipt_items DROPPED! -2025-04-20 20:10:51.799194 --- INFO --- receipts DROPPED! -2025-04-20 20:10:51.803289 --- INFO --- recipe_items DROPPED! -2025-04-20 20:10:51.808076 --- INFO --- recipes DROPPED! -2025-04-20 20:10:51.813010 --- INFO --- shopping_list_items DROPPED! -2025-04-20 20:10:51.817596 --- INFO --- shopping_lists DROPPED! -2025-04-20 20:10:51.821643 --- INFO --- item_locations DROPPED! -2025-04-20 20:10:51.826587 --- INFO --- conversions DROPPED! -2025-04-20 20:11:14.056575 --- INFO --- logins Created! -2025-04-20 20:11:14.063971 --- INFO --- sites Created! -2025-04-20 20:11:14.069365 --- INFO --- roles Created! -2025-04-20 20:11:14.073411 --- INFO --- units Created! -2025-04-20 20:11:14.082962 --- INFO --- cost_layers Created! -2025-04-20 20:11:14.091859 --- INFO --- linked_items Created! -2025-04-20 20:11:14.096907 --- INFO --- brands Created! -2025-04-20 20:11:14.104713 --- INFO --- food_info Created! -2025-04-20 20:11:14.110843 --- INFO --- item_info Created! -2025-04-20 20:11:14.119202 --- INFO --- zones Created! -2025-04-20 20:11:14.125756 --- INFO --- locations Created! -2025-04-20 20:11:14.131825 --- INFO --- logistics_info Created! -2025-04-20 20:11:14.138848 --- INFO --- transactions Created! -2025-04-20 20:11:14.146927 --- INFO --- item Created! -2025-04-20 20:11:14.152932 --- INFO --- vendors Created! -2025-04-20 20:11:14.159374 --- INFO --- groups Created! -2025-04-20 20:11:14.166932 --- INFO --- group_items Created! -2025-04-20 20:11:14.174750 --- INFO --- receipts Created! -2025-04-20 20:11:14.181847 --- INFO --- receipt_items Created! -2025-04-20 20:11:14.186633 --- INFO --- recipes Created! -2025-04-20 20:11:14.194852 --- INFO --- recipe_items Created! -2025-04-20 20:11:14.201475 --- INFO --- shopping_lists Created! -2025-04-20 20:11:14.209506 --- INFO --- shopping_list_items Created! -2025-04-20 20:11:14.217085 --- INFO --- item_locations Created! -2025-04-20 20:11:14.224012 --- INFO --- conversions Created! -2025-04-20 20:11:14.227800 --- INFO --- Admin User Created! -2025-04-20 20:11:14.240274 --- ERROR --- DatabaseError(message='tuple index out of range', payload=('main', ''), sql='INSERT INTO testsite_zones(name, description, site_id) VALUES (%s, %s, %s) RETURNING *;') -2025-04-20 20:12:29.007584 --- INFO --- logins Created! -2025-04-20 20:12:29.015493 --- INFO --- sites Created! -2025-04-20 20:12:29.021142 --- INFO --- roles Created! -2025-04-20 20:12:29.025026 --- INFO --- units Created! -2025-04-20 20:12:29.032140 --- INFO --- cost_layers Created! -2025-04-20 20:12:29.039496 --- INFO --- linked_items Created! -2025-04-20 20:12:29.046115 --- INFO --- brands Created! -2025-04-20 20:12:29.052237 --- INFO --- food_info Created! -2025-04-20 20:12:29.060538 --- INFO --- item_info Created! -2025-04-20 20:12:29.066956 --- INFO --- zones Created! -2025-04-20 20:12:29.073431 --- INFO --- locations Created! -2025-04-20 20:12:29.082564 --- INFO --- logistics_info Created! -2025-04-20 20:12:29.090000 --- INFO --- transactions Created! -2025-04-20 20:12:29.098688 --- INFO --- item Created! -2025-04-20 20:12:29.104873 --- INFO --- vendors Created! -2025-04-20 20:12:29.112717 --- INFO --- groups Created! -2025-04-20 20:12:29.120101 --- INFO --- group_items Created! -2025-04-20 20:12:29.128686 --- INFO --- receipts Created! -2025-04-20 20:12:29.135147 --- INFO --- receipt_items Created! -2025-04-20 20:12:29.141797 --- INFO --- recipes Created! -2025-04-20 20:12:29.151352 --- INFO --- recipe_items Created! -2025-04-20 20:12:29.158714 --- INFO --- shopping_lists Created! -2025-04-20 20:12:29.166933 --- INFO --- shopping_list_items Created! -2025-04-20 20:12:29.175124 --- INFO --- item_locations Created! -2025-04-20 20:12:29.181717 --- INFO --- conversions Created! -2025-04-20 20:12:29.186271 --- INFO --- Admin User Created! -2025-04-20 20:12:38.923616 --- INFO --- item_info DROPPED! -2025-04-20 20:12:38.932843 --- INFO --- items DROPPED! -2025-04-20 20:12:38.937372 --- INFO --- cost_layers DROPPED! -2025-04-20 20:12:38.942503 --- INFO --- linked_items DROPPED! -2025-04-20 20:12:38.946721 --- INFO --- transactions DROPPED! -2025-04-20 20:12:38.951727 --- INFO --- brands DROPPED! -2025-04-20 20:12:38.955969 --- INFO --- food_info DROPPED! -2025-04-20 20:12:38.961360 --- INFO --- logistics_info DROPPED! -2025-04-20 20:12:38.966848 --- INFO --- zones DROPPED! -2025-04-20 20:12:38.970884 --- INFO --- locations DROPPED! -2025-04-20 20:12:38.975885 --- INFO --- vendors DROPPED! -2025-04-20 20:12:38.980966 --- INFO --- group_items DROPPED! -2025-04-20 20:12:38.985746 --- INFO --- groups DROPPED! -2025-04-20 20:12:38.989709 --- INFO --- receipt_items DROPPED! -2025-04-20 20:12:38.994949 --- INFO --- receipts DROPPED! -2025-04-20 20:12:38.998971 --- INFO --- recipe_items DROPPED! -2025-04-20 20:12:39.004057 --- INFO --- recipes DROPPED! -2025-04-20 20:12:39.009013 --- INFO --- shopping_list_items DROPPED! -2025-04-20 20:12:39.013298 --- INFO --- shopping_lists DROPPED! -2025-04-20 20:12:39.017813 --- INFO --- item_locations DROPPED! -2025-04-20 20:12:39.022064 --- INFO --- conversions DROPPED! -2025-04-20 20:32:27.356365 --- INFO --- logins Created! -2025-04-20 20:32:27.364095 --- INFO --- sites Created! -2025-04-20 20:32:27.368637 --- INFO --- roles Created! -2025-04-20 20:32:27.374196 --- INFO --- units Created! -2025-04-20 20:32:27.381877 --- INFO --- cost_layers Created! -2025-04-20 20:32:27.389138 --- INFO --- linked_items Created! -2025-04-20 20:32:27.395362 --- INFO --- brands Created! -2025-04-20 20:32:27.402835 --- INFO --- food_info Created! -2025-04-20 20:32:27.409510 --- INFO --- item_info Created! -2025-04-20 20:32:27.417471 --- INFO --- zones Created! -2025-04-20 20:32:27.424663 --- INFO --- locations Created! -2025-04-20 20:32:27.433133 --- INFO --- logistics_info Created! -2025-04-20 20:32:27.439780 --- INFO --- transactions Created! -2025-04-20 20:32:27.448585 --- INFO --- item Created! -2025-04-20 20:32:27.455303 --- INFO --- vendors Created! -2025-04-20 20:32:27.462869 --- INFO --- groups Created! -2025-04-20 20:32:27.470653 --- INFO --- group_items Created! -2025-04-20 20:32:27.478653 --- INFO --- receipts Created! -2025-04-20 20:32:27.486804 --- INFO --- receipt_items Created! -2025-04-20 20:32:27.493141 --- INFO --- recipes Created! -2025-04-20 20:32:27.500870 --- INFO --- recipe_items Created! -2025-04-20 20:32:27.507862 --- INFO --- shopping_lists Created! -2025-04-20 20:32:27.515340 --- INFO --- shopping_list_items Created! -2025-04-20 20:32:27.524287 --- INFO --- item_locations Created! -2025-04-20 20:32:27.532196 --- INFO --- conversions Created! -2025-04-20 20:32:27.535331 --- INFO --- Admin User Created! -2025-04-20 20:33:25.173233 --- INFO --- item_info DROPPED! -2025-04-20 20:33:25.182788 --- INFO --- items DROPPED! -2025-04-20 20:33:25.187318 --- INFO --- cost_layers DROPPED! -2025-04-20 20:33:25.193746 --- INFO --- linked_items DROPPED! -2025-04-20 20:33:25.197263 --- INFO --- transactions DROPPED! -2025-04-20 20:33:25.202565 --- INFO --- brands DROPPED! -2025-04-20 20:33:25.207124 --- INFO --- food_info DROPPED! -2025-04-20 20:33:25.213012 --- INFO --- logistics_info DROPPED! -2025-04-20 20:33:25.218554 --- INFO --- zones DROPPED! -2025-04-20 20:33:25.222613 --- INFO --- locations DROPPED! -2025-04-20 20:33:25.227136 --- INFO --- vendors DROPPED! -2025-04-20 20:33:25.232695 --- INFO --- group_items DROPPED! -2025-04-20 20:33:25.237264 --- INFO --- groups DROPPED! -2025-04-20 20:33:25.241580 --- INFO --- receipt_items DROPPED! -2025-04-20 20:33:25.246657 --- INFO --- receipts DROPPED! -2025-04-20 20:33:25.251050 --- INFO --- recipe_items DROPPED! -2025-04-20 20:33:25.255068 --- INFO --- recipes DROPPED! -2025-04-20 20:33:25.260690 --- INFO --- shopping_list_items DROPPED! -2025-04-20 20:33:25.265769 --- INFO --- shopping_lists DROPPED! -2025-04-20 20:33:25.269793 --- INFO --- item_locations DROPPED! -2025-04-20 20:33:25.273824 --- INFO --- conversions DROPPED! -2025-04-20 20:34:25.344816 --- INFO --- logins Created! -2025-04-20 20:34:25.352155 --- INFO --- sites Created! -2025-04-20 20:34:25.357696 --- INFO --- roles Created! -2025-04-20 20:34:25.363010 --- INFO --- units Created! -2025-04-20 20:34:25.370030 --- INFO --- cost_layers Created! -2025-04-20 20:34:25.377554 --- INFO --- linked_items Created! -2025-04-20 20:34:25.383668 --- INFO --- brands Created! -2025-04-20 20:34:25.390875 --- INFO --- food_info Created! -2025-04-20 20:34:25.397424 --- INFO --- item_info Created! -2025-04-20 20:34:25.405761 --- INFO --- zones Created! -2025-04-20 20:34:25.412801 --- INFO --- locations Created! -2025-04-20 20:34:25.420564 --- INFO --- logistics_info Created! -2025-04-20 20:34:25.427949 --- INFO --- transactions Created! -2025-04-20 20:34:25.435344 --- INFO --- item Created! -2025-04-20 20:34:25.442389 --- INFO --- vendors Created! -2025-04-20 20:34:25.449534 --- INFO --- groups Created! -2025-04-20 20:34:25.457550 --- INFO --- group_items Created! -2025-04-20 20:34:25.465405 --- INFO --- receipts Created! -2025-04-20 20:34:25.471947 --- INFO --- receipt_items Created! -2025-04-20 20:34:25.478815 --- INFO --- recipes Created! -2025-04-20 20:34:25.486803 --- INFO --- recipe_items Created! -2025-04-20 20:34:25.495032 --- INFO --- shopping_lists Created! -2025-04-20 20:34:25.503567 --- INFO --- shopping_list_items Created! -2025-04-20 20:34:25.511863 --- INFO --- item_locations Created! -2025-04-20 20:34:25.517088 --- INFO --- conversions Created! -2025-04-20 20:34:25.522653 --- INFO --- Admin User Created! -2025-04-20 20:34:40.207702 --- INFO --- item_info DROPPED! -2025-04-20 20:34:40.217297 --- INFO --- items DROPPED! -2025-04-20 20:34:40.223866 --- INFO --- cost_layers DROPPED! -2025-04-20 20:34:40.228928 --- INFO --- linked_items DROPPED! -2025-04-20 20:34:40.233942 --- INFO --- transactions DROPPED! -2025-04-20 20:34:40.238435 --- INFO --- brands DROPPED! -2025-04-20 20:34:40.243588 --- INFO --- food_info DROPPED! -2025-04-20 20:34:40.248615 --- INFO --- logistics_info DROPPED! -2025-04-20 20:34:40.252808 --- INFO --- zones DROPPED! -2025-04-20 20:34:40.258575 --- INFO --- locations DROPPED! -2025-04-20 20:34:40.262926 --- INFO --- vendors DROPPED! -2025-04-20 20:34:40.267004 --- INFO --- group_items DROPPED! -2025-04-20 20:34:40.272103 --- INFO --- groups DROPPED! -2025-04-20 20:34:40.276648 --- INFO --- receipt_items DROPPED! -2025-04-20 20:34:40.281217 --- INFO --- receipts DROPPED! -2025-04-20 20:34:40.287034 --- INFO --- recipe_items DROPPED! -2025-04-20 20:34:40.291009 --- INFO --- recipes DROPPED! -2025-04-20 20:34:40.295365 --- INFO --- shopping_list_items DROPPED! -2025-04-20 20:34:40.301096 --- INFO --- shopping_lists DROPPED! -2025-04-20 20:34:40.305141 --- INFO --- item_locations DROPPED! -2025-04-20 20:34:40.310973 --- INFO --- conversions DROPPED! -2025-04-20 21:03:22.361206 --- INFO --- logins Created! -2025-04-20 21:03:22.368210 --- INFO --- sites Created! -2025-04-20 21:03:22.372737 --- INFO --- roles Created! -2025-04-20 21:03:22.376787 --- INFO --- units Created! -2025-04-20 21:03:22.384390 --- INFO --- cost_layers Created! -2025-04-20 21:03:22.392461 --- INFO --- linked_items Created! -2025-04-20 21:03:22.397727 --- INFO --- brands Created! -2025-04-20 21:03:22.403723 --- INFO --- food_info Created! -2025-04-20 21:03:22.411420 --- INFO --- item_info Created! -2025-04-20 21:03:22.418983 --- INFO --- zones Created! -2025-04-20 21:03:22.426220 --- INFO --- locations Created! -2025-04-20 21:03:22.433434 --- INFO --- logistics_info Created! -2025-04-20 21:03:22.440189 --- INFO --- transactions Created! -2025-04-20 21:03:22.448293 --- INFO --- item Created! -2025-04-20 21:03:22.455434 --- INFO --- vendors Created! -2025-04-20 21:03:22.462439 --- INFO --- groups Created! -2025-04-20 21:03:22.469950 --- INFO --- group_items Created! -2025-04-20 21:03:22.477434 --- INFO --- receipts Created! -2025-04-20 21:03:22.484434 --- INFO --- receipt_items Created! -2025-04-20 21:03:22.491212 --- INFO --- recipes Created! -2025-04-20 21:03:22.499338 --- INFO --- recipe_items Created! -2025-04-20 21:03:22.506939 --- INFO --- shopping_lists Created! -2025-04-20 21:03:22.514674 --- INFO --- shopping_list_items Created! -2025-04-20 21:03:22.522661 --- INFO --- item_locations Created! -2025-04-20 21:03:22.529320 --- INFO --- conversions Created! -2025-04-20 21:03:22.533343 --- INFO --- Admin User Created! -2025-04-20 21:07:46.103441 --- INFO --- item_info DROPPED! -2025-04-20 21:07:46.113647 --- INFO --- items DROPPED! -2025-04-20 21:07:46.119615 --- INFO --- cost_layers DROPPED! -2025-04-20 21:07:46.125899 --- INFO --- linked_items DROPPED! -2025-04-20 21:07:46.130623 --- INFO --- transactions DROPPED! -2025-04-20 21:07:46.134817 --- INFO --- brands DROPPED! -2025-04-20 21:07:46.139474 --- INFO --- food_info DROPPED! -2025-04-20 21:07:46.145048 --- INFO --- logistics_info DROPPED! -2025-04-20 21:07:46.150355 --- INFO --- zones DROPPED! -2025-04-20 21:07:46.155777 --- INFO --- locations DROPPED! -2025-04-20 21:07:46.160313 --- INFO --- vendors DROPPED! -2025-04-20 21:07:46.165662 --- INFO --- group_items DROPPED! -2025-04-20 21:07:46.169670 --- INFO --- groups DROPPED! -2025-04-20 21:07:46.174114 --- INFO --- receipt_items DROPPED! -2025-04-20 21:07:46.179634 --- INFO --- receipts DROPPED! -2025-04-20 21:07:46.184753 --- INFO --- recipe_items DROPPED! -2025-04-20 21:07:46.189291 --- INFO --- recipes DROPPED! -2025-04-20 21:07:46.193588 --- INFO --- shopping_list_items DROPPED! -2025-04-20 21:07:46.197995 --- INFO --- shopping_lists DROPPED! -2025-04-20 21:07:46.203577 --- INFO --- item_locations DROPPED! -2025-04-20 21:07:46.208195 --- INFO --- conversions DROPPED! diff --git a/receipts_API.py b/receipts_API.py deleted file mode 100644 index a9a6d56..0000000 --- a/receipts_API.py +++ /dev/null @@ -1,429 +0,0 @@ -from flask import Blueprint, request, render_template, redirect, session, url_for, send_file, jsonify, Response, current_app, send_from_directory -import psycopg2, math, json, datetime, main, copy, requests, process, database, pprint, MyDataclasses -from config import config, sites_config -from user_api import login_required -import openfoodfacts -import postsqldb -import mimetypes, os -import pymupdf, PIL -import webpush - - -def create_pdf_preview(pdf_path, output_path, size=(600, 400)): - pdf = pymupdf.open(pdf_path) - page = pdf[0] - file_name = os.path.basename(pdf_path).replace('.pdf', "") - pix = page.get_pixmap() - img = PIL.Image.frombytes("RGB", (pix.width, pix.height), pix.samples) - output_path = output_path + file_name + '.jpg' - img.thumbnail(size) - img.save(output_path) - return file_name + '.jpg' - - -receipt_api = Blueprint('receipt_api', __name__) - -@receipt_api.route("/receipt/") -@login_required -def receipt(id): - sites = [site[1] for site in main.get_sites(session['user']['sites'])] - database_config = config() - with psycopg2.connect(**database_config) as conn: - units = postsqldb.UnitsTable.getAll(conn) - return render_template("receipts/receipt.html", id=id, current_site=session['selected_site'], sites=sites, units=units) - -@receipt_api.route("/receipts") -@login_required -def receipts(): - sites = [site[1] for site in main.get_sites(session['user']['sites'])] - return render_template("receipts/index.html", current_site=session['selected_site'], sites=sites) - -@receipt_api.route('/receipts/getItems', methods=["GET"]) -def getItems(): - recordset = [] - count = {'count': 0} - if request.method == "GET": - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 10)) - site_name = session['selected_site'] - offset = (page - 1) * limit - database_config = config() - with psycopg2.connect(**database_config) as conn: - payload = ("%%", limit, offset) - recordset, count = database.getItemsWithQOH(conn, site_name, payload, convert=True) - return jsonify({"items":recordset, "end":math.ceil(count['count']/limit), "error":False, "message":"items fetched succesfully!"}) - return jsonify({"items":recordset, "end":math.ceil(count['count']/limit), "error":True, "message":"There was an error with this GET statement"}) - -@receipt_api.route('/receipt/getVendors', methods=["GET"]) -def getVendors(): - recordset = [] - count = 0 - if request.method == "GET": - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 10)) - site_name = session['selected_site'] - offset = (page - 1) * limit - database_config = config() - with psycopg2.connect(**database_config) as conn: - payload = (limit, offset) - recordset, count = postsqldb.VendorsTable.paginateVendors(conn, site_name, payload) - return jsonify({"vendors":recordset, "end":math.ceil(count/limit), "error":False, "message":"items fetched succesfully!"}) - return jsonify({"vendors":recordset, "end":math.ceil(count/limit), "error":True, "message":"There was an error with this GET statement"}) - -@receipt_api.route('/receipt/getLinkedLists', methods=["GET"]) -def getLinkedLists(): - recordset = [] - count = 0 - if request.method == "GET": - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 10)) - site_name = session['selected_site'] - offset = (page - 1) * limit - database_config = config() - with psycopg2.connect(**database_config) as conn: - payload = (limit, offset) - recordset, count = postsqldb.ItemTable.paginateLinkedLists(conn, site_name, payload) - return jsonify({"items":recordset, "end":math.ceil(count/limit), "error":False, "message":"items fetched succesfully!"}) - return jsonify({"items":recordset, "end":math.ceil(count/limit), "error":True, "message":"There was an error with this GET statement"}) - -@receipt_api.route('/receipts/getReceipts', methods=["GET"]) -def getReceipts(): - recordset = [] - if request.method == "GET": - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 50)) - offset = (page - 1) * limit - site_name = session['selected_site'] - database_config = config() - with psycopg2.connect(**database_config) as conn: - recordset, count = database.getReceipts(conn, site_name, payload=(limit, offset), convert=True) - return jsonify({'receipts':recordset, "end": math.ceil(count/limit), 'error': False, "message": "Get Receipts Successful!"}) - return jsonify({'receipts': recordset, "end": math.ceil(count/limit), 'error': True, "message": "Something went wrong while getting receipts!"}) - -@receipt_api.route('/receipts/getReceipt', methods=["GET"]) -def getReceipt(): - record = [] - if request.method == "GET": - receipt_id = int(request.args.get('id', 1)) - site_name = session['selected_site'] - database_config = config() - with psycopg2.connect(**database_config) as conn: - record = database.getReceiptByID(conn, site_name, payload=(receipt_id, ), convert=True) - return jsonify({'receipt': record, 'error': False, "message": "Get Receipts Successful!"}) - return jsonify({'receipt': record, 'error': True, "message": "Something went wrong while getting receipts!"}) - -@receipt_api.route('/receipts/addReceipt', methods=["POST", "GET"]) -def addReceipt(): - if request.method == "GET": - user_id = session['user_id'] - site_name = session['selected_site'] - database_config = config() - with psycopg2.connect(**database_config) as conn: - receipt = MyDataclasses.ReceiptPayload( - receipt_id=f"PR-{database.request_receipt_id(conn, site_name)}", - submitted_by=user_id - ) - database.insertReceiptsTuple(conn, site_name, receipt.payload()) - return jsonify({'error': False, "message": "Receipt Added Successful!"}) - return jsonify({'error': True, "message": "Something went wrong while adding receipt!"}) - -@receipt_api.route('/receipts/addSKULine', methods=["POST"]) -def addSKULine(): - if request.method == "POST": - item_id = int(request.get_json()['item_id']) - receipt_id = int(request.get_json()['receipt_id']) - - site_name = session['selected_site'] - database_config = config() - with psycopg2.connect(**database_config) as conn: - item = database.getItemAllByID(conn, site_name, (item_id, ), convert=True) - data = { - 'cost': item['item_info']['cost'], - 'expires': item['food_info']['expires'] - } - receipt_item = MyDataclasses.ReceiptItemPayload( - type="sku", - receipt_id=receipt_id, - barcode=item['barcode'], - name=item['item_name'], - qty=item['item_info']['uom_quantity'], - uom=item['item_info']['uom'], - data=data - ) - database.insertReceiptItemsTuple(conn, site_name, receipt_item.payload()) - return jsonify({'error': False, "message": "Line added Succesfully"}) - return jsonify({'error': True, "message": "Something went wrong while add SKU line!"}) - -@receipt_api.route('/receipts/deleteLine', methods=["POST"]) -def deleteLine(): - if request.method == "POST": - line_id = int(request.get_json()['line_id']) - site_name = session['selected_site'] - database_config = config() - with psycopg2.connect(**database_config) as conn: - database.deleteReceiptItemsTuple(conn, site_name, (line_id, )) - - return jsonify({'error': False, "message": "Line Deleted Succesfully"}) - return jsonify({'error': True, "message": "Something went wrong while deleting line!"}) - -@receipt_api.route('/receipts/denyLine', methods=["POST"]) -def denyLine(): - if request.method == "POST": - line_id = int(request.get_json()['line_id']) - site_name = session['selected_site'] - database_config = config() - with psycopg2.connect(**database_config) as conn: - database.__updateTuple(conn, site_name, f"{site_name}_receipt_items", {'id': line_id, 'update': {'status': 'Denied'}}) - return jsonify({'error': False, "message": "Line Denied Succesfully"}) - return jsonify({'error': True, "message": "Something went wrong while denying line!"}) - -@receipt_api.route('/receipts/saveLine', methods=["POST"]) -def saveLine(): - if request.method == "POST": - line_id = int(request.get_json()['line_id']) - payload = request.get_json()['payload'] - site_name = session['selected_site'] - database_config = config() - with psycopg2.connect(**database_config) as conn: - receipt_item = database.__selectTuple(conn, site_name, f"{site_name}_receipt_items", (line_id, ), convert=True) - if 'api_data' in receipt_item['data'].keys(): - payload['data']['api_data'] = receipt_item['data']['api_data'] - database.__updateTuple(conn, site_name, f"{site_name}_receipt_items", {'id': line_id, 'update': payload}) - return jsonify({'error': False, "message": "Line Saved Succesfully"}) - return jsonify({'error': True, "message": "Something went wrong while saving line!"}) - -@receipt_api.route('/receipt/postLinkedItem', methods=["POST"]) -def postLinkedItem(): - if request.method == "POST": - receipt_item_id = int(request.get_json()['receipt_item_id']) - link_list_id = int(request.get_json()['link_list_id']) - conv_factor = float(request.get_json()['conv_factor']) - - site_name = session['selected_site'] - user_id = session['user_id'] - database_config = config() - with psycopg2.connect(**database_config) as conn: - receipt_item = postsqldb.ReceiptTable.select_item_tuple(conn, site_name, (receipt_item_id,)) - # get link list item - linked_list = postsqldb.ItemTable.getItemAllByID(conn, site_name, (link_list_id, )) - # add item to database - if receipt_item['type'] == 'api': - - data = { - 'barcode': receipt_item['barcode'], - 'name': receipt_item['name'], - 'subtype': 'FOOD' - } - process.postNewBlankItem(conn, site_name, user_id, data) - - name = receipt_item['name'] - if receipt_item['name'] == "unknown": - name = linked_list['item_name'] - if receipt_item['type'] == "new sku": - data = { - 'barcode': receipt_item['barcode'], - 'name': name, - 'subtype': 'FOOD' - } - process.postNewBlankItem(conn, site_name, user_id, data) - - new_item = postsqldb.ItemTable.getItemAllByBarcode(conn, site_name, (receipt_item['barcode'], )) - new_item = postsqldb.ItemTable.update_tuple(conn, site_name, {'id': new_item['id'], 'update':{'row_type': 'link'}}) - - # add item to link list - item_link = postsqldb.ItemLinksTable.Payload( - new_item['barcode'], - linked_list['id'], - new_item, - conv_factor - ) - postsqldb.ItemLinksTable.insert_tuple(conn, site_name, item_link.payload()) - # update line item with link list name and item_link with link list id - payload = {'id': receipt_item['id'], 'update': { - 'barcode': linked_list['barcode'], - 'name': linked_list['item_name'], - 'uom': linked_list['item_info']['uom']['id'], - 'qty': float(receipt_item['qty']*conv_factor), - 'type': 'sku' - }} - postsqldb.ReceiptTable.update_receipt_item(conn, site_name, payload) - - return jsonify({'error': False, "message": "Line Saved Succesfully"}) - return jsonify({'error': True, "message": "Something went wrong while saving line!"}) - -@receipt_api.route('/receipts/resolveLine', methods=["POST"]) -def resolveLine(): - if request.method == "POST": - line_id = int(request.get_json()['line_id']) - site_name = session['selected_site'] - user_id = session['user_id'] - database_config = config() - with psycopg2.connect(**database_config) as conn: - transaction_time = datetime.datetime.now() - receipt_item = database.__selectTuple(conn, site_name, f"{site_name}_receipt_items", (line_id, ), convert=True) - receipt = database.getReceiptByID(conn, site_name, (receipt_item['receipt_id'], ), convert=True) - conv_factor = 1.0 - if receipt_item['data']['expires'] is not False: - print(receipt_item['data']['expires']) - expiration = datetime.datetime.strptime(receipt_item['data']['expires'], "%Y-%m-%d") - else: - expiration = None - - if receipt_item['type'] == 'sku': - linked_item = database.getLinkedItemByBarcode(conn, site_name, (receipt_item['barcode'], )) - if len(linked_item) > 1: - conv_factor = linked_item['conv_factor'] - receipt_item['data']['linked_child'] = linked_item['barcode'] - - if receipt_item['type'] == 'api': - - data = { - 'barcode': receipt_item['barcode'], - 'name': receipt_item['name'], - 'subtype': 'FOOD' - } - process.postNewBlankItem(conn, site_name, user_id, data) - - if receipt_item['type'] == "new sku": - data = { - 'barcode': receipt_item['barcode'], - 'name': receipt_item['name'], - 'subtype': 'FOOD' - } - process.postNewBlankItem(conn, site_name, user_id, data) - - item = database.getItemAllByBarcode(conn, site_name, (receipt_item['barcode'], ), convert=True) - location = database.selectItemLocationsTuple(conn, site_name, (item['id'], item['logistics_info']['primary_location']['id']), convert=True) - cost_layers: list = location['cost_layers'] - - receipt_item['data']['location'] = item['logistics_info']['primary_location']['uuid'] - - transaction = MyDataclasses.TransactionPayload( - timestamp=transaction_time, - logistics_info_id=item['logistics_info_id'], - barcode=item['barcode'], - name=item['item_name'], - transaction_type="Adjust In", - quantity=(float(receipt_item['qty'])*conv_factor), - description=f"{receipt['receipt_id']}", - user_id=session['user_id'], - data=receipt_item['data'] - ) - - cost_layer = MyDataclasses.CostLayerPayload( - aquisition_date=transaction_time, - quantity=float(receipt_item['qty']), - cost=float(receipt_item['data']['cost']), - currency_type="USD", - vendor=receipt['vendor_id'], - expires=expiration - ) - - cost_layer = database.insertCostLayersTuple(conn, site_name, cost_layer.payload(), convert=True) - cost_layers.append(cost_layer['id']) - - quantity_on_hand = float(location['quantity_on_hand']) + float(receipt_item['qty']) - - updated_item_location_payload = (cost_layers, quantity_on_hand, item['id'], item['logistics_info']['primary_location']['id']) - database.updateItemLocation(conn, site_name, updated_item_location_payload) - - site_location = database.__selectTuple(conn, site_name, f"{site_name}_locations", (location['location_id'], ), convert=True) - - receipt_item['data']['location'] = site_location['uuid'] - - database.insertTransactionsTuple(conn, site_name, transaction.payload()) - - database.__updateTuple(conn, site_name, f"{site_name}_receipt_items", {'id': receipt_item['id'], 'update': {'status': "Resolved"}}) - - - return jsonify({'error': False, "message": "Line Saved Succesfully"}) - return jsonify({'error': True, "message": "Something went wrong while saving line!"}) - -@receipt_api.route('/receipt/postVendorUpdate', methods=["POST"]) -def postVendorUpdate(): - if request.method == "POST": - receipt_id = int(request.get_json()['receipt_id']) - vendor_id = int(request.get_json()['vendor_id']) - site_name = session['selected_site'] - database_config = config() - with psycopg2.connect(**database_config) as conn: - postsqldb.ReceiptTable.update_receipt(conn, site_name, {'id': receipt_id, 'update': {'vendor_id': vendor_id}}) - return jsonify({'error': False, "message": "Line Saved Succesfully"}) - return jsonify({'error': True, "message": "Something went wrong while saving line!"}) - -@receipt_api.route('/receipts/resolveReceipt', methods=["POST"]) -def resolveReceipt(): - if request.method == "POST": - receipt_id = int(request.get_json()['receipt_id']) - site_name = session['selected_site'] - user= session['user'] - database_config = config() - with psycopg2.connect(**database_config) as conn: - receipt = postsqldb.ReceiptTable.update_receipt(conn, site_name, {'id': receipt_id, 'update': {'receipt_status': 'Resolved'}}) - webpush.push_ntfy(title=f"Receipt '{receipt['receipt_id']}' Resolved", body=f"Receipt {receipt['receipt_id']} was completed by {user['username']}.") - return jsonify({'error': False, "message": "Line Saved Succesfully"}) - return jsonify({'error': True, "message": "Something went wrong while saving line!"}) - -@receipt_api.route('/receipt/uploadfile/', methods=["POST"]) -def uploadFile(receipt_id): - file = request.files['file'] - file_path = current_app.config['FILES_FOLDER'] + f"/receipts/{file.filename.replace(" ", "_")}" - file.save(file_path) - file_type, _ = mimetypes.guess_type(file.filename) - preview_image = "" - if file_type == "application/pdf": - output_path = "static/files/receipts/previews/" - preview_image = create_pdf_preview(file_path, output_path) - - file_size = os.path.getsize(file_path) - database_config = config() - site_name = session['selected_site'] - username = session['user']['username'] - with psycopg2.connect(**database_config) as conn: - files = postsqldb.ReceiptTable.select_tuple(conn, site_name, (receipt_id, ))['files'] - files[file.filename.replace(" ", "_")] = {'file_path': file.filename.replace(" ", "_"), 'file_type': file_type, 'file_size': file_size, 'uploaded_by': username, 'preview_image': preview_image} - postsqldb.ReceiptTable.update_receipt(conn, site_name, {'id': receipt_id, 'update': {'files': files}}) - - return jsonify({}) - -@receipt_api.route('/receipt/getFile/') -def getFile(file_name): - return send_from_directory('static/files/receipts', file_name) - -@receipt_api.route('/receipts/checkAPI', methods=["POST"]) -def checkAPI(): - if request.method == "POST": - line_id = int(request.get_json()['line_id']) - barcode = request.get_json()['barcode'] - site_name = session['selected_site'] - database_config = config() - with psycopg2.connect(**database_config) as conn: - print(barcode, line_id) - api_response, api_data = get_open_facts(barcode) - if api_response: - receipt_item = database.__selectTuple(conn, site_name, f"{site_name}_receipt_items", (line_id, ), convert=True) - item_data = receipt_item['data'] - item_data['api_data'] = api_data - database.__updateTuple(conn, site_name, f"{site_name}_receipt_items", - {'id': line_id, 'update': { - 'type': 'api', - 'data': item_data, - 'name': api_data['product_name'] - }}) - return jsonify({'error': False, "message": "Line updated for API, Succesfully"}) - else: - return jsonify({'error': True, "message": "Item not in WorldFoodFacts!"}) - return jsonify({'error': False, "message": "Line Saved Succesfully"}) - return jsonify({'error': True, "message": "Something went wrong while saving line!"}) - -open_food_api = openfoodfacts.API(user_agent="MyAwesomeApp/1.0") - -open_food_enabled = True - -def get_open_facts(barcode): - if open_food_enabled: - barcode: str = barcode.replace('%', "") - data = open_food_api.product.get(barcode) - if data != None: - return True, data - return False, {} \ No newline at end of file diff --git a/scratch.py b/scratch.py deleted file mode 100644 index 8ed4f3f..0000000 --- a/scratch.py +++ /dev/null @@ -1,235 +0,0 @@ - -from config import config -import psycopg2, requests, database, MyDataclasses -import main, datetime, json, csv -from main import lst2pgarr -import process - -def importItemFromCSV(test, site_name, uuid, site): - logistics_info = MyDataclasses.LogisticsInfoPayload( - barcode=test['barcode'], - primary_location=site['default_primary_location'], - primary_zone=site['default_zone'], - auto_issue_location=site['default_auto_issue_location'], - auto_issue_zone=site['default_zone']) - - item_info = MyDataclasses.ItemInfoPayload(test['barcode']) - - - # Food Info - t = ['serving', 'serving_unit', 'calories', 'calories_unit', 'proteins', - 'proteins_unit', 'fats', 'fats_unit', 'carbohydrates', 'carbohydrates_unit', 'sugars', 'sugars_unit', 'sodium', 'sodium_unit', - 'fibers', 'fibers_unit'] - - other_tags = [ - 'serving', - 'serving_unit', - 'calories', - 'calories_unit', - 'proteins_serving', - 'proteins_unit', - 'fat_serving', - 'fat_unit', - 'carbohydrates_serving', - 'carbohydrates_unit', - 'sugars_serving', - 'sugars_unit', - 'sodium_serving', - 'sodium_unit', - 'fiber_serving', - 'fiber_unit', - ] - - nutriments = test['nutriments'].replace("'", '"') - nutriments = nutriments.replace("{", "").replace("}", "") - key_values = nutriments.split(", ") - nutriments = {} - - if key_values != ['']: - for s in key_values: - s= s.split(": ") - k = s[0].replace('"', "") - v = s[1].replace('"', "") - nutriments[k] = v - - nutrients = {} - for i in range(len(other_tags)): - if other_tags[i] in nutriments.keys(): - nutrients[t[i]] = nutriments[other_tags[i]] - else: - nutrients[t[i]] = '' - - food_groups = test['food_groups_tags'] - food_groups = food_groups.replace('[', "").replace("]", "") - food_groups = food_groups.replace("'", "") - food_groups = food_groups.split(", ") - - ingrediants = test['ingredients_hierarchy'] - ingrediants = ingrediants.replace('[', "").replace("]", "") - ingrediants = ingrediants.replace("'", "") - ingrediants = ingrediants.split(", ") - - - food_info = MyDataclasses.FoodInfoPayload(food_groups, ingrediants, nutrients) - - if test['brands'] != "": - brand = MyDataclasses.BrandsPayload(test['brands']) - - logistics_info_id = 0 - item_info_id = 0 - food_info_id = 0 - brand_id = 1 - - database_config = config() - try: - with psycopg2.connect(**database_config) as conn: - logistics_info = database.insertLogisticsInfoTuple(conn, site_name, logistics_info.payload()) - item_info = database.insertItemInfoTuple(conn, site_name, item_info.payload()) - food_info = database.insertFoodInfoTuple(conn, site_name, food_info.payload()) - if test['brands'] != "": - brand = database.insertBrandsTuple(conn, site_name, brand.payload()) - brand_id = brand[0] - - print("Logistics:", logistics_info) - print("item_info:", item_info) - print("food_info:", food_info) - print("brand:", brand_id) - - name = test['name'] - name = name.replace("'", "@&apostraphe&") - description = "" - tags = lst2pgarr([]) - links = json.dumps({}) - search_string = f"&&{test['barcode']}&&{name}&&" - - - item = MyDataclasses.ItemsPayload(test['barcode'], test['name'], item_info[0], - logistics_info[0], food_info[0], brand=brand_id, - row_type="single", item_type=test["sub_type"], search_string=search_string) - - item = database.insertItemTuple(conn, site_name, item.payload(), convert=True) - item = database.getItemAllByID(conn, site_name, (item['id'], ), convert=True) - print("Item:", item) - with conn.cursor() as cur: - cur.execute(f"SELECT id FROM {site_name}_locations WHERE uuid=%s;", (uuid, )) - location_id = cur.fetchone()[0] - - - print("Location ID:", location_id) - item_location = MyDataclasses.ItemLocationPayload(item['id'], location_id) - location = database.insertItemLocationsTuple(conn, site_name, item_location.payload(), convert=True) - - print("Item location:", location) - - creation_tuple = MyDataclasses.TransactionPayload( - datetime.datetime.now(), - logistics_info[0], - item['barcode'], - item['item_name'], - "SYSTEM", - 0.0, - "Item added to the System!", - 1, - {'location': uuid} - ) - - - database.insertTransactionsTuple(conn, site_name, creation_tuple.payload()) - - qoh = float(test['qty_on_hand']) - print(qoh, type(qoh)) - trans_type = "Adjust In" - if qoh != 0.0: - if qoh >= 0.0: - trans_type = "Adjust In" - else: - trans_type = "Adjust Out" - - payload = { - 'item_id': item['id'], - 'logistics_info_id': item['logistics_info_id'], - 'barcode': item['barcode'], - 'item_name': item['item_name'], - 'transaction_type': trans_type, - 'quantity': float(qoh), - 'description': f'creation quantity', - 'cost': item['item_info']['cost'], - 'vendor': 1, - 'expires': None, - 'location_id': location_id - } - - process.postTransaction(conn, site_name, 1, payload) - conn.commit() - except Exception as error: - print(error, item_info) - - -def importCSV(path, site_name): - database_config = config() - with psycopg2.connect(**database_config) as conn: - site = database.selectSiteTuple(conn, (site_name,), convert=True) - default_zone = database.__selectTuple(conn, site_name, f"{site_name}_zones", (site['default_zone'], ), convert=True) - default_location = database.__selectTuple(conn, site_name, f"{site_name}_locations", (site['default_primary_location'],), convert=True) - - - uuid = f"{default_zone['name']}@{default_location['name']}" - print(uuid) - with open(path, "r+", encoding="utf-8") as file: - csv_reader = csv.DictReader(file) - for row in csv_reader: - try: - importItemFromCSV(row, site_name, uuid, site) - except Exception as error: - with open("process.log", "a+") as file: - file.write("\n") - file.write(f"{datetime.datetime.now()} --- CAUTION --- {error}\n") - file.write(f"{" "*41}{json.dumps(row)}") - -#importCSV("2025-03-19-Pantry (1).csv", "main") - -def importLinkFromCSV(row, site_name, conn): - barcode = row['barcode'] - link_barcode=row['link_barcode'] - item_data=json.loads(row['data'].replace('\\j*s*o*n\\', "")) - conv_factor=row['conv_factor'] - - link_item = database.getItemAllByBarcode(conn, site_name, (link_barcode, ), convert=True) - - link = MyDataclasses.ItemLinkPayload( - barcode=barcode, - link=link_item['id'], - data=item_data, - conv_factor=conv_factor - ) - - newitem = { - 'barcode': barcode, - 'name': item_data['name'], - 'subtype': '' - } - - try: - process.postNewBlankItem(conn, site_name, 1, newitem) - except Exception as error: - print(error) - pass - - lin = database.insertItemLinksTuple(conn, site_name, link.payload()) - print(lin) - -def importLinksFromCSV(path, site_name): - database_config = config() - with psycopg2.connect(**database_config) as conn: - with open(path, "r+", encoding="utf-8") as file: - csv_reader = csv.DictReader(file) - for row in csv_reader: - try: - importLinkFromCSV(row, site_name, conn) - except Exception as error: - with open("process.log", "a+") as file: - file.write("\n") - file.write(f"{datetime.datetime.now()} --- CAUTION --- {error}\n") - file.write(f"{" "*41}{json.dumps(row)}") - -importLinksFromCSV("test.csv", 'test') \ No newline at end of file diff --git a/shopping_list_API.py b/shopping_list_API.py deleted file mode 100644 index 5becc3e..0000000 --- a/shopping_list_API.py +++ /dev/null @@ -1,186 +0,0 @@ -from flask import Blueprint, request, render_template, redirect, session, url_for, send_file, jsonify, Response -import psycopg2, math, json, datetime, main, copy, requests, process, database, pprint, MyDataclasses -from config import config, sites_config -from main import unfoldCostLayers -from user_api import login_required -import postsqldb - -shopping_list_api = Blueprint('shopping_list_API', __name__) - -@shopping_list_api.route("/shopping-lists") -@login_required -def shopping_lists(): - sites = [site[1] for site in main.get_sites(session['user']['sites'])] - return render_template("shopping-lists/index.html", current_site=session['selected_site'], sites=sites) - -@shopping_list_api.route("/shopping-list//") -@login_required -def shopping_list(mode, id): - sites = [site[1] for site in main.get_sites(session['user']['sites'])] - if mode == "view": - return render_template("shopping-lists/view.html", id=id, current_site=session['selected_site'], sites=sites) - if mode == "edit": - return render_template("shopping-lists/edit.html", id=id, current_site=session['selected_site'], sites=sites) - return redirect("/") - -@shopping_list_api.route('/shopping-lists/addList', methods=["POST"]) -def addList(): - if request.method == "POST": - list_name = request.get_json()['list_name'] - list_description = request.get_json()['list_description'] - list_type = request.get_json()['list_type'] - database_config = config() - site_name = session['selected_site'] - user_id = session['user_id'] - with psycopg2.connect(**database_config) as conn: - shopping_list = MyDataclasses.ShoppingListPayload( - name=list_name, - description=list_description, - author=user_id, - type=list_type - ) - database.insertShoppingListsTuple(conn, site_name, shopping_list.payload()) - return jsonify({'error': False, 'message': 'List added!!'}) - return jsonify({'error': True, 'message': 'These was an error with adding the list!'}) - -@shopping_list_api.route('/shopping-lists/getLists', methods=["GET"]) -def getShoppingLists(): - lists = [] - if request.method == "GET": - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 1)) - offset = (page-1)*limit - database_config = config() - site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - lists, count = database.getShoppingLists(conn, site_name, (limit, offset), convert=True) - - for list in lists: - - if list['type'] == 'calculated': - items = [] - not_items = database.getItemsSafetyStock(conn, site_name, convert=True) - for item in not_items: - new_item = { - 'id': item['id'], - 'uuid': item['barcode'], - 'sl_id': 0, - 'item_type': 'sku', - 'item_name': item['item_name'], - 'uom': item['uom'], - 'qty': float(float(item['safety_stock']) - float(item['total_sum'])), - 'item_id': item['id'], - 'links': item['links'] - } - items.append(new_item) - list['sl_items'] = items - - return jsonify({'shopping_lists': lists, 'end':math.ceil(count/limit), 'error': False, 'message': 'Lists queried successfully!'}) - -@shopping_list_api.route('/shopping-lists/getList', methods=["GET"]) -def getShoppingList(): - if request.method == "GET": - sl_id = int(request.args.get('id', 1)) - database_config = config() - site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - lists = database.getShoppingList(conn, site_name, (sl_id, ), convert=True) - return jsonify({'shopping_list': lists, 'error': False, 'message': 'Lists queried successfully!'}) - -@shopping_list_api.route('/shopping-lists/getListItem', methods=["GET"]) -def getShoppingListItem(): - list_item = {} - if request.method == "GET": - sli_id = int(request.args.get('sli_id', 1)) - database_config = config() - site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - list_item = postsqldb.ShoppingListsTable.getItem(conn, site_name, (sli_id, )) - return jsonify({'list_item': list_item, 'error': False, 'message': 'Lists Items queried successfully!'}) - return jsonify({'list_item': list_item, 'error': True, 'message': 'List Items queried unsuccessfully!'}) - -@shopping_list_api.route('/shopping-lists/getItems', methods=["GET"]) -def getItems(): - recordset = [] - count = {'count': 0} - if request.method == "GET": - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 10)) - search_string = request.args.get('search_string', 10) - site_name = session['selected_site'] - offset = (page - 1) * limit - database_config = config() - with psycopg2.connect(**database_config) as conn: - payload = (search_string, limit, offset) - recordset, count = database.getItemsWithQOH(conn, site_name, payload, convert=True) - return jsonify({"items":recordset, "end":math.ceil(count['count']/limit), "error":False, "message":"items fetched succesfully!"}) - return jsonify({"items":recordset, "end":math.ceil(count['count']/limit), "error":True, "message":"There was an error with this GET statement"}) - -@shopping_list_api.route('/shopping-lists/postListItem', methods=["POST"]) -def postListItem(): - if request.method == "POST": - data = request.get_json()['data'] - site_name = session['selected_site'] - database_config = config() - with psycopg2.connect(**database_config) as conn: - sl_item = MyDataclasses.ShoppingListItemPayload( - uuid = data['uuid'], - sl_id = data['sl_id'], - item_type=data['item_type'], - item_name=data['item_name'], - uom=data['uom'], - qty=data['qty'], - item_id=data['item_id'], - links=data['links'] - ) - database.insertShoppingListItemsTuple(conn, site_name, sl_item.payload()) - return jsonify({"error":False, "message":"items fetched succesfully!"}) - return jsonify({"error":True, "message":"There was an error with this GET statement"}) - -@shopping_list_api.route('/shopping-lists/deleteListItem', methods=["POST"]) -def deleteListItem(): - if request.method == "POST": - sli_id = request.get_json()['sli_id'] - site_name = session['selected_site'] - database_config = config() - with psycopg2.connect(**database_config) as conn: - database.deleteShoppingListItemsTuple(conn, site_name, (sli_id, )) - return jsonify({"error":False, "message":"item deleted succesfully!"}) - return jsonify({"error":True, "message":"There was an error with this POST statement"}) - -@shopping_list_api.route('/shopping-lists/saveListItem', methods=["POST"]) -def saveListItem(): - if request.method == "POST": - sli_id = request.get_json()['sli_id'] - update = request.get_json()['update'] - site_name = session['selected_site'] - database_config = config() - with psycopg2.connect(**database_config) as conn: - database.__updateTuple(conn, site_name, f"{site_name}_shopping_list_items", {'id': sli_id, 'update': update}) - return jsonify({"error":False, "message":"items fetched succesfully!"}) - return jsonify({"error":True, "message":"There was an error with this GET statement"}) - -@shopping_list_api.route('/shopping-lists/getSKUItemsFull', methods=["GET"]) -def getSKUItemsFull(): - items = [] - count = {'count': 0} - if request.method == "GET": - site_name = session['selected_site'] - database_config = config() - with psycopg2.connect(**database_config) as conn: - not_items = database.getItemsSafetyStock(conn, site_name, convert=True) - for item in not_items: - new_item = { - 'id': item['id'], - 'uuid': item['barcode'], - 'sl_id': 0, - 'item_type': 'sku', - 'item_name': item['item_name'], - 'uom': item['uom'], - 'qty': float(float(item['safety_stock']) - float(item['total_sum'])), - 'item_id': item['id'], - 'links': item['links'] - } - items.append(new_item) - return jsonify({"list_items":items, "error":False, "message":"items fetched succesfully!"}) - return jsonify({"list_items":items, "error":True, "message":"There was an error with this GET statement"}) diff --git a/static/files/receipts/2024-02-24_113702917045-gen-image-LSEWCH.jpg b/static/files/receipts/2024-02-24_113702917045-gen-image-LSEWCH.jpg new file mode 100644 index 0000000..7689f05 Binary files /dev/null and b/static/files/receipts/2024-02-24_113702917045-gen-image-LSEWCH.jpg differ diff --git a/static/files/receipts/ChatGPT_Image_Jul_27,_2025,_08_36_18_PM.png b/static/files/receipts/ChatGPT_Image_Jul_27,_2025,_08_36_18_PM.png new file mode 100644 index 0000000..21a8db5 Binary files /dev/null and b/static/files/receipts/ChatGPT_Image_Jul_27,_2025,_08_36_18_PM.png differ diff --git a/static/files/receipts/Order_details_-_Walmart.com_07122025.pdf b/static/files/receipts/Order_details_-_Walmart.com_07122025.pdf new file mode 100644 index 0000000..965d9ce Binary files /dev/null and b/static/files/receipts/Order_details_-_Walmart.com_07122025.pdf differ diff --git a/static/files/receipts/chibi_character_silver_eyes.png b/static/files/receipts/chibi_character_silver_eyes.png new file mode 100644 index 0000000..ba94ce9 Binary files /dev/null and b/static/files/receipts/chibi_character_silver_eyes.png differ diff --git a/static/files/receipts/previews/Order_details_-_Walmart.com_07122025.jpg b/static/files/receipts/previews/Order_details_-_Walmart.com_07122025.jpg new file mode 100644 index 0000000..1479ccc Binary files /dev/null and b/static/files/receipts/previews/Order_details_-_Walmart.com_07122025.jpg differ diff --git a/static/pictures/recipes/image.png b/static/pictures/recipes/image.png new file mode 100644 index 0000000..0ab4d34 Binary files /dev/null and b/static/pictures/recipes/image.png differ diff --git a/task_manager.py b/task_manager.py deleted file mode 100644 index 698fad9..0000000 --- a/task_manager.py +++ /dev/null @@ -1,22 +0,0 @@ -import schedule, time, psycopg2 -import postsqldb -from config import config - -def createCycleCount(): - print("task is running") - database_config = config() - with psycopg2.connect(**database_config) as conn: - sites = postsqldb.SitesTable.selectTuples(conn) - print(sites) - - conn.rollback() - -def start_schedule(): - schedule.every(1).minutes.do(createCycleCount) - - while True: - schedule.run_pending() - time.sleep(60) - - -createCycleCount() \ No newline at end of file diff --git a/templates/admin.html b/templates/admin.html deleted file mode 100644 index 1339684..0000000 --- a/templates/admin.html +++ /dev/null @@ -1,449 +0,0 @@ - - - - - Admin - - - - - - - - - -
    -
    -
    -
    - - home - Profile -
    -
    -
    -
    -

    Your Sites

    -
    -
    -

    Listed below are all the sites within your instance of MyPantry. Clicking on one will allow you - edit most of the attributes inherited by the site.

    -
    -
    - - - - - -
    SiteDescription
    -
    -
    - -
    -
    -
    -
    -

    Your Roles

    -
    -
    -

    Listed below are all the roles within your instance of MyPantry. Clicking on one will allow you - edit most of the attributes inherited by the role.

    -
    -
    - - - - - - -
    SiteRoleRole Description
    -
    -
    - -
    -
    -
    -
    -

    Your Users

    -
    -
    -

    Listed below is all the users that have access to your instance.

    -
    -
    - - - - - -
    UsernameEmail
    -
    -
    - -
    -
    -
    -
    -
    -
    - - - - - - - - - - \ No newline at end of file diff --git a/templates/items/transactions.html b/templates/items/transactions.html deleted file mode 100644 index 928ef6b..0000000 --- a/templates/items/transactions.html +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -
    - - - - - - - - - - - - - - - - -
    TimestampBarcodeNameTransaction TypeQuantityDescriptionUser ID
    - -
    -
    -
    -
    -

    Transaction Receipt

    -

    ...

    -

    ...

    -

    ...

    -

    ...

    -

    ...

    -

    ...

    -

    ...

    -

    ...

    - - - - -
    KeyValue
    -
    -
    - - - - \ No newline at end of file diff --git a/templates/other/transaction.html b/templates/other/transaction.html deleted file mode 100644 index b5b35f3..0000000 --- a/templates/other/transaction.html +++ /dev/null @@ -1,389 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - -
    - - -
    -
    - - -
    -
    Enter Transaction Receipt
    -
    -
    -
    -
    - - - -
    -
    -
    -
    -
    -
    - - -
    -
    - -
    -
    -
    -
    -
    - - -
    -
    - - -
    -
    -
    - - -
    -
    - - -
    -
    -
    -
    - - -
    -
    -
    -
    -
    - - -
    - -
    -
    -
    -
    -
    - - -
    -
    -
    -
    -
    - - -
    -
    - - -
    -
    -
    - - -
    -
    -
    -
    -
    - -
    -
    -
    -
    -

    Using this method of entering transaction receipts does so by transacting a single UOM of the barcode scanned. Its important that you have the - Barcode input focused and use a scanner that places the characters into the field before it finishes up with a press of the ENTER key. -

    -
    -
    -
    - - -
    -
    - -
    -
    -
    - - - - - - - - - - - - -
    StatusBarcodeNameTypeLocation
    -
    -
    -
    -
    -

    Using this method of entering receipts does so by adding each barcode to a list and once the receipt has been built the - the system will then add the receipt to the system. Its important that you have the Barcode input focused and use a scanner that places the - characters into the field before it finishes up with a press of the ENTER key. -

    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -
    - - -
    -
    -
    - - - - - - - - - - -
    TypeBarcodeName
    -
    -
    -
    -
    - - -
    -
    -

    Select Item

    -

    Select an Item from the system...

    - - - - - - - - - - - - -
    IDBarcodeName
    -
    -
    - -
    -
    -

    Item Locations

    - - - - - - - - - - -
    ZoneLocationQOH
    -
    -
    - -
    -
    -

    Edit Line...

    -

    Edit any fields here for the selected Line and then save them.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    QTY
    QTY
    UOM - -
    COST
    EXPIRES
    -

    - - -

    -
    -
    - - - - {% assets "js_all" %} - - {% endassets %} - - - \ No newline at end of file diff --git a/templates/receipts/index.html b/templates/receipts/index.html deleted file mode 100644 index 744c85e..0000000 --- a/templates/receipts/index.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -
    -
    - -
    - -
    -
    -
    - - - - - - - - - - - -
    Receipt IDReceipt StatusDate SubmittedSubmitted By
    -
    -
    - -
    -
    -
    - - - \ No newline at end of file diff --git a/templates/shopping-lists/index.html b/templates/shopping-lists/index.html deleted file mode 100644 index 8b34b82..0000000 --- a/templates/shopping-lists/index.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    -

    Adding Shopping List...

    -
    - - -
    -
    - - -
    -
    - - -
    - -
    -
    -
    - - - \ No newline at end of file diff --git a/templates/shopping-lists/view.html b/templates/shopping-lists/view.html deleted file mode 100644 index 9023292..0000000 --- a/templates/shopping-lists/view.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -
    -
    -
    -

    test

    -
    -
    -

    test

    -
    -
    -

    test

    -
    -
    - - - - - - - - - -
    OperationsItemQty/UOM
    - -
    -
    -
    -
    - - - - \ No newline at end of file diff --git a/templates/workshop.html b/templates/workshop.html deleted file mode 100644 index 4b3a5a5..0000000 --- a/templates/workshop.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - - Workshop - - - - - -
    -
    -
    -
    -
    -
    -

    Welcome to you personalized workshop, this is where you can add/create/modify - alot of the items and functions in your site. These modals will walk you through what basic info you will need - in order to further expand on your site.

    -
    -
    -
    - Add Group -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    -
    - - - - - - \ No newline at end of file diff --git a/test.py b/test.py deleted file mode 100644 index 1add264..0000000 --- a/test.py +++ /dev/null @@ -1,18 +0,0 @@ -from config import config -import psycopg2, ast, database, datetime, json, MyDataclasses, process, pprint -import random, uuid, csv, postsqldb - -import pdf2image, os, pymupdf, PIL - -from pywebpush import webpush, WebPushException - - -site = MyDataclasses.SitePayload( - "testA", - "Test site A", - 1 -) - -print("payload", site) -x = site.__dict__ -print("dict", x) \ No newline at end of file diff --git a/test.txt b/test.txt deleted file mode 100644 index 2186840..0000000 --- a/test.txt +++ /dev/null @@ -1,1401 +0,0 @@ -ALTER TABLE main_receipt_items -ALTER COLUMN uom TYPE INTEGER -USING uom::INTEGER; - - - - - -{ - "id": "0853555006870", - "lc": "en", - "_id": "0853555006870", - "rev": 17, - "code": "0853555006870", - "lang": "en", - "teams": "chocolatine,la-robe-est-bleue", - "brands": "GoMacro, LLC", - "images": { - "1": { - "sizes": { - "100": { - "h": 87, - "w": 100 - }, - "400": { - "h": 349, - "w": 400 - }, - "full": { - "h": 878, - "w": 1005 - } - }, - "uploader": "kiliweb", - "uploaded_t": 1618700429 - }, - "2": { - "sizes": { - "100": { - "h": 100, - "w": 76 - }, - "400": { - "h": 400, - "w": 303 - }, - "full": { - "h": 465, - "w": 352 - } - }, - "uploader": "kiliweb", - "uploaded_t": 1618700430 - }, - "3": { - "sizes": { - "100": { - "h": 100, - "w": 75 - }, - "400": { - "h": 400, - "w": 300 - }, - "full": { - "h": 4032, - "w": 3024 - } - }, - "uploader": "absmith", - "uploaded_t": 1730328128 - }, - "4": { - "sizes": { - "100": { - "h": 100, - "w": 75 - }, - "400": { - "h": 400, - "w": 300 - }, - "full": { - "h": 4032, - "w": 3024 - } - }, - "uploader": "absmith", - "uploaded_t": 1730328247 - }, - "front_en": { - "x1": "-1", - "x2": "-1", - "y1": "-1", - "y2": "-1", - "rev": "3", - "angle": 0, - "imgid": "1", - "sizes": { - "100": { - "h": 87, - "w": 100 - }, - "200": { - "h": 175, - "w": 200 - }, - "400": { - "h": 349, - "w": 400 - }, - "full": { - "h": 878, - "w": 1005 - } - }, - "geometry": "0x0--1--1", - "normalize": null, - "white_magic": null, - "coordinates_image_size": "full" - }, - "nutrition_en": { - "x1": "-1", - "x2": "-1", - "y1": "-1", - "y2": "-1", - "rev": "13", - "angle": 0, - "imgid": "3", - "sizes": { - "100": { - "h": 100, - "w": 75 - }, - "200": { - "h": 200, - "w": 150 - }, - "400": { - "h": 400, - "w": 300 - }, - "full": { - "h": 4032, - "w": 3024 - } - }, - "geometry": "0x0--1--1", - "normalize": null, - "white_magic": null, - "coordinates_image_size": "full" - }, - "ingredients_en": { - "x1": "-1", - "x2": "-1", - "y1": "-1", - "y2": "-1", - "rev": "16", - "angle": 0, - "imgid": "4", - "sizes": { - "100": { - "h": 100, - "w": 75 - }, - "200": { - "h": 200, - "w": 150 - }, - "400": { - "h": 400, - "w": 300 - }, - "full": { - "h": 4032, - "w": 3024 - } - }, - "geometry": "0x0--1--1", - "normalize": null, - "white_magic": null, - "coordinates_image_size": "full" - } - }, - "labels": "Organic, Vegetarian, No gluten, USDA Organic, Vegan, Vegan Action, No GMOs, Non GMO project", - "states": "en:to-be-completed, en:nutrition-facts-completed, en:ingredients-completed, en:expiration-date-to-be-completed, en:packaging-code-to-be-completed, en:characteristics-to-be-completed, en:origins-to-be-completed, en:categories-completed, en:brands-completed, en:packaging-to-be-completed, en:quantity-to-be-completed, en:product-name-completed, en:photos-to-be-validated, en:packaging-photo-to-be-selected, en:nutrition-photo-selected, en:ingredients-photo-selected, en:front-photo-selected, en:photos-uploaded", - "traces": "", - "creator": "kiliweb", - "scans_n": 7, - "sources": [ - { - "id": "org-label-non-gmo-project", - "url": null, - "name": "label-non-gmo-project", - "fields": [ - "product_name_en", - "brands", - "labels", - "countries", - "data_sources" - ], - "images": [], - "import_t": 1718819519, - "manufacturer": 0 - } - ], - "complete": 0, - "_keywords": [ - "action", - "bar", - "butter", - "chip", - "chocolate", - "gluten", - "gmo", - "gomacro", - "llc", - "macrobar", - "no", - "non", - "organic", - "peanut", - "project", - "protein", - "usda", - "vegan", - "vegetarian" - ], - "allergens": "", - "countries": "en:us, World", - "created_t": 1618700428, - "image_url": "https://images.openfoodfacts.org/images/products/085/355/500/6870/front_en.3.400.jpg", - "labels_lc": "en", - "languages": { - "en:english": 5 - }, - "max_imgid": "4", - "misc_tags": [ - "en:ecoscore-extended-data-not-computed", - "en:ecoscore-not-computed", - "en:nutriscore-2021-b-2023-c", - "en:nutriscore-2021-better-than-2023", - "en:nutriscore-2021-different-from-2023", - "en:nutriscore-computed", - "en:nutrition-all-nutriscore-values-known", - "en:nutrition-fruits-vegetables-legumes-estimate-from-ingredients", - "en:nutrition-fruits-vegetables-nuts-estimate-from-ingredients", - "en:packagings-empty", - "en:packagings-not-complete", - "en:packagings-number-of-components-0" - ], - "categories": "Protein bars", - "codes_tags": [ - "code-13", - "conflict-with-upc-12", - "0853555006xxx", - "085355500xxxx", - "08535550xxxxx", - "0853555xxxxxx", - "085355xxxxxxx", - "08535xxxxxxxx", - "0853xxxxxxxxx", - "085xxxxxxxxxx", - "08xxxxxxxxxxx", - "0xxxxxxxxxxxx" - ], - "labels_old": "Organic, Vegetarian, No gluten, USDA Organic, Vegan, en:vegan-action", - "nova_group": 3, - "nutriments": { - "fat": 11, - "salt": 0.025, - "fiber": 2, - "energy": 1758, - "sodium": 0.01, - "sugars": 14, - "fat_100g": 11, - "fat_unit": "g", - "proteins": 11, - "fat_value": 11, - "salt_100g": 0.025, - "salt_unit": "g", - "trans-fat": 0, - "fiber_100g": 2, - "fiber_unit": "g", - "nova-group": 3, - "salt_value": 0.025, - "cholesterol": 0, - "energy-kcal": 420.28986, - "energy_100g": 1758, - "energy_unit": "kcal", - "fiber_value": 2, - "sodium_100g": 0.01, - "sodium_unit": "g", - "sugars_100g": 14, - "sugars_unit": "g", - "added-sugars": 12, - "energy_value": 420.28986, - "sodium_value": 0.01, - "sugars_value": 14, - "carbohydrates": 39, - "proteins_100g": 11, - "proteins_unit": "g", - "saturated-fat": 2, - "proteins_value": 11, - "trans-fat_100g": 0, - "trans-fat_unit": "g", - "nova-group_100g": 3, - "trans-fat_value": 0, - "cholesterol_100g": 0, - "cholesterol_unit": "g", - "energy-kcal_100g": 420.28986, - "energy-kcal_unit": "kcal", - "added-sugars_100g": 12, - "added-sugars_unit": "g", - "cholesterol_value": 0, - "energy-kcal_value": 420.28986, - "added-sugars_value": 12, - "carbohydrates_100g": 39, - "carbohydrates_unit": "g", - "nova-group_serving": 3, - "nutrition-score-fr": 5, - "saturated-fat_100g": 2, - "saturated-fat_unit": "g", - "carbohydrates_value": 39, - "saturated-fat_value": 2, - "nutrition-score-fr_100g": 5, - "energy-kcal_value_computed": 303, - "fruits-vegetables-nuts-estimate-from-ingredients_100g": 23.4375, - "fruits-vegetables-legumes-estimate-from-ingredients_100g": 0, - "fruits-vegetables-nuts-estimate-from-ingredients_serving": 23.4375, - "fruits-vegetables-legumes-estimate-from-ingredients_serving": 0 - }, - "nutriscore": { - "2021": { - "data": { - "fiber": 2, - "energy": 1758, - "is_fat": 0, - "sodium": 10, - "sugars": 14, - "is_water": 0, - "proteins": 11, - "is_cheese": 0, - "fiber_value": 2, - "is_beverage": 0, - "energy_value": 1758, - "fiber_points": 2, - "sodium_value": 10, - "sugars_value": 14, - "energy_points": 5, - "saturated_fat": 2, - "sodium_points": 0, - "sugars_points": 3, - "proteins_value": 11, - "negative_points": 9, - "positive_points": 7, - "proteins_points": 5, - "saturated_fat_value": 2, - "saturated_fat_points": 1, - "fruits_vegetables_nuts_colza_walnut_olive_oils": 23.4375, - "fruits_vegetables_nuts_colza_walnut_olive_oils_value": 23.4, - "fruits_vegetables_nuts_colza_walnut_olive_oils_points": 0 - }, - "grade": "b", - "score": 2, - "category_available": 1, - "nutrients_available": 1, - "nutriscore_computed": 1, - "nutriscore_applicable": 1 - }, - "2023": { - "data": { - "is_water": 0, - "is_cheese": 0, - "components": { - "negative": [ - { - "id": "energy", - "unit": "kJ", - "value": 1758, - "points": 5, - "points_max": 10 - }, - { - "id": "sugars", - "unit": "g", - "value": 14, - "points": 3, - "points_max": 15 - }, - { - "id": "saturated_fat", - "unit": "g", - "value": 2, - "points": 1, - "points_max": 10 - }, - { - "id": "salt", - "unit": "g", - "value": 0.03, - "points": 0, - "points_max": 20 - } - ], - "positive": [ - { - "id": "proteins", - "unit": "g", - "value": 11, - "points": 4, - "points_max": 7 - }, - { - "id": "fiber", - "unit": "g", - "value": 2, - "points": 0, - "points_max": 5 - }, - { - "id": "fruits_vegetables_legumes", - "unit": "%", - "value": 0, - "points": 0, - "points_max": 5 - } - ] - }, - "is_beverage": 0, - "count_proteins": 1, - "negative_points": 9, - "positive_points": 4, - "positive_nutrients": [ - "proteins", - "fiber", - "fruits_vegetables_legumes" - ], - "is_red_meat_product": 0, - "negative_points_max": 55, - "positive_points_max": 17, - "count_proteins_reason": "negative_points_less_than_11", - "is_fat_oil_nuts_seeds": 0 - }, - "grade": "c", - "score": 5, - "category_available": 1, - "nutrients_available": 1, - "nutriscore_computed": 1, - "nutriscore_applicable": 1 - } - }, - "packagings": [], - "teams_tags": [ - "chocolatine", - "la-robe-est-bleue" - ], - "update_key": "sort", - "additives_n": 0, - "brands_tags": [ - "gomacro", - "llc" - ], - "ingredients": [ - { - "id": "en:brown-rice-syrup", - "text": "BROWN RICE SYRUP", - "vegan": "yes", - "labels": "en:organic", - "vegetarian": "yes", - "percent_max": 100, - "percent_min": 16.6666666666667, - "is_in_taxonomy": 1, - "percent_estimate": 58.3333333333333 - }, - { - "id": "en:peanut-paste", - "text": "PEANUT BUTTER", - "vegan": "yes", - "labels": "en:organic", - "vegetarian": "yes", - "percent_max": 50, - "percent_min": 0, - "ecobalyse_code": "peanut-organic", - "is_in_taxonomy": 1, - "ciqual_food_code": "15001", - "percent_estimate": 20.8333333333333 - }, - { - "id": "en:protein-blend", - "text": "PROTEIN BLEND", - "labels": "en:organic", - "ingredients": [ - { - "id": "en:sprouted-brown-rice-protein", - "text": "SPROUTED BROWN RICE PROTEIN", - "labels": "en:organic", - "percent_max": 33.3333333333333, - "percent_min": 0, - "is_in_taxonomy": 0, - "percent_estimate": 5.20833333333333 - }, - { - "id": "en:pea-protein", - "text": "PEA PROTEIN", - "vegan": "yes", - "labels": "en:organic", - "vegetarian": "yes", - "percent_max": 16.6666666666667, - "percent_min": 0, - "is_in_taxonomy": 1, - "percent_estimate": 5.20833333333333 - } - ], - "percent_max": 33.3333333333333, - "percent_min": 0, - "is_in_taxonomy": 0, - "percent_estimate": 10.4166666666667 - }, - { - "id": "en:chocolate-chunk", - "text": "CHOCOLATE CHIPS", - "vegan": "maybe", - "labels": "en:organic", - "vegetarian": "yes", - "ingredients": [ - { - "id": "en:coconut-sugar", - "text": "COCONUT SUGAR", - "vegan": "yes", - "labels": "en:organic", - "vegetarian": "yes", - "percent_max": 14, - "percent_min": 0, - "ecobalyse_code": "sugar-beet-organic", - "is_in_taxonomy": 1, - "percent_estimate": 2.60416666666666, - "ciqual_proxy_food_code": "31016" - }, - { - "id": "en:cocoa", - "text": "COCOA", - "vegan": "yes", - "labels": "en:organic", - "vegetarian": "yes", - "percent_max": 12.5, - "percent_min": 0, - "is_in_taxonomy": 1, - "percent_estimate": 1.30208333333333, - "ciqual_proxy_food_code": "18100" - }, - { - "id": "en:cocoa-butter", - "text": "COCOA BUTTER", - "vegan": "yes", - "labels": "en:organic", - "vegetarian": "yes", - "percent_max": 8.33333333333333, - "percent_min": 0, - "is_in_taxonomy": 1, - "ciqual_food_code": "16030", - "percent_estimate": 1.30208333333333 - } - ], - "percent_max": 25, - "percent_min": 0, - "is_in_taxonomy": 1, - "percent_estimate": 5.20833333333333, - "ciqual_proxy_food_code": "31005" - }, - { - "id": "en:brown-rice", - "text": "BROWN RICE", - "vegan": "yes", - "labels": "en:organic", - "processing": "en:puffed", - "vegetarian": "yes", - "percent_max": 20, - "percent_min": 0, - "is_in_taxonomy": 1, - "ciqual_food_code": "9102", - "percent_estimate": 2.60416666666666 - }, - { - "id": "en:peanut", - "text": "PEANUTS", - "vegan": "yes", - "labels": "en:organic", - "vegetarian": "yes", - "percent_max": 16.6666666666667, - "percent_min": 0, - "ecobalyse_code": "peanut-organic", - "is_in_taxonomy": 1, - "ciqual_food_code": "15001", - "percent_estimate": 2.60416666666666 - } - ], - "labels_tags": [ - "en:no-gluten", - "en:organic", - "en:vegetarian", - "en:no-gmos", - "en:usda-organic", - "en:vegan", - "en:non-gmo-project", - "en:vegan-action" - ], - "last_editor": "absmith", - "nova_groups": "3", - "states_tags": [ - "en:to-be-completed", - "en:nutrition-facts-completed", - "en:ingredients-completed", - "en:expiration-date-to-be-completed", - "en:packaging-code-to-be-completed", - "en:characteristics-to-be-completed", - "en:origins-to-be-completed", - "en:categories-completed", - "en:brands-completed", - "en:packaging-to-be-completed", - "en:quantity-to-be-completed", - "en:product-name-completed", - "en:photos-to-be-validated", - "en:packaging-photo-to-be-selected", - "en:nutrition-photo-selected", - "en:ingredients-photo-selected", - "en:front-photo-selected", - "en:photos-uploaded" - ], - "traces_tags": [], - "completeness": 0.5875, - "countries_lc": "en", - "data_sources": "App - yuka, Apps, App - smoothie-openfoodfacts, Labels, label-non-gmo-project", - "editors_tags": [ - "absmith", - "austinpowell", - "itsjustruby", - "kiliweb", - "org-label-non-gmo-project", - "roboto-app", - "teolemon", - "yuka.sY2b0xO6T85zoF3NwEKvlkFKX4bmkwjoahPTkxa04u6sFLLue_Zuy7DqIag" - ], - "last_image_t": 1730328248, - "owner_fields": {}, - "product_name": "Macrobar Peanut Butter Chocolate Chip", - "product_type": "food", - "serving_size": "1 bar", - "categories_lc": "en", - "checkers_tags": [], - "ecoscore_data": { - "scores": {}, - "status": "unknown", - "missing": { - "labels": 1, - "origins": 1, - "packagings": 1, - "agb_category": 1 - }, - "agribalyse": { - "warning": "missing_agribalyse_match" - }, - "adjustments": { - "packaging": { - "value": -15, - "warning": "packaging_data_missing" - }, - "production_system": { - "value": 0, - "labels": [], - "warning": "no_label" - }, - "threatened_species": {}, - "origins_of_ingredients": { - "value": -5, - "values": { - "ad": -5, - "al": -5, - "at": -5, - "ax": -5, - "ba": -5, - "be": -5, - "bg": -5, - "ch": -5, - "cy": -5, - "cz": -5, - "de": -5, - "dk": -5, - "dz": -5, - "ee": -5, - "eg": -5, - "es": -5, - "fi": -5, - "fo": -5, - "fr": -5, - "gg": -5, - "gi": -5, - "gr": -5, - "hr": -5, - "hu": -5, - "ie": -5, - "il": -5, - "im": -5, - "is": -5, - "it": -5, - "je": -5, - "lb": -5, - "li": -5, - "lt": -5, - "lu": -5, - "lv": -5, - "ly": -5, - "ma": -5, - "mc": -5, - "md": -5, - "me": -5, - "mk": -5, - "mt": -5, - "nl": -5, - "no": -5, - "pl": -5, - "ps": -5, - "pt": -5, - "ro": -5, - "rs": -5, - "se": -5, - "si": -5, - "sj": -5, - "sk": -5, - "sm": -5, - "sy": -5, - "tn": -5, - "tr": -5, - "ua": -5, - "uk": -5, - "us": -5, - "va": -5, - "xk": -5, - "world": -5 - }, - "warning": "origins_are_100_percent_unknown", - "epi_score": 0, - "epi_value": -5, - "aggregated_origins": [ - { - "origin": "en:unknown", - "percent": 100, - "epi_score": "0", - "transportation_score": 0 - } - ], - "transportation_score": 0, - "transportation_value": 0, - "transportation_scores": { - "ad": 0, - "al": 0, - "at": 0, - "ax": 0, - "ba": 0, - "be": 0, - "bg": 0, - "ch": 0, - "cy": 0, - "cz": 0, - "de": 0, - "dk": 0, - "dz": 0, - "ee": 0, - "eg": 0, - "es": 0, - "fi": 0, - "fo": 0, - "fr": 0, - "gg": 0, - "gi": 0, - "gr": 0, - "hr": 0, - "hu": 0, - "ie": 0, - "il": 0, - "im": 0, - "is": 0, - "it": 0, - "je": 0, - "lb": 0, - "li": 0, - "lt": 0, - "lu": 0, - "lv": 0, - "ly": 0, - "ma": 0, - "mc": 0, - "md": 0, - "me": 0, - "mk": 0, - "mt": 0, - "nl": 0, - "no": 0, - "pl": 0, - "ps": 0, - "pt": 0, - "ro": 0, - "rs": 0, - "se": 0, - "si": 0, - "sj": 0, - "sk": 0, - "sm": 0, - "sy": 0, - "tn": 0, - "tr": 0, - "ua": 0, - "uk": 0, - "us": 0, - "va": 0, - "xk": 0, - "world": 0 - }, - "transportation_values": { - "ad": 0, - "al": 0, - "at": 0, - "ax": 0, - "ba": 0, - "be": 0, - "bg": 0, - "ch": 0, - "cy": 0, - "cz": 0, - "de": 0, - "dk": 0, - "dz": 0, - "ee": 0, - "eg": 0, - "es": 0, - "fi": 0, - "fo": 0, - "fr": 0, - "gg": 0, - "gi": 0, - "gr": 0, - "hr": 0, - "hu": 0, - "ie": 0, - "il": 0, - "im": 0, - "is": 0, - "it": 0, - "je": 0, - "lb": 0, - "li": 0, - "lt": 0, - "lu": 0, - "lv": 0, - "ly": 0, - "ma": 0, - "mc": 0, - "md": 0, - "me": 0, - "mk": 0, - "mt": 0, - "nl": 0, - "no": 0, - "pl": 0, - "ps": 0, - "pt": 0, - "ro": 0, - "rs": 0, - "se": 0, - "si": 0, - "sj": 0, - "sk": 0, - "sm": 0, - "sy": 0, - "tn": 0, - "tr": 0, - "ua": 0, - "uk": 0, - "us": 0, - "va": 0, - "xk": 0, - "world": 0 - }, - "origins_from_categories": [ - "en:unknown" - ], - "origins_from_origins_field": [ - "en:unknown" - ] - } - }, - "missing_key_data": 1, - "missing_agribalyse_match_warning": 1 - }, - "ecoscore_tags": [ - "unknown" - ], - "ingredients_n": 11, - "minerals_tags": [], - "pnns_groups_1": "unknown", - "pnns_groups_2": "unknown", - "vitamins_tags": [], - "weighers_tags": [], - "additives_tags": [], - "allergens_tags": [ - "en:peanuts" - ], - "countries_tags": [ - "en:united-states", - "en:world" - ], - "ecoscore_grade": "unknown", - "informers_tags": [ - "yuka.sY2b0xO6T85zoF3NwEKvlkFKX4bmkwjoahPTkxa04u6sFLLue_Zuy7DqIag", - "kiliweb", - "roboto-app", - "austinpowell", - "org-label-non-gmo-project", - "absmith" - ], - "ingredients_lc": "en", - "languages_tags": [ - "en:english", - "en:1" - ], - "last_updated_t": 1738799980, - "nutrition_data": "", - "popularity_key": 23900000016, - "unique_scans_n": 7, - "categories_tags": [ - "en:dietary-supplements", - "en:bodybuilding-supplements", - "en:protein-bars" - ], - "correctors_tags": [ - "roboto-app", - "teolemon", - "itsjustruby", - "austinpowell", - "org-label-non-gmo-project", - "absmith" - ], - "image_front_url": "https://images.openfoodfacts.org/images/products/085/355/500/6870/front_en.3.400.jpg", - "image_small_url": "https://images.openfoodfacts.org/images/products/085/355/500/6870/front_en.3.200.jpg", - "image_thumb_url": "https://images.openfoodfacts.org/images/products/085/355/500/6870/front_en.3.100.jpg", - "languages_codes": { - "en": 5 - }, - "last_modified_t": 1730328292, - "nutrient_levels": { - "fat": "moderate", - "salt": "low", - "sugars": "high", - "saturated-fat": "moderate" - }, - "nutriscore_data": { - "grade": "c", - "score": 5, - "is_water": 0, - "is_cheese": 0, - "components": { - "negative": [ - { - "id": "energy", - "unit": "kJ", - "value": 1758, - "points": 5, - "points_max": 10 - }, - { - "id": "sugars", - "unit": "g", - "value": 14, - "points": 3, - "points_max": 15 - }, - { - "id": "saturated_fat", - "unit": "g", - "value": 2, - "points": 1, - "points_max": 10 - }, - { - "id": "salt", - "unit": "g", - "value": 0.03, - "points": 0, - "points_max": 20 - } - ], - "positive": [ - { - "id": "proteins", - "unit": "g", - "value": 11, - "points": 4, - "points_max": 7 - }, - { - "id": "fiber", - "unit": "g", - "value": 2, - "points": 0, - "points_max": 5 - }, - { - "id": "fruits_vegetables_legumes", - "unit": "%", - "value": 0, - "points": 0, - "points_max": 5 - } - ] - }, - "is_beverage": 0, - "count_proteins": 1, - "negative_points": 9, - "positive_points": 4, - "positive_nutrients": [ - "proteins", - "fiber", - "fruits_vegetables_legumes" - ], - "is_red_meat_product": 0, - "negative_points_max": 55, - "positive_points_max": 17, - "count_proteins_reason": "negative_points_less_than_11", - "is_fat_oil_nuts_seeds": 0 - }, - "nutriscore_tags": [ - "c" - ], - "popularity_tags": [ - "bottom-25-percent-scans-2022", - "top-80-percent-scans-2022", - "top-85-percent-scans-2022", - "top-90-percent-scans-2022", - "top-10000-us-scans-2022", - "top-50000-us-scans-2022", - "top-100000-us-scans-2022", - "top-country-us-scans-2022", - "top-100000-scans-2024", - "at-least-5-scans-2024", - "top-75-percent-scans-2024", - "top-80-percent-scans-2024", - "top-85-percent-scans-2024", - "top-90-percent-scans-2024", - "top-5000-us-scans-2024", - "top-10000-us-scans-2024", - "top-50000-us-scans-2024", - "top-100000-us-scans-2024", - "top-country-us-scans-2024", - "at-least-5-us-scans-2024" - ], - "product_name_en": "Macrobar Peanut Butter Chocolate Chip", - "selected_images": { - "front": { - "small": { - "en": "https://images.openfoodfacts.org/images/products/085/355/500/6870/front_en.3.200.jpg" - }, - "thumb": { - "en": "https://images.openfoodfacts.org/images/products/085/355/500/6870/front_en.3.100.jpg" - }, - "display": { - "en": "https://images.openfoodfacts.org/images/products/085/355/500/6870/front_en.3.400.jpg" - } - }, - "nutrition": { - "small": { - "en": "https://images.openfoodfacts.org/images/products/085/355/500/6870/nutrition_en.13.200.jpg" - }, - "thumb": { - "en": "https://images.openfoodfacts.org/images/products/085/355/500/6870/nutrition_en.13.100.jpg" - }, - "display": { - "en": "https://images.openfoodfacts.org/images/products/085/355/500/6870/nutrition_en.13.400.jpg" - } - }, - "ingredients": { - "small": { - "en": "https://images.openfoodfacts.org/images/products/085/355/500/6870/ingredients_en.16.200.jpg" - }, - "thumb": { - "en": "https://images.openfoodfacts.org/images/products/085/355/500/6870/ingredients_en.16.100.jpg" - }, - "display": { - "en": "https://images.openfoodfacts.org/images/products/085/355/500/6870/ingredients_en.16.400.jpg" - } - } - }, - "amino_acids_tags": [], - "entry_dates_tags": [ - "2021-04-17", - "2021-04", - "2021" - ], - "food_groups_tags": [], - "ingredients_tags": [ - "en:brown-rice-syrup", - "en:added-sugar", - "en:disaccharide", - "en:rice-syrup", - "en:peanut-paste", - "en:nut", - "en:peanut", - "en:protein-blend", - "en:chocolate-chunk", - "en:chocolate", - "en:brown-rice", - "en:rice", - "en:sprouted-brown-rice-protein", - "en:pea-protein", - "en:protein", - "en:plant-protein", - "en:coconut-sugar", - "en:sugar", - "en:palm-sugar", - "en:cocoa", - "en:plant", - "en:cocoa-butter" - ], - "ingredients_text": "ORGANIC BROWN RICE SYRUP, ORGANIC PEANUT BUTTER, ORGANIC PROTEIN BLEND (ORGANIC SPROUTED BROWN RICE PROTEIN, ORGANIC PEA PROTEIN), ORGANIC CHOCOLATE CHIPS (ORGANIC COCONUT SUGAR, ORGANIC COCOA, ORGANIC COCOA BUTTER), ORGANIC PUFFED BROWN RICE, ORGANIC PEANUTS.", - "labels_hierarchy": [ - "en:no-gluten", - "en:organic", - "en:vegetarian", - "en:no-gmos", - "en:usda-organic", - "en:vegan", - "en:non-gmo-project", - "en:vegan-action" - ], - "last_modified_by": "absmith", - "nova_group_debug": "", - "nova_groups_tags": [ - "en:3-processed-foods" - ], - "nucleotides_tags": [], - "nutriscore_grade": "c", - "nutriscore_score": 5, - "nutrition_grades": "c", - "states_hierarchy": [ - "en:to-be-completed", - "en:nutrition-facts-completed", - "en:ingredients-completed", - "en:expiration-date-to-be-completed", - "en:packaging-code-to-be-completed", - "en:characteristics-to-be-completed", - "en:origins-to-be-completed", - "en:categories-completed", - "en:brands-completed", - "en:packaging-to-be-completed", - "en:quantity-to-be-completed", - "en:product-name-completed", - "en:photos-to-be-validated", - "en:packaging-photo-to-be-selected", - "en:nutrition-photo-selected", - "en:ingredients-photo-selected", - "en:front-photo-selected", - "en:photos-uploaded" - ], - "traces_from_user": "(en) ", - "traces_hierarchy": [], - "data_quality_tags": [ - "en:no-packaging-data", - "en:ingredients-percent-analysis-ok", - "en:ecoscore-extended-data-not-computed", - "en:food-groups-1-unknown", - "en:food-groups-2-unknown", - "en:food-groups-3-unknown", - "en:energy-value-in-kcal-may-not-match-value-computed-from-other-nutrients", - "en:nutrition-data-per-serving-serving-quantity-is-not-recognized", - "en:vegan-label-but-could-not-confirm-for-all-ingredients", - "en:vegetarian-label-but-could-not-confirm-for-all-ingredients", - "en:ecoscore-origins-of-ingredients-origins-are-100-percent-unknown", - "en:ecoscore-packaging-packaging-data-missing", - "en:ecoscore-production-system-no-label" - ], - "data_sources_tags": [ - "app-yuka", - "apps", - "app-smoothie-openfoodfacts", - "labels", - "label-non-gmo-project" - ], - "no_nutrition_data": "", - "ingredients_n_tags": [ - "11", - "11-20" - ], - "nutriscore_version": "2023", - "nutrition_data_per": "100g", - "nutrition_grade_fr": "c", - "photographers_tags": [ - "kiliweb", - "absmith" - ], - "pnns_groups_1_tags": [ - "unknown", - "missing-association" - ], - "pnns_groups_2_tags": [ - "unknown", - "missing-association" - ], - "allergens_from_user": "(en) ", - "allergens_hierarchy": [ - "en:peanuts" - ], - "countries_hierarchy": [ - "en:united-states", - "en:world" - ], - "image_nutrition_url": "https://images.openfoodfacts.org/images/products/085/355/500/6870/nutrition_en.13.400.jpg", - "ingredients_text_en": "ORGANIC BROWN RICE SYRUP, ORGANIC PEANUT BUTTER, ORGANIC PROTEIN BLEND (ORGANIC SPROUTED BROWN RICE PROTEIN, ORGANIC PEA PROTEIN), ORGANIC CHOCOLATE CHIPS (ORGANIC COCONUT SUGAR, ORGANIC COCOA, ORGANIC COCOA BUTTER), ORGANIC PUFFED BROWN RICE, ORGANIC PEANUTS.", - "known_ingredients_n": 20, - "languages_hierarchy": [ - "en:english" - ], - "main_countries_tags": [], - "nova_groups_markers": { - "3": [ - [ - "ingredients", - "en:sugar" - ] - ] - }, - "added_countries_tags": [], - "categories_hierarchy": [ - "en:dietary-supplements", - "en:bodybuilding-supplements", - "en:protein-bars" - ], - "compared_to_category": "en:protein-bars", - "ingredients_analysis": { - "en:vegan-status-unknown": [ - "en:protein-blend", - "en:sprouted-brown-rice-protein" - ], - "en:palm-oil-content-unknown": [ - "en:protein-blend", - "en:sprouted-brown-rice-protein" - ], - "en:vegetarian-status-unknown": [ - "en:protein-blend", - "en:sprouted-brown-rice-protein" - ] - }, - "last_edit_dates_tags": [ - "2024-10-30", - "2024-10", - "2024" - ], - "nutrient_levels_tags": [ - "en:fat-in-moderate-quantity", - "en:saturated-fat-in-moderate-quantity", - "en:sugars-in-high-quantity", - "en:salt-in-low-quantity" - ], - "nutriscore_2021_tags": [ - "b" - ], - "nutriscore_2023_tags": [ - "c" - ], - "packagings_materials": {}, - "categories_properties": {}, - "image_front_small_url": "https://images.openfoodfacts.org/images/products/085/355/500/6870/front_en.3.200.jpg", - "image_front_thumb_url": "https://images.openfoodfacts.org/images/products/085/355/500/6870/front_en.3.100.jpg", - "image_ingredients_url": "https://images.openfoodfacts.org/images/products/085/355/500/6870/ingredients_en.16.400.jpg", - "ingredients_hierarchy": [ - "en:brown-rice-syrup", - "en:added-sugar", - "en:disaccharide", - "en:rice-syrup", - "en:peanut-paste", - "en:nut", - "en:peanut", - "en:protein-blend", - "en:chocolate-chunk", - "en:chocolate", - "en:brown-rice", - "en:rice", - "en:sprouted-brown-rice-protein", - "en:pea-protein", - "en:protein", - "en:plant-protein", - "en:coconut-sugar", - "en:sugar", - "en:palm-sugar", - "en:cocoa", - "en:plant", - "en:cocoa-butter" - ], - "last_image_dates_tags": [ - "2024-10-30", - "2024-10", - "2024" - ], - "nutrition_grades_tags": [ - "c" - ], - "nutrition_score_debug": "", - "packaging_shapes_tags": [], - "unknown_ingredients_n": 2, - "data_quality_bugs_tags": [], - "data_quality_info_tags": [ - "en:no-packaging-data", - "en:ingredients-percent-analysis-ok", - "en:ecoscore-extended-data-not-computed", - "en:food-groups-1-unknown", - "en:food-groups-2-unknown", - "en:food-groups-3-unknown" - ], - "removed_countries_tags": [], - "unknown_nutrients_tags": [], - "additives_original_tags": [], - "traces_from_ingredients": "", - "data_quality_errors_tags": [], - "ingredients_sweeteners_n": 0, - "nutrition_score_beverage": 0, - "packaging_materials_tags": [], - "packaging_recycling_tags": [], - "image_nutrition_small_url": "https://images.openfoodfacts.org/images/products/085/355/500/6870/nutrition_en.13.200.jpg", - "image_nutrition_thumb_url": "https://images.openfoodfacts.org/images/products/085/355/500/6870/nutrition_en.13.100.jpg", - "ingredients_analysis_tags": [ - "en:palm-oil-content-unknown", - "en:vegan", - "en:vegetarian" - ], - "ingredients_original_tags": [ - "en:brown-rice-syrup", - "en:peanut-paste", - "en:protein-blend", - "en:chocolate-chunk", - "en:brown-rice", - "en:peanut", - "en:sprouted-brown-rice-protein", - "en:pea-protein", - "en:coconut-sugar", - "en:cocoa", - "en:cocoa-butter" - ], - "interface_version_created": "20150316.jqm2", - "nutriscore_score_opposite": -5, - "allergens_from_ingredients": "en:peanuts, en:peanuts", - "categories_properties_tags": [ - "all-products", - "categories-known", - "agribalyse-food-code-unknown", - "agribalyse-proxy-food-code-unknown", - "ciqual-food-code-unknown", - "agribalyse-unknown" - ], - "data_quality_warnings_tags": [ - "en:energy-value-in-kcal-may-not-match-value-computed-from-other-nutrients", - "en:nutrition-data-per-serving-serving-quantity-is-not-recognized", - "en:vegan-label-but-could-not-confirm-for-all-ingredients", - "en:vegetarian-label-but-could-not-confirm-for-all-ingredients", - "en:ecoscore-origins-of-ingredients-origins-are-100-percent-unknown", - "en:ecoscore-packaging-packaging-data-missing", - "en:ecoscore-production-system-no-label" - ], - "interface_version_modified": "20150316.jqm2", - "image_ingredients_small_url": "https://images.openfoodfacts.org/images/products/085/355/500/6870/ingredients_en.16.200.jpg", - "image_ingredients_thumb_url": "https://images.openfoodfacts.org/images/products/085/355/500/6870/ingredients_en.16.100.jpg", - "nutrition_data_prepared_per": "100g", - "ingredients_percent_analysis": 1, - "ingredients_text_with_allergens": "ORGANIC BROWN RICE SYRUP, ORGANIC PEANUT BUTTER, ORGANIC PROTEIN BLEND (ORGANIC SPROUTED BROWN RICE PROTEIN, ORGANIC PEA PROTEIN), ORGANIC CHOCOLATE CHIPS (ORGANIC COCONUT SUGAR, ORGANIC COCOA, ORGANIC COCOA BUTTER), ORGANIC PUFFED BROWN RICE, ORGANIC PEANUTS.", - "ingredients_without_ciqual_codes": [ - "en:brown-rice-syrup", - "en:pea-protein", - "en:protein-blend", - "en:sprouted-brown-rice-protein" - ], - "ingredients_without_ecobalyse_ids": [ - "en:brown-rice", - "en:brown-rice-syrup", - "en:chocolate-chunk", - "en:cocoa", - "en:cocoa-butter", - "en:pea-protein", - "en:protein-blend", - "en:sprouted-brown-rice-protein" - ], - "other_nutritional_substances_tags": [], - "ingredients_text_with_allergens_en": "ORGANIC BROWN RICE SYRUP, ORGANIC PEANUT BUTTER, ORGANIC PROTEIN BLEND (ORGANIC SPROUTED BROWN RICE PROTEIN, ORGANIC PEA PROTEIN), ORGANIC CHOCOLATE CHIPS (ORGANIC COCONUT SUGAR, ORGANIC COCOA, ORGANIC COCOA BUTTER), ORGANIC PUFFED BROWN RICE, ORGANIC PEANUTS.", - "ingredients_without_ciqual_codes_n": 4, - "ingredients_without_ecobalyse_ids_n": 8, - "ingredients_with_specified_percent_n": 0, - "ingredients_non_nutritive_sweeteners_n": 0, - "ingredients_with_specified_percent_sum": 0, - "ingredients_with_unspecified_percent_n": 9, - "ingredients_with_unspecified_percent_sum": 100, - "nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients": 1, - "nutrition_score_warning_fruits_vegetables_legumes_estimate_from_ingredients": 1, - "nutrition_score_warning_fruits_vegetables_nuts_estimate_from_ingredients_value": 23.4375, - "nutrition_score_warning_fruits_vegetables_legumes_estimate_from_ingredients_value": 0 -} \ No newline at end of file diff --git a/webserver.py b/webserver.py index b21de11..7bec48c 100644 --- a/webserver.py +++ b/webserver.py @@ -1,19 +1,22 @@ -import celery.schedules from flask import Flask, render_template, session, request, redirect, jsonify from flask_assets import Environment, Bundle -import api, config, user_api, psycopg2, main, api_admin, receipts_API, shopping_list_API, group_api -from user_api import login_required, update_session_user -from external_API import external_api -from workshop_api import workshop_api +from authlib.integrations.flask_client import OAuth +import config, psycopg2, main import database -import postsqldb from webpush import trigger_push_notifications_for_subscriptions +from application.administration import administration_api +from application.access_module import access_api +from application.site_management import site_management_api from application.recipes import recipes_api from application.items import items_API +from application.poe import poe_api +from application.shoppinglists import shoplist_api +from application.receipts import receipts_api from flasgger import Swagger - +from outh import oauth app = Flask(__name__, instance_relative_config=True) +oauth.init_app(app) swagger = Swagger(app) UPLOAD_FOLDER = 'static/pictures' FILES_FOLDER = 'static/files' @@ -21,22 +24,30 @@ app.config.from_pyfile('application.cfg.py') app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER app.config['FILES_FOLDER'] = FILES_FOLDER +oauth.register( + name='authentik', + client_id='gh8rLyXC6hfI7W5mDX26OJFGHxmU0nMzeYl3B04G', + client_secret='aRHyAkDDeU22s69Ig0o7f46Xn3HCnB8guZoMHuA23B7x1e2YL8FhAqZbu1f3naiaLyTLi9ICIiBc6dxOp5eIO4fEI9paL2NwKXmqYCRmzNzWAfwmcsIh2qTlQfAfsh6e', + access_token_url="https://auth.treehousefullofstars.com/application/o/token/", + authorize_url="https://auth.treehousefullofstars.com/application/o/authorize/", + userinfo_endpoint="https://auth.treehousefullofstars.com/application/o/userinfo/", + api_base_url="https://auth.treehousefullofstars.com/application/o/", + jwks_uri="https://auth.treehousefullofstars.com/application/o/pantry/jwks/", + client_kwargs={'scope': 'openid profile email'}, +) + assets = Environment(app) app.secret_key = '11gs22h2h1a4h6ah8e413a45' -app.register_blueprint(api.database_api) -app.register_blueprint(user_api.login_app) -app.register_blueprint(api_admin.admin_api) -app.register_blueprint(items_API.items_api) -app.register_blueprint(external_api) -app.register_blueprint(workshop_api) -app.register_blueprint(receipts_API.receipt_api) -app.register_blueprint(shopping_list_API.shopping_list_api) -app.register_blueprint(group_api.groups_api) +app.register_blueprint(access_api.access_api, url_prefix="/access") +app.register_blueprint(administration_api.admin_api, url_prefix='/administration') +app.register_blueprint(items_API.items_api, url_prefix='/items') +app.register_blueprint(poe_api.point_of_ease, url_prefix='/poe') +app.register_blueprint(site_management_api.site_management_api, url_prefix="/site-management") +app.register_blueprint(receipts_api.receipt_api, url_prefix='/receipts') +app.register_blueprint(shoplist_api.shopping_list_api, url_prefix="/shopping-lists") app.register_blueprint(recipes_api.recipes_api, url_prefix='/recipes') - - js = Bundle('js/uikit.min.js', 'js/uikit-icons.min.js', output='gen/main.js') assets.register('js_all', js) @@ -49,7 +60,7 @@ def inject_user(): with psycopg2.connect(**database_config) as conn: try: with conn.cursor() as cur: - sql = f"SELECT id, username, sites, site_roles, system_admin, flags FROM logins WHERE id=%s;" + sql = f"SELECT id, username, sites, site_roles, system_admin, flags, profile_pic_url, login_type FROM logins WHERE id=%s;" cur.execute(sql, (session['user_id'],)) user = cur.fetchone() user = database.tupleDictionaryFactory(cur.description, user) @@ -66,52 +77,12 @@ def inject_user(): return dict(username="") - -@app.route("/transactions/") -@login_required -def transactions(id): - """This is the main endpoint to reach the webpage for an items transaction history - --- - parameters: - - name: id - in: path - type: integer - required: true - default: all - responses: - 200: - description: Returns the transactions.html webpage for the item with passed ID - """ - sites = [site[1] for site in main.get_sites(session['user']['sites'])] - return render_template("items/transactions.html", id=id, current_site=session['selected_site'], sites=sites) - - -@app.route("/item/") -@login_required -def item(id): - sites = [site[1] for site in main.get_sites(session['user']['sites'])] - database_config = config.config() - with psycopg2.connect(**database_config) as conn: - units = postsqldb.UnitsTable.getAll(conn) - return render_template("items/item_new.html", id=id, units=units, current_site=session['selected_site'], sites=sites) - -@app.route("/transaction") -@login_required -def transaction(): - sites = [site[1] for site in main.get_sites(session['user']['sites'])] - database_config = config.config() - with psycopg2.connect(**database_config) as conn: - units = postsqldb.UnitsTable.getAll(conn) - return render_template("other/transaction.html", units=units, current_site=session['selected_site'], sites=sites, proto={'referrer': request.referrer}) - -@app.route("/items") -@login_required -def items(): - update_session_user() - sites = [site[1] for site in main.get_sites(session['user']['sites'])] - return render_template("items/index.html", - current_site=session['selected_site'], - sites=sites) +@app.route("/changeSite", methods=["POST"]) +def changeSite(): + if request.method == "POST": + site = request.json['site'] + session['selected_site'] = site + return jsonify({'error': False, 'message': 'Site Changed!'}) @app.route("/api/push-subscriptions", methods=["POST"]) def create_push_subscription(): @@ -132,11 +103,11 @@ def subscribe(): return render_template("subscribe.html") @app.route("/") -@login_required +@access_api.login_required def home(): - update_session_user() + access_api.update_session_user() sites = [site[1] for site in main.get_sites(session['user']['sites'])] session['selected_site'] = sites[0] return redirect("/items") -app.run(host="0.0.0.0", port=5810, debug=True) \ No newline at end of file +app.run(host="0.0.0.0", port=5811, debug=True) \ No newline at end of file diff --git a/workshop_api.py b/workshop_api.py deleted file mode 100644 index 15b7df3..0000000 --- a/workshop_api.py +++ /dev/null @@ -1,269 +0,0 @@ -from flask import Blueprint, request, render_template, redirect, session, url_for, send_file, jsonify, Response -import psycopg2, math, json, datetime, main, copy, requests, process, database, pprint, MyDataclasses -from config import config, sites_config -from main import unfoldCostLayers -from user_api import login_required -import postsqldb - -workshop_api = Blueprint('workshop_api', __name__) - -@workshop_api.route("/workshop") -@login_required -def workshop(): - print(session['user']) - sites = [site[1] for site in main.get_sites(session['user']['sites'])] - print(session.get('user')['system_admin']) - if not session.get('user')['system_admin']: - return redirect('/logout') - database_config = config() - site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - with conn.cursor() as cur: - sql = f"SELECT id, name FROM {site_name}_zones;" - cur.execute(sql) - zones = cur.fetchall() - return render_template("other/workshop.html", current_site=session['selected_site'], sites=sites, zones=zones) - - -@workshop_api.route('/workshop/getZones', methods=['GET']) -@login_required -def getZones(): - if request.method == "GET": - records = [] - count = 0 - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 10)) - offset = (page - 1) * limit - database_config = config() - site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - records, count = postsqldb.ZonesTable.paginateZones(conn, site_name, (limit, offset)) - return jsonify({'zones': records, "end": math.ceil(count/limit), 'error':False, 'message': 'Zones Loaded Successfully!'}) - return jsonify({'zones': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading Zones!'}) - -@workshop_api.route('/workshop/getLocations', methods=['GET']) -@login_required -def getLocations(): - if request.method == "GET": - records = [] - count = 0 - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 10)) - offset = (page - 1) * limit - database_config = config() - site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - records, count = postsqldb.LocationsTable.paginateLocations(conn, site_name, (limit, offset)) - return jsonify({'locations': records, "end": math.ceil(count/limit), 'error':False, 'message': 'Zones Loaded Successfully!'}) - return jsonify({'locations': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading Zones!'}) - -@workshop_api.route('/workshop/getVendors', methods=['GET']) -@login_required -def getVendors(): - if request.method == "GET": - records = [] - count = 0 - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 10)) - offset = (page - 1) * limit - database_config = config() - site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - records, count = postsqldb.VendorsTable.paginateVendors(conn, site_name, (limit, offset)) - return jsonify({'vendors': records, "end": math.ceil(count/limit), 'error':False, 'message': 'Zones Loaded Successfully!'}) - return jsonify({'vendors': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading Zones!'}) - -@workshop_api.route('/workshop/getBrands', methods=['GET']) -@login_required -def getBrands(): - if request.method == "GET": - records = [] - count = 0 - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 10)) - offset = (page - 1) * limit - database_config = config() - site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - records, count = postsqldb.BrandsTable.paginateBrands(conn, site_name, (limit, offset)) - return jsonify({'brands': records, "end": math.ceil(count/limit), 'error':False, 'message': 'Zones Loaded Successfully!'}) - return jsonify({'brands': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading Zones!'}) - -@workshop_api.route('/workshop/getPrefixes', methods=['GET']) -@login_required -def getPrefixes(): - if request.method == "GET": - records = [] - count = 0 - page = int(request.args.get('page', 1)) - limit = int(request.args.get('limit', 10)) - offset = (page - 1) * limit - database_config = config() - site_name = session['selected_site'] - with psycopg2.connect(**database_config) as conn: - records, count = postsqldb.SKUPrefixTable.paginatePrefixes(conn, site_name, (limit, offset)) - return jsonify({'prefixes': records, "end": math.ceil(count/limit), 'error':False, 'message': 'Zones Loaded Successfully!'}) - return jsonify({'prefixes': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading Zones!'}) - - -@workshop_api.route('/workshop/postAddZone', methods=["POST"]) -def postAddZone(): - if request.method == "POST": - database_config = config() - site_name = session['selected_site'] - try: - with psycopg2.connect(**database_config) as conn: - with conn.cursor() as cur: - cur.execute(f"SELECT id FROM sites WHERE site_name = %s;", (site_name,)) - site_id = cur.fetchone()[0] - zone = postsqldb.ZonesTable.Payload( - request.get_json()['name'], - request.get_json()['description'] - ) - postsqldb.ZonesTable.insert_tuple(conn, site_name, zone.payload()) - except Exception as error: - conn.rollback() - return jsonify({'error': True, 'message': error}) - return jsonify({'error': False, 'message': f"Zone added to {site_name}."}) - return jsonify({'error': True, 'message': f"These was an error with adding this Zone to {site_name}."}) - -@workshop_api.route('/workshop/postEditZone', methods=["POST"]) -def postEditZone(): - if request.method == "POST": - database_config = config() - site_name = session['selected_site'] - try: - with psycopg2.connect(**database_config) as conn: - payload = {'id': request.get_json()['zone_id'], - 'update': request.get_json()['update']} - zone = postsqldb.ZonesTable.update_tuple(conn, site_name, payload) - except Exception as error: - conn.rollback() - return jsonify({'error': True, 'message': error}) - return jsonify({'error': False, 'message': f"{zone['name']} edited in site {site_name}."}) - return jsonify({'error': True, 'message': f"These was an error with editing Zone {zone['name']} in {site_name}."}) - -@workshop_api.route('/workshop/postAddLocation', methods=["POST"]) -def postAddLocation(): - if request.method == "POST": - database_config = config() - site_name = session['selected_site'] - try: - with psycopg2.connect(**database_config) as conn: - - location = postsqldb.LocationsTable.Payload( - request.get_json()['uuid'], - request.get_json()['name'], - request.get_json()['zone_id'] - ) - print(request.get_json()) - postsqldb.LocationsTable.insert_tuple(conn, site_name, location.payload()) - except Exception as error: - conn.rollback() - return jsonify({'error': True, 'message': error}) - return jsonify({'error': False, 'message': f"Zone added to {site_name}."}) - return jsonify({'error': True, 'message': f"These was an error with adding this Zone to {site_name}."}) - -@workshop_api.route('/workshop/postAddVendor', methods=["POST"]) -def postAddVendor(): - if request.method == "POST": - database_config = config() - site_name = session['selected_site'] - try: - with psycopg2.connect(**database_config) as conn: - vendor = postsqldb.VendorsTable.Payload( - request.get_json()['vendor_name'], - session['user_id'], - request.get_json()['vendor_address'], - request.get_json()['vendor_phone_number'], - ) - postsqldb.VendorsTable.insert_tuple(conn, site_name, vendor.payload()) - except Exception as error: - conn.rollback() - return jsonify({'error': True, 'message': error}) - return jsonify({'error': False, 'message': f"Zone added to {site_name}."}) - return jsonify({'error': True, 'message': f"These was an error with adding this Zone to {site_name}."}) - -@workshop_api.route('/workshop/postEditVendor', methods=["POST"]) -def postEditVendor(): - if request.method == "POST": - database_config = config() - site_name = session['selected_site'] - try: - with psycopg2.connect(**database_config) as conn: - payload = {'id': request.get_json()['vendor_id'], - 'update': request.get_json()['update']} - vendor = postsqldb.VendorsTable.update_tuple(conn, site_name, payload) - except Exception as error: - conn.rollback() - return jsonify({'error': True, 'message': error}) - return jsonify({'error': False, 'message': f"{vendor['vendor_name']} edited in site {site_name}."}) - return jsonify({'error': True, 'message': f"These was an error with editing Zone {vendor['vendor_name']} in {site_name}."}) - -@workshop_api.route('/workshop/postAddBrand', methods=["POST"]) -def postAddBrand(): - if request.method == "POST": - database_config = config() - site_name = session['selected_site'] - try: - with psycopg2.connect(**database_config) as conn: - brand = postsqldb.BrandsTable.Payload( - request.get_json()['brand_name'] - ) - postsqldb.BrandsTable.insert_tuple(conn, site_name, brand.payload()) - except Exception as error: - conn.rollback() - return jsonify({'error': True, 'message': error}) - return jsonify({'error': False, 'message': f"Brand added to {site_name}."}) - return jsonify({'error': True, 'message': f"These was an error with adding this Zone to {site_name}."}) - -@workshop_api.route('/workshop/postEditBrand', methods=["POST"]) -def postEditBrand(): - if request.method == "POST": - database_config = config() - site_name = session['selected_site'] - try: - with psycopg2.connect(**database_config) as conn: - payload = {'id': request.get_json()['brand_id'], - 'update': request.get_json()['update']} - brand = postsqldb.BrandsTable.update_tuple(conn, site_name, payload) - except Exception as error: - conn.rollback() - return jsonify({'error': True, 'message': error}) - return jsonify({'error': False, 'message': f"{brand['name']} edited in site {site_name}."}) - return jsonify({'error': True, 'message': f"These was an error with editing Zone {brand['name']} in {site_name}."}) - -@workshop_api.route('/workshop/postAddPrefix', methods=["POST"]) -def postAddPrefix(): - if request.method == "POST": - database_config = config() - site_name = session['selected_site'] - try: - with psycopg2.connect(**database_config) as conn: - prefix = postsqldb.SKUPrefixTable.Payload( - request.get_json()['prefix_uuid'], - request.get_json()['prefix_name'], - request.get_json()['prefix_description'] - ) - postsqldb.SKUPrefixTable.insert_tuple(conn, site_name, prefix.payload()) - except Exception as error: - conn.rollback() - return jsonify({'error': True, 'message': error}) - return jsonify({'error': False, 'message': f"Prefix added to {site_name}."}) - return jsonify({'error': True, 'message': f"These was an error with adding this Prefix to {site_name}."}) - -@workshop_api.route('/workshop/postEditPrefix', methods=["POST"]) -def postEditPrefix(): - if request.method == "POST": - database_config = config() - site_name = session['selected_site'] - try: - with psycopg2.connect(**database_config) as conn: - payload = {'id': request.get_json()['prefix_id'], - 'update': request.get_json()['update']} - prefix = postsqldb.SKUPrefixTable.update_tuple(conn, site_name, payload) - except Exception as error: - conn.rollback() - return jsonify({'error': True, 'message': error}) - return jsonify({'error': False, 'message': f"{prefix['name']} edited in site {site_name}."}) - return jsonify({'error': True, 'message': f"These was an error with editing Zone {prefix['name']} in {site_name}."})