From fe34ddafe2f990d37a36d429fb8c371bf4f4941f Mon Sep 17 00:00:00 2001 From: Jadowyne Ulve Date: Sat, 2 Aug 2025 20:58:00 -0500 Subject: [PATCH] Finished up with migratione and clean up of site_management module --- .../site_management/site_management_api.py | 186 +++---- .../site_management_database.py | 488 ++++++++++++++++++ .../site_management/sql/insertBrandsTuple.sql | 4 + .../sql/insertLocationsTuple.sql | 4 + .../sql/insertSKUPrefixTuple.sql | 4 + .../sql/insertVendorsTuple.sql | 4 + .../site_management/sql/insertZonesTuple.sql | 4 + 7 files changed, 567 insertions(+), 127 deletions(-) create mode 100644 application/site_management/sql/insertBrandsTuple.sql create mode 100644 application/site_management/sql/insertLocationsTuple.sql create mode 100644 application/site_management/sql/insertSKUPrefixTuple.sql create mode 100644 application/site_management/sql/insertVendorsTuple.sql create mode 100644 application/site_management/sql/insertZonesTuple.sql diff --git a/application/site_management/site_management_api.py b/application/site_management/site_management_api.py index fd5f825..bdd3848 100644 --- a/application/site_management/site_management_api.py +++ b/application/site_management/site_management_api.py @@ -1,11 +1,13 @@ -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 +# 3RD PARTY IMPORTS +from flask import ( + Blueprint, request, render_template, redirect, session, jsonify + ) +import math + +# APPLICATION IMPORTS from user_api import login_required - - from application import postsqldb, database_payloads +from application.site_management import site_management_database site_management_api = Blueprint('site_management_api', __name__, template_folder="templates", static_folder="static") @@ -16,9 +18,12 @@ 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') - return render_template("site_management.html", current_site=session['selected_site'], sites=sites) + 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']) @login_required def getZones(): @@ -28,13 +33,12 @@ def getZones(): 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!'}) + 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']) @login_required def getLocations(): @@ -44,13 +48,12 @@ def getLocations(): 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!'}) + 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']) @login_required def getVendors(): @@ -60,13 +63,12 @@ def getVendors(): 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!'}) + 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']) @login_required def getBrands(): @@ -76,13 +78,12 @@ def getBrands(): 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!'}) + 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']) @login_required def getPrefixes(): @@ -92,172 +93,103 @@ def getPrefixes(): 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!'}) + 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"]) 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}) + 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"]) 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}) + 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"]) 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}) + 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"]) 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}) + + 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"]) 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}) + 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"]) 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}) + 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"]) 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}) + 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"]) 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}) + 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"]) 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}) + 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 index e69de29..177ec9e 100644 --- a/application/site_management/site_management_database.py +++ 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/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