items_api.getModalSkus updated to new schema

This commit is contained in:
Jadowyne Ulve 2025-04-27 13:55:38 -05:00
parent 6dbe5752ad
commit 5fadebb2e4
7 changed files with 79 additions and 27 deletions

View File

@ -81,4 +81,28 @@ def getItemsWithQOH(site:str, payload: tuple, convert:bool=True):
count = cur.fetchone()[0] count = cur.fetchone()[0]
return recordset, count return recordset, count
except Exception as error: except Exception as error:
postsqldb.DatabaseError(error, payload, sql) postsqldb.DatabaseError(error, payload, sql)
def getModalSKUs(site:str, payload:tuple, convert:bool=True):
database_config = config.config()
with open("application/items/sql/itemsModal.sql") as file:
sql = file.read().replace("%%site_name%%", site)
with open("application/items/sql/itemsModalCount.sql") as file:
sql_count = file.read().replace("%%site_name%%", site)
recordset = []
count = 0
try:
with psycopg2.connect(**database_config) as conn:
with conn.cursor() as cur:
print(payload)
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(sql_count, (payload[0],))
count = cur.fetchone()[0]
return recordset, count
except Exception as error:
raise postsqldb.DatabaseError(error, payload, sql)

View File

@ -150,20 +150,42 @@ def pagninate_items():
@items_api.route('/item/getModalItems', methods=["GET"]) @items_api.route('/item/getModalItems', methods=["GET"])
@login_required @login_required
def getModalItems(): def getModalItems():
recordset = [] """ GET items from the system by passing a page, limit, search_string. For select modals
count = {'count': 0} ---
parameters:
- in: query
name: page
schema:
type: integer
default: 1
description: page number for offset
- in: query
name: limit
schema:
type: integer
default: 25
description: number of records to grab
- in: query
name: search_string
schema:
type: string
default: ''
description: string to look for in column search_string
responses:
200:
description: Items received successfully.
"""
recordset, count = tuple(), 0
if request.method == "GET": if request.method == "GET":
page = int(request.args.get('page', 1)) page = int(request.args.get('page', 1))
limit = int(request.args.get('limit', 10)) limit = int(request.args.get('limit', 10))
search_string = request.args.get('search_string', '') search_string = request.args.get('search_string', '')
site_name = session['selected_site'] site_name = session['selected_site']
offset = (page - 1) * limit offset = (page - 1) * limit
database_config = config() recordset, count = database_items.getModalSKUs(site_name, (search_string, limit, offset))
with psycopg2.connect(**database_config) as conn: print(recordset, count)
payload = (search_string, limit, offset) return jsonify({"items":recordset, "end":math.ceil(count/limit), "error":False, "message":"items fetched succesfully!"})
recordset, count = database.getItemsForModal(conn, site_name, payload, convert=True) return jsonify({"items":recordset, "end":math.ceil(count/limit), "error":True, "message": f"method {request.method} is not allowed."})
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"]) @items_api.route('/item/getPrefixes', methods=["GET"])
@login_required @login_required
@ -178,7 +200,7 @@ def getModalPrefixes():
database_config = config() database_config = config()
with psycopg2.connect(**database_config) as conn: with psycopg2.connect(**database_config) as conn:
payload = (limit, offset) payload = (limit, offset)
recordset, count = postsqldb.SKUPrefixTable.paginatePrefixes(conn, site_name, payload, convert=True) recordset, count = db.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":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"}) return jsonify({"prefixes":recordset, "end":math.ceil(count/limit), "error":True, "message":"There was an error with this GET statement"})
@ -212,7 +234,7 @@ def getZonesbySku():
payload = (item_id, limit, offset) payload = (item_id, limit, offset)
count = 0 count = 0
with psycopg2.connect(**database_config) as conn: with psycopg2.connect(**database_config) as conn:
zones, count = postsqldb.ZonesTable.paginateZonesBySku(conn, site_name, payload) zones, count = db.ZonesTable.paginateZonesBySku(conn, site_name, payload)
print(zones, count) print(zones, count)
return jsonify(zones=zones, endpage=math.ceil(count/limit)) return jsonify(zones=zones, endpage=math.ceil(count/limit))
@ -230,7 +252,7 @@ def getLocationsBySkuZone():
count=0 count=0
with psycopg2.connect(**database_config) as conn: with psycopg2.connect(**database_config) as conn:
payload = (part_id, zone_id, limit, offset) payload = (part_id, zone_id, limit, offset)
locations, count = postsqldb.LocationsTable.paginateLocationsBySkuZone(conn, site_name, payload) locations, count = db.LocationsTable.paginateLocationsBySkuZone(conn, site_name, payload)
return jsonify(locations=locations, endpage=math.ceil(count/limit)) return jsonify(locations=locations, endpage=math.ceil(count/limit))
@ -367,7 +389,7 @@ def getPossibleLocations():
database_config = config() database_config = config()
site_name = session['selected_site'] site_name = session['selected_site']
with psycopg2.connect(**database_config) as conn: with psycopg2.connect(**database_config) as conn:
locations, count = postsqldb.LocationsTable.paginateLocationsWithZone(conn, site_name, (limit, offset)) locations, count = db.LocationsTable.paginateLocationsWithZone(conn, site_name, (limit, offset))
return jsonify(locations=locations, end=math.ceil(count/limit)) return jsonify(locations=locations, end=math.ceil(count/limit))
@items_api.route('/item/getLinkedItem', methods=["GET"]) @items_api.route('/item/getLinkedItem', methods=["GET"])
@ -486,12 +508,12 @@ def addSKUPrefix():
site_name = session['selected_site'] site_name = session['selected_site']
try: try:
with psycopg2.connect(**database_config) as conn: with psycopg2.connect(**database_config) as conn:
prefix = postsqldb.SKUPrefixTable.Payload( prefix = db.SKUPrefixTable.Payload(
request.get_json()['uuid'], request.get_json()['uuid'],
request.get_json()['name'], request.get_json()['name'],
request.get_json()['description'] request.get_json()['description']
) )
postsqldb.SKUPrefixTable.insert_tuple(conn, site_name, prefix.payload()) db.SKUPrefixTable.insert_tuple(conn, site_name, prefix.payload())
except Exception as error: except Exception as error:
conn.rollback() conn.rollback()
return jsonify({'error': True, 'message': error}) return jsonify({'error': True, 'message': error})
@ -508,10 +530,10 @@ def addConversion():
database_config = config() database_config = config()
site_name = session['selected_site'] site_name = session['selected_site']
with psycopg2.connect(**database_config) as conn: with psycopg2.connect(**database_config) as conn:
conversion = postsqldb.ConversionsTable.Payload( conversion = db.ConversionsTable.Payload(
item_id, uom_id, conv_factor item_id, uom_id, conv_factor
) )
postsqldb.ConversionsTable.insert_tuple(conn, site_name, conversion.payload()) db.ConversionsTable.insert_tuple(conn, site_name, conversion.payload())
return jsonify(error=False, message="Conversion was added successfully") return jsonify(error=False, message="Conversion was added successfully")
return jsonify(error=True, message="Unable to save this conversion, ERROR!") return jsonify(error=True, message="Unable to save this conversion, ERROR!")
@ -524,7 +546,7 @@ def deleteConversion():
database_config = config() database_config = config()
site_name = session['selected_site'] site_name = session['selected_site']
with psycopg2.connect(**database_config) as conn: with psycopg2.connect(**database_config) as conn:
postsqldb.ConversionsTable.delete_item_tuple(conn, site_name, (conversion_id,)) db.ConversionsTable.delete_item_tuple(conn, site_name, (conversion_id,))
return jsonify(error=False, message="Conversion was deleted successfully") return jsonify(error=False, message="Conversion was deleted successfully")
return jsonify(error=True, message="Unable to delete this conversion, ERROR!") return jsonify(error=True, message="Unable to delete this conversion, ERROR!")
@ -538,7 +560,7 @@ def updateConversion():
database_config = config() database_config = config()
site_name = session['selected_site'] site_name = session['selected_site']
with psycopg2.connect(**database_config) as conn: with psycopg2.connect(**database_config) as conn:
postsqldb.ConversionsTable.update_item_tuple(conn, site_name, {'id': conversion_id, 'update': update_dictionary}) db.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=False, message="Conversion was updated successfully")
return jsonify(error=True, message="Unable to save this conversion, ERROR!") return jsonify(error=True, message="Unable to save this conversion, ERROR!")
@ -552,10 +574,10 @@ def addPrefix():
database_config = config() database_config = config()
site_name = session['selected_site'] site_name = session['selected_site']
with psycopg2.connect(**database_config) as conn: with psycopg2.connect(**database_config) as conn:
prefixes = postsqldb.ItemInfoTable.select_tuple(conn, site_name, (item_info_id,))['prefixes'] prefixes = db.ItemInfoTable.select_tuple(conn, site_name, (item_info_id,))['prefixes']
print(prefixes) print(prefixes)
prefixes.append(prefix_id) prefixes.append(prefix_id)
postsqldb.ItemInfoTable.update_tuple(conn, site_name, {'id': item_info_id, 'update':{'prefixes': prefixes}}) db.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=False, message="Prefix was added successfully")
return jsonify(error=True, message="Unable to save this prefix, ERROR!") return jsonify(error=True, message="Unable to save this prefix, ERROR!")
@ -568,9 +590,9 @@ def deletePrefix():
database_config = config() database_config = config()
site_name = session['selected_site'] site_name = session['selected_site']
with psycopg2.connect(**database_config) as conn: with psycopg2.connect(**database_config) as conn:
prefixes = postsqldb.ItemInfoTable.select_tuple(conn, site_name, (item_info_id,))['prefixes'] prefixes = db.ItemInfoTable.select_tuple(conn, site_name, (item_info_id,))['prefixes']
prefixes.remove(prefix_id) prefixes.remove(prefix_id)
postsqldb.ItemInfoTable.update_tuple(conn, site_name, {'id': item_info_id, 'update':{'prefixes': prefixes}}) db.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=False, message="Prefix was deleted successfully")
return jsonify(error=True, message="Unable to delete this prefix, ERROR!") return jsonify(error=True, message="Unable to delete this prefix, ERROR!")
@ -582,7 +604,7 @@ def refreshSearchString():
database_config = config() database_config = config()
site_name = session['selected_site'] site_name = session['selected_site']
with psycopg2.connect(**database_config) as conn: with psycopg2.connect(**database_config) as conn:
item = postsqldb.ItemTable.getItemAllByID(conn, site_name, (item_id,)) item = db.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']}", 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']}"] f"expires::{item['food_info']['expires']}", f"row_type::{item['row_type']}", f"item_type::{item['item_type']}"]
@ -590,7 +612,7 @@ def refreshSearchString():
parameters.append(f"prefix::{prefix['name']}") parameters.append(f"prefix::{prefix['name']}")
search_string = "&&".join(parameters) search_string = "&&".join(parameters)
postsqldb.ItemTable.update_tuple(conn, site_name, {'id': item_id, 'update':{'search_string': search_string}}) db.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=False, message="Search String was updated successfully")
return jsonify(error=True, message="Unable to update this search string, ERROR!") return jsonify(error=True, message="Unable to update this search string, ERROR!")
@ -603,10 +625,10 @@ def postNewItemLocation():
database_config = config() database_config = config()
site_name = session['selected_site'] site_name = session['selected_site']
with psycopg2.connect(**database_config) as conn: with psycopg2.connect(**database_config) as conn:
item_location = postsqldb.ItemLocationsTable.Payload( item_location = db.ItemLocationsTable.Payload(
item_id, item_id,
location_id location_id
) )
postsqldb.ItemLocationsTable.insert_tuple(conn, site_name, item_location.payload()) db.ItemLocationsTable.insert_tuple(conn, site_name, item_location.payload())
return jsonify(error=False, message="Location was added successfully") return jsonify(error=False, message="Location was added successfully")
return jsonify(error=True, message="Unable to save this location, ERROR!") return jsonify(error=True, message="Unable to save this location, ERROR!")

View File

@ -0,0 +1,3 @@
SELECT item.id, item.barcode, item.item_name FROM %%site_name%%_items item
WHERE item.search_string LIKE '%%' || %s || '%%'
LIMIT %s OFFSET %s;

View File

@ -0,0 +1,2 @@
SELECT COUNT(item.*) FROM %%site_name%%_items item
WHERE item.search_string LIKE '%%' || %s || '%%';

View File

@ -1,3 +1,4 @@
SELECT item.id, item.barcode, item.item_name FROM %%site_name%%_items item SELECT item.id, item.barcode, item.item_name FROM %%site_name%%_items item
WHERE item.search_string LIKE '%%' || %s || '%%' WHERE item.search_string LIKE '%%' || %s || '%%'
ORDER BY item.id
LIMIT %s OFFSET %s; LIMIT %s OFFSET %s;