diff --git a/routes/update.py b/routes/update.py index f246d2c..e29ccf2 100644 --- a/routes/update.py +++ b/routes/update.py @@ -1,39 +1,44 @@ from flask import Blueprint, request, render_template, redirect from models import Asset, db from config import item_attributes +from sqlalchemy import exc # Import exc for database exceptions update_bp = Blueprint('editasset', __name__) @update_bp.route('/update//', methods=['GET', 'POST']) def update(assettag): item = Asset.query.filter_by(assettag=assettag).first() + if not item: + return f"Asset {assettag} is not found" + + if request.method == 'GET': + return render_template('update.html', item=item, item_attributes=item_attributes) + if request.method == 'POST': - if item: - assettag = request.form['assettag'] - hostname = request.form['hostname'] - warrantyfrom = request.form['warrantyfrom'] - status = request.form['status'] - if status not in ['Active', 'Inactive']: - return render_template('update.html', item=item, exc='status', item_attributes=item_attributes) # Ensure status is valid + # Dynamically get form data using item_attributes + form_data = {attrib: request.form[attrib] for attrib in item_attributes} + + # Validate status (if it's an option field) + if 'status' in item_attributes and item_attributes['status'].html_input_type == "select": + if form_data['status'] not in item_attributes['status'].options: + return render_template('update.html', item=item, exc='status', item_attributes=item_attributes) + + # Convert staffnum to int (if it's a number field) + if 'staffnum' in item_attributes and item_attributes['staffnum'].html_input_type == "number": try: - staffnum = int(request.form['staffnum']) + form_data['staffnum'] = int(form_data['staffnum']) except ValueError: return render_template('update.html', item=item, exc='staffnum', item_attributes=item_attributes) - try: - setattr(item, 'assettag', assettag) - setattr(item, 'hostname', hostname) - setattr(item, 'warrantyfrom', warrantyfrom) - setattr(item, 'status', status) - setattr(item, 'staffnum', staffnum) + # Update the item with the new data + for attrib, value in form_data.items(): + setattr(item, attrib, value) - db.session.commit() - except exc.IntegrityError: - return render_template('update.html', item=item, exc='integrity', item_attributes=item_attributes) - except (exc.StatementError, exc.InvalidRequestError) as e: - return render_template('update.html', item=item, exc='status', item_attributes=item_attributes) + try: + db.session.commit() + except exc.IntegrityError: + return render_template('update.html', item=item, exc='integrity', item_attributes=item_attributes) + except (exc.StatementError, exc.InvalidRequestError): + return render_template('update.html', item=item, exc='status', item_attributes=item_attributes) - return redirect(f'/viewall/') - return f"Asset {assettag} is not found" - - return render_template('update.html', item=item, item_attributes=item_attributes) \ No newline at end of file + return redirect('/viewall') \ No newline at end of file