@feedmepos/mf-hrm-portal 2.3.0-dev.13 → 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 (65) hide show
  1. package/dist/{ApprovalCodeList-D3egZFML.js → ApprovalCodeList-CY0ox1dX.js} +4 -4
  2. package/dist/{AuditLogList-BzbaEsSj.js → AuditLogList-CBkA-KQT.js} +17 -18
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-Do52KbKm.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-B8cb8yqV.js} +2 -2
  4. package/dist/{EmployeeList-BiM8dRwZ.js → EmployeeList-0PrcuHPJ.js} +255 -267
  5. package/dist/{FormItem.vue_vue_type_script_setup_true_lang-CUnlKsxk.js → FormItem.vue_vue_type_script_setup_true_lang-rjDE1B4E.js} +6 -6
  6. package/dist/{GrantUserList-Dj2ms20E.js → GrantUserList-Dw923P2j.js} +5 -5
  7. package/dist/{Main-DmpwTPaI.js → Main-BqX7n1ik.js} +9 -9
  8. package/dist/{Main-C2z7Jf9A.js → Main-C0bcn2NY.js} +5 -5
  9. package/dist/{Main-DklZWoKj.js → Main-Dpf2KdSH.js} +2 -2
  10. package/dist/{PermissionSetList-C-qgCcRO.js → PermissionSetList-xrI130SW.js} +5 -5
  11. package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-ggZB5zWW.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-3_8qycrF.js} +465 -465
  12. package/dist/{RoleList-ohfin77B.js → RoleList-DPkG5dg9.js} +7 -7
  13. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-DYLLW46A.js +501 -0
  14. package/dist/{ScheduleGeneralPage-aCljFf21.js → ScheduleGeneralPage-CISbuAff.js} +141 -143
  15. package/dist/{ScheduleModal.vue_vue_type_script_setup_true_lang-x_-BYkcc.js → ScheduleModal.vue_vue_type_script_setup_true_lang-BeTuMw3f.js} +989 -858
  16. package/dist/SchedulePage-Dn6_TiBS.js +18757 -0
  17. package/dist/{SchedulePositionPage-CID91orD.js → SchedulePositionPage-Cu3WRfH-.js} +79 -81
  18. package/dist/{SelectFilter-CG13h83-.js → SelectFilter-ssnRUIN6.js} +1 -1
  19. package/dist/{TeamMemberList-DJIKL4dE.js → TeamMemberList-DTqNCDJb.js} +35 -36
  20. package/dist/{TimesheetList-BPXWPNfT.js → TimesheetList-CA19TmKm.js} +52 -53
  21. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-DVcV0knM.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-B1jnsZpD.js} +2 -2
  22. package/dist/{app-Bz8568j8.js → app-3xGY2Rn0.js} +2062 -1800
  23. package/dist/app.js +1 -1
  24. package/dist/{dayjs.min-DhSRKSu4.js → dayjs.min-C_c8OoEU.js} +1 -1
  25. package/dist/{employee-BM44u8b-.js → employee-Dt0y51t3.js} +3 -3
  26. package/dist/{iteration-BHDxs89d.js → iteration-C4YvbrCe.js} +1 -1
  27. package/dist/{lodash-DgSYLwYD.js → lodash-huRs3Cbj.js} +1 -1
  28. package/dist/object-Dwyg2LgX.js +16 -0
  29. package/dist/{role-BMJ7LEHN.js → role-fM58UmtC.js} +1 -1
  30. package/dist/{rule-CCo7_ckA.js → rule-CCN0QCPF.js} +2 -2
  31. package/dist/src/views/audit-log/locales/index.d.ts +252 -0
  32. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +2 -0
  33. package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +1 -0
  34. package/dist/src/views/scheduling/components/ScheduleOnboardingSettings.vue.d.ts +6 -0
  35. package/dist/src/views/scheduling/composables/onboarding-types.d.ts +2 -1
  36. package/dist/src/views/scheduling/composables/schedule-demand-domain.d.ts +13 -1
  37. package/dist/src/views/scheduling/composables/schedule-error.d.ts +3 -0
  38. package/dist/src/views/scheduling/composables/schedule-quick-pick.d.ts +22 -0
  39. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +5 -2
  40. package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +3 -11
  41. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +7 -0
  42. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +45 -1
  43. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +13 -1
  44. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +2 -2
  45. package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +1 -0
  46. package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +14 -6
  47. package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +3 -0
  48. package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +0 -2
  49. package/dist/src/views/scheduling/composables/useScheduleOnboardingEmployees.d.ts +25 -0
  50. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +163 -4
  51. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +44 -0
  52. package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +2 -2
  53. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +22 -0
  54. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +26 -2
  55. package/dist/src/views/scheduling/country-rules/index.d.ts +8 -3
  56. package/dist/src/views/scheduling/data.d.ts +17 -0
  57. package/dist/src/views/scheduling/schedule-store.d.ts +7 -7
  58. package/dist/src/views/scheduling/types.d.ts +5 -0
  59. package/dist/style.css +1 -1
  60. package/dist/tsconfig.app.tsbuildinfo +1 -1
  61. package/dist/{useReportPermissions-C_Cd__n1.js → useReportPermissions-BlX_Mk5f.js} +3 -3
  62. package/package.json +1 -1
  63. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-diuWysro.js +0 -492
  64. package/dist/SchedulePage-DdMHF6kX.js +0 -17993
  65. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +0 -9
