feat: 输出报工超额快照字段

This commit is contained in:
souplearn
2026-07-25 20:49:34 +08:00
parent b203b782de
commit 58d8272448
3 changed files with 90 additions and 5 deletions
+22 -5
View File
@@ -52,6 +52,10 @@ def temporary_expired(person: Personnel) -> bool:
)
def _optional_float(value) -> float | None:
return None if value is None else as_float(value)
def attendance_point_out(point: AttendancePoint) -> AttendancePointOut:
return AttendancePointOut(
name=point.name,
@@ -123,7 +127,6 @@ def personnel_summary_out(person: Personnel) -> dict:
def product_out(product: Product) -> ProductOut:
optional_float = lambda value: None if value is None else as_float(value)
return ProductOut(
attendance_point_name=product.attendance_point_name,
project_no=product.project_no,
@@ -132,10 +135,10 @@ def product_out(product: Product) -> ProductOut:
material_code=product.material_code,
material_name=product.material_name,
supplier=product.supplier,
product_net_weight_kg=optional_float(product.product_net_weight_kg),
product_gross_weight_kg=optional_float(product.product_gross_weight_kg),
scrap_loss_rate=optional_float(product.scrap_loss_rate),
waste_price_yuan_per_kg=optional_float(product.waste_price_yuan_per_kg),
product_net_weight_kg=_optional_float(product.product_net_weight_kg),
product_gross_weight_kg=_optional_float(product.product_gross_weight_kg),
scrap_loss_rate=_optional_float(product.scrap_loss_rate),
waste_price_yuan_per_kg=_optional_float(product.waste_price_yuan_per_kg),
device_no=product.device_no,
process_name=product.process_name,
stamping_method=product.stamping_method,
@@ -410,6 +413,18 @@ def report_item_out(item: ProductionReportItem, corrections: dict | None = None)
is_continuous_die=is_continuous_die_item(item),
is_multi_person=is_multi_person_item(item),
remark=item.remark,
over_limit_status=item.over_limit_status or "not_checked",
over_limit_type=item.over_limit_type,
over_limit_reason=item.over_limit_reason,
over_limit_checked_at=item.over_limit_checked_at,
over_limit_check_source=item.over_limit_check_source,
over_limit_batch_no=item.over_limit_batch_no,
over_limit_product_gross_weight_kg=_optional_float(item.over_limit_product_gross_weight_kg),
over_limit_issued_weight_kg=_optional_float(item.over_limit_issued_weight_kg),
over_limit_max_reportable_qty=_optional_float(item.over_limit_max_reportable_qty),
over_limit_previous_good_qty=_optional_float(item.over_limit_previous_good_qty),
over_limit_current_cumulative_qty=_optional_float(item.over_limit_current_cumulative_qty),
over_limit_current_report_qty=_optional_float(item.over_limit_current_report_qty),
allocations=[report_allocation_out(row) for row in allocation_rows],
corrections=corrections or {},
)
@@ -505,6 +520,8 @@ def report_out(report: ProductionReport, schedule: WorkScheduleConfig | None = N
submitted_at=report.submitted_at,
is_system_auto_submitted=bool(report.is_system_auto_submitted),
auto_submit_reason=report.auto_submit_reason,
has_over_limit=bool(report.has_over_limit),
over_limit_summary=report.over_limit_summary,
is_multi_person_assistant=bool(report.is_multi_person_assistant),
multi_person_source_report_id=report.multi_person_source_report_id,
is_voided=bool(report.is_voided),