feat: add edit session header, fix css conflicts with cs-scan-row prefix
This commit is contained in:
@@ -773,6 +773,91 @@ def register_routes(bp):
|
||||
header_fields=header_fields,
|
||||
form_data={})
|
||||
|
||||
@bp.route('/session/<int:session_id>/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/<int:session_id>')
|
||||
@login_required
|
||||
@@ -833,6 +918,41 @@ def register_routes(bp):
|
||||
dup_key_field=dup_key_field)
|
||||
|
||||
|
||||
@bp.route('/session/<int:session_id>/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/<int:session_id>/scan', methods=['POST'])
|
||||
@login_required
|
||||
def scan_lot(session_id):
|
||||
|
||||
Reference in New Issue
Block a user