@feedmepos/mf-hrm-portal 2.3.0-dev.14 → 2.3.0-dev.15
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-C9dauQ81.js → ApprovalCodeList-CY0ox1dX.js} +4 -4
- package/dist/{AuditLogList-zW_N_ECT.js → AuditLogList-CBkA-KQT.js} +4 -4
- package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-DJuO1qPX.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-B8cb8yqV.js} +2 -2
- package/dist/{EmployeeList-8jkHTd7q.js → EmployeeList-0PrcuHPJ.js} +6 -6
- package/dist/{FormItem.vue_vue_type_script_setup_true_lang-CJc_g0tW.js → FormItem.vue_vue_type_script_setup_true_lang-rjDE1B4E.js} +1 -1
- package/dist/{GrantUserList-Dj55GA7O.js → GrantUserList-Dw923P2j.js} +5 -5
- package/dist/{Main-BQNkTyET.js → Main-BqX7n1ik.js} +9 -9
- package/dist/{Main-0TfvGJ4N.js → Main-C0bcn2NY.js} +5 -5
- package/dist/{Main-CuUG6svQ.js → Main-Dpf2KdSH.js} +2 -2
- package/dist/{PermissionSetList-BsLi-TOK.js → PermissionSetList-xrI130SW.js} +5 -5
- package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-C2l8nWx2.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-3_8qycrF.js} +1087 -1087
- package/dist/{RoleList-DLDcyVWT.js → RoleList-DPkG5dg9.js} +7 -7
- package/dist/{ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-CUXUPfRc.js → ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-DYLLW46A.js} +111 -111
- package/dist/{ScheduleGeneralPage-BhYI6O9g.js → ScheduleGeneralPage-CISbuAff.js} +86 -87
- package/dist/{ScheduleModal.vue_vue_type_script_setup_true_lang-BLBLBtNG.js → ScheduleModal.vue_vue_type_script_setup_true_lang-BeTuMw3f.js} +931 -823
- package/dist/SchedulePage-Dn6_TiBS.js +18757 -0
- package/dist/{SchedulePositionPage-Byt6nmUj.js → SchedulePositionPage-Cu3WRfH-.js} +16 -16
- package/dist/{SelectFilter-1fh00OZW.js → SelectFilter-ssnRUIN6.js} +1 -1
- package/dist/{TeamMemberList-CyUX8Afk.js → TeamMemberList-DTqNCDJb.js} +7 -7
- package/dist/{TimesheetList-Q4FeNgOT.js → TimesheetList-CA19TmKm.js} +6 -6
- package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-C3iU4Zmc.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-B1jnsZpD.js} +2 -2
- package/dist/{app-TuHQoM7K.js → app-3xGY2Rn0.js} +1535 -1283
- package/dist/app.js +1 -1
- package/dist/{dayjs.min-DXnA8GYn.js → dayjs.min-C_c8OoEU.js} +1 -1
- package/dist/{employee-Ctnil3cD.js → employee-Dt0y51t3.js} +3 -3
- package/dist/{iteration-BxOzv27y.js → iteration-C4YvbrCe.js} +1 -1
- package/dist/{lodash-CKT_RxJs.js → lodash-huRs3Cbj.js} +1 -1
- package/dist/{role-CNEJPyaD.js → role-fM58UmtC.js} +1 -1
- package/dist/{rule-FbuHv6Gh.js → rule-CCN0QCPF.js} +2 -2
- package/dist/src/views/audit-log/locales/index.d.ts +252 -0
- package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +2 -0
- package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +1 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingSettings.vue.d.ts +6 -0
- package/dist/src/views/scheduling/composables/schedule-demand-domain.d.ts +13 -1
- package/dist/src/views/scheduling/composables/schedule-error.d.ts +3 -0
- package/dist/src/views/scheduling/composables/schedule-quick-pick.d.ts +22 -0
- package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +5 -2
- package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +3 -11
- package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +7 -0
- package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +45 -1
- package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +10 -0
- package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +2 -2
- package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +1 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +14 -6
- package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +3 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +0 -2
- package/dist/src/views/scheduling/composables/useScheduleOnboardingEmployees.d.ts +23 -0
- package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +160 -3
- package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +44 -0
- package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +2 -2
- package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +22 -0
- package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +26 -2
- package/dist/src/views/scheduling/country-rules/index.d.ts +8 -3
- package/dist/src/views/scheduling/schedule-store.d.ts +7 -7
- package/dist/src/views/scheduling/types.d.ts +5 -0
- package/dist/style.css +1 -1
- package/dist/tsconfig.app.tsbuildinfo +1 -1
- package/dist/{useReportPermissions-lemBrd1S.js → useReportPermissions-BlX_Mk5f.js} +3 -3
- package/package.json +1 -1
- package/dist/SchedulePage-DPU4taJt.js +0 -18041
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
import { type ComputedRef } from 'vue';
|
|
1
2
|
import type { Role } from '@/types/role';
|
|
2
|
-
import {
|
|
3
|
-
export declare function useScheduleEmployeeAccess(form: ScheduleAddEmployeeForm
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
import type { ScheduleAddEmployeeForm } from './schedule-add-employee-form';
|
|
4
|
+
export declare function useScheduleEmployeeAccess(form: ScheduleAddEmployeeForm, options?: {
|
|
5
|
+
excludePosUserId?: ComputedRef<string | undefined>;
|
|
6
|
+
}): {
|
|
7
|
+
passcodeValue: ComputedRef<string>;
|
|
8
|
+
passcodeOk: ComputedRef<boolean>;
|
|
6
9
|
setPasscodeDigit: (index: number, value: string) => void;
|
|
7
|
-
generatePasscode: () => void
|
|
10
|
+
generatePasscode: () => Promise<void>;
|
|
11
|
+
isGeneratingPasscode: import("vue").Ref<boolean, boolean>;
|
|
8
12
|
togglePosAccess: () => void;
|
|
9
13
|
addPosRoleRow: () => void;
|
|
10
14
|
removePosRoleRow: (index: number) => void;
|
|
@@ -12,5 +16,9 @@ export declare function useScheduleEmployeeAccess(form: ScheduleAddEmployeeForm)
|
|
|
12
16
|
setPosRoleOutlet: (index: number, outlet: string) => void;
|
|
13
17
|
setPosRoleId: (index: number, roleId: string) => void;
|
|
14
18
|
posRoleOptionsFor: (outlet: string) => Role[];
|
|
15
|
-
|
|
19
|
+
isPosRoleUsable: (role: Role) => boolean;
|
|
20
|
+
setMasterUserRoleAccess: (roleIds: string[] | null | undefined) => void;
|
|
21
|
+
isPosOutletUsable: (outlet: string) => boolean;
|
|
22
|
+
setMasterUserRestaurantAccess: (restaurantIds: string[] | null | undefined) => void;
|
|
23
|
+
posRolesHint: ComputedRef<"" | "No outlet assigned, so their passcode will not open a till yet." | "The same outlet is listed twice — only the last role on it will apply.">;
|
|
16
24
|
};
|
|
@@ -14,12 +14,15 @@ interface UseScheduleEmployeeCandidatesOptions {
|
|
|
14
14
|
onPicked: (employeeId: string) => void;
|
|
15
15
|
onPrefillPasscode: (employeeId: string) => void | Promise<void>;
|
|
16
16
|
onPrefillPosRoles: (employeeId: string) => void | Promise<void>;
|
|
17
|
+
onPrefillPosRoleAccess: (roleIds: string[] | null | undefined) => void;
|
|
18
|
+
onPrefillPosRestaurantAccess: (restaurantIds: string[] | null | undefined) => void;
|
|
17
19
|
}
|
|
18
20
|
/** Directory lookup and profile prefill for the existing-employee path of the add wizard. */
|
|
19
21
|
export declare function useScheduleEmployeeCandidates(options: UseScheduleEmployeeCandidatesOptions): {
|
|
20
22
|
selectExistingOpen: import("vue").Ref<boolean, boolean>;
|
|
21
23
|
candidatesLoading: import("vue").Ref<boolean, boolean>;
|
|
22
24
|
candidatesError: import("vue").Ref<string | null, string | null>;
|
|
25
|
+
selectingExisting: import("vue").Ref<boolean, boolean>;
|
|
23
26
|
openSelectExisting: () => void;
|
|
24
27
|
closeSelectExisting: () => void;
|
|
25
28
|
pickExisting: (employeeId: string) => Promise<void>;
|
|
@@ -4,7 +4,6 @@ interface UseScheduleEmployeeValidationOptions {
|
|
|
4
4
|
form: ScheduleAddEmployeeForm;
|
|
5
5
|
submitAttempted: Ref<boolean>;
|
|
6
6
|
passcodeOk: ComputedRef<boolean>;
|
|
7
|
-
isNewUser: ComputedRef<boolean>;
|
|
8
7
|
}
|
|
9
8
|
/** Validation guards for the add/edit employee form. Keeping them together makes create and
|
|
10
9
|
* the field-level error indicators consume the same rules. */
|
|
@@ -15,6 +14,5 @@ export declare function useScheduleEmployeeValidation(options: UseScheduleEmploy
|
|
|
15
14
|
posRolesError: ComputedRef<boolean>;
|
|
16
15
|
availabilityOk: ComputedRef<boolean>;
|
|
17
16
|
availabilityError: ComputedRef<boolean>;
|
|
18
|
-
masterCodeError: ComputedRef<boolean>;
|
|
19
17
|
};
|
|
20
18
|
export {};
|
|
@@ -101,6 +101,28 @@ export declare function useScheduleOnboardingEmployees(options: ScheduleOnboardi
|
|
|
101
101
|
updatedAt?: string | undefined;
|
|
102
102
|
splitGroupId?: string | undefined;
|
|
103
103
|
}[] | null)[];
|
|
104
|
+
timeOff?: ({
|
|
105
|
+
timeOff: "approved" | "pending";
|
|
106
|
+
requestId?: string | undefined;
|
|
107
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
108
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
109
|
+
reason: string;
|
|
110
|
+
half?: boolean | undefined;
|
|
111
|
+
halfPart?: "AM" | "PM" | undefined;
|
|
112
|
+
from?: string | undefined;
|
|
113
|
+
to?: string | undefined;
|
|
114
|
+
appliedOn?: string | undefined;
|
|
115
|
+
note?: string | undefined;
|
|
116
|
+
cert?: {
|
|
117
|
+
name: string;
|
|
118
|
+
size: string;
|
|
119
|
+
} | null | undefined;
|
|
120
|
+
bal?: {
|
|
121
|
+
type: string;
|
|
122
|
+
entitled: number;
|
|
123
|
+
used: number;
|
|
124
|
+
} | undefined;
|
|
125
|
+
} | null)[] | undefined;
|
|
104
126
|
remarks: {
|
|
105
127
|
author: string;
|
|
106
128
|
date: string;
|
|
@@ -184,6 +206,7 @@ export declare function useScheduleOnboardingEmployees(options: ScheduleOnboardi
|
|
|
184
206
|
removePositionFromRows: (position: string) => void;
|
|
185
207
|
toggleSecond: (empId: number, position: string) => void;
|
|
186
208
|
setEmployment: (empId: number, kind: TeamEmployment) => void;
|
|
209
|
+
maxHoursFor: (employment: TeamEmployment) => number | null;
|
|
187
210
|
setHours: (empId: number, value: string) => void;
|
|
188
211
|
setRate: (empId: number, value: string) => void;
|
|
189
212
|
bulkOpen: import("vue").Ref<boolean, boolean>;
|
|
@@ -114,6 +114,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
|
|
|
114
114
|
updatedAt?: string | undefined;
|
|
115
115
|
splitGroupId?: string | undefined;
|
|
116
116
|
}[] | null)[];
|
|
117
|
+
timeOff?: ({
|
|
118
|
+
timeOff: "approved" | "pending";
|
|
119
|
+
requestId?: string | undefined;
|
|
120
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
121
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
122
|
+
reason: string;
|
|
123
|
+
half?: boolean | undefined;
|
|
124
|
+
halfPart?: "AM" | "PM" | undefined;
|
|
125
|
+
from?: string | undefined;
|
|
126
|
+
to?: string | undefined;
|
|
127
|
+
appliedOn?: string | undefined;
|
|
128
|
+
note?: string | undefined;
|
|
129
|
+
cert?: {
|
|
130
|
+
name: string;
|
|
131
|
+
size: string;
|
|
132
|
+
} | null | undefined;
|
|
133
|
+
bal?: {
|
|
134
|
+
type: string;
|
|
135
|
+
entitled: number;
|
|
136
|
+
used: number;
|
|
137
|
+
} | undefined;
|
|
138
|
+
} | null)[] | undefined;
|
|
117
139
|
remarks: {
|
|
118
140
|
author: string;
|
|
119
141
|
date: string;
|
|
@@ -240,6 +262,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
|
|
|
240
262
|
updatedAt?: string | undefined;
|
|
241
263
|
splitGroupId?: string | undefined;
|
|
242
264
|
}[] | null)[];
|
|
265
|
+
timeOff?: ({
|
|
266
|
+
timeOff: "approved" | "pending";
|
|
267
|
+
requestId?: string | undefined;
|
|
268
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
269
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
270
|
+
reason: string;
|
|
271
|
+
half?: boolean | undefined;
|
|
272
|
+
halfPart?: "AM" | "PM" | undefined;
|
|
273
|
+
from?: string | undefined;
|
|
274
|
+
to?: string | undefined;
|
|
275
|
+
appliedOn?: string | undefined;
|
|
276
|
+
note?: string | undefined;
|
|
277
|
+
cert?: {
|
|
278
|
+
name: string;
|
|
279
|
+
size: string;
|
|
280
|
+
} | null | undefined;
|
|
281
|
+
bal?: {
|
|
282
|
+
type: string;
|
|
283
|
+
entitled: number;
|
|
284
|
+
used: number;
|
|
285
|
+
} | undefined;
|
|
286
|
+
} | null)[] | undefined;
|
|
243
287
|
remarks: {
|
|
244
288
|
author: string;
|
|
245
289
|
date: string;
|
|
@@ -553,7 +597,7 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
|
|
|
553
597
|
clearEmployeeShifts: (empId: number) => {
|
|
554
598
|
shifts: number;
|
|
555
599
|
};
|
|
556
|
-
moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number) => boolean;
|
|
600
|
+
moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number, targetPosition?: string) => boolean;
|
|
557
601
|
swapShifts: (empIdA: number, empIdB: number, dayA: number, dayB?: number, slotIndexA?: number, slotIndexB?: number, slotCountA?: number) => boolean;
|
|
558
602
|
clearShiftsInRange: () => {
|
|
559
603
|
shifts: number;
|
|
@@ -643,6 +687,27 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
|
|
|
643
687
|
removeRole: (index: number, roleIndex: number) => void;
|
|
644
688
|
namedTotal: (range: import("./onboarding-types").ScheduleOnboardingRange) => number;
|
|
645
689
|
copyDay: (mode: "all" | "wk" | "we") => void;
|
|
690
|
+
settings: {
|
|
691
|
+
payRate: {
|
|
692
|
+
NORMAL: {
|
|
693
|
+
overtime: number;
|
|
694
|
+
};
|
|
695
|
+
REST_DAY: {
|
|
696
|
+
regular: number;
|
|
697
|
+
overtime: number;
|
|
698
|
+
};
|
|
699
|
+
PUBLIC_HOLIDAY: {
|
|
700
|
+
regular: number;
|
|
701
|
+
overtime: number;
|
|
702
|
+
};
|
|
703
|
+
};
|
|
704
|
+
otCapHours: number | null;
|
|
705
|
+
workingHours: {
|
|
706
|
+
minHoursPerDay: number | null;
|
|
707
|
+
maxHoursPerDay: number | null;
|
|
708
|
+
maxHoursPerWeek: number | null;
|
|
709
|
+
};
|
|
710
|
+
};
|
|
646
711
|
addPositionNamed: (name?: string) => void;
|
|
647
712
|
removePosition: (id: string) => Promise<void>;
|
|
648
713
|
reviewRows: import("vue").ComputedRef<ReviewRow[]>;
|
|
@@ -782,6 +847,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
|
|
|
782
847
|
updatedAt?: string | undefined;
|
|
783
848
|
splitGroupId?: string | undefined;
|
|
784
849
|
}[] | null)[];
|
|
850
|
+
timeOff?: ({
|
|
851
|
+
timeOff: "approved" | "pending";
|
|
852
|
+
requestId?: string | undefined;
|
|
853
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
854
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
855
|
+
reason: string;
|
|
856
|
+
half?: boolean | undefined;
|
|
857
|
+
halfPart?: "AM" | "PM" | undefined;
|
|
858
|
+
from?: string | undefined;
|
|
859
|
+
to?: string | undefined;
|
|
860
|
+
appliedOn?: string | undefined;
|
|
861
|
+
note?: string | undefined;
|
|
862
|
+
cert?: {
|
|
863
|
+
name: string;
|
|
864
|
+
size: string;
|
|
865
|
+
} | null | undefined;
|
|
866
|
+
bal?: {
|
|
867
|
+
type: string;
|
|
868
|
+
entitled: number;
|
|
869
|
+
used: number;
|
|
870
|
+
} | undefined;
|
|
871
|
+
} | null)[] | undefined;
|
|
785
872
|
remarks: {
|
|
786
873
|
author: string;
|
|
787
874
|
date: string;
|
|
@@ -827,6 +914,7 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
|
|
|
827
914
|
removePositionFromRows: (position: string) => void;
|
|
828
915
|
toggleSecond: (empId: number, position: string) => void;
|
|
829
916
|
setEmployment: (empId: number, kind: import("./onboarding-types").TeamEmployment) => void;
|
|
917
|
+
maxHoursFor: (employment: import("./onboarding-types").TeamEmployment) => number | null;
|
|
830
918
|
setHours: (empId: number, value: string) => void;
|
|
831
919
|
setRate: (empId: number, value: string) => void;
|
|
832
920
|
bulkOpen: import("vue").Ref<boolean, boolean>;
|
|
@@ -936,6 +1024,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
|
|
|
936
1024
|
updatedAt?: string | undefined;
|
|
937
1025
|
splitGroupId?: string | undefined;
|
|
938
1026
|
}[] | null)[];
|
|
1027
|
+
timeOff?: ({
|
|
1028
|
+
timeOff: "approved" | "pending";
|
|
1029
|
+
requestId?: string | undefined;
|
|
1030
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
1031
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
1032
|
+
reason: string;
|
|
1033
|
+
half?: boolean | undefined;
|
|
1034
|
+
halfPart?: "AM" | "PM" | undefined;
|
|
1035
|
+
from?: string | undefined;
|
|
1036
|
+
to?: string | undefined;
|
|
1037
|
+
appliedOn?: string | undefined;
|
|
1038
|
+
note?: string | undefined;
|
|
1039
|
+
cert?: {
|
|
1040
|
+
name: string;
|
|
1041
|
+
size: string;
|
|
1042
|
+
} | null | undefined;
|
|
1043
|
+
bal?: {
|
|
1044
|
+
type: string;
|
|
1045
|
+
entitled: number;
|
|
1046
|
+
used: number;
|
|
1047
|
+
} | undefined;
|
|
1048
|
+
} | null)[] | undefined;
|
|
939
1049
|
remarks: {
|
|
940
1050
|
author: string;
|
|
941
1051
|
date: string;
|
|
@@ -1063,6 +1173,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
|
|
|
1063
1173
|
updatedAt?: string | undefined;
|
|
1064
1174
|
splitGroupId?: string | undefined;
|
|
1065
1175
|
}[] | null)[];
|
|
1176
|
+
timeOff?: ({
|
|
1177
|
+
timeOff: "approved" | "pending";
|
|
1178
|
+
requestId?: string | undefined;
|
|
1179
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
1180
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
1181
|
+
reason: string;
|
|
1182
|
+
half?: boolean | undefined;
|
|
1183
|
+
halfPart?: "AM" | "PM" | undefined;
|
|
1184
|
+
from?: string | undefined;
|
|
1185
|
+
to?: string | undefined;
|
|
1186
|
+
appliedOn?: string | undefined;
|
|
1187
|
+
note?: string | undefined;
|
|
1188
|
+
cert?: {
|
|
1189
|
+
name: string;
|
|
1190
|
+
size: string;
|
|
1191
|
+
} | null | undefined;
|
|
1192
|
+
bal?: {
|
|
1193
|
+
type: string;
|
|
1194
|
+
entitled: number;
|
|
1195
|
+
used: number;
|
|
1196
|
+
} | undefined;
|
|
1197
|
+
} | null)[] | undefined;
|
|
1066
1198
|
remarks: {
|
|
1067
1199
|
author: string;
|
|
1068
1200
|
date: string;
|
|
@@ -1194,6 +1326,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
|
|
|
1194
1326
|
updatedAt?: string | undefined;
|
|
1195
1327
|
splitGroupId?: string | undefined;
|
|
1196
1328
|
}[] | null)[];
|
|
1329
|
+
timeOff?: ({
|
|
1330
|
+
timeOff: "approved" | "pending";
|
|
1331
|
+
requestId?: string | undefined;
|
|
1332
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
1333
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
1334
|
+
reason: string;
|
|
1335
|
+
half?: boolean | undefined;
|
|
1336
|
+
halfPart?: "AM" | "PM" | undefined;
|
|
1337
|
+
from?: string | undefined;
|
|
1338
|
+
to?: string | undefined;
|
|
1339
|
+
appliedOn?: string | undefined;
|
|
1340
|
+
note?: string | undefined;
|
|
1341
|
+
cert?: {
|
|
1342
|
+
name: string;
|
|
1343
|
+
size: string;
|
|
1344
|
+
} | null | undefined;
|
|
1345
|
+
bal?: {
|
|
1346
|
+
type: string;
|
|
1347
|
+
entitled: number;
|
|
1348
|
+
used: number;
|
|
1349
|
+
} | undefined;
|
|
1350
|
+
} | null)[] | undefined;
|
|
1197
1351
|
remarks: {
|
|
1198
1352
|
author: string;
|
|
1199
1353
|
date: string;
|
|
@@ -1297,7 +1451,6 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
|
|
|
1297
1451
|
passcodeOk: import("vue").ComputedRef<boolean>;
|
|
1298
1452
|
currentLocationLabel: import("vue").ComputedRef<string>;
|
|
1299
1453
|
locationOptions: import("vue").Reactive<string[]>;
|
|
1300
|
-
masterCodeError: import("vue").ComputedRef<boolean>;
|
|
1301
1454
|
isNewUser: import("vue").ComputedRef<boolean>;
|
|
1302
1455
|
footerHint: import("vue").ComputedRef<"Pick who — this outlet's own pay, position and hours are still set here." | "One short form. Rest days are set on their profile afterwards.">;
|
|
1303
1456
|
primaryRoleLabel: import("vue").ComputedRef<string>;
|
|
@@ -1333,7 +1486,8 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
|
|
|
1333
1486
|
setAvailHour: (index: number, field: "from" | "to", value: string) => void;
|
|
1334
1487
|
copyAvailHourDown: (index: number) => void;
|
|
1335
1488
|
setPasscodeDigit: (index: number, value: string) => void;
|
|
1336
|
-
generatePasscode: () => void
|
|
1489
|
+
generatePasscode: () => Promise<void>;
|
|
1490
|
+
isGeneratingPasscode: import("vue").Ref<boolean, boolean>;
|
|
1337
1491
|
togglePosAccess: () => void;
|
|
1338
1492
|
addPosRoleRow: () => void;
|
|
1339
1493
|
removePosRoleRow: (index: number) => void;
|
|
@@ -1341,6 +1495,9 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
|
|
|
1341
1495
|
setPosRoleOutlet: (index: number, outlet: string) => void;
|
|
1342
1496
|
setPosRoleId: (index: number, roleId: string) => void;
|
|
1343
1497
|
posRoleOptionsFor: (outlet: string) => import("../../../types/role").Role[];
|
|
1498
|
+
isPosRoleUsable: (role: import("../../../types/role").Role) => boolean;
|
|
1499
|
+
setMasterUserRoleAccess: (roleIds: string[] | null | undefined) => void;
|
|
1500
|
+
isPosOutletUsable: (outlet: string) => boolean;
|
|
1344
1501
|
posRolesHint: import("vue").ComputedRef<"" | "No outlet assigned, so their passcode will not open a till yet." | "The same outlet is listed twice — only the last role on it will apply.">;
|
|
1345
1502
|
create: () => Promise<boolean>;
|
|
1346
1503
|
};
|
|
@@ -101,6 +101,28 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
|
|
|
101
101
|
updatedAt?: string | undefined;
|
|
102
102
|
splitGroupId?: string | undefined;
|
|
103
103
|
}[] | null)[];
|
|
104
|
+
timeOff?: ({
|
|
105
|
+
timeOff: "approved" | "pending";
|
|
106
|
+
requestId?: string | undefined;
|
|
107
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
108
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
109
|
+
reason: string;
|
|
110
|
+
half?: boolean | undefined;
|
|
111
|
+
halfPart?: "AM" | "PM" | undefined;
|
|
112
|
+
from?: string | undefined;
|
|
113
|
+
to?: string | undefined;
|
|
114
|
+
appliedOn?: string | undefined;
|
|
115
|
+
note?: string | undefined;
|
|
116
|
+
cert?: {
|
|
117
|
+
name: string;
|
|
118
|
+
size: string;
|
|
119
|
+
} | null | undefined;
|
|
120
|
+
bal?: {
|
|
121
|
+
type: string;
|
|
122
|
+
entitled: number;
|
|
123
|
+
used: number;
|
|
124
|
+
} | undefined;
|
|
125
|
+
} | null)[] | undefined;
|
|
104
126
|
remarks: {
|
|
105
127
|
author: string;
|
|
106
128
|
date: string;
|
|
@@ -228,6 +250,28 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
|
|
|
228
250
|
updatedAt?: string | undefined;
|
|
229
251
|
splitGroupId?: string | undefined;
|
|
230
252
|
}[] | null)[];
|
|
253
|
+
timeOff?: ({
|
|
254
|
+
timeOff: "approved" | "pending";
|
|
255
|
+
requestId?: string | undefined;
|
|
256
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
257
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
258
|
+
reason: string;
|
|
259
|
+
half?: boolean | undefined;
|
|
260
|
+
halfPart?: "AM" | "PM" | undefined;
|
|
261
|
+
from?: string | undefined;
|
|
262
|
+
to?: string | undefined;
|
|
263
|
+
appliedOn?: string | undefined;
|
|
264
|
+
note?: string | undefined;
|
|
265
|
+
cert?: {
|
|
266
|
+
name: string;
|
|
267
|
+
size: string;
|
|
268
|
+
} | null | undefined;
|
|
269
|
+
bal?: {
|
|
270
|
+
type: string;
|
|
271
|
+
entitled: number;
|
|
272
|
+
used: number;
|
|
273
|
+
} | undefined;
|
|
274
|
+
} | null)[] | undefined;
|
|
231
275
|
remarks: {
|
|
232
276
|
author: string;
|
|
233
277
|
date: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** "Set it up" banner — shown while the outlet has not finished scheduling setup, i.e. while
|
|
2
|
-
* `scheduleSetupCompleted` (schedule-store) is false. Dismissing
|
|
3
|
-
*
|
|
2
|
+
* `scheduleSetupCompleted` (schedule-store) is false. Dismissing marks the outlet's setup complete (`setupCompleted`
|
|
3
|
+
* is persisted), so neither the banner nor the welcome dialog returns.
|
|
4
4
|
*
|
|
5
5
|
* The welcome dialog shares that same gate, plus its own session dismiss so closing it doesn't
|
|
6
6
|
* also close the banner. `scheduleSetupCompleted` lands from an async fetch and starts `false`
|
|
@@ -148,6 +148,28 @@ export declare function useScheduleShiftActions(board: ScheduleBoardApi, options
|
|
|
148
148
|
updatedAt?: string | undefined;
|
|
149
149
|
splitGroupId?: string | undefined;
|
|
150
150
|
}[] | null)[];
|
|
151
|
+
timeOff?: ({
|
|
152
|
+
timeOff: "approved" | "pending";
|
|
153
|
+
requestId?: string | undefined;
|
|
154
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
155
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
156
|
+
reason: string;
|
|
157
|
+
half?: boolean | undefined;
|
|
158
|
+
halfPart?: "AM" | "PM" | undefined;
|
|
159
|
+
from?: string | undefined;
|
|
160
|
+
to?: string | undefined;
|
|
161
|
+
appliedOn?: string | undefined;
|
|
162
|
+
note?: string | undefined;
|
|
163
|
+
cert?: {
|
|
164
|
+
name: string;
|
|
165
|
+
size: string;
|
|
166
|
+
} | null | undefined;
|
|
167
|
+
bal?: {
|
|
168
|
+
type: string;
|
|
169
|
+
entitled: number;
|
|
170
|
+
used: number;
|
|
171
|
+
} | undefined;
|
|
172
|
+
} | null)[] | undefined;
|
|
151
173
|
remarks: {
|
|
152
174
|
author: string;
|
|
153
175
|
date: string;
|
|
@@ -19,6 +19,7 @@ export interface ScheduleWarningPart {
|
|
|
19
19
|
* record (single position, like an assigned shift's "Position needed" row). */
|
|
20
20
|
export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand: ScheduleDemandApi, options?: {
|
|
21
21
|
onToast?: (message: string, type?: 'success' | 'error' | 'info') => void;
|
|
22
|
+
onAvailabilityWarning?: (message: string, onConfirm: () => void) => void;
|
|
22
23
|
}): {
|
|
23
24
|
open: import("vue").Ref<boolean, boolean>;
|
|
24
25
|
dayIdx: import("vue").Ref<number | null, number | null>;
|
|
@@ -79,6 +80,7 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
|
|
|
79
80
|
repeatDays: import("vue").Ref<boolean[], boolean[]>;
|
|
80
81
|
gapNote: import("vue").Ref<string | null, string | null>;
|
|
81
82
|
conflictNote: import("vue").Ref<string | null, string | null>;
|
|
83
|
+
availabilityConflictNote: import("vue").ComputedRef<string | null>;
|
|
82
84
|
grantSkill: import("vue").Ref<boolean, boolean>;
|
|
83
85
|
showGrantSkill: import("vue").ComputedRef<boolean>;
|
|
84
86
|
unassignMode: import("vue").Ref<boolean, boolean>;
|
|
@@ -175,6 +177,28 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
|
|
|
175
177
|
updatedAt?: string | undefined;
|
|
176
178
|
splitGroupId?: string | undefined;
|
|
177
179
|
}[] | null)[];
|
|
180
|
+
timeOff?: ({
|
|
181
|
+
timeOff: "approved" | "pending";
|
|
182
|
+
requestId?: string | undefined;
|
|
183
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
184
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
185
|
+
reason: string;
|
|
186
|
+
half?: boolean | undefined;
|
|
187
|
+
halfPart?: "AM" | "PM" | undefined;
|
|
188
|
+
from?: string | undefined;
|
|
189
|
+
to?: string | undefined;
|
|
190
|
+
appliedOn?: string | undefined;
|
|
191
|
+
note?: string | undefined;
|
|
192
|
+
cert?: {
|
|
193
|
+
name: string;
|
|
194
|
+
size: string;
|
|
195
|
+
} | null | undefined;
|
|
196
|
+
bal?: {
|
|
197
|
+
type: string;
|
|
198
|
+
entitled: number;
|
|
199
|
+
used: number;
|
|
200
|
+
} | undefined;
|
|
201
|
+
} | null)[] | undefined;
|
|
178
202
|
remarks: {
|
|
179
203
|
author: string;
|
|
180
204
|
date: string;
|
|
@@ -218,8 +242,8 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
|
|
|
218
242
|
totalHours: import("vue").ComputedRef<number>;
|
|
219
243
|
totalLabel: import("vue").ComputedRef<string>;
|
|
220
244
|
warnings: import("vue").ComputedRef<ScheduleWarningPart[][]>;
|
|
221
|
-
openForEmployee: (forEmpId: number, day: number, roleHint?: string, hours?: ScheduleShiftSegment, slotIndex?: number) => void;
|
|
222
|
-
openForNewOpenShift: (day: number, roleHint?: string, hours?: ScheduleShiftSegment) => void;
|
|
245
|
+
openForEmployee: (forEmpId: number, day: number, roleHint?: string, hours?: ScheduleShiftSegment, slotIndex?: number, warnAvailability?: boolean) => void;
|
|
246
|
+
openForNewOpenShift: (day: number, roleHint?: string, hours?: ScheduleShiftSegment, requireAssignment?: boolean) => void;
|
|
223
247
|
openForEditOpenShift: (openShiftId: number) => void;
|
|
224
248
|
close: () => void;
|
|
225
249
|
removeSegment: (i: number) => void;
|
|
@@ -7,9 +7,14 @@ export interface CountryScheduleRules {
|
|
|
7
7
|
maxHoursPerMonth: number | null;
|
|
8
8
|
};
|
|
9
9
|
workingHours: {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
fullTime: {
|
|
11
|
+
minHoursPerDay: number | null;
|
|
12
|
+
maxHoursPerDay: number | null;
|
|
13
|
+
maxHoursPerWeek: number | null;
|
|
14
|
+
};
|
|
15
|
+
partTime: {
|
|
16
|
+
maxHoursPerWeek: number | null;
|
|
17
|
+
};
|
|
13
18
|
};
|
|
14
19
|
recurringPublicHolidays: Array<{
|
|
15
20
|
month: number;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import ScheduleAPI from '@/api/schedule';
|
|
2
2
|
import type { IFdtoPosUserSummary } from '@/types/employee';
|
|
3
|
-
import type { FdtoScheduleAssignment, FdtoScheduleAutoScheduleApplyReq, FdtoScheduleAutoScheduleApplyResult, FdtoScheduleAutoScheduleCapabilities, FdtoScheduleAutoScheduleGenerateReq, FdtoScheduleAutoScheduleResult, FdtoScheduleBulkUpdateAssignmentStatusReq, FdtoScheduleCreateEmployeeProfileReq, FdtoScheduleSaveAssignmentReq, FdtoScheduleSavePositionReq, FdtoScheduleSaveScheduleDayReq, FdtoScheduleUpdateEmployeeProfileReq, FdtoScheduleValidatePosAccessReq, FdtoScheduleCreateTimeOffReq, FdtoScheduleTimeOff, FdtoScheduleUpdateTimeOffStatusReq, FdtoScheduleSaveEmployeeConfigsReq, ScheduleReplaceDemandReq } from '@/types/schedule';
|
|
3
|
+
import type { FdtoScheduleAssignment, FdtoScheduleAutoScheduleApplyReq, FdtoScheduleAutoScheduleApplyResult, FdtoScheduleAutoScheduleCapabilities, FdtoScheduleAutoScheduleGenerateReq, FdtoScheduleAutoScheduleResult, FdtoScheduleBulkUpdateAssignmentStatusReq, FdtoScheduleCreateEmployeeProfileReq, FdtoScheduleSaveAssignmentReq, FdtoScheduleSavePositionReq, FdtoScheduleSaveScheduleDayReq, FdtoScheduleSaveSettingsReq, FdtoScheduleSettings, FdtoScheduleUpdateEmployeeProfileReq, FdtoScheduleValidatePosAccessReq, FdtoScheduleCreateTimeOffReq, FdtoScheduleTimeOff, FdtoScheduleUpdateTimeOffStatusReq, FdtoScheduleSaveEmployeeConfigsReq, ScheduleReplaceDemandReq } from '@/types/schedule';
|
|
4
4
|
import { isoDateKey } from './composables/schedule-calendar';
|
|
5
5
|
export { businessEmployees, dataVersion, employeeOutletIds, loadError, loading, outletId, payload, restaurantEmployees, employeeConfigs, rosterLoading, scheduleSetupCompleted, } from './schedule-state';
|
|
6
6
|
/** dayjs-free local-date key — the board's own isoDateKey, repeated here so the store does not
|
|
@@ -21,6 +21,8 @@ export declare function setOutlet(restaurantId: string): boolean;
|
|
|
21
21
|
* headcounts sit nowhere near it. */
|
|
22
22
|
export declare function ensureRestaurantEmployeesLoaded(restaurantId: string): Promise<void>;
|
|
23
23
|
export declare function saveEmployeeConfigs(configs: FdtoScheduleSaveEmployeeConfigsReq['configs']): Promise<void>;
|
|
24
|
+
/** Saves outlet settings and keeps the board payload authoritative for any later cache rebuild. */
|
|
25
|
+
export declare function saveScheduleSettings(req: FdtoScheduleSaveSettingsReq): Promise<FdtoScheduleSettings>;
|
|
24
26
|
export declare function setEmployeeSchedulingEnabled(employeeId: string, enabled: boolean): Promise<void>;
|
|
25
27
|
/** Re-reads this outlet's POS roster. The roster is what the board's rows are built from and is
|
|
26
28
|
* otherwise fetched once per outlet, so any write that changes who works here (add, remove)
|
|
@@ -30,7 +32,7 @@ export declare function refreshRestaurantEmployees(): Promise<void>;
|
|
|
30
32
|
export declare function addEmployeeToOutlet(employeeId: string, roleId: string): Promise<void>;
|
|
31
33
|
/** Adds an employee to several outlets at once. Scheduling does not require a POS role, so the
|
|
32
34
|
* caller may pass an empty role id and assign the POS role later from Employee. */
|
|
33
|
-
export declare function addEmployeeToOutlets(employeeId: string, restaurantIds: string[], roleId?: string): Promise<void>;
|
|
35
|
+
export declare function addEmployeeToOutlets(employeeId: string, restaurantIds: string[], roleId?: string, enableScheduling?: boolean): Promise<void>;
|
|
34
36
|
/** Takes a POS user off the given outlets' rosters; their other outlets are untouched. */
|
|
35
37
|
export declare function removeEmployeeFromOutlets(employeeId: string, restaurantIds: string[]): Promise<void>;
|
|
36
38
|
/** Takes a POS user off this outlet's roster only. */
|
|
@@ -112,11 +114,9 @@ export declare function generateAutoSchedule(req: FdtoScheduleAutoScheduleGenera
|
|
|
112
114
|
export declare function getAutoScheduleCapabilities(): Promise<FdtoScheduleAutoScheduleCapabilities>;
|
|
113
115
|
export declare function applyAutoSchedule(req: FdtoScheduleAutoScheduleApplyReq): Promise<FdtoScheduleAutoScheduleApplyResult>;
|
|
114
116
|
/** A one-off shift assignment — someone working these hours on this date, not answering any
|
|
115
|
-
* Shift requirement.
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
* discarding some OTHER unsaved shift elsewhere on the board (shifts have no write path of
|
|
119
|
-
* their own to read back from yet). */
|
|
117
|
+
* Shift requirement. Keep the raw payload in sync without bumping `dataVersion`: the current
|
|
118
|
+
* board owns the live draft, while a later roster refresh may rebuild the week cache from this
|
|
119
|
+
* payload. */
|
|
120
120
|
export declare function createAssignment(req: FdtoScheduleSaveAssignmentReq): Promise<FdtoScheduleAssignment>;
|
|
121
121
|
export declare function updateAssignment(id: string, req: FdtoScheduleSaveAssignmentReq): Promise<FdtoScheduleAssignment | null>;
|
|
122
122
|
export declare function bulkSaveAssignments(req: Parameters<typeof ScheduleAPI.bulkSaveAssignments>[1]): Promise<Awaited<ReturnType<typeof ScheduleAPI.bulkSaveAssignments>>>;
|
|
@@ -109,6 +109,9 @@ export interface Employee {
|
|
|
109
109
|
archivedPositions?: string[];
|
|
110
110
|
/** One entry per visible day of the horizon; null = day off. */
|
|
111
111
|
shifts: DaySlot[];
|
|
112
|
+
/** Dated time-off records are kept beside shifts so an off/leave card remains visible when
|
|
113
|
+
* a manager adds a shift on the same day. */
|
|
114
|
+
timeOff?: Array<LeaveSlot | null>;
|
|
112
115
|
remarks: EmployeeRemark[];
|
|
113
116
|
section: string;
|
|
114
117
|
compGroup?: string;
|
|
@@ -372,4 +375,6 @@ export interface Proposal {
|
|
|
372
375
|
weekKey?: string;
|
|
373
376
|
/** Why this person, for the card's tooltip. */
|
|
374
377
|
reason?: string;
|
|
378
|
+
/** Set when the server already knows applying this row would be refused; it starts rejected. */
|
|
379
|
+
rejectReason?: string;
|
|
375
380
|
}
|