Mar 05 2026: implement reinspect label fix 2
This commit is contained in:
+58
-16
@@ -515,25 +515,67 @@ def view(inspection_id):
|
|||||||
|
|
||||||
scoreable_types = ('rating', 'checkbox', 'radio')
|
scoreable_types = ('rating', 'checkbox', 'radio')
|
||||||
|
|
||||||
# Build a label-text lookup keyed by field ID.
|
# Build a label lookup keyed by field ID using three strategies in priority order:
|
||||||
# Some fields carry their label directly in field['label']; others rely
|
#
|
||||||
# on a separate 'label'-type element that precedes them in the schema.
|
# 1. Same-row text value: a text/textarea field on the same grid row whose
|
||||||
# We do a single forward pass: accumulate the last-seen label text and
|
# submitted value (e.g. "Brick Floor") is the item name. This is the most
|
||||||
# assign it to any unlabelled scoreable field that follows.
|
# specific and matches the pattern shown in the inspection form.
|
||||||
|
# 2. field['label']: the field's own label property if explicitly set.
|
||||||
|
# 3. Preceding label element: the nearest 'label'-type field above in the schema
|
||||||
|
# (uses text_content, which is what the form builder stores label text in).
|
||||||
|
#
|
||||||
|
# We build row→text_value and row→section_label maps in one pass,
|
||||||
|
# then resolve each scoreable field's display name.
|
||||||
|
|
||||||
|
# Map: grid row → text field value from current form_data (item name column)
|
||||||
|
_row_text_val = {}
|
||||||
|
# Map: grid row → text field value from parent form_data
|
||||||
|
_row_text_val_parent = {}
|
||||||
|
# Map: field_id → nearest preceding label text_content
|
||||||
|
_preceding_label = {}
|
||||||
_last_label_text = ''
|
_last_label_text = ''
|
||||||
_field_label_map = {}
|
|
||||||
for _f in form_fields:
|
for _f in form_fields:
|
||||||
if _f.get('type') == 'label':
|
_ftype = _f.get('type')
|
||||||
_last_label_text = _f.get('label') or _f.get('text') or _last_label_text
|
_frow = _f.get('row', 0)
|
||||||
elif _f.get('type') in scoreable_types:
|
|
||||||
_fid = str(_f.get('id', ''))
|
_fid = str(_f.get('id', ''))
|
||||||
# Prefer the field's own label; fall back to the nearest preceding label element
|
|
||||||
_field_label_map[_fid] = (
|
if _ftype == 'label':
|
||||||
_f.get('label')
|
# label elements store their text in text_content, not label
|
||||||
or _f.get('placeholder')
|
_last_label_text = (
|
||||||
|
_f.get('text_content')
|
||||||
|
or _f.get('label')
|
||||||
|
or _f.get('text')
|
||||||
or _last_label_text
|
or _last_label_text
|
||||||
or _fid
|
|
||||||
)
|
)
|
||||||
|
elif _ftype in ('text', 'textarea'):
|
||||||
|
# Record the submitted value of text fields indexed by row
|
||||||
|
_cur_txt = str(form_data.get(_fid, '')).strip()
|
||||||
|
_par_txt = str(parent_form_data.get(_fid, '')).strip()
|
||||||
|
if _cur_txt:
|
||||||
|
_row_text_val[_frow] = _cur_txt
|
||||||
|
elif _par_txt:
|
||||||
|
_row_text_val[_frow] = _par_txt
|
||||||
|
if _par_txt:
|
||||||
|
_row_text_val_parent[_frow] = _par_txt
|
||||||
|
elif _ftype == 'section':
|
||||||
|
_last_label_text = (
|
||||||
|
_f.get('label') or _f.get('text_content') or _last_label_text
|
||||||
|
)
|
||||||
|
elif _ftype in scoreable_types:
|
||||||
|
_preceding_label[_fid] = _last_label_text
|
||||||
|
|
||||||
|
def _resolve_label(field, fid):
|
||||||
|
frow = field.get('row', 0)
|
||||||
|
# Priority 1: same-row text field value (the item name)
|
||||||
|
if frow in _row_text_val:
|
||||||
|
return _row_text_val[frow]
|
||||||
|
# Priority 2: field's own label property
|
||||||
|
own = field.get('label') or field.get('placeholder')
|
||||||
|
if own:
|
||||||
|
return own
|
||||||
|
# Priority 3: nearest preceding label element
|
||||||
|
return _preceding_label.get(fid) or fid
|
||||||
|
|
||||||
rows = []
|
rows = []
|
||||||
|
|
||||||
@@ -543,7 +585,7 @@ def view(inspection_id):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
fid = str(field.get('id', ''))
|
fid = str(field.get('id', ''))
|
||||||
label = _field_label_map.get(fid) or fid
|
label = _resolve_label(field, fid)
|
||||||
|
|
||||||
cur_val = form_data.get(fid, '')
|
cur_val = form_data.get(fid, '')
|
||||||
par_val = parent_form_data.get(fid, '')
|
par_val = parent_form_data.get(fid, '')
|
||||||
@@ -574,7 +616,7 @@ def view(inspection_id):
|
|||||||
delta = round(cur_pct - par_pct, 1)
|
delta = round(cur_pct - par_pct, 1)
|
||||||
|
|
||||||
rows.append({
|
rows.append({
|
||||||
'category': field.get('section') or field.get('category') or 'General',
|
'category': _preceding_label.get(fid) or field.get('category') or 'General',
|
||||||
'description': label,
|
'description': label,
|
||||||
'parent_pct': par_pct,
|
'parent_pct': par_pct,
|
||||||
'current_pct': cur_pct,
|
'current_pct': cur_pct,
|
||||||
|
|||||||
Reference in New Issue
Block a user