From fdd156c3ce6b28ba8a00a80f4845035f692293b9 Mon Sep 17 00:00:00 2001 From: Jadowyne Ulve Date: Sun, 27 Apr 2025 13:05:56 -0500 Subject: [PATCH] items_api.get_item updated to new schema --- .../database_items.cpython-312.pyc | Bin 2885 -> 4162 bytes .../__pycache__/items_API.cpython-312.pyc | Bin 37493 -> 37816 bytes application/items/database_items.py | 18 ++++ application/items/items_API.py | 31 +++++-- application/items/sql/getItemAllByID.sql | 86 ++++++++++++++++++ 5 files changed, 127 insertions(+), 8 deletions(-) create mode 100644 application/items/sql/getItemAllByID.sql diff --git a/application/items/__pycache__/database_items.cpython-312.pyc b/application/items/__pycache__/database_items.cpython-312.pyc index 0f55bc6bc17d08e121445790454251d232ab98f9..dc314a375634e3b9405887e7091aa45192c94ef6 100644 GIT binary patch delta 947 zcmZ8d&ref95Z-;i_tp0h3x$*lZPUh92sNPuh(^V7kc(cpfF@e|9@5&gGLRUw*7cLgv`Jlz`x&?ybTIHR=mf|+0K7*=yMWj9 zb{l8dUQ)4e8TVXkp5*alciGxZgutko@(pr#l!?WzUqrP`HI#W8$cC*bF7=M^bKpV zF0qOTkSZaNs5-@%N3M2>u@I>SWESrhV^O(!foIuh9S6vWkKaITBOZRkBf>q5$HJ=p zRviklLFy~rg$t?=yRTfzWQ~Vu^D>P<34 K_J=Xr3(|j&w#Q5W delta 103 zcmX@4a8!)%G%qg~0}vSG@@4E~o5&}@=rd7WNt`2vIh7@aC6zUWHI*%mErqRxHHtlj zV`72`OC^&g=f*xIE>=y(5KYd>wfvTock@efX#x#l1ma?+$@lmjxV|v(Gny7@00jWF C@D^48 diff --git a/application/items/__pycache__/items_API.cpython-312.pyc b/application/items/__pycache__/items_API.cpython-312.pyc index 80b1df0a0bbe049031e6b1624c4f9dbc4babc1ca..a830ec93d51ae82cbb2220bff7c40a26517ca5b2 100644 GIT binary patch delta 1912 zcmah~eQZ-z6z_d~v}0v!JJ%uGU~jOmc3TJAz>RI}!)9&ARMSFsc{?=NalG4o1>1S_;J|gX(qJ%mD`N z)>Ri(0fmCIv{*T}BzU<&==XBsh)C^$5iY=sqT4q_d?LE0JBwb>r?4~*ozYjT+lXOy zyU-ndhAKCiBM-{yGi<6Qd0Jr+L8CGvN5f*WfF%U1u$164DV)zQalFUl-!Hh#s6EZp zP7iDJc$!AqnjvkYpGmuK1NxBxzBj zE#ID=b+RLzUNX7zhE_kxMzw3NYfHk~k{R1<+N^3`TTk~gUS(&3@1=!TH_vNZ=8{^X znzWP6GnKPL9}IouyXu>3>7DBxn5%V$A9BrWggI7#TS*pt$573#jHsP{-_rt=P+2BI z(e!ob^UQ8dEAc}Mg~w1?)|%B3t&5lV0bUdwBz(|46k*A)4|Qi5SJ+9|PCTCVA)C=m z89OLY;a~;tvN+XrvyXy}KtvtjM?8Msh3=cz z=-T}*-b1AoVLy$)&fNRTayi+96lAv*?jmSpBS`@$47x*t2u(CNHZ`~#U9;w)&$wjO zVj1Y;{C-U=C3K*Qf>Q7t<_iue!FKemv1Y@va>-EYf6ynvPE>Eo z%aIR}+i=sAaxV^QJwm~T4w~{+Cx|KDM6cA<;2%w=l}j}oGaErCdfWW}hx}#T5O##8T)C#04GMJp=7TUcKyu%w;+Rn7$Uzpt_w{*{XwtG9qpaH!fvRk&GO zmq5#}+q#T)FrE@gb@?EQPt~1J6WXShBcK6aZqb3fL=9mhp+r&~j$nY?D8U*GcmyKi z&#fK6f$A*=(1&_0g(`XnU;{d6=>b3CFD%c~Gxv0Sl~77^XK9lxvizcH7GJbCD3MAH zF@<=Cr^qs*lOXRCd8g#|`y7(nE0EdX&TZ=TpKx(1lBFT`I60A8>R4LtKhZT3io>Ms%w`M0(%F zXX+BGCAA&qw-DDAz6tDkbHJ`zntT6n?LT8L3>SlQ_{MN|?0RhUnsQ}&#L!7efsR5qCpIuz)v=T==geZ;!So5NgMYRQKor|3IS?>+s~* zOR@QxCZ1qY8628;oCQ13`-cwk@ew#lm64V7t77E`$R(r~6aG#&*}ZDfUkp63QN*ss-iv%G7!Q zy3jW-nn4fJP9IUxKLTh+FHau>7GyqpIeTXFOyPLWJSe}z7{DO-MX6va7G!f_BffVu Gr2HF$3HV|F delta 1862 zcmah~3v5$W81Cu4Z5dtHJsDfK?g6wbbFi2V*ao#L&~-dET4u=#(sk|KRxRyvZo4r8 z+r;QtGG6|PA{YXZMB+vOk5L0L0>)@GL>4e;1rp;DLShKU2WA@QIk&D|eZ-sGFaJH~ z|G)qLzw@~7zbXIuj6CCWjb^@#KHmp3dQS8l%~*(>7ma}ACT};_F6&38c`dk* z&f+`<3n;Xi;M9!k;`=*Fv93M+*ePe($cf|{l5!6j^P9_8{#Nt)@W znZDu+6ozF}Y3XCz4(}MxBR^N(pKGb@Ih zzfx<4*MXxUrv)io=mLL7n}1ttnA93hMb5Tg$-bhzv8C;n_UQxsV~#mYsk4vqx75Wq z_~OS3HtcZQ&`hgBrU&=SKvlE3>$Tz#cQdB*D+Yn#(vXnUACEh zwJ>O9AoW{Et=N1qj3b^f_6ry{u_-$R7%eg>wo}7S-Yfc;U$v1qyM&0ZNAQ=5QJ+r`yQ0D1KpEZ&@07XKbE<)Y@`hrGCs9B$DYj5Th?Z9%A30e* z!(~fZ=j6iAzQOEE)OC*a+Sh(Gg)rN_IK{cqZJkX>l>LKVoo!K~nzX?9&ccJ6F)cf9%{4?>zm-0ygaL5h>SRXEHd?=$#YnRaLr zYtS{aS1jc6q(<5Of>jLS3cz?@Rf<&K^;Mu-B)$K(e72bf1C|tzMt2T0?OA}nB|G;_ z{1;O3N|{=o|LkenL)FmaZI{hQ=7h>-moc+?Jmy!4_jxh6hZU@VQ@@NM2sy3K5G za-_6ujwq}F=}Mp9>&4z(LPWqKo`Sc`I+z|QKp7fsXYe9Et8Cnk;4vi|=&jD|TuMZtYPeI`D<=mU7><76D>3`&8 Q^72Q_dX!BpM|N|60^{)6%m4rY diff --git a/application/items/database_items.py b/application/items/database_items.py index 7dcabfa..de3fa7c 100644 --- a/application/items/database_items.py +++ b/application/items/database_items.py @@ -28,6 +28,24 @@ def getTransaction(site:str, payload: tuple, convert:bool=True): database_config = config.config() sql = f"SELECT * FROM {site}_transactions WHERE id=%s;" record = () + try: + with psycopg2.connect(**database_config) as conn: + 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 + return record + except Exception as error: + postsqldb.DatabaseError(error, payload, sql) + +def getItemAllByID(site:str, payload: tuple, convert:bool=True): + database_config = config.config() + with open('application/items/sql/getItemAllByID.sql', 'r+') as file: + sql = file.read().replace("%%site_name%%", site) + record = () try: with psycopg2.connect(**database_config) as conn: with conn.cursor() as cur: diff --git a/application/items/items_API.py b/application/items/items_API.py index 17f644e..d6c2956 100644 --- a/application/items/items_API.py +++ b/application/items/items_API.py @@ -59,15 +59,30 @@ def getTransaction(): return jsonify({"transaction": transaction, "error": False, "message": ""}) return jsonify({"transaction": transaction, "error": True, "message": f"method {request.method} is not allowed."}) -@items_api.route("/item/getItem") +@items_api.route("/item/getItem", methods=["GET"]) 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) + """ GET item from system by passing its ID + --- + parameters: + - in: query + name: id + schema: + type: integer + minimum: 1 + default: 1 + description: item.id + responses: + 200: + description: Item.id received successfully! + """ + if request.method == "GET": + id = int(request.args.get('id', 1)) + site_name = session['selected_site'] + item = () + item = database_items.getItemAllByID(site_name, (id, )) + return jsonify({'item': item, 'error': False, 'message': ''}) + return jsonify({'item': item, 'error': True, 'message': f'method {request.method} not allowed.'}) + @items_api.route("/item/getItemsWithQOH", methods=['GET']) @login_required diff --git a/application/items/sql/getItemAllByID.sql b/application/items/sql/getItemAllByID.sql new file mode 100644 index 0000000..8b5ca81 --- /dev/null +++ b/application/items/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