From 84544cc48fa3646b580ed3958693b6159e2b1ac0 Mon Sep 17 00:00:00 2001 From: Jadowyne Ulve Date: Sun, 27 Apr 2025 16:53:03 -0500 Subject: [PATCH] items_API.getSkuPrefixes updated to new schema --- .../database_items.cpython-312.pyc | Bin 7644 -> 9227 bytes .../__pycache__/items_API.cpython-312.pyc | Bin 39041 -> 39396 bytes application/items/database_items.py | 24 +++++++++++++- application/items/items_API.py | 31 ++++++++++++++---- application/items/sql/getSkuPrefixes.sql | 1 + database.log | 5 ++- 6 files changed, 53 insertions(+), 8 deletions(-) create mode 100644 application/items/sql/getSkuPrefixes.sql diff --git a/application/items/__pycache__/database_items.cpython-312.pyc b/application/items/__pycache__/database_items.cpython-312.pyc index de07a1162dea74cccac34d166d695767ecdd71ea..fc4df4808c53ae4fb028bc4a96f3943723f7e2e7 100644 GIT binary patch delta 1029 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 U7ST(v`j(C6x0(b4&iz&VC$=14761SM delta 3186 zcmb7GeNa@_6@TyTzFn5xg*EaqAh-)6u%ZM+AgoqENsUPaTTxL#_Q5{bjmz$O-$P($ zHyAY|Ex{s3q8Uvj)uhenWTG#Vrqd?cPMD-7?ZD&@;?vAH(~o~L&5+t@nx>uhp1aY- zjCI-_`0cspo_oH}z554Ec;=Fj_MzRL%F)kcJk5V5d?{_X6h7Z&NpBW7?j+aC#W^4E z69VvZX`$J$uax7+4Y*bH9fQ#)!nN!c*l5jwKDVtbC5P&W8)Je`j8c6uLsX<|QMIFP z{9H(Uad8v;Xs3^B1sh^MFz!BuM>Y}%8VV~!bPDL%`^)C2J@ViwVyK-HpOGnag+B4_u z`Lp;}F_lhXo)auj@ozMJlAU*|XFNQz>87(_&RH?*teA5)&N>^f7JXou*|vMe=bv#l ze(Vg)+VVy=kN1Bm;<3M)I7c>ozr3k-p5r8bi|_@7Cx)88x zM4|xKDwm4;C^4h`x$?4smtm^9JngO;(t$EJsvC>?@PrrPzw3jBni4TWWo~J~niM17 z3t!Z`tqYXFYo5j`f=U#GrRu)LwX{Qt8H&orzS<5aUjd%MAB$ZSI+=#pE|OJrULO0U1w=}Q`DS)7`JjM=tgW)lEui*kUY>z z+F<{a^ZW_u+EQgYg>uir=`E23dGte8vp<^^5=X%8V4BFYDC>pE=8_^TEongb0m4y) zV+dmiMF`_?tGQCVNXcbdR?80acattzaf~~Aq;54#$O$T;r-Xw(9HRrwQG#AkKT!?S zHHp;o2q)q4j@pM_proGK8KA=*421S6WE8&MQO2KzlAU$KQz(a>OxVD`g4C-B$wu+h zrM|dVRyR`(jltlCp$!u04*O(s4h7F6{21XU2+2fP6Nz{ox#%~!gy2PB1wp?vbcagI zr_ksE;ZUa<=#z;Aw|9E1Z_(X$I{(TL4|y#`T6^114SYX{?NyGXYd8?(06f-S@9-kY z^s;pK!^!qa@#mEJwD#NfR|WHBN@6vmoyR>%1uQmuXQv_uj z#R8Wlc+^`cUZKoUE$CfkTF%OpPuF@%w?9D367UfgFt*U0%D}rl)h3pKN%*SA$sdKB zUS~aJRs^c7h)cuA zk#xRRd;Lh2A(xp-iZ3+s_0eK#q;O>2gQ_q%vWb68yE<~gU}CEJVE=PYHl|TiNa~Y4 z9)j0%)XW|&x|%>Yu*ag7Z|0ja*}L#QGE?u2G38!Eh83@IHrO7IZn?WiJSv!uXi6eS z9#2##E+);CCD0Tt8p9r{AKUmK@6U{tIauF#>8U$KpBsCe->DTI``BPjgoJz36BGD? ztekjYHV#b`79@Mpl;}xzeJwOFJ+aOd6zEMq3*$peVLALeaY3)4hIHdoN;pJbL7Pk1 zx;q>hqPLs8zh72Vg?xlN>}q1ee-8GZXyQBI+=;D^bmP`O1pF051`*;2hY&6zyoG>| r1i6BMHxc<1$|jq6NsCU(e3qSW5pEke!GTaaZ^ZSyOZ(gNp9}v1fh#SX diff --git a/application/items/database_items.py b/application/items/database_items.py index 35713ea..a1c8bb5 100644 --- a/application/items/database_items.py +++ b/application/items/database_items.py @@ -105,4 +105,26 @@ def getModalSKUs(site:str, payload:tuple, convert:bool=True): count = cur.fetchone()[0] return recordset, count except Exception as error: - raise postsqldb.DatabaseError(error, payload, sql) \ No newline at end of file + raise postsqldb.DatabaseError(error, payload, sql) + +def getPrefixes(site:str, payload:tuple, convert:bool=True): + database_config = config.config() + recordset = [] + count = 0 + with open(f"application/items/sql/getSkuPrefixes.sql", "r+") as file: + sql = file.read().replace("%%site_name%%", site) + try: + with psycopg2.connect(**database_config) as conn: + 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] + return recordset, count + except (Exception, psycopg2.DatabaseError) as error: + raise postsqldb.DatabaseError(error, payload, sql) diff --git a/application/items/items_API.py b/application/items/items_API.py index 4edc8f4..dd15fb9 100644 --- a/application/items/items_API.py +++ b/application/items/items_API.py @@ -190,19 +190,38 @@ def getModalItems(): @items_api.route('/item/getPrefixes', methods=["GET"]) @login_required def getModalPrefixes(): + """ GET prefixes from the system by passing page and limit. + --- + parameters: + - in: query + name: page + schema: + type: integer + minimum: 1 + default: 1 + description: page of the database records + - in: query + name: limit + schema: + type: integer + minimum: 1 + default: 10 + description: number of database records to GET + responses: + 200: + description: Prefixes received from the system successfully! + """ recordset = [] - count = {'count': 0} + 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 = db.SKUPrefixTable.paginatePrefixes(conn, site_name, payload, convert=True) + recordset, count = database_items.getPrefixes(site_name, (limit, offset)) + print(recordset, count) 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":f"method {request.method} is not allowed!"}) @items_api.route('/item/getZones', methods=['GET']) diff --git a/application/items/sql/getSkuPrefixes.sql b/application/items/sql/getSkuPrefixes.sql new file mode 100644 index 0000000..726501b --- /dev/null +++ b/application/items/sql/getSkuPrefixes.sql @@ -0,0 +1 @@ +SELECT * FROM %%site_name%%_sku_prefix LIMIT %s OFFSET %s; \ No newline at end of file diff --git a/database.log b/database.log index e0dc025..11df974 100644 --- a/database.log +++ b/database.log @@ -1898,4 +1898,7 @@ 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;') \ No newline at end of file + 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;') \ No newline at end of file