54 lines
1.9 KiB
Python
54 lines
1.9 KiB
Python
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') |