v2.13.1: 일일보고 시간연차 분 단위 표시
Fixed: - 30분 연차(0.0625일)가 int(days * 8) 절삭으로 "0시간"으로 표시되어 보고서 수신자가 사용 내역을 알 수 없던 문제. 분 단위까지 표시. - 보고서만 1일=8시간으로 하드코딩되어 단축근무(7h30m) 사용자의 반차가 4시간으로 표시되던 오류. DB 정본(days * work_minutes) 기준으로 통일. Added: - utils.time_format.format_leave_amount(days, work_minutes) 공용 헬퍼 + 자체 검사 9건 (python utils/time_format.py) - i18n 키 report.leave_used_days_time (ko/en) 테스트: 유닛 200 / 통합 53 / GUI 8 / i18n 5 통과. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
f28f0619a4
commit
21a01df97a
@@ -31,3 +31,40 @@ def format_hours_minutes(total_minutes: int, *, omit_zero_minutes: bool = False)
|
||||
if m == 0:
|
||||
return f"{h}시간"
|
||||
return f"{h}시간 {m}분"
|
||||
|
||||
|
||||
def format_leave_amount(days: float, work_minutes: int) -> tuple:
|
||||
"""연차 일수를 (완전한 일수, 나머지 분)으로 분해.
|
||||
|
||||
`int(days * 8)`로 시간만 뽑던 표시가 30분 연차(0.0625일)를 "0시간"으로
|
||||
삼켜버리던 문제를 막는다. 환산 기준은 DB 정본과 동일한 work_minutes
|
||||
(`Database.get_leave_minutes_for`가 `days * get_work_minutes()`를 쓴다) —
|
||||
단축근무 7h30m 사용자의 반차는 4시간이 아니라 3시간 45분이다.
|
||||
|
||||
Args:
|
||||
days: 연차 일수 (1.0 / 0.5 / 0.25 / 0.0625 …)
|
||||
work_minutes: 1일 근무 분 (기본 480)
|
||||
|
||||
Returns:
|
||||
(일수, 나머지 분) — 예: 480분 기준 1.5일 → (1, 240), 0.0625일 → (0, 30)
|
||||
"""
|
||||
unit = int(work_minutes) if work_minutes and work_minutes > 0 else 480
|
||||
total_minutes = int(round(float(days) * unit))
|
||||
return divmod(total_minutes, unit)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# 표준 8시간(480분) 기준
|
||||
assert format_leave_amount(0.0625, 480) == (0, 30), '30분 연차'
|
||||
assert format_leave_amount(0.125, 480) == (0, 60), '1시간 연차'
|
||||
assert format_leave_amount(0.25, 480) == (0, 120), '반반차'
|
||||
assert format_leave_amount(0.5, 480) == (0, 240), '반차'
|
||||
assert format_leave_amount(1.0, 480) == (1, 0), '종일'
|
||||
assert format_leave_amount(1.5, 480) == (1, 240), '1.5일'
|
||||
# 단축근무 7h30m(450분) — 반차는 3시간 45분
|
||||
assert format_leave_amount(0.5, 450) == (0, 225), '단축근무 반차'
|
||||
assert format_leave_amount(1.0, 450) == (1, 0), '단축근무 종일'
|
||||
# work_minutes 이상값은 480으로 폴백
|
||||
assert format_leave_amount(0.5, 0) == (0, 240), '0 폴백'
|
||||
assert format_hours_minutes(30, omit_zero_minutes=True) == '30분'
|
||||
print('format_leave_amount 자체 검사 통과')
|
||||
|
||||
Reference in New Issue
Block a user