fixed complex strings

This commit is contained in:
2026-09-02 14:35:30 +03:00
parent b7a1609a39
commit f132e83288
8 changed files with 636 additions and 22 deletions
+44 -15
View File
@@ -19,6 +19,15 @@ from app.models import (
VariantProperty,
VedomostRow,
)
from app.services.project_settings import (
get_column_mappings_list,
get_project_params_map,
get_simple_list_settings,
resolve_decimal_and_board,
resolve_param_value,
resolve_where_used,
vedomost_column_map,
)
from app.services.table_generators import (
TABLE_TYPES,
ComponentView,
@@ -165,16 +174,23 @@ def generate_table(
mappings = _mappings_dict(db, project.id)
components = load_components_for_variant(db, project)
col_mappings = get_column_mappings_list(db, project.id, table_type)
if table_type == "perechen":
rows = generate_perechen(components, name_field=name_field or "Name", mappings=mappings)
nf = name_field or (col_mappings[0] if col_mappings else "Name") or "Name"
rows = generate_perechen(components, name_field=nf, mappings=mappings)
elif table_type == "specification_pcb":
dec, board = resolve_decimal_and_board(
db, project.id, project.decimal_number, project.board_name, table_type
)
name_prop = col_mappings[1] if len(col_mappings) > 1 and col_mappings[1] else "ManufacturerPartNumber"
rows = generate_specification_pcb(
components,
decimal_number=project.decimal_number,
board_name=project.board_name,
decimal_number=dec,
board_name=board,
pcb_doc_name=project.pcb_doc_name or "",
mappings=mappings,
name_field=name_prop,
)
elif table_type == "specification":
materials: list[MaterialView] = []
@@ -191,22 +207,35 @@ def generate_table(
layer_number=m.layer_number,
)
)
rows = generate_specification(materials, layer_count=layer_count, decimal_number=project.decimal_number)
dec, _ = resolve_decimal_and_board(
db, project.id, project.decimal_number, project.board_name, table_type
)
rows = generate_specification(materials, layer_count=layer_count, decimal_number=dec)
elif table_type == "vedomost":
inscriptions = {
i.field_number: i.field_value
for i in db.scalars(
select(TitleInscription).where(TitleInscription.project_id == project.id)
).all()
}
where_used = inscriptions.get(101) or inscriptions.get(1001) or project.decimal_number
rows = generate_vedomost(components, where_used=where_used, mappings=mappings)
params = get_project_params_map(db, project.id)
where_used = resolve_where_used(db, project.id, col_mappings)
if not where_used:
inscriptions = {
i.field_number: i.field_value
for i in db.scalars(
select(TitleInscription).where(TitleInscription.project_id == project.id)
).all()
}
raw = inscriptions.get(101) or inscriptions.get(1001) or project.decimal_number or ""
where_used = resolve_param_value(raw, params)
rows = generate_vedomost(
components,
where_used=where_used,
mappings=mappings,
column_mappings=vedomost_column_map(col_mappings),
)
else:
sl = get_simple_list_settings(db, project.id)
rows = generate_simple_list(
components,
name_field=name_field or "Name",
tech_reserve_percent=tech_reserve_percent if tech_reserve_percent is not None else 10.0,
boards_count=boards_count if boards_count is not None else 1,
name_field=name_field or sl["name_field"],
tech_reserve_percent=tech_reserve_percent if tech_reserve_percent is not None else sl["tech_reserve_percent"],
boards_count=boards_count if boards_count is not None else sl["boards_count"],
)
return replace_rows(db, project.id, table_type, rows)