fix: 对齐报工归属有效工时分配

This commit is contained in:
souplearn
2026-07-25 03:13:06 +08:00
parent e4dd01bc72
commit 63ea6fdcc5
3 changed files with 72 additions and 23 deletions
+2 -18
View File
@@ -1,6 +1,6 @@
from collections import defaultdict
from dataclasses import dataclass
from datetime import date, datetime, time, timedelta
from datetime import date, datetime, timedelta
from sqlalchemy import delete
from sqlalchemy.orm import Session
@@ -40,10 +40,6 @@ class ReportAllocationDraft:
reference_wage: float = 0
def _midnight(value: date) -> datetime:
return datetime.combine(value, time.min)
def _add_minutes(
rows: dict[date, dict[str, float]],
allocation_date: date,
@@ -55,18 +51,6 @@ def _add_minutes(
rows[allocation_date][bucket] += minutes
def _add_night_minutes(
rows: dict[date, dict[str, float]],
start_at: datetime,
end_at: datetime,
base_date: date,
) -> None:
midnight = _midnight(base_date + timedelta(days=1))
before_midnight = _overlap_minutes(start_at, end_at, _midnight(base_date), midnight)
after_midnight = _overlap_minutes(start_at, end_at, midnight, midnight + timedelta(days=1))
_add_minutes(rows, base_date, "night", before_midnight + after_midnight)
def _range_allocation_minutes(
start_at: datetime,
end_at: datetime,
@@ -107,7 +91,7 @@ def _range_allocation_minutes(
)
minutes = max(0.0, minutes_between(overlap_start, overlap_end) - meal_minutes)
if bucket == "night":
_add_night_minutes(rows, overlap_start, overlap_end, current_date)
_add_minutes(rows, current_date, "night", minutes)
else:
_add_minutes(rows, overlap_start.date(), bucket, minutes)