fix: 修正共享报工段工时归属拆分
This commit is contained in:
@@ -47,7 +47,26 @@ def _item(
|
||||
)
|
||||
|
||||
|
||||
def _report(start_at: datetime, end_at: datetime, item, *, id: int = 1, report_date: date | None = None):
|
||||
def _device(scanned_at: datetime):
|
||||
return SimpleNamespace(
|
||||
device_no="23#",
|
||||
process_name="冲压",
|
||||
scanned_at=scanned_at,
|
||||
released_at=None,
|
||||
release_reason=None,
|
||||
sort_order=0,
|
||||
)
|
||||
|
||||
|
||||
def _report(
|
||||
start_at: datetime,
|
||||
end_at: datetime,
|
||||
item,
|
||||
*,
|
||||
id: int = 1,
|
||||
report_date: date | None = None,
|
||||
devices: list | None = None,
|
||||
):
|
||||
return SimpleNamespace(
|
||||
id=id,
|
||||
attendance_point_name="总厂",
|
||||
@@ -55,8 +74,8 @@ def _report(start_at: datetime, end_at: datetime, item, *, id: int = 1, report_d
|
||||
report_date=report_date or start_at.date(),
|
||||
start_at=start_at,
|
||||
end_at=end_at,
|
||||
items=[item],
|
||||
session=SimpleNamespace(devices=[]),
|
||||
items=item if isinstance(item, list) else [item],
|
||||
session=SimpleNamespace(devices=devices or []),
|
||||
)
|
||||
|
||||
|
||||
@@ -113,6 +132,42 @@ def test_one_minute_before_night_end_allocates_to_previous_date():
|
||||
assert rows[1].reference_wage == 600
|
||||
|
||||
|
||||
def test_no_device_shared_full_report_splits_effective_minutes_between_items():
|
||||
first_item = _item(id=1, good_qty=10)
|
||||
second_item = _item(id=2, good_qty=20)
|
||||
report = _report(
|
||||
datetime(2026, 7, 25, 8, 0),
|
||||
datetime(2026, 7, 25, 11, 0),
|
||||
[first_item, second_item],
|
||||
)
|
||||
|
||||
rows = build_report_allocation_drafts(report)
|
||||
|
||||
assert [(row.report_item_id, row.effective_minutes, row.day_minutes) for row in rows] == [
|
||||
(1, 90, 90),
|
||||
(2, 90, 90),
|
||||
]
|
||||
|
||||
|
||||
def test_items_sharing_same_started_at_split_the_segment_minutes():
|
||||
started_at = datetime(2026, 7, 25, 8, 0)
|
||||
first_item = _item(id=1, good_qty=10, started_at=started_at)
|
||||
second_item = _item(id=2, good_qty=20, started_at=started_at)
|
||||
report = _report(
|
||||
started_at,
|
||||
datetime(2026, 7, 25, 11, 0),
|
||||
[first_item, second_item],
|
||||
devices=[_device(started_at)],
|
||||
)
|
||||
|
||||
rows = build_report_allocation_drafts(report)
|
||||
|
||||
assert [(row.report_item_id, row.effective_minutes, row.day_minutes) for row in rows] == [
|
||||
(1, 90, 90),
|
||||
(2, 90, 90),
|
||||
]
|
||||
|
||||
|
||||
def test_zero_effective_minutes_falls_back_to_original_report_date():
|
||||
item = _item(good_qty=5, defect_qty=1, scrap_qty=0.5, changeover_count=2, process_unit_price_yuan=3)
|
||||
report = _report(
|
||||
|
||||
Reference in New Issue
Block a user