@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.
Files changed (60) hide show
  1. package/dist/{ApprovalCodeList-C9dauQ81.js → ApprovalCodeList-CY0ox1dX.js} +4 -4
  2. package/dist/{AuditLogList-zW_N_ECT.js → AuditLogList-CBkA-KQT.js} +4 -4
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-DJuO1qPX.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-B8cb8yqV.js} +2 -2
  4. package/dist/{EmployeeList-8jkHTd7q.js → EmployeeList-0PrcuHPJ.js} +6 -6
  5. 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
  6. package/dist/{GrantUserList-Dj55GA7O.js → GrantUserList-Dw923P2j.js} +5 -5
  7. package/dist/{Main-BQNkTyET.js → Main-BqX7n1ik.js} +9 -9
  8. package/dist/{Main-0TfvGJ4N.js → Main-C0bcn2NY.js} +5 -5
  9. package/dist/{Main-CuUG6svQ.js → Main-Dpf2KdSH.js} +2 -2
  10. package/dist/{PermissionSetList-BsLi-TOK.js → PermissionSetList-xrI130SW.js} +5 -5
  11. 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
  12. package/dist/{RoleList-DLDcyVWT.js → RoleList-DPkG5dg9.js} +7 -7
  13. package/dist/{ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-CUXUPfRc.js → ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-DYLLW46A.js} +111 -111
  14. package/dist/{ScheduleGeneralPage-BhYI6O9g.js → ScheduleGeneralPage-CISbuAff.js} +86 -87
  15. package/dist/{ScheduleModal.vue_vue_type_script_setup_true_lang-BLBLBtNG.js → ScheduleModal.vue_vue_type_script_setup_true_lang-BeTuMw3f.js} +931 -823
  16. package/dist/SchedulePage-Dn6_TiBS.js +18757 -0
  17. package/dist/{SchedulePositionPage-Byt6nmUj.js → SchedulePositionPage-Cu3WRfH-.js} +16 -16
  18. package/dist/{SelectFilter-1fh00OZW.js → SelectFilter-ssnRUIN6.js} +1 -1
  19. package/dist/{TeamMemberList-CyUX8Afk.js → TeamMemberList-DTqNCDJb.js} +7 -7
  20. package/dist/{TimesheetList-Q4FeNgOT.js → TimesheetList-CA19TmKm.js} +6 -6
  21. 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
  22. package/dist/{app-TuHQoM7K.js → app-3xGY2Rn0.js} +1535 -1283
  23. package/dist/app.js +1 -1
  24. package/dist/{dayjs.min-DXnA8GYn.js → dayjs.min-C_c8OoEU.js} +1 -1
  25. package/dist/{employee-Ctnil3cD.js → employee-Dt0y51t3.js} +3 -3
  26. package/dist/{iteration-BxOzv27y.js → iteration-C4YvbrCe.js} +1 -1
  27. package/dist/{lodash-CKT_RxJs.js → lodash-huRs3Cbj.js} +1 -1
  28. package/dist/{role-CNEJPyaD.js → role-fM58UmtC.js} +1 -1
  29. package/dist/{rule-FbuHv6Gh.js → rule-CCN0QCPF.js} +2 -2
  30. package/dist/src/views/audit-log/locales/index.d.ts +252 -0
  31. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +2 -0
  32. package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +1 -0
  33. package/dist/src/views/scheduling/components/ScheduleOnboardingSettings.vue.d.ts +6 -0
  34. package/dist/src/views/scheduling/composables/schedule-demand-domain.d.ts +13 -1
  35. package/dist/src/views/scheduling/composables/schedule-error.d.ts +3 -0
  36. package/dist/src/views/scheduling/composables/schedule-quick-pick.d.ts +22 -0
  37. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +5 -2
  38. package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +3 -11
  39. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +7 -0
  40. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +45 -1
  41. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +10 -0
  42. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +2 -2
  43. package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +1 -0
  44. package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +14 -6
  45. package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +3 -0
  46. package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +0 -2
  47. package/dist/src/views/scheduling/composables/useScheduleOnboardingEmployees.d.ts +23 -0
  48. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +160 -3
  49. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +44 -0
  50. package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +2 -2
  51. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +22 -0
  52. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +26 -2
  53. package/dist/src/views/scheduling/country-rules/index.d.ts +8 -3
  54. package/dist/src/views/scheduling/schedule-store.d.ts +7 -7
  55. package/dist/src/views/scheduling/types.d.ts +5 -0
  56. package/dist/style.css +1 -1
  57. package/dist/tsconfig.app.tsbuildinfo +1 -1
  58. package/dist/{useReportPermissions-lemBrd1S.js → useReportPermissions-BlX_Mk5f.js} +3 -3
  59. package/package.json +1 -1
  60. 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 { 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>;
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
- 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.">;
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 is a session choice: the banner is cheap enough to see
3
- * again on the next visit while the outlet really is unconfigured.
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
- minHoursPerDay: number | null;
11
- maxHoursPerDay: number | null;
12
- maxHoursPerWeek: number | null;
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. Deliberately does not reload: unlike `createEmployeeProfile` above, there
116
- * is nothing here a reload could bring back that the caller doesn't already have — `commitShift`
117
- * writes `assignmentId` onto the slot itself once this resolves, and a reload would only risk
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
  }