3 Commits

Author SHA1 Message Date
Javier
2c7ffa8ee0 bug: fixed issue of label showing [title] tag 2026-02-14 13:31:47 -06:00
Javier
907f805cca feat: updated to version 0.18.4 2026-02-13 11:52:55 -06:00
Javier
3d6421e0ed feat: add [title] prefix for session title field 2026-02-13 11:51:05 -06:00
3 changed files with 64 additions and 19 deletions

2
app.py
View File

@@ -28,7 +28,7 @@ app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=1)
# 1. Define the version
APP_VERSION = '0.18.3'
APP_VERSION = '0.18.4'
# 2. Inject it into all templates automatically
@app.context_processor

View File

@@ -619,7 +619,17 @@ def register_routes(bp):
LIMIT 1
''', [process_id], one=True)
def strip_title_prefix(label):
"""Strip [title] prefix from field label for display"""
if label and label.startswith('[title]'):
return label[7:]
return label
def is_title_field(label):
"""Check if field label has [title] prefix"""
return label and label.startswith('[title]')
@bp.route('/')
@login_required
def index():
@@ -689,7 +699,7 @@ def register_routes(bp):
except:
sess_dict['scan_count'] = 0
# Get first 5 required header fields with their values
# Get header fields with their values
header_fields = query_db('''
SELECT cpf.field_label, cshv.field_value
FROM cons_process_fields cpf
@@ -697,13 +707,26 @@ def register_routes(bp):
ON cpf.id = cshv.field_id AND cshv.session_id = ?
WHERE cpf.process_id = ?
AND cpf.table_type = 'header'
AND cpf.is_required = 1
AND cpf.is_active = 1
ORDER BY cpf.sort_order, cpf.id
LIMIT 5
''', [sess['id'], sess['process_id']])
sess_dict['header_preview'] = header_fields
# Build title from [title] fields, strip prefix for display
title_parts = []
preview_fields = []
for hf in header_fields:
hf_dict = dict(hf)
if is_title_field(hf_dict['field_label']):
clean_label = strip_title_prefix(hf_dict['field_label'])
hf_dict['field_label'] = clean_label
if hf_dict['field_value']:
title_parts.append(f"{clean_label} {hf_dict['field_value']}")
preview_fields.append(hf_dict)
else:
preview_fields.append(hf_dict)
sess_dict['header_preview'] = preview_fields[:5]
sess_dict['session_title'] = f"{sess['process_name']}{', '.join(title_parts)}" if title_parts else sess['process_name']
sessions_with_counts.append(sess_dict)
# Get available process types for creating new sessions
@@ -727,13 +750,19 @@ def register_routes(bp):
flash('Process not found', 'danger')
return redirect(url_for('conssheets.index'))
# Get header fields for this process
header_fields = query_db('''
# Get header fields for this process, stripping [title] prefix
header_fields_raw = query_db('''
SELECT * FROM cons_process_fields
WHERE process_id = ? AND table_type = 'header' AND is_active = 1
ORDER BY sort_order, id
''', [process_id])
header_fields = []
for hf in header_fields_raw:
hf_dict = dict(hf)
hf_dict['field_label'] = strip_title_prefix(hf_dict['field_label'])
header_fields.append(hf_dict)
if request.method == 'POST':
# Validate required fields
missing_required = []
@@ -793,13 +822,19 @@ def register_routes(bp):
flash('Permission denied', 'danger')
return redirect(url_for('conssheets.index'))
# Get header fields
header_fields = query_db('''
# Get header fields for this process, stripping [title] prefix
header_fields_raw = 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']])
header_fields = []
for hf in header_fields_raw:
hf_dict = dict(hf)
hf_dict['field_label'] = strip_title_prefix(hf_dict['field_label'])
header_fields.append(hf_dict)
# Get existing values
existing_values = query_db('''
SELECT cpf.field_name, cshv.field_value
@@ -879,14 +914,24 @@ def register_routes(bp):
flash('This session has been archived', 'warning')
return redirect(url_for('conssheets.index'))
# Get header values for display
header_values = query_db('''
SELECT cpf.field_label, cpf.field_name, cshv.field_value
FROM cons_session_header_values cshv
JOIN cons_process_fields cpf ON cshv.field_id = cpf.id
WHERE cshv.session_id = ?
# Get header values for display, stripping [title] prefix
header_values_raw = query_db('''
SELECT cpf.id as field_id, cpf.field_label, cpf.field_name,
cpf.field_type, cpf.is_required, cpf.max_length,
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
ORDER BY cpf.sort_order, cpf.id
''', [session_id])
''', [session_id, sess['process_id']])
# Strip [title] prefix for display
header_values = []
for hv in header_values_raw:
hv_dict = dict(hv)
hv_dict['field_label'] = strip_title_prefix(hv_dict['field_label'])
header_values.append(hv_dict)
# Get detail fields for this process (convert to dicts for JSON serialization)
detail_fields_rows = query_db('''

View File

@@ -42,11 +42,11 @@
<div class="session-list-item-container session-status-{{ s.status }}">
<a href="{{ url_for('conssheets.scan_session', session_id=s.id) }}" class="session-list-item">
<div class="session-list-info">
<h3 class="session-list-name">{{ s.process_name }}</h3>
<h3 class="session-list-name">{{ s.session_title }}</h3>
<div class="session-list-meta">
<span>Started: {{ s.created_at[:16] }}</span>
<span></span>
<span>{{ s.scan_count or 0 }} lots scanned</span>
<span>{{ s.scan_count or 0 }} Scanned</span>
</div>
{% if s.header_preview %}
<div class="session-list-meta" style="margin-top: var(--space-xs); font-size: 0.8rem;">