diff --git a/mysql_preview_server.py b/mysql_preview_server.py index d62dbbb..746435c 100644 --- a/mysql_preview_server.py +++ b/mysql_preview_server.py @@ -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 '',