Give the analytics overview a per-parent, per-year balance series
Each parent projection now carries one entry per calendar year from birth to the fourth birthday: vacation earned, carried in, planned, left, carried out and expiring under Semesterlagen's 20-day floor and 5-year carry-over, plus parental-leave days used and left at year end with the age-4 clamp applied in the birthday year. The overview sums them into per-year totals. Frontend types, mapper and fixtures follow. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XBRLomdLK9jF7wU7a8AA6H
This commit is contained in:
@@ -9,6 +9,7 @@ from app.dependencies import (
|
||||
ParentalLeaveRepositoryDep,
|
||||
PersonalDataRepositoryDep,
|
||||
PlannedLeaveRepositoryDep,
|
||||
VacationDaysRepositoryDep,
|
||||
WorkspaceIdDep,
|
||||
WorkspaceRepositoryDep,
|
||||
WorkspaceScopeDep,
|
||||
@@ -26,8 +27,11 @@ def _make_service(
|
||||
child_repo: ChildRepositoryDep,
|
||||
pd_repo: PersonalDataRepositoryDep,
|
||||
workspace_repo: WorkspaceRepositoryDep,
|
||||
vacation_repo: VacationDaysRepositoryDep,
|
||||
) -> AnalyticsService:
|
||||
return AnalyticsService(leave_repo, planned_repo, child_repo, pd_repo, workspace_repo)
|
||||
return AnalyticsService(
|
||||
leave_repo, planned_repo, child_repo, pd_repo, workspace_repo, vacation_repo
|
||||
)
|
||||
|
||||
|
||||
@router.get("/{workspace_id}/overview", response_model=WorkspaceOverviewResponse)
|
||||
@@ -39,8 +43,11 @@ async def get_overview(
|
||||
child_repo: ChildRepositoryDep,
|
||||
pd_repo: PersonalDataRepositoryDep,
|
||||
workspace_repo: WorkspaceRepositoryDep,
|
||||
vacation_repo: VacationDaysRepositoryDep,
|
||||
) -> WorkspaceOverviewResponse:
|
||||
service = _make_service(leave_repo, planned_repo, child_repo, pd_repo, workspace_repo)
|
||||
service = _make_service(
|
||||
leave_repo, planned_repo, child_repo, pd_repo, workspace_repo, vacation_repo
|
||||
)
|
||||
try:
|
||||
overview = await service.get_overview(workspace_id, child_id)
|
||||
except NotFoundError as exc:
|
||||
@@ -57,8 +64,11 @@ async def get_projection(
|
||||
child_repo: ChildRepositoryDep,
|
||||
pd_repo: PersonalDataRepositoryDep,
|
||||
workspace_repo: WorkspaceRepositoryDep,
|
||||
vacation_repo: VacationDaysRepositoryDep,
|
||||
) -> WorkspaceOverviewResponse:
|
||||
service = _make_service(leave_repo, planned_repo, child_repo, pd_repo, workspace_repo)
|
||||
service = _make_service(
|
||||
leave_repo, planned_repo, child_repo, pd_repo, workspace_repo, vacation_repo
|
||||
)
|
||||
try:
|
||||
overview = await service.get_overview(workspace_id, child_id)
|
||||
except NotFoundError as exc:
|
||||
@@ -77,11 +87,14 @@ async def get_age4_projection(
|
||||
child_repo: ChildRepositoryDep,
|
||||
pd_repo: PersonalDataRepositoryDep,
|
||||
workspace_repo: WorkspaceRepositoryDep,
|
||||
vacation_repo: VacationDaysRepositoryDep,
|
||||
scope: WorkspaceScopeDep,
|
||||
) -> Age4ProjectionResponse:
|
||||
await scope.check_member(personal_data_uuid)
|
||||
await scope.check_child(child_id)
|
||||
service = _make_service(leave_repo, planned_repo, child_repo, pd_repo, workspace_repo)
|
||||
service = _make_service(
|
||||
leave_repo, planned_repo, child_repo, pd_repo, workspace_repo, vacation_repo
|
||||
)
|
||||
try:
|
||||
proj = await service.get_days_left_at_age_4(
|
||||
personal_data_uuid, child_id, workspace_id=scope.workspace_id
|
||||
|
||||
Reference in New Issue
Block a user