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
+18
-24
@@ -34,7 +34,7 @@ from ui.settings_view import SettingsView
|
||||
from ui.break_view import BreakView
|
||||
from core.notifier import Notifier
|
||||
from utils.system_tray import SystemTrayIcon
|
||||
from utils.time_format import format_hours_minutes
|
||||
from utils.time_format import format_hours_minutes, format_leave_amount
|
||||
from ui.styles import get_theme, ThemeColors, apply_dark_titlebar
|
||||
from utils.debug_log import dlog
|
||||
|
||||
@@ -2265,6 +2265,21 @@ class MainWindow(QMainWindow):
|
||||
if self.is_clocked_in and self.clock_in_time:
|
||||
self.update_display()
|
||||
|
||||
def _format_leave_used(self, days: float) -> str:
|
||||
"""연차 사용량을 '30분' / '3시간 45분' / '1일 4시간' 형태로.
|
||||
|
||||
기존에는 `int(days * 8)`로 시간만 뽑아 30분 연차(0.0625일)가 "0시간"으로
|
||||
표시됐다. 환산 기준도 DB 정본(`days * work_minutes`)에 맞춰 단축근무
|
||||
사용자의 반차가 4시간으로 뻥튀기되지 않게 한다.
|
||||
"""
|
||||
d, rem = format_leave_amount(days, self.db.get_work_minutes())
|
||||
if d and rem:
|
||||
return tr('report.leave_used_days_time', days=d,
|
||||
time=format_hours_minutes(rem, omit_zero_minutes=True))
|
||||
if d:
|
||||
return tr('report.leave_used_days', days=d)
|
||||
return format_hours_minutes(rem, omit_zero_minutes=True)
|
||||
|
||||
def _append_meal_section(self, report_lines, today: str, label: str,
|
||||
flag: bool, records: list, default_min: int) -> None:
|
||||
"""일일 보고서의 점심/저녁 섹션 출력.
|
||||
@@ -2458,16 +2473,7 @@ class MainWindow(QMainWindow):
|
||||
if filtered_leave_records:
|
||||
total_leave_days = sum(r['days'] for r in filtered_leave_records)
|
||||
|
||||
if total_leave_days >= 1:
|
||||
days = int(total_leave_days)
|
||||
hours = int((total_leave_days - days) * 8)
|
||||
if hours > 0:
|
||||
value = tr('report.leave_used_days_hours', days=days, hours=hours)
|
||||
else:
|
||||
value = tr('report.leave_used_days', days=days)
|
||||
else:
|
||||
hours = int(total_leave_days * 8)
|
||||
value = tr('report.leave_used_hours', hours=hours)
|
||||
value = self._format_leave_used(total_leave_days)
|
||||
report_lines.append(tr('report.leave_used', value=value))
|
||||
|
||||
for lr in filtered_leave_records:
|
||||
@@ -2483,19 +2489,7 @@ class MainWindow(QMainWindow):
|
||||
'반반차': tr('leave.type.quarter')
|
||||
}.get(lr.get('leave_type', ''), lr.get('leave_type', tr('leave.type.annual')))
|
||||
|
||||
days_used = lr['days']
|
||||
|
||||
# 일수를 시간으로 표시
|
||||
if days_used >= 1:
|
||||
d = int(days_used)
|
||||
h = int((days_used - d) * 8)
|
||||
if h > 0:
|
||||
time_str = tr('report.leave_used_days_hours', days=d, hours=h)
|
||||
else:
|
||||
time_str = tr('report.leave_used_days', days=d)
|
||||
else:
|
||||
h = int(days_used * 8)
|
||||
time_str = tr('report.leave_used_hours', hours=h)
|
||||
time_str = self._format_leave_used(lr['days'])
|
||||
|
||||
memo = f" - {lr['memo']}" if lr.get('memo') else ""
|
||||
report_lines.append(f" - {leave_type_name}: {time_str}{memo}")
|
||||
|
||||
Reference in New Issue
Block a user