@feedmepos/mf-hrm-portal 2.3.0-dev.3 → 2.3.0-dev.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ApprovalCodeList-SjyWZghY.js → ApprovalCodeList-CaDmeGvQ.js} +7 -7
- package/dist/{AuditLogList-aTI3QeO0.js → AuditLogList-hnICcJxN.js} +18 -19
- package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang--JTV7non.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-CM3AAsUP.js} +2 -2
- package/dist/{EmployeeList-D2Q_2ZE0.js → EmployeeList-DjfBIMQV.js} +255 -266
- package/dist/{FormItem.vue_vue_type_script_setup_true_lang-CUnlKsxk.js → FormItem.vue_vue_type_script_setup_true_lang-CTGlmY6t.js} +6 -6
- package/dist/{GrantUserList-6YXLPuHR.js → GrantUserList-DH1HXfV4.js} +8 -8
- package/dist/{Main-dSqOeBRJ.js → Main-1GboTunP.js} +11 -11
- package/dist/{Main-B-a6F9g8.js → Main-C4S5bpnK.js} +8 -8
- package/dist/{Main-CFIWlIaC.js → Main-D0o-aQHX.js} +5 -5
- package/dist/{PermissionSetList-DxkaPCMs.js → PermissionSetList-CSONq6qt.js} +19 -18
- package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-fU3Feetb.js +4167 -0
- package/dist/{PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-fe-Rdwn4.js → PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-DQcgZ0nF.js} +1 -1
- package/dist/ResponsiveContextMenu.vue_vue_type_script_setup_true_lang-mSJFKo7r.js +132 -0
- package/dist/{RoleList-DQZ_w5uM.js → RoleList-WdgayfhL.js} +21 -20
- package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-Bx1P_UAW.js +530 -0
- package/dist/ScheduleGeneralPage-XUX2-_Vc.js +776 -0
- package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-CECio4Kc.js +2457 -0
- package/dist/SchedulePage-LQ7-8VUw.js +19366 -0
- package/dist/{SchedulePositionPage-BGrZBU3g.js → SchedulePositionPage-DcUbTYV6.js} +79 -81
- package/dist/{SelectFilter-CG13h83-.js → SelectFilter-BbkPuYP_.js} +1 -1
- package/dist/{TeamMemberList-BiTHVJwE.js → TeamMemberList-BMdMDYBF.js} +27 -27
- package/dist/{TimesheetList-CUkYacGW.js → TimesheetList-B6vZEmgb.js} +52 -53
- package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-B1Y587O-.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-Bna8vHO7.js} +3 -3
- package/dist/{app-CAKCDrbJ.js → app-DwBKX4e9.js} +2891 -2474
- package/dist/app.js +1 -1
- package/dist/{approval-code-C9DmR4Md.js → approval-code-BXUiojPH.js} +1 -1
- package/dist/{dayjs.min-CZ8QYRoc.js → dayjs.min-DAKzxOMD.js} +1 -1
- package/dist/{employee-D56eWEFe.js → employee-GhYyAhwS.js} +51 -47
- package/dist/{grant-user-Bv-pJ9Wt.js → grant-user-CBJ3gEgW.js} +1 -1
- package/dist/{iteration-BVJdyLNq.js → iteration-Da8377p8.js} +1 -1
- package/dist/{lodash-BcIRkQPW.js → lodash-DChu1GU2.js} +1 -1
- package/dist/object-Dwyg2LgX.js +16 -0
- package/dist/{restaurant-D7PEQjPY.js → restaurant-D2mfKHaH.js} +48 -48
- package/dist/{role-B-eZDaBX.js → role-CyynUSdG.js} +2 -2
- package/dist/{rule-D6AIfx8b.js → rule-Cnn7MV1z.js} +3 -3
- package/dist/src/api/employee/index.d.ts +2 -2
- package/dist/src/api/schedule/index.d.ts +17 -2
- package/dist/src/components/layout/SchedulePromoBanner.vue.d.ts +2 -0
- package/dist/src/composables/useDiscardConfirm.d.ts +3 -1
- package/dist/src/composables/useMessage.d.ts +8 -2
- package/dist/src/stores/employee.d.ts +12 -12
- package/dist/src/types/schedule.d.ts +3 -4
- package/dist/src/views/audit-log/locales/index.d.ts +252 -0
- package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +4 -8
- package/dist/src/views/scheduling/components/{ScheduleAssignEmployeePopover.vue.d.ts → ScheduleAutoScheduleDetailsModal.vue.d.ts} +2 -2
- package/dist/src/views/scheduling/components/ScheduleAutoScheduleDoneArt.vue.d.ts +2 -0
- package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +1 -4
- package/dist/src/views/scheduling/components/ScheduleBoardEditOverlays.vue.d.ts +0 -2
- package/dist/src/views/scheduling/components/ScheduleBoardEmployeeRows.vue.d.ts +0 -7
- package/dist/src/views/scheduling/components/ScheduleBoardGridHeader.vue.d.ts +5 -0
- package/dist/src/views/scheduling/components/ScheduleBoardInteractionOverlays.vue.d.ts +2 -6
- package/dist/src/views/scheduling/components/ScheduleBoardOnboardingOverlays.vue.d.ts +1 -0
- package/dist/src/views/scheduling/components/ScheduleBoardToolbar.vue.d.ts +0 -1
- package/dist/src/views/scheduling/components/ScheduleCompletionDialog.vue.d.ts +1 -1
- package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +4 -1
- package/dist/src/views/scheduling/components/ScheduleContextMenu.vue.d.ts +1 -5
- package/dist/src/views/scheduling/components/ScheduleDayTimeline.vue.d.ts +5 -0
- package/dist/src/views/scheduling/components/ScheduleLoadState.vue.d.ts +0 -1
- package/dist/src/views/scheduling/components/ScheduleOnboardingAssignPositionModal.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingSettings.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/SchedulePublishShareArt.vue.d.ts +2 -0
- package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +10 -0
- package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +1 -1
- package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +0 -10
- package/dist/src/views/scheduling/composables/auto-schedule-mapping.d.ts +33 -0
- package/dist/src/views/scheduling/composables/onboarding-types.d.ts +2 -1
- package/dist/src/views/scheduling/composables/remyPrompt.d.ts +15 -0
- package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +12 -8
- package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +4 -0
- package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +1 -3
- package/dist/src/views/scheduling/composables/schedule-demand-domain.d.ts +13 -1
- package/dist/src/views/scheduling/composables/schedule-error.d.ts +1 -0
- package/dist/src/views/scheduling/composables/schedule-quick-pick.d.ts +22 -0
- package/dist/src/views/scheduling/composables/schedule-shift-time.d.ts +3 -0
- package/dist/src/views/scheduling/composables/useRemyAppStore.d.ts +16 -0
- package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +46 -11
- package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +3 -11
- package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +0 -13
- package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +2 -9
- package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +126 -4
- package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +86 -11
- package/dist/src/views/scheduling/composables/useScheduleCopyWeek.d.ts +3 -10
- package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +13 -1
- package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +0 -1
- package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +16 -5
- package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +3 -5
- package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +14 -3
- package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +1 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +20 -7
- package/dist/src/views/scheduling/composables/useScheduleEmployeeAvailability.d.ts +1 -1
- package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +26 -3
- package/dist/src/views/scheduling/composables/useScheduleEmployeePersistence.d.ts +7 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +2 -2
- package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +2 -0
- package/dist/src/views/scheduling/composables/useScheduleOnboardingDemand.d.ts +1 -1
- package/dist/src/views/scheduling/composables/useScheduleOnboardingEmployees.d.ts +48 -4
- package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +425 -29
- package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +11 -8
- package/dist/src/views/scheduling/composables/useSchedulePageActions.d.ts +1 -1
- package/dist/src/views/scheduling/composables/useSchedulePageCellDrop.d.ts +3 -1
- package/dist/src/views/scheduling/composables/useSchedulePageClearActions.d.ts +1 -0
- package/dist/src/views/scheduling/composables/useSchedulePageOverlays.d.ts +0 -4
- package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +1 -0
- package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +7 -1
- package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +3 -0
- package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +70 -4
- package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +7 -2
- package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +2 -2
- package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +41 -3
- package/dist/src/views/scheduling/composables/useScheduleShiftDraft.d.ts +1 -0
- package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +47 -6
- package/dist/src/views/scheduling/country-rules/index.d.ts +9 -4
- package/dist/src/views/scheduling/data.d.ts +22 -1
- package/dist/src/views/scheduling/locales/index.d.ts +28 -0
- package/dist/src/views/scheduling/schedule-state.d.ts +362 -298
- package/dist/src/views/scheduling/schedule-store.d.ts +41 -12
- package/dist/src/views/scheduling/types.d.ts +33 -5
- package/dist/style.css +1 -1
- package/dist/tsconfig.app.tsbuildinfo +1 -1
- package/dist/{useAppStore-d_nHyK5u.js → useAppStore-DZCdxlCd.js} +1 -1
- package/dist/useDiscardConfirm-CzZSPyvh.js +28 -0
- package/dist/{useLoading-JFoghhRz.js → useLoading-Nygx2zn8.js} +1 -1
- package/dist/{useReportPermissions-DHA0jrIr.js → useReportPermissions-B3OMJ4QX.js} +3 -3
- package/package.json +3 -2
- package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DnKckKZ0.js +0 -4167
- package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-Dr6QruG6.js +0 -470
- package/dist/ScheduleGeneralPage-CvskrXcV.js +0 -666
- package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-C4On5sVD.js +0 -2157
- package/dist/SchedulePage-CW-K836l.js +0 -18248
- package/dist/_plugin-vue_export-helper-CHgC5LLL.js +0 -9
- package/dist/src/views/scheduling/components/ScheduleAllShiftsRow.vue.d.ts +0 -22
- package/dist/src/views/scheduling/components/ScheduleStackPopover.vue.d.ts +0 -14
- package/dist/src/views/scheduling/composables/scheduleAutoSolver.d.ts +0 -23
- package/dist/src/views/scheduling/composables/useScheduleAllShiftsRow.d.ts +0 -77
- package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +0 -124
- package/dist/src/views/scheduling/composables/useScheduleOpenShiftCard.d.ts +0 -23
- package/dist/useDiscardConfirm-DPhEV6v0.js +0 -157
|
@@ -13,8 +13,9 @@ export interface ScheduleAutoScheduleOptions {
|
|
|
13
13
|
followPatterns: boolean;
|
|
14
14
|
costEfficient: boolean;
|
|
15
15
|
}
|
|
16
|
-
/** Backend-powered draft generation and local proposal review
|
|
17
|
-
*
|
|
16
|
+
/** Backend-powered draft generation and local proposal review — the engine lives in hr-backend;
|
|
17
|
+
* this composable only maps its result onto the board and lets a manager review it. Generation
|
|
18
|
+
* never writes; accepted proposals use the board's existing assignment persistence path. */
|
|
18
19
|
export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand: ScheduleDemandApi): {
|
|
19
20
|
wizardOpen: import("vue").Ref<boolean, boolean>;
|
|
20
21
|
step: import("vue").Ref<ScheduleAutoScheduleStep, ScheduleAutoScheduleStep>;
|
|
@@ -29,14 +30,36 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
29
30
|
generating: import("vue").Ref<boolean, boolean>;
|
|
30
31
|
generateError: import("vue").Ref<string | null, string | null>;
|
|
31
32
|
result: import("vue").Ref<{
|
|
33
|
+
objective: "BALANCED" | "SERVICE" | "LOWER_COST" | "STABLE_HOURS";
|
|
34
|
+
allowOvertime: boolean;
|
|
35
|
+
model: string | null;
|
|
32
36
|
proposals: {
|
|
37
|
+
rejectReason?: string | null | undefined | undefined;
|
|
33
38
|
date: string;
|
|
34
39
|
startTime: string;
|
|
35
40
|
endTime: string;
|
|
36
41
|
employeeId: string;
|
|
42
|
+
positionId: string | null;
|
|
43
|
+
employeeName: string;
|
|
37
44
|
position: string;
|
|
45
|
+
reason: string;
|
|
38
46
|
}[];
|
|
39
47
|
unfilledCount: number;
|
|
48
|
+
unfilledNeeds: {
|
|
49
|
+
date: string;
|
|
50
|
+
startTime: string;
|
|
51
|
+
endTime: string;
|
|
52
|
+
position: string | null;
|
|
53
|
+
short: number;
|
|
54
|
+
excluded: {
|
|
55
|
+
occupied: number;
|
|
56
|
+
notQualified: number;
|
|
57
|
+
weeklyCap: number;
|
|
58
|
+
dailyCap: number;
|
|
59
|
+
rest: number;
|
|
60
|
+
dayOff: number;
|
|
61
|
+
};
|
|
62
|
+
}[];
|
|
40
63
|
metrics: {
|
|
41
64
|
minimumCoveragePercent: number;
|
|
42
65
|
recommendedCoveragePercent: number;
|
|
@@ -64,15 +87,45 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
64
87
|
};
|
|
65
88
|
explanations: string[];
|
|
66
89
|
solver: string;
|
|
90
|
+
week: {
|
|
91
|
+
from: string;
|
|
92
|
+
to: string;
|
|
93
|
+
};
|
|
94
|
+
timing: {
|
|
95
|
+
totalMs: number;
|
|
96
|
+
modelMs: number | null;
|
|
97
|
+
};
|
|
67
98
|
} | null, {
|
|
99
|
+
objective: "BALANCED" | "SERVICE" | "LOWER_COST" | "STABLE_HOURS";
|
|
100
|
+
allowOvertime: boolean;
|
|
101
|
+
model: string | null;
|
|
68
102
|
proposals: {
|
|
103
|
+
rejectReason?: string | null | undefined;
|
|
69
104
|
date: string;
|
|
70
105
|
startTime: string;
|
|
71
106
|
endTime: string;
|
|
72
107
|
employeeId: string;
|
|
108
|
+
positionId: string | null;
|
|
109
|
+
employeeName: string;
|
|
73
110
|
position: string;
|
|
111
|
+
reason: string;
|
|
74
112
|
}[];
|
|
75
113
|
unfilledCount: number;
|
|
114
|
+
unfilledNeeds: {
|
|
115
|
+
date: string;
|
|
116
|
+
startTime: string;
|
|
117
|
+
endTime: string;
|
|
118
|
+
position: string | null;
|
|
119
|
+
short: number;
|
|
120
|
+
excluded: {
|
|
121
|
+
occupied: number;
|
|
122
|
+
notQualified: number;
|
|
123
|
+
weeklyCap: number;
|
|
124
|
+
dailyCap: number;
|
|
125
|
+
rest: number;
|
|
126
|
+
dayOff: number;
|
|
127
|
+
};
|
|
128
|
+
}[];
|
|
76
129
|
metrics: {
|
|
77
130
|
minimumCoveragePercent: number;
|
|
78
131
|
recommendedCoveragePercent: number;
|
|
@@ -100,15 +153,45 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
100
153
|
};
|
|
101
154
|
explanations: string[];
|
|
102
155
|
solver: string;
|
|
156
|
+
week: {
|
|
157
|
+
from: string;
|
|
158
|
+
to: string;
|
|
159
|
+
};
|
|
160
|
+
timing: {
|
|
161
|
+
totalMs: number;
|
|
162
|
+
modelMs: number | null;
|
|
163
|
+
};
|
|
103
164
|
} | {
|
|
165
|
+
objective: "BALANCED" | "SERVICE" | "LOWER_COST" | "STABLE_HOURS";
|
|
166
|
+
allowOvertime: boolean;
|
|
167
|
+
model: string | null;
|
|
104
168
|
proposals: {
|
|
169
|
+
rejectReason?: string | null | undefined | undefined;
|
|
105
170
|
date: string;
|
|
106
171
|
startTime: string;
|
|
107
172
|
endTime: string;
|
|
108
173
|
employeeId: string;
|
|
174
|
+
positionId: string | null;
|
|
175
|
+
employeeName: string;
|
|
109
176
|
position: string;
|
|
177
|
+
reason: string;
|
|
110
178
|
}[];
|
|
111
179
|
unfilledCount: number;
|
|
180
|
+
unfilledNeeds: {
|
|
181
|
+
date: string;
|
|
182
|
+
startTime: string;
|
|
183
|
+
endTime: string;
|
|
184
|
+
position: string | null;
|
|
185
|
+
short: number;
|
|
186
|
+
excluded: {
|
|
187
|
+
occupied: number;
|
|
188
|
+
notQualified: number;
|
|
189
|
+
weeklyCap: number;
|
|
190
|
+
dailyCap: number;
|
|
191
|
+
rest: number;
|
|
192
|
+
dayOff: number;
|
|
193
|
+
};
|
|
194
|
+
}[];
|
|
112
195
|
metrics: {
|
|
113
196
|
minimumCoveragePercent: number;
|
|
114
197
|
recommendedCoveragePercent: number;
|
|
@@ -136,17 +219,26 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
136
219
|
};
|
|
137
220
|
explanations: string[];
|
|
138
221
|
solver: string;
|
|
222
|
+
week: {
|
|
223
|
+
from: string;
|
|
224
|
+
to: string;
|
|
225
|
+
};
|
|
226
|
+
timing: {
|
|
227
|
+
totalMs: number;
|
|
228
|
+
modelMs: number | null;
|
|
229
|
+
};
|
|
139
230
|
} | null>;
|
|
140
231
|
gapCount: import("vue").ComputedRef<number>;
|
|
141
232
|
hasDemand: import("vue").ComputedRef<boolean>;
|
|
142
233
|
noDemandOpen: import("vue").Ref<boolean, boolean>;
|
|
143
234
|
rangeLabel: import("vue").ComputedRef<string>;
|
|
144
|
-
openWizard: () => void;
|
|
235
|
+
openWizard: (fromSetup?: boolean) => void;
|
|
145
236
|
closeWizard: () => void;
|
|
146
237
|
next: () => void;
|
|
147
238
|
back: () => void;
|
|
148
239
|
generate: () => Promise<void>;
|
|
149
240
|
reviewMode: import("vue").ComputedRef<boolean>;
|
|
241
|
+
hasPendingChanges: import("vue").ComputedRef<boolean>;
|
|
150
242
|
proposals: import("vue").ComputedRef<{
|
|
151
243
|
id: number;
|
|
152
244
|
empId: number;
|
|
@@ -154,10 +246,12 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
154
246
|
start: string;
|
|
155
247
|
end: string;
|
|
156
248
|
role: string;
|
|
249
|
+
positionId?: string | null | undefined;
|
|
157
250
|
openId?: number | undefined;
|
|
158
251
|
status: "pending" | "rejected";
|
|
159
252
|
weekKey?: string | undefined;
|
|
160
253
|
reason?: string | undefined;
|
|
254
|
+
rejectReason?: string | undefined;
|
|
161
255
|
}[]>;
|
|
162
256
|
weekHasProposals: import("vue").ComputedRef<boolean>;
|
|
163
257
|
unmetCount: import("vue").Ref<number, number>;
|
|
@@ -174,6 +268,34 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
174
268
|
toggleReject: (id: number) => void;
|
|
175
269
|
rejectAll: () => void;
|
|
176
270
|
exitReview: () => void;
|
|
177
|
-
|
|
271
|
+
completionOpen: import("vue").Ref<boolean, boolean>;
|
|
272
|
+
completionCount: import("vue").Ref<number, number>;
|
|
273
|
+
completionPublished: import("vue").Ref<boolean, boolean>;
|
|
274
|
+
completionFromSetup: import("vue").Ref<boolean, boolean>;
|
|
275
|
+
closeCompletion: () => void;
|
|
276
|
+
leaveReviewOpen: import("vue").Ref<boolean, boolean>;
|
|
277
|
+
confirmLeaveReview: () => void;
|
|
278
|
+
cancelLeaveReview: () => void;
|
|
279
|
+
apply: (showCompletion?: boolean, status?: "DRAFT" | "PUBLISHED") => Promise<number | null>;
|
|
280
|
+
applying: import("vue").Ref<boolean, boolean>;
|
|
281
|
+
applyRejections: import("vue").Ref<{
|
|
282
|
+
employeeName: string;
|
|
283
|
+
day: string;
|
|
284
|
+
time: string;
|
|
285
|
+
message: string;
|
|
286
|
+
}[], {
|
|
287
|
+
employeeName: string;
|
|
288
|
+
day: string;
|
|
289
|
+
time: string;
|
|
290
|
+
message: string;
|
|
291
|
+
}[] | {
|
|
292
|
+
employeeName: string;
|
|
293
|
+
day: string;
|
|
294
|
+
time: string;
|
|
295
|
+
message: string;
|
|
296
|
+
}[]>;
|
|
297
|
+
applyError: import("vue").Ref<string | null, string | null>;
|
|
298
|
+
detailsOpen: import("vue").Ref<boolean, boolean>;
|
|
299
|
+
toggleDetails: () => void;
|
|
178
300
|
};
|
|
179
301
|
export type ScheduleAutoScheduleApi = ReturnType<typeof useScheduleAutoSchedule>;
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
import type { Employee, OpenShift, PendingChange, ScheduleStatusInfo, ScheduleVersion, ScheduleVersionSnapshot, Section, WorkSlot } from '../types';
|
|
2
2
|
import { RANGE_LEN } from './schedule-week-cache';
|
|
3
|
-
import { contractCapFor, isGenuineSplitGroup, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, positionKeyOf, workSlotsOf } from './schedule-board-helpers';
|
|
4
|
-
export { contractCapFor, isGenuineSplitGroup, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, positionKeyOf, workSlotsOf, };
|
|
3
|
+
import { contractCapFor, isGenuineSplitGroup, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, overlapsAnotherSlot, positionKeyOf, workSlotsOf } from './schedule-board-helpers';
|
|
4
|
+
export { contractCapFor, isGenuineSplitGroup, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, overlapsAnotherSlot, positionKeyOf, workSlotsOf, };
|
|
5
5
|
export { RANGE_LEN };
|
|
6
6
|
export type ScheduleGranularity = 'day' | 'week';
|
|
7
7
|
export declare function useScheduleBoard(handlers?: {
|
|
8
8
|
onPersistError?: (message: string) => void;
|
|
9
9
|
}): {
|
|
10
10
|
dayNote: (dayIdx: number) => import("../types").ScheduleDayNote | null;
|
|
11
|
-
setDayNote: (dayIdx: number, title: string, desc: string) => void;
|
|
11
|
+
setDayNote: (dayIdx: number, title: string, desc: string, isPublicHoliday?: boolean) => void;
|
|
12
12
|
clearDayNote: (dayIdx: number) => void;
|
|
13
13
|
isStandingClosedWeekday: (dayIdx: number) => boolean;
|
|
14
14
|
holidayName: (dayIdx: number) => string | null;
|
|
15
|
-
holidayIsAuto: (dayIdx: number) => boolean;
|
|
16
15
|
isPublicHoliday: (dayIdx: number) => boolean;
|
|
17
16
|
holidayRateApplies: (dayIdx: number) => boolean;
|
|
18
|
-
setHolidayNormal: (dayIdx: number, toNormal: boolean) => void;
|
|
19
17
|
setPublicHoliday: (dayIdx: number, on: boolean) => void;
|
|
20
18
|
otRateOn: (dayIdx: number) => number;
|
|
21
19
|
regularRateOn: (dayIdx: number) => number;
|
|
@@ -33,10 +31,12 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
33
31
|
contractHours?: number | undefined;
|
|
34
32
|
rate: number;
|
|
35
33
|
positions: string[];
|
|
34
|
+
archivedPositions?: string[] | undefined;
|
|
36
35
|
shifts: ({
|
|
37
36
|
start: string;
|
|
38
37
|
end: string;
|
|
39
38
|
role: string;
|
|
39
|
+
positionId?: string | undefined;
|
|
40
40
|
status: import("../types").ShiftStatus;
|
|
41
41
|
clock?: {
|
|
42
42
|
in: string | null;
|
|
@@ -85,6 +85,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
85
85
|
start: string;
|
|
86
86
|
end: string;
|
|
87
87
|
role: string;
|
|
88
|
+
positionId?: string | undefined;
|
|
88
89
|
status: import("../types").ShiftStatus;
|
|
89
90
|
clock?: {
|
|
90
91
|
in: string | null;
|
|
@@ -109,6 +110,28 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
109
110
|
updatedAt?: string | undefined;
|
|
110
111
|
splitGroupId?: string | undefined;
|
|
111
112
|
}[] | null)[];
|
|
113
|
+
timeOff?: ({
|
|
114
|
+
timeOff: "approved" | "pending";
|
|
115
|
+
requestId?: string | undefined;
|
|
116
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
117
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
118
|
+
reason: string;
|
|
119
|
+
half?: boolean | undefined;
|
|
120
|
+
halfPart?: "AM" | "PM" | undefined;
|
|
121
|
+
from?: string | undefined;
|
|
122
|
+
to?: string | undefined;
|
|
123
|
+
appliedOn?: string | undefined;
|
|
124
|
+
note?: string | undefined;
|
|
125
|
+
cert?: {
|
|
126
|
+
name: string;
|
|
127
|
+
size: string;
|
|
128
|
+
} | null | undefined;
|
|
129
|
+
bal?: {
|
|
130
|
+
type: string;
|
|
131
|
+
entitled: number;
|
|
132
|
+
used: number;
|
|
133
|
+
} | undefined;
|
|
134
|
+
} | null)[] | undefined;
|
|
112
135
|
remarks: {
|
|
113
136
|
author: string;
|
|
114
137
|
date: string;
|
|
@@ -123,9 +146,16 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
123
146
|
payBasis?: "hourly" | "monthly" | undefined;
|
|
124
147
|
payAmount?: number | undefined;
|
|
125
148
|
maxHours?: number | undefined;
|
|
126
|
-
maxOtHours?: number | undefined;
|
|
127
149
|
minHours?: number | undefined;
|
|
128
|
-
|
|
150
|
+
minHoursPerDay?: number | undefined;
|
|
151
|
+
workingHours?: {
|
|
152
|
+
minHoursPerDay: number | null;
|
|
153
|
+
maxHoursPerDay: number | null;
|
|
154
|
+
maxHoursPerWeek: number | null;
|
|
155
|
+
} | undefined;
|
|
156
|
+
overtime?: {
|
|
157
|
+
maxHoursPerMonth: number | null;
|
|
158
|
+
} | undefined;
|
|
129
159
|
preferences?: string[] | undefined;
|
|
130
160
|
seniority?: "senior" | "junior" | "" | undefined;
|
|
131
161
|
availDays?: boolean[] | undefined;
|
|
@@ -134,6 +164,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
134
164
|
to: string;
|
|
135
165
|
}[] | undefined;
|
|
136
166
|
passcode?: string | undefined;
|
|
167
|
+
code?: string | undefined;
|
|
137
168
|
masterUser?: boolean | undefined;
|
|
138
169
|
}[], Employee[] | {
|
|
139
170
|
id: number;
|
|
@@ -148,10 +179,12 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
148
179
|
contractHours?: number | undefined;
|
|
149
180
|
rate: number;
|
|
150
181
|
positions: string[];
|
|
182
|
+
archivedPositions?: string[] | undefined;
|
|
151
183
|
shifts: ({
|
|
152
184
|
start: string;
|
|
153
185
|
end: string;
|
|
154
186
|
role: string;
|
|
187
|
+
positionId?: string | undefined;
|
|
155
188
|
status: import("../types").ShiftStatus;
|
|
156
189
|
clock?: {
|
|
157
190
|
in: string | null;
|
|
@@ -200,6 +233,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
200
233
|
start: string;
|
|
201
234
|
end: string;
|
|
202
235
|
role: string;
|
|
236
|
+
positionId?: string | undefined;
|
|
203
237
|
status: import("../types").ShiftStatus;
|
|
204
238
|
clock?: {
|
|
205
239
|
in: string | null;
|
|
@@ -224,6 +258,28 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
224
258
|
updatedAt?: string | undefined;
|
|
225
259
|
splitGroupId?: string | undefined;
|
|
226
260
|
}[] | null)[];
|
|
261
|
+
timeOff?: ({
|
|
262
|
+
timeOff: "approved" | "pending";
|
|
263
|
+
requestId?: string | undefined;
|
|
264
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
265
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
266
|
+
reason: string;
|
|
267
|
+
half?: boolean | undefined;
|
|
268
|
+
halfPart?: "AM" | "PM" | undefined;
|
|
269
|
+
from?: string | undefined;
|
|
270
|
+
to?: string | undefined;
|
|
271
|
+
appliedOn?: string | undefined;
|
|
272
|
+
note?: string | undefined;
|
|
273
|
+
cert?: {
|
|
274
|
+
name: string;
|
|
275
|
+
size: string;
|
|
276
|
+
} | null | undefined;
|
|
277
|
+
bal?: {
|
|
278
|
+
type: string;
|
|
279
|
+
entitled: number;
|
|
280
|
+
used: number;
|
|
281
|
+
} | undefined;
|
|
282
|
+
} | null)[] | undefined;
|
|
227
283
|
remarks: {
|
|
228
284
|
author: string;
|
|
229
285
|
date: string;
|
|
@@ -238,9 +294,16 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
238
294
|
payBasis?: "hourly" | "monthly" | undefined;
|
|
239
295
|
payAmount?: number | undefined;
|
|
240
296
|
maxHours?: number | undefined;
|
|
241
|
-
maxOtHours?: number | undefined;
|
|
242
297
|
minHours?: number | undefined;
|
|
243
|
-
|
|
298
|
+
minHoursPerDay?: number | undefined;
|
|
299
|
+
workingHours?: {
|
|
300
|
+
minHoursPerDay: number | null;
|
|
301
|
+
maxHoursPerDay: number | null;
|
|
302
|
+
maxHoursPerWeek: number | null;
|
|
303
|
+
} | undefined;
|
|
304
|
+
overtime?: {
|
|
305
|
+
maxHoursPerMonth: number | null;
|
|
306
|
+
} | undefined;
|
|
244
307
|
preferences?: string[] | undefined;
|
|
245
308
|
seniority?: "senior" | "junior" | "" | undefined;
|
|
246
309
|
availDays?: boolean[] | undefined;
|
|
@@ -249,6 +312,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
249
312
|
to: string;
|
|
250
313
|
}[] | undefined;
|
|
251
314
|
passcode?: string | undefined;
|
|
315
|
+
code?: string | undefined;
|
|
252
316
|
masterUser?: boolean | undefined;
|
|
253
317
|
}[]>;
|
|
254
318
|
sections: import("vue").Ref<{
|
|
@@ -299,12 +363,14 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
299
363
|
dayIdx: number;
|
|
300
364
|
kind: "add" | "change" | "remove";
|
|
301
365
|
label: string;
|
|
366
|
+
conflict?: boolean | undefined;
|
|
302
367
|
}[], PendingChange[] | {
|
|
303
368
|
empId: number;
|
|
304
369
|
employeeKey: string;
|
|
305
370
|
dayIdx: number;
|
|
306
371
|
kind: "add" | "change" | "remove";
|
|
307
372
|
label: string;
|
|
373
|
+
conflict?: boolean | undefined;
|
|
308
374
|
}[]>;
|
|
309
375
|
unpublishedChanges: import("vue").ComputedRef<PendingChange[]>;
|
|
310
376
|
persistPublish: (items: Array<{
|
|
@@ -329,6 +395,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
329
395
|
start: string;
|
|
330
396
|
end: string;
|
|
331
397
|
role: string;
|
|
398
|
+
positionId?: string | undefined;
|
|
332
399
|
status: import("../types").ShiftStatus;
|
|
333
400
|
clock?: {
|
|
334
401
|
in: string | null;
|
|
@@ -377,6 +444,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
377
444
|
start: string;
|
|
378
445
|
end: string;
|
|
379
446
|
role: string;
|
|
447
|
+
positionId?: string | undefined;
|
|
380
448
|
status: import("../types").ShiftStatus;
|
|
381
449
|
clock?: {
|
|
382
450
|
in: string | null;
|
|
@@ -417,6 +485,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
417
485
|
start: string;
|
|
418
486
|
end: string;
|
|
419
487
|
role: string;
|
|
488
|
+
positionId?: string | undefined;
|
|
420
489
|
status: import("../types").ShiftStatus;
|
|
421
490
|
clock?: {
|
|
422
491
|
in: string | null;
|
|
@@ -465,6 +534,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
465
534
|
start: string;
|
|
466
535
|
end: string;
|
|
467
536
|
role: string;
|
|
537
|
+
positionId?: string | undefined;
|
|
468
538
|
status: import("../types").ShiftStatus;
|
|
469
539
|
clock?: {
|
|
470
540
|
in: string | null;
|
|
@@ -510,6 +580,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
510
580
|
rangeLabel: import("vue").ComputedRef<string>;
|
|
511
581
|
isToday: (dayIdx: number) => boolean;
|
|
512
582
|
dateKey: (dayIdx: number) => string | null;
|
|
583
|
+
dateKeyAt: (offset: number, dayIdx: number) => string | null;
|
|
513
584
|
navigate: (delta: number) => void;
|
|
514
585
|
goToday: () => void;
|
|
515
586
|
membersOf: (sectionId: string) => Employee[];
|
|
@@ -524,12 +595,16 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
524
595
|
clearEmployeeShifts: (empId: number) => {
|
|
525
596
|
shifts: number;
|
|
526
597
|
};
|
|
527
|
-
moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number) => boolean;
|
|
598
|
+
moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number, targetPosition?: string, allowLocked?: boolean) => boolean;
|
|
528
599
|
swapShifts: (empIdA: number, empIdB: number, dayA: number, dayB?: number, slotIndexA?: number, slotIndexB?: number, slotCountA?: number) => boolean;
|
|
529
|
-
|
|
600
|
+
swapPositions: (empIdA: number, empIdB: number, dayA: number, dayB?: number, slotIndexA?: number, slotIndexB?: number, slotCountA?: number) => boolean;
|
|
601
|
+
clearShiftsInRange: (options?: {
|
|
602
|
+
persist?: boolean;
|
|
603
|
+
}) => {
|
|
530
604
|
shifts: number;
|
|
531
605
|
open: number;
|
|
532
606
|
leave: number;
|
|
607
|
+
assignmentIds: string[];
|
|
533
608
|
};
|
|
534
609
|
requiredFor: (dayIdx: number, position: string) => number;
|
|
535
610
|
scheduledFor: (dayIdx: number, position: string) => number;
|
|
@@ -1,19 +1,12 @@
|
|
|
1
1
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
|
-
export interface ScheduleCopySkipReport {
|
|
3
|
-
leave: number;
|
|
4
|
-
already: number;
|
|
5
|
-
hours: number;
|
|
6
|
-
full: number;
|
|
7
|
-
closed: number;
|
|
8
|
-
}
|
|
9
2
|
/** The mockup's Copy schedule feature (copyLastWeek/copyThisWeekForward), ported against this
|
|
10
|
-
* board's per-week-offset bucket cache instead of the mockup's absolute 91-day horizon.
|
|
11
|
-
* shifts (copyUnitsOf in the mockup) aren't ported — WorkSlot has no splitId concept in this
|
|
12
|
-
* data model, so each slot is copied as its own unit. */
|
|
3
|
+
* board's per-week-offset bucket cache instead of the mockup's absolute 91-day horizon. */
|
|
13
4
|
export declare function useScheduleCopyWeek(board: ScheduleBoardApi, handlers?: {
|
|
14
5
|
onDemandChanged?: () => void;
|
|
6
|
+
onConfirmOverwrite?: (message: string, onConfirm: () => void) => void;
|
|
15
7
|
}): {
|
|
16
8
|
copyLastWeek: (mode: "staffed" | "open") => Promise<void>;
|
|
17
9
|
copyThisWeekForward: (mode: "staffed" | "open") => Promise<void>;
|
|
10
|
+
isCopying: import("vue").Ref<boolean, boolean>;
|
|
18
11
|
};
|
|
19
12
|
export type ScheduleCopyWeekApi = ReturnType<typeof useScheduleCopyWeek>;
|
|
@@ -27,8 +27,17 @@ export interface ScheduleOtRisk {
|
|
|
27
27
|
empId: number;
|
|
28
28
|
name: string;
|
|
29
29
|
hours: number;
|
|
30
|
+
otHours: number;
|
|
30
31
|
contract: number;
|
|
31
32
|
}
|
|
33
|
+
export interface ScheduleMonthlyOtSummary {
|
|
34
|
+
key: string;
|
|
35
|
+
label: string;
|
|
36
|
+
used: number;
|
|
37
|
+
cap: number | null;
|
|
38
|
+
progress: number;
|
|
39
|
+
high: boolean;
|
|
40
|
+
}
|
|
32
41
|
/** The staff rail consumes the same employee identity/load derivation as the area view. */
|
|
33
42
|
export type ScheduleRailRow = ScheduleEmployeeLoad;
|
|
34
43
|
/** Weekly labour cost + monthly OT gauge for the collapsible cost rail, built off one
|
|
@@ -41,7 +50,10 @@ export declare function useScheduleCostRail(board: ScheduleBoardApi, proposalAt?
|
|
|
41
50
|
weeklyCost: import("vue").ComputedRef<number>;
|
|
42
51
|
otHours: import("vue").ComputedRef<number>;
|
|
43
52
|
monthlyOtUsed: import("vue").ComputedRef<number>;
|
|
44
|
-
|
|
53
|
+
monthlyOtSummaries: import("vue").ComputedRef<ScheduleMonthlyOtSummary[]>;
|
|
54
|
+
monthlyOtCapHours: import("vue").ComputedRef<number | null>;
|
|
55
|
+
monthlyOtProgress: import("vue").ComputedRef<number>;
|
|
56
|
+
monthlyOtHigh: import("vue").ComputedRef<boolean>;
|
|
45
57
|
bySection: import("vue").ComputedRef<ScheduleSectionCost[]>;
|
|
46
58
|
otRisk: import("vue").ComputedRef<ScheduleOtRisk[]>;
|
|
47
59
|
};
|
|
@@ -33,7 +33,6 @@ export declare function useScheduleDayNote(board: ScheduleBoardApi, opts?: Sched
|
|
|
33
33
|
savedNote: import("vue").ComputedRef<import("../types").ScheduleDayNote | null>;
|
|
34
34
|
hasSaved: import("vue").ComputedRef<boolean>;
|
|
35
35
|
whenLabel: import("vue").ComputedRef<string>;
|
|
36
|
-
isAuto: import("vue").ComputedRef<boolean>;
|
|
37
36
|
rateApplies: import("vue").ComputedRef<boolean>;
|
|
38
37
|
holidayHint: import("vue").ComputedRef<string>;
|
|
39
38
|
openFor: (dayIdx: number, anchor: HTMLElement) => void;
|
|
@@ -2,14 +2,19 @@ import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
|
2
2
|
import type { ScheduleRosterApi } from './useScheduleRoster';
|
|
3
3
|
import type { ScheduleAreaBoardApi } from './useScheduleAreaBoard';
|
|
4
4
|
import type { ScheduleDemandApi } from './useScheduleDemand';
|
|
5
|
+
import { type ScheduleEmployeeLoad } from './useScheduleEmployeeIdentity';
|
|
5
6
|
declare function minToHHMM(m: number): string;
|
|
6
7
|
export interface ScheduleTimelineBar {
|
|
7
8
|
key: string;
|
|
9
|
+
start: number;
|
|
10
|
+
end: number;
|
|
8
11
|
left: number;
|
|
9
12
|
width: number;
|
|
10
13
|
cls: string;
|
|
11
14
|
label: string;
|
|
15
|
+
labels?: string[];
|
|
12
16
|
sub?: string;
|
|
17
|
+
conflict?: boolean;
|
|
13
18
|
title: string;
|
|
14
19
|
brk?: {
|
|
15
20
|
left: number;
|
|
@@ -17,6 +22,8 @@ export interface ScheduleTimelineBar {
|
|
|
17
22
|
};
|
|
18
23
|
laneTop?: number;
|
|
19
24
|
laneHeight?: number;
|
|
25
|
+
employeeId?: number;
|
|
26
|
+
slotIndex?: number;
|
|
20
27
|
onClick?: () => void;
|
|
21
28
|
}
|
|
22
29
|
export interface ScheduleTimelineRow {
|
|
@@ -27,6 +34,7 @@ export interface ScheduleTimelineRow {
|
|
|
27
34
|
avatarInitials?: string;
|
|
28
35
|
avatarColor?: string;
|
|
29
36
|
employeeId?: number;
|
|
37
|
+
employeeLoad?: ScheduleEmployeeLoad;
|
|
30
38
|
roleLabel?: string;
|
|
31
39
|
hoursLabel?: string;
|
|
32
40
|
hoursPct?: number;
|
|
@@ -34,9 +42,14 @@ export interface ScheduleTimelineRow {
|
|
|
34
42
|
name: string;
|
|
35
43
|
sub: string;
|
|
36
44
|
bars: ScheduleTimelineBar[];
|
|
45
|
+
pastDay?: boolean;
|
|
46
|
+
lockedDay?: boolean;
|
|
47
|
+
closedDay?: boolean;
|
|
48
|
+
availabilityDay?: boolean;
|
|
49
|
+
availabilityLabel?: string;
|
|
37
50
|
minHeight?: number;
|
|
38
51
|
emptyText?: string;
|
|
39
|
-
onTrackClick?: () => void;
|
|
52
|
+
onTrackClick?: (anchor: HTMLElement) => void;
|
|
40
53
|
}
|
|
41
54
|
export interface ScheduleHourCell {
|
|
42
55
|
m: number;
|
|
@@ -48,11 +61,10 @@ export interface ScheduleHourCell {
|
|
|
48
61
|
n: number;
|
|
49
62
|
}
|
|
50
63
|
export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster: ScheduleRosterApi, areaBoard: ScheduleAreaBoardApi, demand: ScheduleDemandApi, handlers: {
|
|
51
|
-
onAddShift: (empId: number, dayIdx: number) => void;
|
|
64
|
+
onAddShift: (empId: number, dayIdx: number, anchor: HTMLElement) => void;
|
|
65
|
+
onAddPositionShift: (dayIdx: number, position: string, anchor: HTMLElement) => void;
|
|
52
66
|
onEditShift: (empId: number, dayIdx: number) => void;
|
|
53
67
|
onEditLeave: (empId: number, dayIdx: number) => void;
|
|
54
|
-
onOpenAssign: (openId: number) => void;
|
|
55
|
-
onAddAreaShift: (dayIdx: number, position: string) => void;
|
|
56
68
|
onOpenDemand: (dayIdx: number) => void;
|
|
57
69
|
onOpenEmployeeMenu: (empId: number, anchor: HTMLElement) => void;
|
|
58
70
|
onDemandSegment: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => void;
|
|
@@ -68,7 +80,6 @@ export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster:
|
|
|
68
80
|
clock: string;
|
|
69
81
|
}[]>;
|
|
70
82
|
isOpenHour: (m: number) => boolean;
|
|
71
|
-
openShiftsRow: import("vue").ComputedRef<ScheduleTimelineRow | null>;
|
|
72
83
|
employeeRows: import("vue").ComputedRef<ScheduleTimelineRow[]>;
|
|
73
84
|
positionTimelineRows: import("vue").ComputedRef<ScheduleTimelineRow[]>;
|
|
74
85
|
demandRow: import("vue").ComputedRef<{
|
|
@@ -8,12 +8,10 @@ export type { ScheduleCoverageAxis } from './schedule-demand-domain';
|
|
|
8
8
|
*
|
|
9
9
|
* Storage follows this board's dayNotes rather than the mockup's flat `di` index: the mockup
|
|
10
10
|
* renders one long horizon so a day index identifies a date, but this board pages through
|
|
11
|
-
* weeks, and demand put on this Monday must not reappear on every other Monday.
|
|
12
|
-
*
|
|
11
|
+
* weeks, and demand put on this Monday must not reappear on every other Monday. Demand is
|
|
12
|
+
* therefore keyed by explicit ISO date.
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
* needs eight" is a standing statement, and "this Tuesday is different" has to be able to
|
|
16
|
-
* override it without rewriting the rule. */
|
|
14
|
+
* The weekday fallback remains only as a defensive read path until legacy records are removed. */
|
|
17
15
|
export declare function useScheduleDemand(board: ScheduleBoardApi): {
|
|
18
16
|
byDate: Record<string, DemandPeriod[]>;
|
|
19
17
|
byWeekday: Record<number, DemandPeriod[]>;
|