from flask import Blueprint, request, render_template, redirect, session import csv from io import TextIOWrapper from models import Asset, db from process_csv import get_csv_data # Import the CSV processing function # Create a Blueprint for upload upload_bp = Blueprint('uploadcsv', __name__) @upload_bp.route('/uploadcsv', methods=['GET', 'POST']) def upload_file(): if request.method == 'POST': # Check if a file was uploaded if 'file' not in request.files: return redirect('uploadcsv') file = request.files['file'] # Check if the file is a CSV if file.filename == '' or not file.filename.endswith('.csv'): return redirect('uploadcsv') try: # Extract data from the CSV file assets = get_csv_data(file) session['assets'] = assets # Store assets in session # Redirect to preview page with the CSV data return render_template('csv_preview.html', assets=assets) except Exception as e: # Handle errors during file processing print(f"Error processing CSV file: {str(e)}") return redirect('uploadcsv') # Render the upload page for GET requests return render_template('upload.html') # When confirmed, write the csv data to the database @upload_bp.route('/confirm_save', methods=['POST']) def confirm_save(): assets = session.get('assets', []) # Retrieve assets from session for asset_data in assets: asset = Asset( assettag=asset_data['assettag'], hostname=asset_data['hostname'], warrantyfrom=asset_data['warrantyfrom'], status=asset_data['status'], staffnum=asset_data['staffnum'] ) db.session.add(asset) db.session.commit() session.pop('assets', None) # Clear session data return redirect('/viewall')