feat: implement client targets v2 (weekly/monthly periods, working days, pro-ration)
- Add PeriodType enum and working_days column to ClientTarget schema - Rename weekly_hours -> target_hours; remove Monday-only constraint - Add migration 20260224000000_client_targets_v2 - Rewrite computeBalance() to support weekly/monthly periods, per-spec pro-ration for first period, ongoing vs completed period logic, and elapsed working-day counting (§4–§6 of requirements doc) - Update Zod schemas and TypeScript input types for new fields - Frontend: replace WeekBalance with PeriodBalance; update ClientTargetWithBalance to currentPeriod* fields - ClientTargetPanel: period type radio, working-day toggles, free date picker, dynamic hours label - DashboardPage: rename widget to Targets, dynamic This week/This month label
This commit is contained in:
@@ -82,13 +82,17 @@ export interface StopTimerInput {
|
||||
|
||||
export interface CreateClientTargetInput {
|
||||
clientId: string;
|
||||
weeklyHours: number;
|
||||
startDate: string; // YYYY-MM-DD, always a Monday
|
||||
targetHours: number;
|
||||
periodType: 'weekly' | 'monthly';
|
||||
workingDays: string[]; // e.g. ["MON","WED","FRI"]
|
||||
startDate: string; // YYYY-MM-DD
|
||||
}
|
||||
|
||||
export interface UpdateClientTargetInput {
|
||||
weeklyHours?: number;
|
||||
startDate?: string; // YYYY-MM-DD, always a Monday
|
||||
targetHours?: number;
|
||||
periodType?: 'weekly' | 'monthly';
|
||||
workingDays?: string[];
|
||||
startDate?: string; // YYYY-MM-DD
|
||||
}
|
||||
|
||||
export interface CreateCorrectionInput {
|
||||
|
||||
Reference in New Issue
Block a user