Normalize 8092 girder spec rowspan rows
This commit is contained in:
@@ -1080,13 +1080,18 @@ def _parse_budget_girder_specs(rows):
|
||||
specs = []
|
||||
if len(rows) < 2:
|
||||
return specs
|
||||
expected_cells = max(len(rows[0]) - 1, 0)
|
||||
for row in rows[1:]:
|
||||
if not row:
|
||||
continue
|
||||
first = _as_text(row[0]).strip()
|
||||
if not first or '조회된 내용이 없습니다' in first:
|
||||
continue
|
||||
padded = row + [''] * max(0, 7 - len(row))
|
||||
if expected_cells and len(row) < expected_cells:
|
||||
padded = ([''] * (expected_cells - len(row))) + row
|
||||
else:
|
||||
padded = row[:]
|
||||
padded += [''] * max(0, 7 - len(padded))
|
||||
specs.append({
|
||||
'extension': _as_text(padded[0]).strip(),
|
||||
'width': _as_text(padded[1]).strip(),
|
||||
@@ -1099,6 +1104,39 @@ def _parse_budget_girder_specs(rows):
|
||||
return specs
|
||||
|
||||
|
||||
def _normalize_budget_girder_specs(specs):
|
||||
normalized = []
|
||||
previous_extension = ''
|
||||
previous_width = ''
|
||||
for row in specs or []:
|
||||
current = dict(row or {})
|
||||
if (
|
||||
current.get('extension')
|
||||
and current.get('width')
|
||||
and current.get('length')
|
||||
and current.get('height')
|
||||
and not current.get('quantity')
|
||||
and not current.get('formCount')
|
||||
):
|
||||
current = {
|
||||
**current,
|
||||
'extension': '',
|
||||
'width': '',
|
||||
'length': current.get('extension', ''),
|
||||
'height': current.get('width', ''),
|
||||
'quantity': current.get('length', ''),
|
||||
'formCount': current.get('height', ''),
|
||||
}
|
||||
if not _as_text(current.get('extension')).strip() and previous_extension:
|
||||
current['extension'] = previous_extension
|
||||
if not _as_text(current.get('width')).strip() and previous_width:
|
||||
current['width'] = previous_width
|
||||
previous_extension = _as_text(current.get('extension')).strip() or previous_extension
|
||||
previous_width = _as_text(current.get('width')).strip() or previous_width
|
||||
normalized.append(current)
|
||||
return normalized
|
||||
|
||||
|
||||
def _parse_budget_predeck(rows):
|
||||
result = {'generalArea': '', 'medianArea': '', 'barrierArea': '', 'remarks': ''}
|
||||
if len(rows) < 2:
|
||||
@@ -1251,6 +1289,7 @@ def get_erp_budget_plan_cache(conn, source_page='const', project_code=''):
|
||||
if not row:
|
||||
return None
|
||||
payload = json.loads(row[5] or '{}')
|
||||
girder_specs = _normalize_budget_girder_specs(payload.get('girderSpecs') or [])
|
||||
return {
|
||||
'sourcePage': source_page,
|
||||
'projectCode': project_code,
|
||||
@@ -1262,7 +1301,7 @@ def get_erp_budget_plan_cache(conn, source_page='const', project_code=''):
|
||||
'summary': payload.get('summary') or {},
|
||||
'inputDays': payload.get('inputDays') or {},
|
||||
'inputRebar': payload.get('inputRebar') or {},
|
||||
'girderSpecs': payload.get('girderSpecs') or [],
|
||||
'girderSpecs': girder_specs,
|
||||
'predeck': payload.get('predeck') or {},
|
||||
'crossbeam': payload.get('crossbeam') or {},
|
||||
'syncedAt': row[6] or '',
|
||||
|
||||
Reference in New Issue
Block a user