items_API.paginateLoc and Zones updated
This commit is contained in:
parent
84544cc48f
commit
6dd33c2922
Binary file not shown.
Binary file not shown.
@ -128,3 +128,48 @@ def getPrefixes(site:str, payload:tuple, convert:bool=True):
|
|||||||
return recordset, count
|
return recordset, count
|
||||||
except (Exception, psycopg2.DatabaseError) as error:
|
except (Exception, psycopg2.DatabaseError) as error:
|
||||||
raise postsqldb.DatabaseError(error, payload, sql)
|
raise postsqldb.DatabaseError(error, payload, sql)
|
||||||
|
|
||||||
|
def paginateZonesBySku(site: str, payload: tuple, convert=True):
|
||||||
|
database_config = config.config()
|
||||||
|
zones, count = (), 0
|
||||||
|
with open(f"application/items/sql/paginateZonesBySku.sql", "r+") as file:
|
||||||
|
sql = file.read().replace("%%site_name%%", site)
|
||||||
|
with open(f"application/items/sql/paginateZonesBySkuCount.sql", "r+") as file:
|
||||||
|
sql_count = 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:
|
||||||
|
zones = [postsqldb.tupleDictionaryFactory(cur.description, row) for row in rows]
|
||||||
|
elif rows and not convert:
|
||||||
|
zones = rows
|
||||||
|
cur.execute(sql_count, payload)
|
||||||
|
count = cur.fetchone()[0]
|
||||||
|
return zones, count
|
||||||
|
except Exception as error:
|
||||||
|
raise postsqldb.DatabaseError(error, payload, sql)
|
||||||
|
|
||||||
|
def paginateLocationsBySkuZone(site: str, payload: tuple, convert=True):
|
||||||
|
database_config = config.config()
|
||||||
|
locations, count = (), 0
|
||||||
|
with open(f"application/items/sql/paginateLocationsBySkuZone.sql", "r+") as file:
|
||||||
|
sql = file.read().replace("%%site_name%%", site)
|
||||||
|
with open(f"application/items/sql/paginateLocationsBySkuZoneCount.sql", "r+") as file:
|
||||||
|
sql_count = 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:
|
||||||
|
locations = [postsqldb.tupleDictionaryFactory(cur.description, row) for row in rows]
|
||||||
|
elif rows and not convert:
|
||||||
|
locations = rows
|
||||||
|
cur.execute(sql_count, payload)
|
||||||
|
count = cur.fetchone()[0]
|
||||||
|
return locations, count
|
||||||
|
except Exception as error:
|
||||||
|
raise postsqldb.DatabaseError(error, payload, sql)
|
||||||
|
|
||||||
|
|||||||
@ -223,56 +223,97 @@ def getModalPrefixes():
|
|||||||
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":False, "message":"items fetched succesfully!"})
|
||||||
return jsonify({"prefixes":recordset, "end":math.ceil(count/limit), "error":True, "message":f"method {request.method} is not allowed!"})
|
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'])
|
|
||||||
def getZones():
|
|
||||||
page = int(request.args.get('page', 1))
|
|
||||||
limit = int(request.args.get('limit', 1))
|
|
||||||
database_config = config()
|
|
||||||
site_name = session['selected_site']
|
|
||||||
zones = []
|
|
||||||
offset = (page - 1) * limit
|
|
||||||
payload = (limit, offset)
|
|
||||||
count = 0
|
|
||||||
with psycopg2.connect(**database_config) as conn:
|
|
||||||
zones, count = database.getZonesWithCount(conn, site_name, payload, convert=True)
|
|
||||||
print(count, len(zones))
|
|
||||||
return jsonify(zones=zones, endpage=math.ceil(count[0]/limit))
|
|
||||||
|
|
||||||
|
|
||||||
@items_api.route('/item/getZonesBySku', methods=["GET"])
|
@items_api.route('/item/getZonesBySku', methods=["GET"])
|
||||||
|
@login_required
|
||||||
def getZonesbySku():
|
def getZonesbySku():
|
||||||
|
""" GET zones by sku by passing page, limit, item_id
|
||||||
|
---
|
||||||
|
parameters:
|
||||||
|
- in: query
|
||||||
|
name: page
|
||||||
|
schema:
|
||||||
|
type: integer
|
||||||
|
minimum: 1
|
||||||
|
default: 1
|
||||||
|
description: page of the records to GET
|
||||||
|
- in: query
|
||||||
|
name: limit
|
||||||
|
schema:
|
||||||
|
type: integer
|
||||||
|
minimum: 1
|
||||||
|
default: 10
|
||||||
|
description: number of records to grab from the system
|
||||||
|
- in: query
|
||||||
|
name: item_id
|
||||||
|
schema:
|
||||||
|
type: integer
|
||||||
|
minimum: 1
|
||||||
|
default: 1
|
||||||
|
description: item_id to pull zones for
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
description: Zones received successfully.
|
||||||
|
"""
|
||||||
|
zones, count = [], 0
|
||||||
if request.method == "GET":
|
if request.method == "GET":
|
||||||
page = int(request.args.get('page', 1))
|
page = int(request.args.get('page', 1))
|
||||||
limit = int(request.args.get('limit', 1))
|
limit = int(request.args.get('limit', 10))
|
||||||
item_id = int(request.args.get('item_id'))
|
item_id = int(request.args.get('item_id'))
|
||||||
database_config = config()
|
|
||||||
site_name = session['selected_site']
|
site_name = session['selected_site']
|
||||||
zones = []
|
|
||||||
offset = (page - 1) * limit
|
offset = (page - 1) * limit
|
||||||
payload = (item_id, limit, offset)
|
zones, count = database_items.paginateZonesBySku(site_name, (item_id, limit, offset))
|
||||||
count = 0
|
return jsonify({'zones': zones, 'endpage': math.ceil(count/limit), 'error':False, 'message': f''})
|
||||||
with psycopg2.connect(**database_config) as conn:
|
return jsonify({'zones': zones, 'endpage': math.ceil(count/limit), 'error':False, 'message': f'method {request.method} not allowed.'})
|
||||||
zones, count = db.ZonesTable.paginateZonesBySku(conn, site_name, payload)
|
|
||||||
print(zones, count)
|
|
||||||
return jsonify(zones=zones, endpage=math.ceil(count/limit))
|
|
||||||
|
|
||||||
@items_api.route('/item/getLocationsBySkuZone', methods=['get'])
|
@items_api.route('/item/getLocationsBySkuZone', methods=['get'])
|
||||||
|
@login_required
|
||||||
def getLocationsBySkuZone():
|
def getLocationsBySkuZone():
|
||||||
zone_id = int(request.args.get('zone_id', 1))
|
""" GET locations by sku by passing page, limit, item_id, zone_id
|
||||||
part_id = int(request.args.get('part_id', 1))
|
---
|
||||||
page = int(request.args.get('page', 1))
|
parameters:
|
||||||
limit = int(request.args.get('limit', 1))
|
- in: query
|
||||||
|
name: page
|
||||||
offset = (page-1)*limit
|
schema:
|
||||||
database_config = config()
|
type: integer
|
||||||
site_name = session['selected_site']
|
minimum: 1
|
||||||
locations = []
|
default: 1
|
||||||
count=0
|
description: page of the records to GET
|
||||||
with psycopg2.connect(**database_config) as conn:
|
- in: query
|
||||||
payload = (part_id, zone_id, limit, offset)
|
name: limit
|
||||||
locations, count = db.LocationsTable.paginateLocationsBySkuZone(conn, site_name, payload)
|
schema:
|
||||||
return jsonify(locations=locations, endpage=math.ceil(count/limit))
|
type: integer
|
||||||
|
minimum: 1
|
||||||
|
default: 10
|
||||||
|
description: number of records to grab from the system
|
||||||
|
- in: query
|
||||||
|
name: item_id
|
||||||
|
schema:
|
||||||
|
type: integer
|
||||||
|
minimum: 1
|
||||||
|
default: 1
|
||||||
|
description: item_id to pull locations for zone_id
|
||||||
|
- in: query
|
||||||
|
name: zone_id
|
||||||
|
schema:
|
||||||
|
type: integer
|
||||||
|
minimum: 1
|
||||||
|
default: 1
|
||||||
|
description: zone_id to pull locations for item_id
|
||||||
|
responses:
|
||||||
|
200:
|
||||||
|
description: Zones received successfully.
|
||||||
|
"""
|
||||||
|
locations, count = [], 0
|
||||||
|
if request.method == "GET":
|
||||||
|
zone_id = int(request.args.get('zone_id', 1))
|
||||||
|
part_id = int(request.args.get('part_id', 1))
|
||||||
|
page = int(request.args.get('page', 1))
|
||||||
|
limit = int(request.args.get('limit', 1))
|
||||||
|
offset = (page-1)*limit
|
||||||
|
site_name = session['selected_site']
|
||||||
|
locations, count = database_items.paginateLocationsBySkuZone(site_name, (part_id, zone_id, limit, offset))
|
||||||
|
return jsonify({'locations': locations, 'endpage': math.ceil(count/limit), 'error': False, 'message': f''})
|
||||||
|
return jsonify({'locations': locations, 'endpage': math.ceil(count/limit), 'error': True, 'message': f'method {request.method} is not allowed.'})
|
||||||
|
|
||||||
|
|
||||||
@items_api.route('/item/getLocations', methods=['get'])
|
@items_api.route('/item/getLocations', methods=['get'])
|
||||||
|
|||||||
15
application/items/sql/paginateLocationsBySkuZone.sql
Normal file
15
application/items/sql/paginateLocationsBySkuZone.sql
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
WITH passed_id AS (SELECT %s AS passed_id),
|
||||||
|
cte_item_locations AS (
|
||||||
|
SELECT DISTINCT ils.location_id FROM %%site_name%%_item_locations ils
|
||||||
|
WHERE ils.part_id = (SELECT passed_id FROM passed_id)
|
||||||
|
),
|
||||||
|
cte_locations AS (
|
||||||
|
SELECT DISTINCT locations.zone_id FROM %%site_name%%_locations locations
|
||||||
|
WHERE locations.id IN (SELECT location_id FROM cte_item_locations)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
SELECT DISTINCT location.* FROM cte_item_locations cil
|
||||||
|
JOIN %%site_name%%_locations location ON cil.location_id = location.id
|
||||||
|
WHERE location.zone_id = %s
|
||||||
|
LIMIT %s OFFSET %s;
|
||||||
15
application/items/sql/paginateLocationsBySkuZoneCount.sql
Normal file
15
application/items/sql/paginateLocationsBySkuZoneCount.sql
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
WITH passed_id AS (SELECT %s AS passed_id),
|
||||||
|
cte_item_locations AS (
|
||||||
|
SELECT DISTINCT ils.location_id FROM %%site_name%%_item_locations ils
|
||||||
|
WHERE ils.part_id = (SELECT passed_id FROM passed_id)
|
||||||
|
),
|
||||||
|
cte_locations AS (
|
||||||
|
SELECT DISTINCT locations.zone_id FROM %%site_name%%_locations locations
|
||||||
|
WHERE locations.id IN (SELECT location_id FROM cte_item_locations)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
SELECT COUNT(DISTINCT location.*) FROM cte_item_locations cil
|
||||||
|
JOIN %%site_name%%_locations location ON cil.location_id = location.id
|
||||||
|
WHERE location.zone_id = %s
|
||||||
|
LIMIT %s OFFSET %s;
|
||||||
15
application/items/sql/paginateZonesBySku.sql
Normal file
15
application/items/sql/paginateZonesBySku.sql
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
WITH passed_id AS (SELECT %s AS passed_id),
|
||||||
|
cte_item_locations AS (
|
||||||
|
SELECT DISTINCT ils.location_id FROM %%site_name%%_item_locations ils
|
||||||
|
WHERE ils.part_id = (SELECT passed_id FROM passed_id)
|
||||||
|
),
|
||||||
|
cte_locations AS (
|
||||||
|
SELECT DISTINCT locations.zone_id FROM %%site_name%%_locations locations
|
||||||
|
WHERE locations.id IN (SELECT location_id FROM cte_item_locations)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
SELECT DISTINCT zone.* FROM cte_locations cil
|
||||||
|
JOIN %%site_name%%_zones zone ON cil.zone_id = zone.id
|
||||||
|
LIMIT %s OFFSET %s;
|
||||||
|
|
||||||
13
application/items/sql/paginateZonesBySkuCount.sql
Normal file
13
application/items/sql/paginateZonesBySkuCount.sql
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
WITH passed_id AS (SELECT %s AS passed_id),
|
||||||
|
cte_item_locations AS (
|
||||||
|
SELECT DISTINCT ils.location_id FROM %%site_name%%_item_locations ils
|
||||||
|
WHERE ils.part_id = (SELECT passed_id FROM passed_id)
|
||||||
|
),
|
||||||
|
cte_locations AS (
|
||||||
|
SELECT DISTINCT locations.zone_id FROM %%site_name%%_locations locations
|
||||||
|
WHERE locations.id IN (SELECT location_id FROM cte_item_locations)
|
||||||
|
)
|
||||||
|
|
||||||
|
SELECT COUNT(DISTINCT zone.*) FROM cte_locations cil
|
||||||
|
JOIN %%site_name%%_zones zone ON cil.zone_id = zone.id
|
||||||
|
LIMIT %s OFFSET %s;
|
||||||
Loading…
x
Reference in New Issue
Block a user