diff --git a/app.py b/app.py index 26a2fc4..4063c50 100644 --- a/app.py +++ b/app.py @@ -4,6 +4,7 @@ from models import * # Import the Blueprints from routes.viewall import viewall_bp +from routes.export_csv import export_csv_bp from routes.viewasset import viewasset_bp from routes.create import addasset_bp from routes.update import update_bp @@ -19,6 +20,7 @@ db.init_app(app) # Register the Blueprints app.register_blueprint(viewall_bp) +app.register_blueprint(export_csv_bp) app.register_blueprint(viewasset_bp) app.register_blueprint(addasset_bp) app.register_blueprint(update_bp) diff --git a/routes/export_csv.py b/routes/export_csv.py new file mode 100644 index 0000000..647bd18 --- /dev/null +++ b/routes/export_csv.py @@ -0,0 +1,24 @@ +from flask import Blueprint, send_file +from models import Asset +import csv + +export_csv_bp = Blueprint('export_csv', __name__) + +@export_csv_bp.route('/export_csv', methods=['POST']) +def export_csv(): + outfile = open('inventory_export.csv', 'w', newline='') + outcsv = csv.writer(outfile, delimiter='|') + + records = Asset.query.all() # Fetch all records from the database + + # Write headers + outcsv.writerow([column.name for column in Asset.__mapper__.columns]) + + # Write data rows + for record in records: + outcsv.writerow([getattr(record, column.name) for column in Asset.__mapper__.columns]) + + outfile.close() + + # Send the file as a download + return send_file('inventory_export.csv', as_attachment=True) \ No newline at end of file diff --git a/routes/viewall.py b/routes/viewall.py index 96aeaba..50fa96b 100644 --- a/routes/viewall.py +++ b/routes/viewall.py @@ -1,21 +1,11 @@ -from flask import Blueprint, request, render_template, send_file -from models import Asset, db -import csv +from flask import Blueprint, render_template +from models import Asset from config import item_attributes viewall_bp = Blueprint('viewall', __name__) -@viewall_bp.route('/viewall/', methods=['GET', 'POST']) +@viewall_bp.route('/viewall/', methods=['GET']) def view_list(): - if request.method == 'POST': - outfile = open('inventory_export.csv', 'w', newline='') - outcsv = csv.writer(outfile, delimiter='|') - records = db.session.query(Asset).all() - outcsv.writerow([column.name for column in Asset.__mapper__.columns]) - [outcsv.writerow([getattr(curr, column.name) for column in Asset.__mapper__.columns]) for curr in records] - outfile.close() - return send_file('inventory_export.csv', as_attachment=True) - items = Asset.query.all() primary_attrib = next( (attrib for attrib, config in item_attributes.items() if config.primary), diff --git a/templates/viewList.html b/templates/viewList.html index 0fb9681..f05a0b0 100644 --- a/templates/viewList.html +++ b/templates/viewList.html @@ -9,14 +9,14 @@ - + {% for attrib, config in item_attributes.items() %} {% endfor %} - + {% for item in items %} {% for attrib, config in item_attributes.items() %} @@ -43,7 +43,7 @@ - +
{{ config.display_name }}Actions