diff --git a/modules/conssheets/routes.py b/modules/conssheets/routes.py index 9a7b9df..9c3aa03 100644 --- a/modules/conssheets/routes.py +++ b/modules/conssheets/routes.py @@ -773,6 +773,91 @@ def register_routes(bp): header_fields=header_fields, form_data={}) + @bp.route('/session//edit-header', methods=['GET', 'POST']) + @login_required + def edit_session_header(session_id): + """Edit header fields for an existing session""" + sess = query_db(''' + SELECT cs.*, cp.process_name, cp.process_key, cp.id as process_id + FROM cons_sessions cs + JOIN cons_processes cp ON cs.process_id = cp.id + WHERE cs.id = ? + ''', [session_id], one=True) + + if not sess: + flash('Session not found', 'danger') + return redirect(url_for('conssheets.index')) + + # Check permission + if sess['created_by'] != session['user_id'] and session['role'] not in ['owner', 'admin']: + flash('Permission denied', 'danger') + return redirect(url_for('conssheets.index')) + + # Get header fields + header_fields = query_db(''' + SELECT * FROM cons_process_fields + WHERE process_id = ? AND table_type = 'header' AND is_active = 1 + ORDER BY sort_order, id + ''', [sess['process_id']]) + + # Get existing values + existing_values = query_db(''' + SELECT cpf.field_name, cshv.field_value + FROM cons_process_fields cpf + LEFT JOIN cons_session_header_values cshv + ON cpf.id = cshv.field_id AND cshv.session_id = ? + WHERE cpf.process_id = ? AND cpf.table_type = 'header' AND cpf.is_active = 1 + ''', [session_id, sess['process_id']]) + + # Build form_data dict from existing values + form_data = {row['field_name']: row['field_value'] for row in existing_values if row['field_value']} + + if request.method == 'POST': + # Validate required fields + missing_required = [] + for field in header_fields: + if field['is_required']: + value = request.form.get(field['field_name'], '').strip() + if not value: + missing_required.append(field['field_label']) + + if missing_required: + flash(f'Required fields missing: {", ".join(missing_required)}', 'danger') + return render_template('conssheets/new_session.html', + process=sess, + header_fields=header_fields, + form_data=request.form, + edit_mode=True, + session_id=session_id) + + # Update header field values + for field in header_fields: + value = request.form.get(field['field_name'], '').strip() + existing = query_db( + 'SELECT id FROM cons_session_header_values WHERE session_id = ? AND field_id = ?', + [session_id, field['id']], one=True + ) + if existing: + execute_db( + 'UPDATE cons_session_header_values SET field_value = ? WHERE session_id = ? AND field_id = ?', + [value, session_id, field['id']] + ) + else: + if value: + execute_db( + 'INSERT INTO cons_session_header_values (session_id, field_id, field_value) VALUES (?, ?, ?)', + [session_id, field['id'], value] + ) + + flash('Header updated successfully!', 'success') + return redirect(url_for('conssheets.scan_session', session_id=session_id)) + + return render_template('conssheets/new_session.html', + process=sess, + header_fields=header_fields, + form_data=form_data, + edit_mode=True, + session_id=session_id) @bp.route('/session/') @login_required @@ -833,6 +918,41 @@ def register_routes(bp): dup_key_field=dup_key_field) + @bp.route('/session//update-header', methods=['POST']) + @login_required + def update_session_header(session_id): + """Update header field values for a session""" + sess = query_db('SELECT * FROM cons_sessions WHERE id = ?', [session_id], one=True) + + if not sess: + return jsonify({'success': False, 'message': 'Session not found'}) + + # Check permission + if sess['created_by'] != session['user_id'] and session['role'] not in ['owner', 'admin']: + return jsonify({'success': False, 'message': 'Permission denied'}) + + data = request.get_json() + field_values = data.get('field_values', {}) + + for field_id, field_value in field_values.items(): + # Check if value already exists + existing = query_db( + 'SELECT id FROM cons_session_header_values WHERE session_id = ? AND field_id = ?', + [session_id, field_id], one=True + ) + if existing: + execute_db( + 'UPDATE cons_session_header_values SET field_value = ? WHERE session_id = ? AND field_id = ?', + [field_value, session_id, field_id] + ) + else: + execute_db( + 'INSERT INTO cons_session_header_values (session_id, field_id, field_value) VALUES (?, ?, ?)', + [session_id, field_id, field_value] + ) + + return jsonify({'success': True}) + @bp.route('/session//scan', methods=['POST']) @login_required def scan_lot(session_id): diff --git a/modules/conssheets/templates/conssheets/new_session.html b/modules/conssheets/templates/conssheets/new_session.html index fffc743..62e5f2d 100644 --- a/modules/conssheets/templates/conssheets/new_session.html +++ b/modules/conssheets/templates/conssheets/new_session.html @@ -11,10 +11,10 @@
-

New {{ process.process_name }} Session

-

Enter header information to begin scanning

+

{% if edit_mode %}Edit{% else %}New{% endif %} {{ process.process_name }} Session

+

{% if edit_mode %}Update header information{% else %}Enter header information to begin scanning{% endif %}

-
+ {% for field in header_fields %}