@@ -36,7 +36,7 @@ export interface ScheduleTimelineRow {
36
36
  bars: ScheduleTimelineBar[];
37
37
  minHeight?: number;
38
38
  emptyText?: string;
39
- onTrackClick?: () => void;
39
+ onTrackClick?: (anchor: HTMLElement) => void;
40
40
  }
41
41
  export interface ScheduleHourCell {
42
42
  m: number;
@@ -48,7 +48,7 @@ export interface ScheduleHourCell {
48
48
  n: number;
49
49
  }
50
50
  export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster: ScheduleRosterApi, areaBoard: ScheduleAreaBoardApi, demand: ScheduleDemandApi, handlers: {
51
- onAddShift: (empId: number, dayIdx: number) => void;
51
+ onAddShift: (empId: number, dayIdx: number, anchor: HTMLElement) => void;
52
52
  onEditShift: (empId: number, dayIdx: number) => void;
53
53
  onEditLeave: (empId: number, dayIdx: number) => void;
54
54
  onOpenDemand: (dayIdx: number) => void;
@@ -50,5 +50,6 @@ export declare function useScheduleDragDrop(board: ScheduleBoardApi): {
50
50
  setDragHover: (empId: number, dayIdx: number, onCard: boolean, slotIndex: number | null) => void;
51
51
  clearDragHover: (empId: number, dayIdx: number) => void;
52
52
  dropOnCell: (targetEmpId: number, targetDayIdx: number) => void;
53
+ dropOnPosition: (targetDayIdx: number, targetPosition: string) => void;
53
54
  };
54
55
  export type ScheduleDragDropApi = ReturnType<typeof useScheduleDragDrop>;
@@ -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;
@@ -181,7 +203,10 @@ export declare function useScheduleOnboardingEmployees(options: ScheduleOnboardi
181
203
  seedEmployees: (missingOnly?: boolean) => void;
182
204
  pickAll: (checked: boolean) => void;
183
205
  setPosition: (empId: number, value: string) => void;
206
+ removePositionFromRows: (position: string) => void;
207
+ toggleSecond: (empId: number, position: string) => void;
184
208
  setEmployment: (empId: number, kind: TeamEmployment) => void;
209
+ maxHoursFor: (employment: TeamEmployment) => number | null;
185
210
  setHours: (empId: number, value: string) => void;
186
211
  setRate: (empId: number, value: string) => void;
187
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,8 +687,29 @@ 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
- removePosition: (id: string) => void;
712
+ removePosition: (id: string) => Promise<void>;
648
713
  reviewRows: import("vue").ComputedRef<ReviewRow[]>;
649
714
  goTo: (target: ScheduleOnboardingStep) => void;
650
715
  avail: Record<number, import("./onboarding-types").AvailRow>;
@@ -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;
@@ -824,7 +911,10 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
824
911
  teamSomePicked: import("vue").ComputedRef<boolean>;
825
912
  pickAll: (checked: boolean) => void;
826
913
  setPosition: (empId: number, value: string) => void;
914
+ removePositionFromRows: (position: string) => void;
915
+ toggleSecond: (empId: number, position: string) => void;
827
916
  setEmployment: (empId: number, kind: import("./onboarding-types").TeamEmployment) => void;
917
+ maxHoursFor: (employment: import("./onboarding-types").TeamEmployment) => number | null;
828
918
  setHours: (empId: number, value: string) => void;
829
919
  setRate: (empId: number, value: string) => void;
830
920
  bulkOpen: import("vue").Ref<boolean, boolean>;
@@ -934,6 +1024,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
934
1024
  updatedAt?: string | undefined;
935
1025
  splitGroupId?: string | undefined;
936
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;
937
1049
  remarks: {
938
1050
  author: string;
939
1051
  date: string;
@@ -1061,6 +1173,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1061
1173
  updatedAt?: string | undefined;
1062
1174
  splitGroupId?: string | undefined;
1063
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;
1064
1198
  remarks: {
1065
1199
  author: string;
1066
1200
  date: string;
@@ -1192,6 +1326,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1192
1326
  updatedAt?: string | undefined;
1193
1327
  splitGroupId?: string | undefined;
1194
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;
1195
1351
  remarks: {
1196
1352
  author: string;
1197
1353
  date: string;
@@ -1295,7 +1451,6 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1295
1451
  passcodeOk: import("vue").ComputedRef<boolean>;
1296
1452
  currentLocationLabel: import("vue").ComputedRef<string>;
1297
1453
  locationOptions: import("vue").Reactive<string[]>;
1298
- masterCodeError: import("vue").ComputedRef<boolean>;
1299
1454
  isNewUser: import("vue").ComputedRef<boolean>;
1300
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.">;
1301
1456
  primaryRoleLabel: import("vue").ComputedRef<string>;
@@ -1331,7 +1486,8 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1331
1486
  setAvailHour: (index: number, field: "from" | "to", value: string) => void;
1332
1487
  copyAvailHourDown: (index: number) => void;
1333
1488
  setPasscodeDigit: (index: number, value: string) => void;
1334
- generatePasscode: () => void;
1489
+ generatePasscode: () => Promise<void>;
1490
+ isGeneratingPasscode: import("vue").Ref<boolean, boolean>;
1335
1491
  togglePosAccess: () => void;
1336
1492
  addPosRoleRow: () => void;
1337
1493
  removePosRoleRow: (index: number) => void;
@@ -1339,6 +1495,9 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1339
1495
  setPosRoleOutlet: (index: number, outlet: string) => void;
1340
1496
  setPosRoleId: (index: number, roleId: string) => void;
1341
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;
1342
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.">;
1343
1502
  create: () => Promise<boolean>;
1344
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;
@@ -25,6 +25,23 @@ export declare function positionIdOf(name: string): string | undefined;
25
25
  /** The selector shape every position-carrying save request wants — `undefined` for a blank
26
26
  * name (the field itself has nothing to name), a resolved id alongside the name otherwise. */
27
27
  export declare function positionSelectorOf(name: string | undefined, positionId?: string): FdtoSchedulePositionSelectorReq | undefined;
28
+ /** Position IDs are authoritative after a rename. Keep the stored name only as a fallback for
29
+ * archived or legacy references that cannot be resolved back to the active catalogue. */
30
+ export declare function positionNameOf(position: {
31
+ positionId?: string | null;
32
+ positionName: string;
33
+ } | null | undefined, catalogue?: readonly {
34
+ id: string;
35
+ name: string;
36
+ }[]): string | undefined;
37
+ /** Resolves a position only when it still exists in the active catalogue. */
38
+ export declare function activePositionNameOf(position: {
39
+ positionId?: string | null;
40
+ positionName: string;
41
+ } | null | undefined, catalogue?: readonly {
42
+ id: string;
43
+ name: string;
44
+ }[]): string | undefined;
28
45
  /** A saved position reference can outlive its catalogue entry after a soft delete. */
29
46
  export declare function isArchivedPosition(name: string | undefined, positionId?: string): boolean;
30
47
  /** Which coverage positions a station label counts toward. Positions ARE the roles in this
@@ -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
  }