From 138555c5b2a590031df0343c90c4629e706cdef8 Mon Sep 17 00:00:00 2001 From: Jadowyne Ulve Date: Tue, 1 Oct 2024 20:07:24 -0500 Subject: [PATCH] added updateing primary location and implemeted more on locations and zones! --- __pycache__/config.cpython-312.pyc | Bin 824 -> 836 bytes __pycache__/main.cpython-312.pyc | Bin 19484 -> 23781 bytes main.py | 83 +++++++++++++++++--- manage.py | 61 ++++++++++---- sites/default/sql/create/locations.sql | 3 +- sites/default/sql/create/logistics_info.sql | 4 +- sites/main/site.ini | 9 +++ sites/main/sql/create/brands.sql | 4 + sites/main/sql/create/food_info.sql | 7 ++ sites/main/sql/create/groups.sql | 8 ++ sites/main/sql/create/item.sql | 27 +++++++ sites/main/sql/create/item_info.sql | 15 ++++ sites/main/sql/create/linked_items.sql | 8 ++ sites/main/sql/create/locations.sql | 11 +++ sites/main/sql/create/logins.sql | 16 ++++ sites/main/sql/create/logistics_info.sql | 10 +++ sites/main/sql/create/transactions.sql | 15 ++++ sites/main/sql/create/zones.sql | 5 ++ sites/main/sql/drop/brands.sql | 1 + sites/main/sql/drop/food_info.sql | 1 + sites/main/sql/drop/groups.sql | 1 + sites/main/sql/drop/item_info.sql | 1 + sites/main/sql/drop/items.sql | 1 + sites/main/sql/drop/linked_items.sql | 1 + sites/main/sql/drop/locations.sql | 1 + sites/main/sql/drop/logistics_info.sql | 1 + sites/main/sql/drop/transactions.sql | 1 + sites/main/sql/drop/zones.sql | 1 + 28 files changed, 266 insertions(+), 30 deletions(-) create mode 100644 sites/main/site.ini create mode 100644 sites/main/sql/create/brands.sql create mode 100644 sites/main/sql/create/food_info.sql create mode 100644 sites/main/sql/create/groups.sql create mode 100644 sites/main/sql/create/item.sql create mode 100644 sites/main/sql/create/item_info.sql create mode 100644 sites/main/sql/create/linked_items.sql create mode 100644 sites/main/sql/create/locations.sql create mode 100644 sites/main/sql/create/logins.sql create mode 100644 sites/main/sql/create/logistics_info.sql create mode 100644 sites/main/sql/create/transactions.sql create mode 100644 sites/main/sql/create/zones.sql create mode 100644 sites/main/sql/drop/brands.sql create mode 100644 sites/main/sql/drop/food_info.sql create mode 100644 sites/main/sql/drop/groups.sql create mode 100644 sites/main/sql/drop/item_info.sql create mode 100644 sites/main/sql/drop/items.sql create mode 100644 sites/main/sql/drop/linked_items.sql create mode 100644 sites/main/sql/drop/locations.sql create mode 100644 sites/main/sql/drop/logistics_info.sql create mode 100644 sites/main/sql/drop/transactions.sql create mode 100644 sites/main/sql/drop/zones.sql diff --git a/__pycache__/config.cpython-312.pyc b/__pycache__/config.cpython-312.pyc index eb8a59bafe4045503a8cd0d989d143eb20a83c33..88aded8e959374e5ff5a69e14a96105e741791c5 100644 GIT binary patch delta 82 zcmdnNc7%=lG%qg~0}$lA{koC+6{Cf>vsFxJacWUbesXDUYFfla diff --git a/__pycache__/main.cpython-312.pyc b/__pycache__/main.cpython-312.pyc index 9276f36d6cd8cc5b13ded4564dcdee2394563620..0830de12fd783ae113e03d1906498d06445cd6c9 100644 GIT binary patch delta 7440 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 0: + zone_exists = True + cur.execute(f"SELECT name FROM {site_name}_locations WHERE name=%s;", (location, )) + rows = cur.fetchone() + if len(rows) > 0: + location_exists = True + + if zone_exists and location_exists: + with conn.cursor() as cur: + cur.execute(f"UPDATE {site_name}_logistics_info SET primary_location = %s WHERE barcode = %s;", (new_primary, barcode)) + + except (Exception, psycopg2.DatabaseError) as error: + print(error) + conn.rollback() + return False + def insert_row(table_name, name): sql = f"INSERT INTO {table_name}(id, name) VALUES(%s, %s) RETURNING id" id = None @@ -45,6 +73,7 @@ def create_table(sql_file: str): def create_logistics_info(conn, site_name, barcode, payload): sql = f"INSERT INTO {site_name}_logistics_info(barcode, primary_location, auto_issue_location, dynamic_locations, location_data, quantity_on_hand) VALUES (%s, %s, %s, %s, %s, %s) RETURNING id;" logistics_info_id = None + try: with conn.cursor() as cur: cur.execute(sql, @@ -78,7 +107,6 @@ def create_item_info(conn, site_name, barcode, payload): return item_info_id - def create_food_info(conn, site_name, payload): sql = f"INSERT INTO {site_name}_food_info(ingrediants, food_groups, nutrients, expires) VALUES (%s, %s, %s, %s) RETURNING id;" food_info_id = None @@ -95,6 +123,42 @@ def create_food_info(conn, site_name, payload): return food_info_id +def add_location(site_name, name, zone_id): + database_config = config() + with psycopg2.connect(**database_config) as conn: + sql = f"INSERT INTO {site_name}_locations (uuid, name, zone_id, items) VALUES (%s, %s, %s, %s);" + zone_name = None + try: + with conn.cursor() as cur: + cur.execute(f"SELECT name FROM {site_name}_zones WHERE id=%s;", (zone_id, )) + zone_name = cur.fetchone()[0] + print(zone_name) + except (Exception, psycopg2.DatabaseError) as error: + print(error) + conn.rollback() + return False + + uuid = f"{zone_name}@{name}" + try: + with conn.cursor() as cur: + cur.execute(sql, (uuid, name, zone_id, json.dumps({}))) + except (Exception, psycopg2.DatabaseError) as error: + print(error) + conn.rollback() + return False + +def add_zone(site_name, name): + database_config = config() + with psycopg2.connect(**database_config) as conn: + sql = f"INSERT INTO {site_name}_zones (name) VALUES (%s);" + try: + with conn.cursor() as cur: + cur.execute(sql, (name,)) + except (Exception, psycopg2.DatabaseError) as error: + print(error) + conn.rollback() + return False + def add_transaction(site_name, barcode, qty, user_id, transaction_type = "info", description = "", data = {}, location=None): database_config = config() with psycopg2.connect(**database_config) as conn: @@ -135,12 +199,11 @@ def add_transaction(site_name, barcode, qty, user_id, transaction_type = "info", else: mover = location - location_items = None location_id = None try: with conn.cursor() as cur: - cur.execute(f"SELECT id, items FROM {site_name}_locations WHERE name=%s;", (mover, )) + cur.execute(f"SELECT id, items FROM {site_name}_locations WHERE uuid=%s;", (mover, )) location = cur.fetchone() if location: location_id = location[0] @@ -155,8 +218,6 @@ def add_transaction(site_name, barcode, qty, user_id, transaction_type = "info", else: location_items[logistics_info[3]] = qty - print(location_items) - if mover in logistics_info[0].keys(): logistics_info[0][mover] = logistics_info[0][mover] + qty else: @@ -182,8 +243,9 @@ def add_food_item(site_name: str, barcode: str, name: str, qty: float, payload: # TODO: I need to validate the name so that it doesnt have characters against the SQL database schema such as ' defaults = config(filename=f"sites/{site_name}/site.ini", section="defaults") - payload["logistics_info"]["primary_location"] = defaults["default_primary_location"] - payload["logistics_info"]["auto_issue_location"] = defaults["default_auto_issue_location"] + uuid = f"{defaults["default_zone"]}@{defaults["default_primary_location"]}" + payload["logistics_info"]["primary_location"] = uuid + payload["logistics_info"]["auto_issue_location"] = uuid database_config = config() @@ -218,7 +280,6 @@ def add_food_item(site_name: str, barcode: str, name: str, qty: float, payload: add_transaction(site_name, barcode, qty=0, user_id=1, description="Added Item to System!") add_transaction(site_name, barcode, qty=qty, user_id=1, description="scan in") - def drop_table(sql_file: str): database_config = config() @@ -266,7 +327,7 @@ def create_site(site_name): create_table(f'sites/{site_name}/sql/create/locations.sql') sql = f"INSERT INTO {site_name}_zones(name) VALUES (%s) RETURNING id;" - sqltwo = f"INSERT INTO {site_name}_locations(name, zone_id, items) VALUES (%s, %s, %s);" + sqltwo = f"INSERT INTO {site_name}_locations(uuid, name, zone_id, items) VALUES (%s, %s, %s, %s);" database_config = config() with psycopg2.connect(**database_config) as conn: @@ -282,9 +343,11 @@ def create_site(site_name): conn.rollback() return False + uuid = f"{site_config["default_zone"]}@{site_config["default_primary_location"]}" + try: with conn.cursor() as cur: - cur.execute(sqltwo, (site_config["default_primary_location"], zone_id, json.dumps({}))) + cur.execute(sqltwo, (uuid, site_config["default_primary_location"], zone_id, json.dumps({}))) except (Exception, psycopg2.DatabaseError) as error: print(error) conn.rollback() diff --git a/manage.py b/manage.py index dcf13ce..10ec4b5 100644 --- a/manage.py +++ b/manage.py @@ -33,7 +33,6 @@ def rename_create_sql(site_name): with open(f"sites/{site_name}/sql/create/{file_name}", "w") as file: file.write(words) - def create(): site_name = input("Site Name: ") site_owner = input("Site Owner: ") @@ -78,27 +77,55 @@ def create(): if __name__ == "__main__": if len(sys.argv) > 1: func_name = sys.argv[1] + argument = sys.argv[2] - if func_name == "create_site": + if func_name == "create" and argument == "site": create() - if func_name == "propagate": - main.create_site(sys.argv[2]) + if func_name == "propagate" and argument == "site": + main.create_site(sys.argv[3]) - if func_name == "delete": - main.delete_site(sys.argv[2]) - shutil.rmtree(f"sites/{sys.argv[2]}") + if func_name == "delete" and argument == "site": + main.delete_site(sys.argv[3]) + shutil.rmtree(f"sites/{sys.argv[3]}") - if func_name == "add_item": - barcode = input("barcode: ") - name = input("name: ") - qty = float(input("qty: ")) - main.add_food_item(sys.argv[2], barcode, name, qty, payload=main.payload_food_item) + if func_name == "item": + if argument == "add": + barcode = input("barcode: ") + name = input("name: ") + qty = float(input("qty: ")) + main.add_food_item(sys.argv[3], barcode, name, qty, payload=main.payload_food_item) - if func_name == "transact": - barcode = input("barcode: ") - qty = float(input("qty: ")) - location = input("TO: ") + if argument == "update_primary": + barcode = input("barcode: ") + location = input(f"New Zone/Location (default@all): ") + main.update_item_primary(sys.argv[3], barcode, location) - main.add_transaction(sys.argv[2], barcode, qty, 1, description="manual", location=location) + if argument == "transact": + barcode = input("barcode: ") + qty = float(input("qty: ")) + location = str(input("TO: ")).strip() + if location == "": + location = None + + main.add_transaction(sys.argv[3], barcode, qty, 1, description="manual", location=location) + + if argument == "transfer": + barcode = input("barcode: ") + qty = float(input("qty: ")) + from_location = str(input("From: ")).strip() + to_location = str(input("To: ")).strip() + + + if func_name == "location": + if argument == "add": + location_name = str(input(f"New Location Name: ")).replace(" ", "_") + zone_id = int(input(f"Zone ID: ")) + main.add_location(sys.argv[3], location_name, zone_id) + + if func_name == "zone": + if argument == "add": + zone_name = str(input(f"New Zone Name: ")).replace(" ", "_") + + main.add_zone(sys.argv[3], zone_name) \ No newline at end of file diff --git a/sites/default/sql/create/locations.sql b/sites/default/sql/create/locations.sql index 7f0ca04..43f6e61 100644 --- a/sites/default/sql/create/locations.sql +++ b/sites/default/sql/create/locations.sql @@ -1,9 +1,10 @@ CREATE TABLE IF NOT EXISTS %sitename%_locations( id SERIAL PRIMARY KEY, + uuid VARCHAR(255) NOT NULL, name VARCHAR(32) NOT NULL, zone_id INTEGER NOT NULL, items JSONB, - UNIQUE(name), + UNIQUE(uuid), CONSTRAINT fk_zone FOREIGN KEY(zone_id) REFERENCES %sitename%_zones(id) diff --git a/sites/default/sql/create/logistics_info.sql b/sites/default/sql/create/logistics_info.sql index 370f3be..e8ceab2 100644 --- a/sites/default/sql/create/logistics_info.sql +++ b/sites/default/sql/create/logistics_info.sql @@ -1,8 +1,8 @@ CREATE TABLE IF NOT EXISTS %sitename%_logistics_info( id SERIAL PRIMARY KEY, barcode VARCHAR(255) NOT NULL, - primary_location VARCHAR(16), - auto_issue_location VARCHAR(16), + primary_location VARCHAR(64), + auto_issue_location VARCHAR(64), dynamic_locations JSONB, location_data JSONB, quantity_on_hand FLOAT8 NOT NULL, diff --git a/sites/main/site.ini b/sites/main/site.ini new file mode 100644 index 0000000..d08dec8 --- /dev/null +++ b/sites/main/site.ini @@ -0,0 +1,9 @@ +[site] +site_name=main +site_owner=jadowyne +email= + +[defaults] +default_zone=default +default_primary_location=all +default_auto_issue_location=all diff --git a/sites/main/sql/create/brands.sql b/sites/main/sql/create/brands.sql new file mode 100644 index 0000000..172eb8f --- /dev/null +++ b/sites/main/sql/create/brands.sql @@ -0,0 +1,4 @@ +CREATE TABLE IF NOT EXISTS main_brands ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) +); \ No newline at end of file diff --git a/sites/main/sql/create/food_info.sql b/sites/main/sql/create/food_info.sql new file mode 100644 index 0000000..eff6aaf --- /dev/null +++ b/sites/main/sql/create/food_info.sql @@ -0,0 +1,7 @@ +CREATE TABLE IF NOT EXISTS main_food_info ( + id SERIAL PRIMARY KEY, + food_groups TEXT [], + ingrediants TEXT [], + nutrients JSONB, + expires BOOLEAN +); \ No newline at end of file diff --git a/sites/main/sql/create/groups.sql b/sites/main/sql/create/groups.sql new file mode 100644 index 0000000..678cb61 --- /dev/null +++ b/sites/main/sql/create/groups.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS main_groups( + id SERIAL PRIMARY KEY, + name VARCHAR(255) NOT NULL, + description TEXT, + included_items INTEGER [], + group_type VARCHAR(255), + UNIQUE (name) +); \ No newline at end of file diff --git a/sites/main/sql/create/item.sql b/sites/main/sql/create/item.sql new file mode 100644 index 0000000..5f1c027 --- /dev/null +++ b/sites/main/sql/create/item.sql @@ -0,0 +1,27 @@ +CREATE TABLE IF NOT EXISTS main_items( + id SERIAL PRIMARY KEY, + barcode VARCHAR(255) NOT NULL, + item_name VARCHAR(255) NOT NULL, + brand INTEGER, + tags TEXT [], + links TEXT [], + item_info_id INTEGER NOT NULL, + logistics_info_id INTEGER NOT NULL, + food_info_id INTEGER, + row_type VARCHAR(255) NOT NULL, + item_type VARCHAR(255) NOT NULL, + search_string TEXT NOT NULL, + UNIQUE(barcode, item_info_id), + CONSTRAINT fk_item_info + FOREIGN KEY(item_info_id) + REFERENCES main_item_info(id), + CONSTRAINT fk_food_info + FOREIGN KEY(food_info_id) + REFERENCES main_food_info(id), + CONSTRAINT fk_brand + FOREIGN KEY(brand) + REFERENCES main_brands(id), + CONSTRAINT fk_logistics_info + FOREIGN KEY(logistics_info_id) + REFERENCES main_logistics_info(id) +); diff --git a/sites/main/sql/create/item_info.sql b/sites/main/sql/create/item_info.sql new file mode 100644 index 0000000..4a5de26 --- /dev/null +++ b/sites/main/sql/create/item_info.sql @@ -0,0 +1,15 @@ +CREATE TABLE IF NOt EXISTS main_item_info ( + id SERIAL PRIMARY KEY, + barcode VARCHAR(255) NOT NULL, + linked_items INTEGER [], + shopping_lists INTEGER [], + recipes INTEGER [], + groups INTEGER [], + packaging VARCHAR(255), + uom VARCHAR(255), + cost FLOAT8, + safety_stock FLOAT8, + lead_time_days FLOAT8, + ai_pick BOOLEAN, + UNIQUE(barcode) +); \ No newline at end of file diff --git a/sites/main/sql/create/linked_items.sql b/sites/main/sql/create/linked_items.sql new file mode 100644 index 0000000..54afe9d --- /dev/null +++ b/sites/main/sql/create/linked_items.sql @@ -0,0 +1,8 @@ +CREATE TABLE IF NOT EXISTS main_itemlinks ( + id SERIAL PRIMARY KEY, + barcode VARCHAR(255) NOt NULL, + link INTEGER NOT NULL, + data JSONB NOT NULL, + conv_factor FLOAT8 NOt NULL, + UNIQUE(barcode) +); \ No newline at end of file diff --git a/sites/main/sql/create/locations.sql b/sites/main/sql/create/locations.sql new file mode 100644 index 0000000..179587b --- /dev/null +++ b/sites/main/sql/create/locations.sql @@ -0,0 +1,11 @@ +CREATE TABLE IF NOT EXISTS main_locations( + id SERIAL PRIMARY KEY, + uuid VARCHAR(255) NOT NULL, + name VARCHAR(32) NOT NULL, + zone_id INTEGER NOT NULL, + items JSONB, + UNIQUE(uuid), + CONSTRAINT fk_zone + FOREIGN KEY(zone_id) + REFERENCES main_zones(id) +); \ No newline at end of file diff --git a/sites/main/sql/create/logins.sql b/sites/main/sql/create/logins.sql new file mode 100644 index 0000000..f69b01b --- /dev/null +++ b/sites/main/sql/create/logins.sql @@ -0,0 +1,16 @@ +CREATE TABLE IF NOT EXISTS logins( + id SERIAL PRIMARY KEY, + username VARCHAR(255), + password VARCHAR(255), + favorites JSONB, + unseen_pantry_items INTEGER [], + unseen_groups INTEGER [], + unseen_shopping_lists INTEGER [], + unseen_recipes INTEGER [], + seen_pantry_items INTEGER [], + seen_groups INTEGER[], + seen_shopping_lists INTEGER [], + seen_recipes INTEGER [], + flags JSONB +); + diff --git a/sites/main/sql/create/logistics_info.sql b/sites/main/sql/create/logistics_info.sql new file mode 100644 index 0000000..cdeee33 --- /dev/null +++ b/sites/main/sql/create/logistics_info.sql @@ -0,0 +1,10 @@ +CREATE TABLE IF NOT EXISTS main_logistics_info( + id SERIAL PRIMARY KEY, + barcode VARCHAR(255) NOT NULL, + primary_location VARCHAR(64), + auto_issue_location VARCHAR(64), + dynamic_locations JSONB, + location_data JSONB, + quantity_on_hand FLOAT8 NOT NULL, + UNIQUE(barcode) +); \ No newline at end of file diff --git a/sites/main/sql/create/transactions.sql b/sites/main/sql/create/transactions.sql new file mode 100644 index 0000000..25ec73d --- /dev/null +++ b/sites/main/sql/create/transactions.sql @@ -0,0 +1,15 @@ +CREATE TABLE IF NOT EXISTS main_Transactions ( + id SERIAL PRIMARY KEY, + timestamp TIMESTAMP, + logistics_info_id INTEGER NOT NULL, + barcode VARCHAR(255) NOT NULL, + name VARCHAR(255), + transaction_type VARCHAR(255) NOT NULL, + quantity FLOAT8 NOT NULL, + description TEXT, + user_id INTEGER NOT NULL, + data JSONB, + CONSTRAINT fk_logistics_info + FOREIGN KEY(logistics_info_id) + REFERENCES main_logistics_info(id) +); \ No newline at end of file diff --git a/sites/main/sql/create/zones.sql b/sites/main/sql/create/zones.sql new file mode 100644 index 0000000..f06afa4 --- /dev/null +++ b/sites/main/sql/create/zones.sql @@ -0,0 +1,5 @@ +CREATE TABLE IF NOT EXISTS main_zones( + id SERIAL PRIMARY KEY, + name VARCHAR(32) NOT NULL, + UNIQUE(name) +); diff --git a/sites/main/sql/drop/brands.sql b/sites/main/sql/drop/brands.sql new file mode 100644 index 0000000..62263a0 --- /dev/null +++ b/sites/main/sql/drop/brands.sql @@ -0,0 +1 @@ +DROP TABLE main_brands CASCADE; \ No newline at end of file diff --git a/sites/main/sql/drop/food_info.sql b/sites/main/sql/drop/food_info.sql new file mode 100644 index 0000000..f74a1b9 --- /dev/null +++ b/sites/main/sql/drop/food_info.sql @@ -0,0 +1 @@ +DROP TABLE main_food_info CASCADE; \ No newline at end of file diff --git a/sites/main/sql/drop/groups.sql b/sites/main/sql/drop/groups.sql new file mode 100644 index 0000000..9f949d7 --- /dev/null +++ b/sites/main/sql/drop/groups.sql @@ -0,0 +1 @@ +DROP TABLE main_groups CASCADE; \ No newline at end of file diff --git a/sites/main/sql/drop/item_info.sql b/sites/main/sql/drop/item_info.sql new file mode 100644 index 0000000..2d34b05 --- /dev/null +++ b/sites/main/sql/drop/item_info.sql @@ -0,0 +1 @@ +DROP TABLE main_item_info CASCADE; \ No newline at end of file diff --git a/sites/main/sql/drop/items.sql b/sites/main/sql/drop/items.sql new file mode 100644 index 0000000..2371e76 --- /dev/null +++ b/sites/main/sql/drop/items.sql @@ -0,0 +1 @@ +DROP TABLE main_items CASCADE; \ No newline at end of file diff --git a/sites/main/sql/drop/linked_items.sql b/sites/main/sql/drop/linked_items.sql new file mode 100644 index 0000000..227c0d2 --- /dev/null +++ b/sites/main/sql/drop/linked_items.sql @@ -0,0 +1 @@ +DROP TABLE main_itemlinks CASCADE; \ No newline at end of file diff --git a/sites/main/sql/drop/locations.sql b/sites/main/sql/drop/locations.sql new file mode 100644 index 0000000..b1a53aa --- /dev/null +++ b/sites/main/sql/drop/locations.sql @@ -0,0 +1 @@ +DROP TABLE main_locations CASCADE; \ No newline at end of file diff --git a/sites/main/sql/drop/logistics_info.sql b/sites/main/sql/drop/logistics_info.sql new file mode 100644 index 0000000..dd3de21 --- /dev/null +++ b/sites/main/sql/drop/logistics_info.sql @@ -0,0 +1 @@ +DROP TABLE main_logistics_info CASCADE; \ No newline at end of file diff --git a/sites/main/sql/drop/transactions.sql b/sites/main/sql/drop/transactions.sql new file mode 100644 index 0000000..6d36751 --- /dev/null +++ b/sites/main/sql/drop/transactions.sql @@ -0,0 +1 @@ +DROP TABLE main_transactions CASCADE; \ No newline at end of file diff --git a/sites/main/sql/drop/zones.sql b/sites/main/sql/drop/zones.sql new file mode 100644 index 0000000..6a616e1 --- /dev/null +++ b/sites/main/sql/drop/zones.sql @@ -0,0 +1 @@ +DROP TABLE main_zones CASCADE; \ No newline at end of file