270 lines
13 KiB
Python
270 lines
13 KiB
Python
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
|
|
from user_api import login_required
|
|
import postsqldb
|
|
|
|
workshop_api = Blueprint('workshop_api', __name__)
|
|
|
|
@workshop_api.route("/workshop")
|
|
@login_required
|
|
def workshop():
|
|
sites = [site[1] for site in main.get_sites(session['user']['sites'])]
|
|
print(session.get('user')['system_admin'])
|
|
if not session.get('user')['system_admin']:
|
|
return redirect('/logout')
|
|
database_config = config()
|
|
site_name = session['selected_site']
|
|
with psycopg2.connect(**database_config) as conn:
|
|
with conn.cursor() as cur:
|
|
sql = f"SELECT id, name FROM {site_name}_zones;"
|
|
cur.execute(sql)
|
|
zones = cur.fetchall()
|
|
return render_template("other/workshop.html", current_site=session['selected_site'], sites=sites, zones=zones)
|
|
|
|
|
|
@workshop_api.route('/workshop/getZones', methods=['GET'])
|
|
@login_required
|
|
def getZones():
|
|
if request.method == "GET":
|
|
records = []
|
|
count = 0
|
|
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!'})
|
|
return jsonify({'zones': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading Zones!'})
|
|
|
|
@workshop_api.route('/workshop/getLocations', methods=['GET'])
|
|
@login_required
|
|
def getLocations():
|
|
if request.method == "GET":
|
|
records = []
|
|
count = 0
|
|
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!'})
|
|
return jsonify({'locations': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading Zones!'})
|
|
|
|
@workshop_api.route('/workshop/getVendors', methods=['GET'])
|
|
@login_required
|
|
def getVendors():
|
|
if request.method == "GET":
|
|
records = []
|
|
count = 0
|
|
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!'})
|
|
return jsonify({'vendors': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading Zones!'})
|
|
|
|
@workshop_api.route('/workshop/getBrands', methods=['GET'])
|
|
@login_required
|
|
def getBrands():
|
|
if request.method == "GET":
|
|
records = []
|
|
count = 0
|
|
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!'})
|
|
return jsonify({'brands': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading Zones!'})
|
|
|
|
@workshop_api.route('/workshop/getPrefixes', methods=['GET'])
|
|
@login_required
|
|
def getPrefixes():
|
|
if request.method == "GET":
|
|
records = []
|
|
count = 0
|
|
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!'})
|
|
return jsonify({'prefixes': records, "end": math.ceil(count/limit), 'error':True, 'message': 'There was a problem loading Zones!'})
|
|
|
|
|
|
@workshop_api.route('/workshop/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'],
|
|
site_id,
|
|
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})
|
|
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}."})
|
|
|
|
@workshop_api.route('/workshop/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})
|
|
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}."})
|
|
|
|
@workshop_api.route('/workshop/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})
|
|
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}."})
|
|
|
|
@workshop_api.route('/workshop/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})
|
|
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}."})
|
|
|
|
@workshop_api.route('/workshop/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})
|
|
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}."})
|
|
|
|
@workshop_api.route('/workshop/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})
|
|
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}."})
|
|
|
|
@workshop_api.route('/workshop/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})
|
|
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}."})
|
|
|
|
@workshop_api.route('/workshop/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})
|
|
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}."})
|
|
|
|
@workshop_api.route('/workshop/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})
|
|
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}."})
|