Implemented CSV download of items
This commit is contained in:
parent
34fa11fa0f
commit
62cd4af78e
Binary file not shown.
Binary file not shown.
@ -64,6 +64,26 @@ def getItemAllByID(site:str, payload: tuple, convert:bool=True):
|
||||
except Exception as error:
|
||||
postsqldb.DatabaseError(error, payload, sql)
|
||||
|
||||
def getItemsAll(site:str, convert:bool=True):
|
||||
database_config = config.config()
|
||||
with open('application/items/sql/getItemsAll.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:
|
||||
cur.execute(sql)
|
||||
rows = cur.fetchall()
|
||||
headers = [desc[0] for desc in cur.description]
|
||||
types = [desc[1] for desc in cur.description]
|
||||
if rows and convert:
|
||||
record = postsqldb.tupleDictionaryFactory(cur.description, rows)
|
||||
if rows and not convert:
|
||||
record = rows
|
||||
return record, headers, types
|
||||
except Exception as error:
|
||||
postsqldb.DatabaseError(error, (), sql)
|
||||
|
||||
def getItemAllByBarcode(site:str, payload: tuple, convert:bool=True):
|
||||
database_config = config.config()
|
||||
with open('application/items/sql/getItemAllByBarcode.sql', 'r+') as file:
|
||||
|
||||
@ -4,6 +4,9 @@ from flask import (
|
||||
)
|
||||
import psycopg2
|
||||
import math
|
||||
import io
|
||||
import csv
|
||||
import datetime
|
||||
|
||||
# APPLICATION IMPORTS
|
||||
from config import config
|
||||
@ -473,3 +476,23 @@ def deleteBarcode():
|
||||
except Exception as error:
|
||||
return jsonify(status=400, message=str(error))
|
||||
return jsonify(status=405, message=f"The request method: {request.method} is not allowed on this endpoint!")
|
||||
|
||||
@items_api.route('/download_csv', methods=["GET"])
|
||||
def downloadItemsCSV():
|
||||
if request.method == "GET":
|
||||
site_name = session['selected_site']
|
||||
records, headers, types = database_items.getItemsAll(site_name, convert=False)
|
||||
si = io.StringIO()
|
||||
writer = csv.writer(si)
|
||||
writer.writerow(headers)
|
||||
writer.writerow(types)
|
||||
writer.writerows(records)
|
||||
output = si.getvalue()
|
||||
filename = f"{site_name}_items_{str(datetime.datetime.now())}.csv"
|
||||
response = Response(
|
||||
output,
|
||||
mimetype='text/csv',
|
||||
headers={"Content-Disposition": f"attachment;filename={filename}"}
|
||||
)
|
||||
return response
|
||||
return jsonify(status=405, message=f"The request method: {request.method} is not allowed on this endpoint!")
|
||||
4
application/items/sql/getItemsAll.sql
Normal file
4
application/items/sql/getItemsAll.sql
Normal file
@ -0,0 +1,4 @@
|
||||
SELECT * FROM %%site_name%%_items items
|
||||
LEFT JOIN %%site_name%%_item_info item_info ON item_info.id = items.item_info_id
|
||||
LEFT JOIN %%site_name%%_food_info food_info ON food_info.id = items.food_info_id
|
||||
LEFT JOIN %%site_name%%_logistics_info logistics_info ON logistics_info.id = items.logistics_info_id;
|
||||
@ -109,8 +109,7 @@
|
||||
<div class="uk-width-1-1@m">
|
||||
<ul class="uk-iconnav uk-flex-center uk-flex-left@m">
|
||||
<li><a onclick="openAddItemModal()" uk-icon="icon: plus">Add Item</a></li>
|
||||
<li><a onclick="openAddPrefixModal()" uk-icon="icon: plus">Add Prefix</a></li>
|
||||
<li><a href="#" uk-icon="icon: cloud-download">download</a></li>
|
||||
<li><a href="/items/download_csv" uk-icon="icon: cloud-download" uk-tooltip="Downloads a CSV of your items.">download</a></li>
|
||||
</ul>
|
||||
<ul class="uk-iconnav uk-flex-center uk-flex-right@m">
|
||||
<li><a id="view_mode_toggle" onclick="setViewMode()" uk-icon="icon: thumbnails">Cards</a></li>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user