@feedmepos/mf-hrm-portal 2.3.0-dev → 2.3.0-dev.3
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-cG0zmQVJ.js → ApprovalCodeList-SjyWZghY.js} +2 -2
- package/dist/{AuditLogList-BTifJhO1.js → AuditLogList-aTI3QeO0.js} +3 -3
- package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-qr5TwLTK.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang--JTV7non.js} +2 -2
- package/dist/{EmployeeList-DzcMtxJ3.js → EmployeeList-D2Q_2ZE0.js} +4 -4
- package/dist/{GrantUserList-D5b7tJ8Y.js → GrantUserList-6YXLPuHR.js} +3 -3
- package/dist/{Main-DFwdAWqn.js → Main-B-a6F9g8.js} +5 -5
- package/dist/{Main-B2r59IOW.js → Main-CFIWlIaC.js} +2 -2
- package/dist/{Main-DkLBemi7.js → Main-dSqOeBRJ.js} +9 -9
- package/dist/{PermissionSetList-B80hrfMW.js → PermissionSetList-DxkaPCMs.js} +5 -5
- package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DjNcJQM9.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DnKckKZ0.js} +1165 -1165
- package/dist/{RoleList-DHO4JRKF.js → RoleList-DQZ_w5uM.js} +7 -7
- package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-Dr6QruG6.js +470 -0
- package/dist/{ScheduleGeneralPage-WlBM8bxV.js → ScheduleGeneralPage-CvskrXcV.js} +273 -236
- package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-C4On5sVD.js +2157 -0
- package/dist/SchedulePage-CW-K836l.js +18248 -0
- package/dist/{SchedulePositionPage-C0hrO11d.js → SchedulePositionPage-BGrZBU3g.js} +67 -66
- package/dist/{TeamMemberList-CgFWLRBM.js → TeamMemberList-BiTHVJwE.js} +6 -6
- package/dist/{TimesheetList-Dp40G-0I.js → TimesheetList-CUkYacGW.js} +5 -5
- package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-BFjrMhUG.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-B1Y587O-.js} +2 -2
- package/dist/{app-CmBSTvaI.js → app-CAKCDrbJ.js} +657 -577
- package/dist/app.js +1 -1
- package/dist/{dayjs.min-CfL2DQ3d.js → dayjs.min-CZ8QYRoc.js} +1 -1
- package/dist/{employee-DQcHjoij.js → employee-D56eWEFe.js} +28 -27
- package/dist/{iteration-BlavheWG.js → iteration-BVJdyLNq.js} +1 -1
- package/dist/{lodash-QerqayrJ.js → lodash-BcIRkQPW.js} +1 -1
- package/dist/{role-RM2YLO7n.js → role-B-eZDaBX.js} +1 -1
- package/dist/{rule-DjlvYIuP.js → rule-D6AIfx8b.js} +2 -2
- package/dist/src/api/schedule/index.d.ts +6 -4
- package/dist/src/components/layout/withScheduleShell.d.ts +10 -0
- package/dist/src/composables/useMessage.d.ts +2 -8
- package/dist/src/types/employee.d.ts +1 -0
- package/dist/src/types/schedule.d.ts +1 -1
- package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +28 -0
- package/dist/src/views/scheduling/components/ScheduleBoardEditOverlays.vue.d.ts +19 -0
- package/dist/src/views/scheduling/components/ScheduleBoardEmployeeRows.vue.d.ts +38 -0
- package/dist/src/views/scheduling/components/ScheduleBoardGridHeader.vue.d.ts +24 -0
- package/dist/src/views/scheduling/components/ScheduleBoardInteractionOverlays.vue.d.ts +38 -0
- package/dist/src/views/scheduling/components/ScheduleBoardOnboardingOverlays.vue.d.ts +25 -0
- package/dist/src/views/scheduling/components/ScheduleBoardRails.vue.d.ts +17 -0
- package/dist/src/views/scheduling/components/ScheduleBoardToolbar.vue.d.ts +39 -0
- package/dist/src/views/scheduling/components/ScheduleBoardUtilityOverlays.vue.d.ts +22 -0
- package/dist/src/views/scheduling/components/{ScheduleOnboardingComplete.vue.d.ts → ScheduleCompletionDialog.vue.d.ts} +8 -3
- package/dist/src/views/scheduling/components/{ScheduleOpenShiftCardMenu.vue.d.ts → ScheduleContextMenu.vue.d.ts} +10 -3
- package/dist/src/views/scheduling/components/{SchedulePdfPreview.vue.d.ts → ScheduleExportPreview.vue.d.ts} +1 -0
- package/dist/src/views/scheduling/components/ScheduleLoadState.vue.d.ts +10 -0
- package/dist/src/views/scheduling/components/ScheduleModal.vue.d.ts +26 -0
- package/dist/src/views/scheduling/components/{ScheduleExportDoneDialog.vue.d.ts → ScheduleOnboardingClosedDayConfirm.vue.d.ts} +2 -2
- package/dist/src/views/scheduling/components/{ScheduleAutoScheduleDetailsModal.vue.d.ts → ScheduleOnboardingDemandDays.vue.d.ts} +2 -2
- package/dist/src/views/scheduling/components/{ScheduleEmployeeMenu.vue.d.ts → ScheduleOnboardingDemandFooter.vue.d.ts} +2 -2
- package/dist/src/views/scheduling/components/ScheduleOnboardingDemandHeader.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingHoursProfileNotice.vue.d.ts +10 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingPositions.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingReview.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingWizardFooter.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingWizardHeader.vue.d.ts +11 -0
- package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +7 -1
- package/dist/src/views/scheduling/components/ScheduleSetupBanner.vue.d.ts +12 -0
- package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +2 -2
- package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +4 -4
- package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +2 -2
- package/dist/src/views/scheduling/components/ScheduleTopbar.vue.d.ts +3 -3
- package/dist/src/views/scheduling/composables/onboarding-types.d.ts +1 -1
- package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +1 -1
- package/dist/src/views/scheduling/composables/schedule-breaks.d.ts +7 -1
- package/dist/src/views/scheduling/composables/schedule-calendar.d.ts +7 -0
- package/dist/src/views/scheduling/composables/schedule-cost.d.ts +19 -0
- package/dist/src/views/scheduling/composables/schedule-demand-domain.d.ts +11 -0
- package/dist/src/views/scheduling/composables/schedule-export-matrix.d.ts +14 -0
- package/dist/src/views/scheduling/composables/schedule-time.d.ts +8 -0
- package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +1 -4
- package/dist/src/views/scheduling/composables/scheduleAutoSolver.d.ts +23 -0
- package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +14 -13
- package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +3 -1
- package/dist/src/views/scheduling/composables/useScheduleAssignmentMutations.d.ts +13 -0
- package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +4 -114
- package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +18 -2
- package/dist/src/views/scheduling/composables/useScheduleCloneOutletModal.d.ts +3 -1
- package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +6 -1
- package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +1 -1
- package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +4 -19
- package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +12 -2
- package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +11 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeAvailability.d.ts +13 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +26 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeCompensation.d.ts +7 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeForm.d.ts +22 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeIdentity.d.ts +9 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeMenu.d.ts +6 -3
- package/dist/src/views/scheduling/composables/useScheduleEmployeePersistence.d.ts +25 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +18 -0
- package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +19 -11
- package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +3 -6
- package/dist/src/views/scheduling/composables/useScheduleOnboardingAvailability.d.ts +58 -0
- package/dist/src/views/scheduling/composables/useScheduleOnboardingDemand.d.ts +45 -0
- package/dist/src/views/scheduling/composables/useScheduleOnboardingEmployees.d.ts +187 -0
- package/dist/src/views/scheduling/composables/useScheduleOnboardingHours.d.ts +15 -0
- package/dist/src/views/scheduling/composables/useScheduleOnboardingNavigation.d.ts +11 -0
- package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +64 -487
- package/dist/src/views/scheduling/composables/useSchedulePageActions.d.ts +18 -0
- package/dist/src/views/scheduling/composables/useSchedulePageCellActions.d.ts +21 -0
- package/dist/src/views/scheduling/composables/useSchedulePageCellDrop.d.ts +18 -0
- package/dist/src/views/scheduling/composables/useSchedulePageEmployeeActions.d.ts +22 -0
- package/dist/src/views/scheduling/composables/useSchedulePageOverlays.d.ts +10 -3
- package/dist/src/views/scheduling/composables/useSchedulePdfExport.d.ts +19 -0
- package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +3 -1
- package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +3 -1
- package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +7 -1
- package/dist/src/views/scheduling/composables/useSchedulePublishPersistence.d.ts +11 -0
- package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +6 -0
- package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +2 -24
- package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +6 -1
- package/dist/src/views/scheduling/composables/useScheduleShiftDraft.d.ts +62 -0
- package/dist/src/views/scheduling/composables/useScheduleShiftPersistence.d.ts +17 -0
- package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +10 -5
- package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +4 -1
- package/dist/src/views/scheduling/composables/useScheduleTour.d.ts +6 -4
- package/dist/src/views/scheduling/country-rules/index.d.ts +24 -0
- package/dist/src/views/scheduling/data.d.ts +11 -6
- package/dist/src/views/scheduling/locales/index.d.ts +80 -0
- package/dist/src/views/scheduling/schedule-constants.d.ts +7 -0
- package/dist/src/views/scheduling/schedule-state.d.ts +134 -110
- package/dist/src/views/scheduling/schedule-store.d.ts +6 -5
- package/dist/src/views/scheduling/types.d.ts +5 -3
- package/dist/style.css +1 -1
- package/dist/tsconfig.app.tsbuildinfo +1 -1
- package/dist/{useReportPermissions-Bl6Br79r.js → useReportPermissions-DHA0jrIr.js} +3 -3
- package/package.json +1 -1
- package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-B-XtB64L.js +0 -452
- package/dist/SchedulePage-Nm0krGVU.js +0 -17056
- package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-DTDXir_7.js +0 -1150
- package/dist/src/components/layout/AppSidebar.vue.d.ts +0 -2
- package/dist/src/components/layout/withShell.d.ts +0 -14
- package/dist/src/views/scheduling/components/ScheduleShiftCardMenu.vue.d.ts +0 -12
- package/dist/src/views/scheduling/components/ScheduleTourAllSet.vue.d.ts +0 -6
- package/dist/src/views/scheduling/composables/auto-schedule-mapping.d.ts +0 -33
- package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +0 -17
- package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +0 -10
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FdtoScheduleAutoScheduleObjective
|
|
1
|
+
import type { FdtoScheduleAutoScheduleObjective } from '@/types/schedule';
|
|
2
2
|
import type { Proposal } from '../types';
|
|
3
3
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
4
4
|
import type { ScheduleDemandApi } from './useScheduleDemand';
|
|
@@ -6,7 +6,6 @@ export type ScheduleAutoScheduleStep = 'options' | 'summary';
|
|
|
6
6
|
export interface ScheduleAutoScheduleOptions {
|
|
7
7
|
fillGaps: boolean;
|
|
8
8
|
objective: FdtoScheduleAutoScheduleObjective;
|
|
9
|
-
planner: FdtoScheduleAutoSchedulePlanner;
|
|
10
9
|
allowOvertime: boolean;
|
|
11
10
|
/** Shown as preferences in the dialog but not sent: the generator takes no input for them yet
|
|
12
11
|
* (availability and time off are always respected; patterns and cost ride on the objective). */
|
|
@@ -14,54 +13,30 @@ export interface ScheduleAutoScheduleOptions {
|
|
|
14
13
|
followPatterns: boolean;
|
|
15
14
|
costEfficient: boolean;
|
|
16
15
|
}
|
|
17
|
-
/** Backend-powered draft generation and local proposal review
|
|
18
|
-
*
|
|
19
|
-
* never writes; accepted proposals use the board's existing assignment persistence path. */
|
|
16
|
+
/** Backend-powered draft generation and local proposal review. Generation never writes;
|
|
17
|
+
* accepted proposals use the board's existing assignment persistence path. */
|
|
20
18
|
export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand: ScheduleDemandApi): {
|
|
21
19
|
wizardOpen: import("vue").Ref<boolean, boolean>;
|
|
22
20
|
step: import("vue").Ref<ScheduleAutoScheduleStep, ScheduleAutoScheduleStep>;
|
|
23
21
|
options: {
|
|
24
22
|
fillGaps: boolean;
|
|
25
23
|
objective: FdtoScheduleAutoScheduleObjective;
|
|
26
|
-
planner: FdtoScheduleAutoSchedulePlanner;
|
|
27
24
|
allowOvertime: boolean;
|
|
28
25
|
respectAvailability: boolean;
|
|
29
26
|
followPatterns: boolean;
|
|
30
27
|
costEfficient: boolean;
|
|
31
28
|
};
|
|
32
|
-
planners: import("vue").Ref<("GREEDY" | "LLM")[], ("GREEDY" | "LLM")[]>;
|
|
33
|
-
plannerChoice: import("vue").ComputedRef<boolean>;
|
|
34
29
|
generating: import("vue").Ref<boolean, boolean>;
|
|
35
30
|
generateError: import("vue").Ref<string | null, string | null>;
|
|
36
31
|
result: import("vue").Ref<{
|
|
37
|
-
objective: "BALANCED" | "SERVICE" | "LOWER_COST" | "STABLE_HOURS";
|
|
38
|
-
allowOvertime: boolean;
|
|
39
32
|
proposals: {
|
|
40
33
|
date: string;
|
|
41
34
|
startTime: string;
|
|
42
35
|
endTime: string;
|
|
43
|
-
positionId: string | null;
|
|
44
36
|
employeeId: string;
|
|
45
|
-
employeeName: string;
|
|
46
37
|
position: string;
|
|
47
|
-
reason: string;
|
|
48
38
|
}[];
|
|
49
39
|
unfilledCount: number;
|
|
50
|
-
unfilledNeeds: {
|
|
51
|
-
date: string;
|
|
52
|
-
startTime: string;
|
|
53
|
-
endTime: string;
|
|
54
|
-
position: string | null;
|
|
55
|
-
short: number;
|
|
56
|
-
excluded: {
|
|
57
|
-
occupied: number;
|
|
58
|
-
notQualified: number;
|
|
59
|
-
weeklyCap: number;
|
|
60
|
-
rest: number;
|
|
61
|
-
dayOff: number;
|
|
62
|
-
dayCap: number;
|
|
63
|
-
};
|
|
64
|
-
}[];
|
|
65
40
|
metrics: {
|
|
66
41
|
minimumCoveragePercent: number;
|
|
67
42
|
recommendedCoveragePercent: number;
|
|
@@ -89,43 +64,15 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
89
64
|
};
|
|
90
65
|
explanations: string[];
|
|
91
66
|
solver: string;
|
|
92
|
-
week: {
|
|
93
|
-
from: string;
|
|
94
|
-
to: string;
|
|
95
|
-
};
|
|
96
|
-
timing: {
|
|
97
|
-
totalMs: number;
|
|
98
|
-
modelMs: number | null;
|
|
99
|
-
};
|
|
100
67
|
} | null, {
|
|
101
|
-
objective: "BALANCED" | "SERVICE" | "LOWER_COST" | "STABLE_HOURS";
|
|
102
|
-
allowOvertime: boolean;
|
|
103
68
|
proposals: {
|
|
104
69
|
date: string;
|
|
105
70
|
startTime: string;
|
|
106
71
|
endTime: string;
|
|
107
|
-
positionId: string | null;
|
|
108
72
|
employeeId: string;
|
|
109
|
-
employeeName: string;
|
|
110
73
|
position: string;
|
|
111
|
-
reason: string;
|
|
112
74
|
}[];
|
|
113
75
|
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
|
-
rest: number;
|
|
125
|
-
dayOff: number;
|
|
126
|
-
dayCap: number;
|
|
127
|
-
};
|
|
128
|
-
}[];
|
|
129
76
|
metrics: {
|
|
130
77
|
minimumCoveragePercent: number;
|
|
131
78
|
recommendedCoveragePercent: number;
|
|
@@ -153,43 +100,15 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
153
100
|
};
|
|
154
101
|
explanations: string[];
|
|
155
102
|
solver: string;
|
|
156
|
-
week: {
|
|
157
|
-
from: string;
|
|
158
|
-
to: string;
|
|
159
|
-
};
|
|
160
|
-
timing: {
|
|
161
|
-
totalMs: number;
|
|
162
|
-
modelMs: number | null;
|
|
163
|
-
};
|
|
164
103
|
} | {
|
|
165
|
-
objective: "BALANCED" | "SERVICE" | "LOWER_COST" | "STABLE_HOURS";
|
|
166
|
-
allowOvertime: boolean;
|
|
167
104
|
proposals: {
|
|
168
105
|
date: string;
|
|
169
106
|
startTime: string;
|
|
170
107
|
endTime: string;
|
|
171
|
-
positionId: string | null;
|
|
172
108
|
employeeId: string;
|
|
173
|
-
employeeName: string;
|
|
174
109
|
position: string;
|
|
175
|
-
reason: string;
|
|
176
110
|
}[];
|
|
177
111
|
unfilledCount: number;
|
|
178
|
-
unfilledNeeds: {
|
|
179
|
-
date: string;
|
|
180
|
-
startTime: string;
|
|
181
|
-
endTime: string;
|
|
182
|
-
position: string | null;
|
|
183
|
-
short: number;
|
|
184
|
-
excluded: {
|
|
185
|
-
occupied: number;
|
|
186
|
-
notQualified: number;
|
|
187
|
-
weeklyCap: number;
|
|
188
|
-
rest: number;
|
|
189
|
-
dayOff: number;
|
|
190
|
-
dayCap: number;
|
|
191
|
-
};
|
|
192
|
-
}[];
|
|
193
112
|
metrics: {
|
|
194
113
|
minimumCoveragePercent: number;
|
|
195
114
|
recommendedCoveragePercent: number;
|
|
@@ -217,14 +136,6 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
217
136
|
};
|
|
218
137
|
explanations: string[];
|
|
219
138
|
solver: string;
|
|
220
|
-
week: {
|
|
221
|
-
from: string;
|
|
222
|
-
to: string;
|
|
223
|
-
};
|
|
224
|
-
timing: {
|
|
225
|
-
totalMs: number;
|
|
226
|
-
modelMs: number | null;
|
|
227
|
-
};
|
|
228
139
|
} | null>;
|
|
229
140
|
gapCount: import("vue").ComputedRef<number>;
|
|
230
141
|
hasDemand: import("vue").ComputedRef<boolean>;
|
|
@@ -243,7 +154,6 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
243
154
|
start: string;
|
|
244
155
|
end: string;
|
|
245
156
|
role: string;
|
|
246
|
-
positionId?: string | null | undefined;
|
|
247
157
|
openId?: number | undefined;
|
|
248
158
|
status: "pending" | "rejected";
|
|
249
159
|
weekKey?: string | undefined;
|
|
@@ -264,26 +174,6 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
264
174
|
toggleReject: (id: number) => void;
|
|
265
175
|
rejectAll: () => void;
|
|
266
176
|
exitReview: () => void;
|
|
267
|
-
apply: () =>
|
|
268
|
-
applying: import("vue").Ref<boolean, boolean>;
|
|
269
|
-
applyRejections: import("vue").Ref<{
|
|
270
|
-
employeeName: string;
|
|
271
|
-
day: string;
|
|
272
|
-
time: string;
|
|
273
|
-
message: string;
|
|
274
|
-
}[], {
|
|
275
|
-
employeeName: string;
|
|
276
|
-
day: string;
|
|
277
|
-
time: string;
|
|
278
|
-
message: string;
|
|
279
|
-
}[] | {
|
|
280
|
-
employeeName: string;
|
|
281
|
-
day: string;
|
|
282
|
-
time: string;
|
|
283
|
-
message: string;
|
|
284
|
-
}[]>;
|
|
285
|
-
applyError: import("vue").Ref<string | null, string | null>;
|
|
286
|
-
detailsOpen: import("vue").Ref<boolean, boolean>;
|
|
287
|
-
toggleDetails: () => void;
|
|
177
|
+
apply: () => number;
|
|
288
178
|
};
|
|
289
179
|
export type ScheduleAutoScheduleApi = ReturnType<typeof useScheduleAutoSchedule>;
|
|
@@ -22,6 +22,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
22
22
|
isHoliday: (dayIdx: number) => boolean;
|
|
23
23
|
employees: import("vue").Ref<{
|
|
24
24
|
id: number;
|
|
25
|
+
sourceId: string;
|
|
25
26
|
name: string;
|
|
26
27
|
employmentType: "FULLTIME" | "PARTTIME";
|
|
27
28
|
role: string;
|
|
@@ -57,6 +58,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
57
58
|
breakPayType: "PAID" | "UNPAID";
|
|
58
59
|
})[] | undefined;
|
|
59
60
|
assignmentId?: string | undefined;
|
|
61
|
+
updatedAt?: string | undefined;
|
|
60
62
|
splitGroupId?: string | undefined;
|
|
61
63
|
} | {
|
|
62
64
|
timeOff: "approved" | "pending";
|
|
@@ -104,6 +106,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
104
106
|
breakPayType: "PAID" | "UNPAID";
|
|
105
107
|
})[] | undefined;
|
|
106
108
|
assignmentId?: string | undefined;
|
|
109
|
+
updatedAt?: string | undefined;
|
|
107
110
|
splitGroupId?: string | undefined;
|
|
108
111
|
}[] | null)[];
|
|
109
112
|
remarks: {
|
|
@@ -134,6 +137,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
134
137
|
masterUser?: boolean | undefined;
|
|
135
138
|
}[], Employee[] | {
|
|
136
139
|
id: number;
|
|
140
|
+
sourceId: string;
|
|
137
141
|
name: string;
|
|
138
142
|
employmentType: "FULLTIME" | "PARTTIME";
|
|
139
143
|
role: string;
|
|
@@ -169,6 +173,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
169
173
|
breakPayType: "PAID" | "UNPAID";
|
|
170
174
|
})[] | undefined;
|
|
171
175
|
assignmentId?: string | undefined;
|
|
176
|
+
updatedAt?: string | undefined;
|
|
172
177
|
splitGroupId?: string | undefined;
|
|
173
178
|
} | {
|
|
174
179
|
timeOff: "approved" | "pending";
|
|
@@ -216,6 +221,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
216
221
|
breakPayType: "PAID" | "UNPAID";
|
|
217
222
|
})[] | undefined;
|
|
218
223
|
assignmentId?: string | undefined;
|
|
224
|
+
updatedAt?: string | undefined;
|
|
219
225
|
splitGroupId?: string | undefined;
|
|
220
226
|
}[] | null)[];
|
|
221
227
|
remarks: {
|
|
@@ -281,7 +287,6 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
281
287
|
end: string;
|
|
282
288
|
breakMins?: number | undefined;
|
|
283
289
|
}[]>;
|
|
284
|
-
highlightEmpId: import("vue").Ref<number | null, number | null>;
|
|
285
290
|
rangeStart: import("vue").Ref<Date, Date>;
|
|
286
291
|
weekOffset: import("vue").ComputedRef<number>;
|
|
287
292
|
peekWeek: (offset: number) => import("./schedule-week-cache").WeekBucket;
|
|
@@ -290,11 +295,13 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
290
295
|
dayLocked: (dayIdx: number) => boolean;
|
|
291
296
|
pendingChanges: import("vue").Ref<{
|
|
292
297
|
empId: number;
|
|
298
|
+
employeeKey: string;
|
|
293
299
|
dayIdx: number;
|
|
294
300
|
kind: "add" | "change" | "remove";
|
|
295
301
|
label: string;
|
|
296
302
|
}[], PendingChange[] | {
|
|
297
303
|
empId: number;
|
|
304
|
+
employeeKey: string;
|
|
298
305
|
dayIdx: number;
|
|
299
306
|
kind: "add" | "change" | "remove";
|
|
300
307
|
label: string;
|
|
@@ -304,7 +311,8 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
304
311
|
empId: number;
|
|
305
312
|
dayIdx: number;
|
|
306
313
|
slot: WorkSlot;
|
|
307
|
-
}>) => Promise<
|
|
314
|
+
}>) => Promise<boolean>;
|
|
315
|
+
flushAssignmentWrites: () => Promise<void>;
|
|
308
316
|
recordChange: (empId: number, dayIdx: number, kind: PendingChange["kind"], label: string) => void;
|
|
309
317
|
scheduleVersions: import("vue").Ref<{
|
|
310
318
|
v: number;
|
|
@@ -342,6 +350,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
342
350
|
breakPayType: "PAID" | "UNPAID";
|
|
343
351
|
})[] | undefined;
|
|
344
352
|
assignmentId?: string | undefined;
|
|
353
|
+
updatedAt?: string | undefined;
|
|
345
354
|
splitGroupId?: string | undefined;
|
|
346
355
|
} | {
|
|
347
356
|
timeOff: "approved" | "pending";
|
|
@@ -389,6 +398,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
389
398
|
breakPayType: "PAID" | "UNPAID";
|
|
390
399
|
})[] | undefined;
|
|
391
400
|
assignmentId?: string | undefined;
|
|
401
|
+
updatedAt?: string | undefined;
|
|
392
402
|
splitGroupId?: string | undefined;
|
|
393
403
|
}[] | null)[];
|
|
394
404
|
}[];
|
|
@@ -428,6 +438,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
428
438
|
breakPayType: "PAID" | "UNPAID";
|
|
429
439
|
})[] | undefined;
|
|
430
440
|
assignmentId?: string | undefined;
|
|
441
|
+
updatedAt?: string | undefined;
|
|
431
442
|
splitGroupId?: string | undefined;
|
|
432
443
|
} | {
|
|
433
444
|
timeOff: "approved" | "pending";
|
|
@@ -475,6 +486,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
475
486
|
breakPayType: "PAID" | "UNPAID";
|
|
476
487
|
})[] | undefined;
|
|
477
488
|
assignmentId?: string | undefined;
|
|
489
|
+
updatedAt?: string | undefined;
|
|
478
490
|
splitGroupId?: string | undefined;
|
|
479
491
|
}[] | null)[];
|
|
480
492
|
}[];
|
|
@@ -508,6 +520,10 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
508
520
|
commitShiftAt: (offset: number, empId: number, dayIdx: number, slot: WorkSlot | WorkSlot[], replaceIndex?: number, replaceCount?: number) => void;
|
|
509
521
|
removeShift: (empId: number, dayIdx: number, slotIndex?: number, count?: number) => void;
|
|
510
522
|
removeShiftAt: (offset: number, empId: number, dayIdx: number, slotIndex?: number, count?: number) => void;
|
|
523
|
+
employeeShiftsToClear: (empId: number) => number[];
|
|
524
|
+
clearEmployeeShifts: (empId: number) => {
|
|
525
|
+
shifts: number;
|
|
526
|
+
};
|
|
511
527
|
moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number) => boolean;
|
|
512
528
|
swapShifts: (empIdA: number, empIdB: number, dayA: number, dayB?: number, slotIndexA?: number, slotIndexB?: number, slotCountA?: number) => boolean;
|
|
513
529
|
clearShiftsInRange: () => {
|
|
@@ -3,7 +3,9 @@ import type { ScheduleOutletApi } from './useScheduleOutlet';
|
|
|
3
3
|
* not the page's draft — to one or more other outlets the manager ticks. Scoped to pay rates
|
|
4
4
|
* because that is the only outlet-scoped setting this page persists; the mockup's broader
|
|
5
5
|
* "rules, shifts, coverage and positions" clone lives on pages this one doesn't own. */
|
|
6
|
-
export declare function useScheduleCloneOutletModal(outlet: ScheduleOutletApi
|
|
6
|
+
export declare function useScheduleCloneOutletModal(outlet: ScheduleOutletApi, options?: {
|
|
7
|
+
notify?: (message: string, type?: 'success' | 'error' | 'info') => void;
|
|
8
|
+
}): {
|
|
7
9
|
open: import("vue").Ref<boolean, boolean>;
|
|
8
10
|
query: import("vue").Ref<string, string>;
|
|
9
11
|
selected: import("vue").Ref<Set<string> & Omit<Set<string>, keyof Set<any>>, Set<string> | (Set<string> & Omit<Set<string>, keyof Set<any>>)>;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { Proposal } from '../types';
|
|
1
2
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
3
|
+
import type { ScheduleEmployeeLoad } from './useScheduleEmployeeIdentity';
|
|
2
4
|
export declare function slotHours(start: string, end: string): number;
|
|
3
5
|
export interface ScheduleDayCost {
|
|
4
6
|
hours: number;
|
|
@@ -27,10 +29,13 @@ export interface ScheduleOtRisk {
|
|
|
27
29
|
hours: number;
|
|
28
30
|
contract: number;
|
|
29
31
|
}
|
|
32
|
+
/** The staff rail consumes the same employee identity/load derivation as the area view. */
|
|
33
|
+
export type ScheduleRailRow = ScheduleEmployeeLoad;
|
|
30
34
|
/** Weekly labour cost + monthly OT gauge for the collapsible cost rail, built off one
|
|
31
35
|
* per-day breakdown so the rail's totals and the stats row's per-day figures can never
|
|
32
36
|
* disagree about what a day cost. */
|
|
33
|
-
export declare function useScheduleCostRail(board: ScheduleBoardApi): {
|
|
37
|
+
export declare function useScheduleCostRail(board: ScheduleBoardApi, proposalAt?: () => ((empId: number, dayIdx: number) => Proposal | undefined) | undefined): {
|
|
38
|
+
rows: import("vue").ComputedRef<ScheduleEmployeeLoad[]>;
|
|
34
39
|
collapsed: import("vue").Ref<boolean, boolean>;
|
|
35
40
|
byDay: import("vue").ComputedRef<ScheduleDayCost[]>;
|
|
36
41
|
weeklyCost: import("vue").ComputedRef<number>;
|
|
@@ -7,7 +7,7 @@ export interface ScheduleDayNoteState {
|
|
|
7
7
|
}
|
|
8
8
|
export interface ScheduleDayNoteOptions {
|
|
9
9
|
/** Toasts for the writes that happen on the spot — closing a day, repricing it, saving. */
|
|
10
|
-
onToast?: (message: string) => void;
|
|
10
|
+
onToast?: (message: string, type?: 'info' | 'success' | 'error') => void;
|
|
11
11
|
}
|
|
12
12
|
/** One decimal, always: "2×" reads as a count, and 1.5 beside a bare 2 in one sentence looks
|
|
13
13
|
* like two different kinds of number. Ported from the mockup's fmtRate(). */
|
|
@@ -1,24 +1,9 @@
|
|
|
1
1
|
import type { CoverageSegment, DaySlot, DemandPeriod, Employee, Proposal } from '../types';
|
|
2
2
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export declare function spanOf(start: string, end: string): [number, number];
|
|
8
|
-
/** 12-hour clock for prose — the sheet and the popovers read as sentences, and "16:00" in the
|
|
9
|
-
* middle of one does not. */
|
|
10
|
-
export declare function t12(hhmm: string): string;
|
|
11
|
-
/** The timeline's two end labels — "8am", "10:30pm", meridiem spelled out. */
|
|
12
|
-
export declare function minToShort(m: number): string;
|
|
13
|
-
export declare function rangeText(from: number, to: number): string;
|
|
14
|
-
export declare function roleTotalOf(p: DemandPeriod): number;
|
|
15
|
-
/** The unnamed part of a period's headcount. Derived, never typed — so it cannot disagree with
|
|
16
|
-
* the total above it. Negative means the breakdown has overrun that total. */
|
|
17
|
-
export declare function anyLeftOf(p: DemandPeriod): number;
|
|
18
|
-
export interface ScheduleCoverageAxis {
|
|
19
|
-
from: number;
|
|
20
|
-
to: number;
|
|
21
|
-
}
|
|
3
|
+
import { anyLeftOf, minToHHMM, minToShort, rangeText, roleTotalOf, spanOf, t12, toMin } from './schedule-demand-domain';
|
|
4
|
+
import type { ScheduleCoverageAxis } from './schedule-demand-domain';
|
|
5
|
+
export { anyLeftOf, minToHHMM, minToShort, rangeText, roleTotalOf, spanOf, t12, toMin };
|
|
6
|
+
export type { ScheduleCoverageAxis } from './schedule-demand-domain';
|
|
22
7
|
/** Staffing demand, and coverage read against it.
|
|
23
8
|
*
|
|
24
9
|
* Storage follows this board's dayNotes rather than the mockup's flat `di` index: the mockup
|
|
@@ -6,7 +6,7 @@ export interface ScheduleDemandSuggestion {
|
|
|
6
6
|
periods: DemandPeriod[];
|
|
7
7
|
}
|
|
8
8
|
export interface ScheduleDemandSheetOptions {
|
|
9
|
-
onToast?: (message: string) => void;
|
|
9
|
+
onToast?: (message: string, type?: 'info' | 'success' | 'error') => void;
|
|
10
10
|
/** Positions the breakdown can name — the same list the shift editor offers. */
|
|
11
11
|
positionOptions: () => string[];
|
|
12
12
|
/** Called instead of a toast when "+ Position breakdown" is pressed and there is no position
|
|
@@ -68,7 +68,17 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
|
|
|
68
68
|
overlapWarning: import("vue").ComputedRef<string>;
|
|
69
69
|
whenLabel: import("vue").ComputedRef<string>;
|
|
70
70
|
openFor: (idx: number) => void;
|
|
71
|
-
close: () => void;
|
|
71
|
+
close: (preserveDraft?: boolean) => void;
|
|
72
|
+
hasUnsavedChanges: import("vue").ComputedRef<boolean>;
|
|
73
|
+
diffSummary: import("vue").ComputedRef<{
|
|
74
|
+
changed: number;
|
|
75
|
+
added: number;
|
|
76
|
+
removed: number;
|
|
77
|
+
modified: number;
|
|
78
|
+
}>;
|
|
79
|
+
isPeriodChanged: (index: number) => boolean;
|
|
80
|
+
isPeriodFieldChanged: (index: number, field: "from" | "to" | "n") => boolean;
|
|
81
|
+
revert: () => void;
|
|
72
82
|
addPeriod: () => void;
|
|
73
83
|
removePeriod: (i: number) => void;
|
|
74
84
|
setHeads: (i: number, value: number | string) => void;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Role } from '@/types/role';
|
|
2
|
+
import { type ScheduleAddEmployeeForm } from './schedule-add-employee-form';
|
|
3
|
+
export declare function useScheduleEmployeeAccess(form: ScheduleAddEmployeeForm): {
|
|
4
|
+
passcodeValue: import("vue").ComputedRef<string>;
|
|
5
|
+
passcodeOk: import("vue").ComputedRef<boolean>;
|
|
6
|
+
setPasscodeDigit: (index: number, value: string) => void;
|
|
7
|
+
generatePasscode: () => void;
|
|
8
|
+
togglePosAccess: () => void;
|
|
9
|
+
setPosRole: (roleId: string) => void;
|
|
10
|
+
posRoleOptions: import("vue").ComputedRef<Role[]>;
|
|
11
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ComputedRef } from 'vue';
|
|
2
|
+
import type { ScheduleAddEmployeeForm } from './schedule-add-employee-form';
|
|
3
|
+
export declare function useScheduleEmployeeAvailability(form: ScheduleAddEmployeeForm, isPart: ComputedRef<boolean>): {
|
|
4
|
+
dayLit: (index: number) => boolean;
|
|
5
|
+
avLabel: ComputedRef<"Weekly availability" | "Time off days">;
|
|
6
|
+
avAllLabel: ComputedRef<"Clear all" | "Select all" | "No days off" | "Every day off">;
|
|
7
|
+
maxHoursPlaceholder: ComputedRef<"Hours per week" | "No cap">;
|
|
8
|
+
ensureAvailHours: (index: number) => void;
|
|
9
|
+
toggleAvailDay: (index: number) => void;
|
|
10
|
+
availAll: () => void;
|
|
11
|
+
setAvailHour: (index: number, field: "from" | "to", value: string) => void;
|
|
12
|
+
copyAvailHourDown: (index: number) => void;
|
|
13
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type ComputedRef } from 'vue';
|
|
2
|
+
import type { ScheduleAddEmployeeForm, ScheduleAddEmployeeStep } from './schedule-add-employee-form';
|
|
3
|
+
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
4
|
+
interface UseScheduleEmployeeCandidatesOptions {
|
|
5
|
+
board: ScheduleBoardApi;
|
|
6
|
+
form: ScheduleAddEmployeeForm;
|
|
7
|
+
currentLocationLabel: ComputedRef<string>;
|
|
8
|
+
step: {
|
|
9
|
+
value: ScheduleAddEmployeeStep;
|
|
10
|
+
};
|
|
11
|
+
open: {
|
|
12
|
+
value: boolean;
|
|
13
|
+
};
|
|
14
|
+
onPicked: (employeeId: string) => void;
|
|
15
|
+
onPrefillPasscode: (employeeId: string) => void;
|
|
16
|
+
}
|
|
17
|
+
/** Directory lookup and profile prefill for the existing-employee path of the add wizard. */
|
|
18
|
+
export declare function useScheduleEmployeeCandidates(options: UseScheduleEmployeeCandidatesOptions): {
|
|
19
|
+
selectExistingOpen: import("vue").Ref<boolean, boolean>;
|
|
20
|
+
candidatesLoading: import("vue").Ref<boolean, boolean>;
|
|
21
|
+
candidatesError: import("vue").Ref<string | null, string | null>;
|
|
22
|
+
openSelectExisting: () => void;
|
|
23
|
+
closeSelectExisting: () => void;
|
|
24
|
+
pickExisting: (employeeId: string) => Promise<void>;
|
|
25
|
+
};
|
|
26
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ScheduleAddEmployeeForm } from './schedule-add-employee-form';
|
|
2
|
+
export declare function useScheduleEmployeeCompensation(form: ScheduleAddEmployeeForm): {
|
|
3
|
+
setPayBasis: (basis: "hourly" | "monthly") => void;
|
|
4
|
+
payUnit: import("vue").ComputedRef<"/month" | "/hour">;
|
|
5
|
+
payAmountNumber: import("vue").ComputedRef<number>;
|
|
6
|
+
effectiveRate: import("vue").ComputedRef<number>;
|
|
7
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type Ref } from 'vue';
|
|
2
|
+
import type { ScheduleAddEmployeeForm } from './schedule-add-employee-form';
|
|
3
|
+
interface UseScheduleEmployeeFormOptions {
|
|
4
|
+
form: ScheduleAddEmployeeForm;
|
|
5
|
+
currentLocationLabel: {
|
|
6
|
+
value: string;
|
|
7
|
+
};
|
|
8
|
+
positions: readonly string[];
|
|
9
|
+
locOpen: Ref<boolean>;
|
|
10
|
+
secOpen: Ref<boolean>;
|
|
11
|
+
}
|
|
12
|
+
/** Field editing for locations and positions in the employee wizard. */
|
|
13
|
+
export declare function useScheduleEmployeeForm(options: UseScheduleEmployeeFormOptions): {
|
|
14
|
+
secondaryOptions: import("vue").ComputedRef<string[]>;
|
|
15
|
+
toggleMulti: (which: "loc" | "sec") => void;
|
|
16
|
+
toggleLocation: (location: string) => void;
|
|
17
|
+
removeLocation: (location: string) => void;
|
|
18
|
+
toggleSecondary: (position: string) => void;
|
|
19
|
+
removeSecondary: (position: string) => void;
|
|
20
|
+
setPrimaryPosition: (position: string) => void;
|
|
21
|
+
};
|
|
22
|
+
export {};
|
|
@@ -28,6 +28,15 @@ export interface ScheduleEmployeeLoad {
|
|
|
28
28
|
/** The suggested part's width on the bar, as a fraction of contract. With no contract to measure
|
|
29
29
|
* against it fills the track, so suggested hours still show. */
|
|
30
30
|
proposedPct: number;
|
|
31
|
+
/** Of `boardPct`, how much is still DRAFT (unpublished) rather than confirmed — drawn as a
|
|
32
|
+
* hatch over the tail of the bar rather than a different colour, same as the grid's own
|
|
33
|
+
* closed-day treatment: the colour still says over/under contract, the hatch just adds
|
|
34
|
+
* "and part of this hasn't gone out to the employee yet" on top of it. */
|
|
35
|
+
draftPct: number;
|
|
36
|
+
/** Of `hours`, how many are on the board but still DRAFT (unpublished) — kept as its own
|
|
37
|
+
* number rather than folded into `hours` so the label can say "published + draft" instead
|
|
38
|
+
* of one merged total that can't tell the employee has actually seen only part of it. */
|
|
39
|
+
draftHours: number;
|
|
31
40
|
}
|
|
32
41
|
/** This person's live (not rejected) suggestions in the week on screen. */
|
|
33
42
|
export declare function proposedSlotsOf(emp: Employee, proposalAt?: (empId: number, dayIdx: number) => Proposal | undefined): Pick<Proposal, 'start' | 'end'>[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
2
|
import type { ScheduleAnchorRect } from './schedule-popover-position';
|
|
3
|
-
export type ScheduleEmployeeMenuAction = 'profile' | 'edit' | '
|
|
3
|
+
export type ScheduleEmployeeMenuAction = 'profile' | 'edit' | 'freeall' | 'remove';
|
|
4
4
|
export interface ScheduleEmployeeMenuState {
|
|
5
5
|
open: boolean;
|
|
6
6
|
empId: number | null;
|
|
@@ -8,11 +8,13 @@ export interface ScheduleEmployeeMenuState {
|
|
|
8
8
|
left: number;
|
|
9
9
|
top: number;
|
|
10
10
|
}
|
|
11
|
-
/** The ⋯ menu on a team member's row — V6.2's #empMenu: profile, update,
|
|
12
|
-
* edit wizard, confirm dialog) come in
|
|
11
|
+
/** The ⋯ menu on a team member's row — V6.2's #empMenu: profile, update, clear shifts, remove.
|
|
12
|
+
* The actions that need a page-level surface (profile panel, edit wizard, confirm dialog) come in
|
|
13
|
+
* as handlers. */
|
|
13
14
|
export declare function useScheduleEmployeeMenu(board: ScheduleBoardApi, handlers: {
|
|
14
15
|
onProfile: (empId: number) => void;
|
|
15
16
|
onEdit: (empId: number) => void;
|
|
17
|
+
onClearAllShifts: (empId: number) => void;
|
|
16
18
|
onRemove: (empId: number) => void;
|
|
17
19
|
}): {
|
|
18
20
|
state: {
|
|
@@ -28,6 +30,7 @@ export declare function useScheduleEmployeeMenu(board: ScheduleBoardApi, handler
|
|
|
28
30
|
top: number;
|
|
29
31
|
};
|
|
30
32
|
employee: import("vue").ComputedRef<import("../types").Employee | undefined>;
|
|
33
|
+
hasShifts: import("vue").ComputedRef<boolean>;
|
|
31
34
|
openFor: (empId: number, anchor: HTMLElement) => void;
|
|
32
35
|
close: () => void;
|
|
33
36
|
go: (action: ScheduleEmployeeMenuAction) => void;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ComputedRef, Ref } from 'vue';
|
|
2
|
+
import { type ScheduleAddEmployeeForm } from './schedule-add-employee-form';
|
|
3
|
+
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
4
|
+
interface UseScheduleEmployeePersistenceOptions {
|
|
5
|
+
form: ScheduleAddEmployeeForm;
|
|
6
|
+
pickedEmployeeId: Ref<string | null>;
|
|
7
|
+
payAmountNumber: ComputedRef<number>;
|
|
8
|
+
saving: Ref<boolean>;
|
|
9
|
+
saveError: Ref<string | null>;
|
|
10
|
+
close: () => void;
|
|
11
|
+
restaurantIdOfLabel: (label: string) => string | undefined;
|
|
12
|
+
board: ScheduleBoardApi;
|
|
13
|
+
editingEmployeeId: Ref<number | null>;
|
|
14
|
+
originalLocations: Ref<string[]>;
|
|
15
|
+
effectiveRate: ComputedRef<number>;
|
|
16
|
+
passcodeValue: ComputedRef<string>;
|
|
17
|
+
notify?: (message: string, type?: 'success' | 'error' | 'info') => void;
|
|
18
|
+
}
|
|
19
|
+
/** Persistence for an existing business employee being added to this schedule. */
|
|
20
|
+
export declare function useScheduleEmployeePersistence(options: UseScheduleEmployeePersistenceOptions): {
|
|
21
|
+
createExisting: (name: string) => Promise<boolean>;
|
|
22
|
+
createNew: (name: string) => Promise<boolean>;
|
|
23
|
+
updateExisting: (name: string) => Promise<boolean>;
|
|
24
|
+
};
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type ComputedRef, type Ref } from 'vue';
|
|
2
|
+
import { type ScheduleAddEmployeeForm } from './schedule-add-employee-form';
|
|
3
|
+
interface UseScheduleEmployeeValidationOptions {
|
|
4
|
+
form: ScheduleAddEmployeeForm;
|
|
5
|
+
submitAttempted: Ref<boolean>;
|
|
6
|
+
passcodeOk: ComputedRef<boolean>;
|
|
7
|
+
isNewUser: ComputedRef<boolean>;
|
|
8
|
+
}
|
|
9
|
+
/** Validation guards for the add/edit employee form. Keeping them together makes create and
|
|
10
|
+
* the field-level error indicators consume the same rules. */
|
|
11
|
+
export declare function useScheduleEmployeeValidation(options: UseScheduleEmployeeValidationOptions): {
|
|
12
|
+
nameError: ComputedRef<boolean>;
|
|
13
|
+
passError: ComputedRef<boolean>;
|
|
14
|
+
availabilityOk: ComputedRef<boolean>;
|
|
15
|
+
availabilityError: ComputedRef<boolean>;
|
|
16
|
+
masterCodeError: ComputedRef<boolean>;
|
|
17
|
+
};
|
|
18
|
+
export {};
|