@feedmepos/mf-hrm-portal 2.3.0-dev.9 → 2.3.0

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 (115) hide show
  1. package/dist/{ApprovalCodeList-BDpxEJpC.js → ApprovalCodeList-DwubNElp.js} +7 -7
  2. package/dist/{AuditLogList-Dgwj1gz8.js → AuditLogList-CTeMbyHL.js} +18 -19
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-BBK2gl7r.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-CmLLNcB4.js} +2 -2
  4. package/dist/{EmployeeList-C8cbVcmY.js → EmployeeList-DEAJPx9F.js} +255 -266
  5. package/dist/{FormItem.vue_vue_type_script_setup_true_lang-CUnlKsxk.js → FormItem.vue_vue_type_script_setup_true_lang-OAvd6eHM.js} +6 -6
  6. package/dist/{GrantUserList-zul0_Dlm.js → GrantUserList-Dx4jF2qJ.js} +8 -8
  7. package/dist/{Main-Cjo4FMZZ.js → Main-BirWXk7o.js} +5 -5
  8. package/dist/{Main-DSr9KbjT.js → Main-C2PBSCte.js} +11 -11
  9. package/dist/{Main-5TsFTFpc.js → Main-CL5JYCPg.js} +8 -8
  10. package/dist/{PermissionSetList-CDhiiu37.js → PermissionSetList-BtYcqPiO.js} +19 -18
  11. package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DoK944l0.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-BXw4aX39.js} +1127 -1127
  12. package/dist/{PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-BVz6q3HE.js → PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-DaAx79pC.js} +1 -1
  13. package/dist/ResponsiveContextMenu.vue_vue_type_script_setup_true_lang-mSJFKo7r.js +132 -0
  14. package/dist/{RoleList-DEbOPQD_.js → RoleList-YS_LBfoJ.js} +21 -20
  15. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-BorKuXxL.js +530 -0
  16. package/dist/{ScheduleGeneralPage-B8PWNsc2.js → ScheduleGeneralPage-C1p2mivt.js} +252 -248
  17. package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-CnKzVz3I.js +2457 -0
  18. package/dist/SchedulePage-BP7x7JAl.js +19485 -0
  19. package/dist/{SchedulePositionPage-Cuv4ydOK.js → SchedulePositionPage-BogOQZVW.js} +78 -80
  20. package/dist/{SelectFilter-CG13h83-.js → SelectFilter-Dh3eY1hV.js} +1 -1
  21. package/dist/{TeamMemberList-DpCGqHCk.js → TeamMemberList-Bv6_2bzs.js} +27 -27
  22. package/dist/{TimesheetList-B7HAC5zS.js → TimesheetList-B3BmpH0I.js} +52 -53
  23. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-BGD6m5M-.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-C4rbnZh1.js} +3 -3
  24. package/dist/{app-Lh0cqgHy.js → app-CyS8c8dx.js} +2879 -2462
  25. package/dist/app.js +1 -1
  26. package/dist/{approval-code-DHsUgc4K.js → approval-code-BIpLingm.js} +1 -1
  27. package/dist/{dayjs.min-joq4stsa.js → dayjs.min-BRlEc3-d.js} +1 -1
  28. package/dist/{employee-BPmp9c6i.js → employee-CcdjLOLQ.js} +51 -47
  29. package/dist/{grant-user-qzKHFTro.js → grant-user-uZmvD_bw.js} +1 -1
  30. package/dist/{iteration-jvdTHQUx.js → iteration-CL1RDmws.js} +1 -1
  31. package/dist/{lodash-CIAEpr9s.js → lodash-C00ieagp.js} +1 -1
  32. package/dist/object-Dwyg2LgX.js +16 -0
  33. package/dist/{restaurant-BbYRA_IT.js → restaurant-CHpkjUPy.js} +46 -47
  34. package/dist/{role-Dd1TUMhn.js → role-DtatkKp9.js} +2 -2
  35. package/dist/{rule-DmxI7qEY.js → rule-DJJMpkoG.js} +3 -3
  36. package/dist/src/api/employee/index.d.ts +2 -2
  37. package/dist/src/api/schedule/index.d.ts +11 -1
  38. package/dist/src/components/layout/SchedulePromoBanner.vue.d.ts +2 -0
  39. package/dist/src/composables/useDiscardConfirm.d.ts +3 -1
  40. package/dist/src/stores/employee.d.ts +12 -12
  41. package/dist/src/types/schedule.d.ts +1 -1
  42. package/dist/src/views/audit-log/locales/index.d.ts +252 -0
  43. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +6 -2
  44. package/dist/src/views/scheduling/components/ScheduleAutoScheduleDoneArt.vue.d.ts +2 -0
  45. package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +2 -0
  46. package/dist/src/views/scheduling/components/ScheduleBoardGridHeader.vue.d.ts +5 -0
  47. package/dist/src/views/scheduling/components/ScheduleBoardInteractionOverlays.vue.d.ts +2 -0
  48. package/dist/src/views/scheduling/components/ScheduleBoardOnboardingOverlays.vue.d.ts +1 -0
  49. package/dist/src/views/scheduling/components/ScheduleBoardToolbar.vue.d.ts +0 -1
  50. package/dist/src/views/scheduling/components/ScheduleCompletionDialog.vue.d.ts +1 -1
  51. package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +4 -1
  52. package/dist/src/views/scheduling/components/ScheduleDayTimeline.vue.d.ts +5 -0
  53. package/dist/src/views/scheduling/components/ScheduleLoadState.vue.d.ts +0 -1
  54. package/dist/src/views/scheduling/components/ScheduleOnboardingSettings.vue.d.ts +6 -0
  55. package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +1 -1
  56. package/dist/src/views/scheduling/composables/auto-schedule-mapping.d.ts +3 -3
  57. package/dist/src/views/scheduling/composables/onboarding-types.d.ts +2 -1
  58. package/dist/src/views/scheduling/composables/remyPrompt.d.ts +4 -2
  59. package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +4 -0
  60. package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +1 -3
  61. package/dist/src/views/scheduling/composables/schedule-demand-domain.d.ts +13 -1
  62. package/dist/src/views/scheduling/composables/schedule-error.d.ts +1 -0
  63. package/dist/src/views/scheduling/composables/schedule-leave-split.d.ts +5 -0
  64. package/dist/src/views/scheduling/composables/schedule-quick-pick.d.ts +22 -0
  65. package/dist/src/views/scheduling/composables/schedule-shift-time.d.ts +3 -0
  66. package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +3 -1
  67. package/dist/src/views/scheduling/composables/useRemyAppStore.d.ts +1 -0
  68. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +25 -2
  69. package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +3 -11
  70. package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +0 -1
  71. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +22 -13
  72. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +58 -7
  73. package/dist/src/views/scheduling/composables/useScheduleCopyWeek.d.ts +3 -10
  74. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +13 -1
  75. package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +0 -1
  76. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +16 -2
  77. package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +7 -0
  78. package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +1 -0
  79. package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +14 -6
  80. package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +26 -4
  81. package/dist/src/views/scheduling/composables/useScheduleEmployeePersistence.d.ts +3 -0
  82. package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +0 -2
  83. package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +1 -0
  84. package/dist/src/views/scheduling/composables/useScheduleLeave.d.ts +5 -1
  85. package/dist/src/views/scheduling/composables/useScheduleOnboardingDemand.d.ts +1 -1
  86. package/dist/src/views/scheduling/composables/useScheduleOnboardingEmployees.d.ts +28 -2
  87. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +203 -8
  88. package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +11 -8
  89. package/dist/src/views/scheduling/composables/useSchedulePageActions.d.ts +1 -1
  90. package/dist/src/views/scheduling/composables/useSchedulePageCellDrop.d.ts +3 -1
  91. package/dist/src/views/scheduling/composables/useSchedulePageClearActions.d.ts +1 -0
  92. package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +6 -0
  93. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +2 -1
  94. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +46 -0
  95. package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +2 -2
  96. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +29 -1
  97. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +32 -3
  98. package/dist/src/views/scheduling/country-rules/index.d.ts +8 -3
  99. package/dist/src/views/scheduling/data.d.ts +17 -0
  100. package/dist/src/views/scheduling/locales/index.d.ts +28 -0
  101. package/dist/src/views/scheduling/schedule-state.d.ts +236 -236
  102. package/dist/src/views/scheduling/schedule-store.d.ts +26 -7
  103. package/dist/src/views/scheduling/types.d.ts +8 -0
  104. package/dist/style.css +1 -1
  105. package/dist/tsconfig.app.tsbuildinfo +1 -1
  106. package/dist/{useAppStore-BoLkvkE2.js → useAppStore-Bp0PwbAN.js} +1 -1
  107. package/dist/useDiscardConfirm-CzZSPyvh.js +28 -0
  108. package/dist/{useLoading-Ch1AUYT1.js → useLoading-sgL8DRUz.js} +1 -1
  109. package/dist/{useReportPermissions-DM3GOFCC.js → useReportPermissions-DI-xg3OX.js} +3 -3
  110. package/package.json +2 -2
  111. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-Cx9jFgBS.js +0 -492
  112. package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-V1sZ_xhO.js +0 -2253
  113. package/dist/SchedulePage-ndLByVBl.js +0 -17785
  114. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +0 -9
  115. package/dist/useDiscardConfirm-DPhEV6v0.js +0 -157
@@ -1,5 +1,7 @@
1
1
  import { type ComputedRef } from 'vue';
2
+ import type { IFdtoPosUserSummary } from '@/types/employee';
2
3
  import type { ScheduleAddEmployeeForm, ScheduleAddEmployeeStep } from './schedule-add-employee-form';
4
+ import type { ExistingStaffCandidate } from '../types';
3
5
  import type { ScheduleBoardApi } from './useScheduleBoard';
4
6
  interface UseScheduleEmployeeCandidatesOptions {
5
7
  board: ScheduleBoardApi;
@@ -11,16 +13,36 @@ interface UseScheduleEmployeeCandidatesOptions {
11
13
  open: {
12
14
  value: boolean;
13
15
  };
14
- onPicked: (employeeId: string) => void;
15
- onPrefillPasscode: (employeeId: string) => void;
16
- onPrefillPosRoles: (employeeId: string) => void;
16
+ onPicked: (employeeId: string, employee?: IFdtoPosUserSummary) => void;
17
+ onPrefillPasscode: (employeeId: string, employee?: IFdtoPosUserSummary) => void | Promise<void>;
18
+ onPrefillPosRoles: (employeeId: string, employee?: IFdtoPosUserSummary) => void | Promise<void>;
19
+ onPrefillPosRoleAccess: (roleIds: string[] | null | undefined) => void;
20
+ onPrefillPosRestaurantAccess: (restaurantIds: string[] | null | undefined) => void;
17
21
  }
18
22
  /** Directory lookup and profile prefill for the existing-employee path of the add wizard. */
19
23
  export declare function useScheduleEmployeeCandidates(options: UseScheduleEmployeeCandidatesOptions): {
20
24
  selectExistingOpen: import("vue").Ref<boolean, boolean>;
25
+ candidates: import("vue").Ref<{
26
+ employeeId: string;
27
+ name: string;
28
+ otherOutlets: string[];
29
+ locations: string[];
30
+ }[], ExistingStaffCandidate[] | {
31
+ employeeId: string;
32
+ name: string;
33
+ otherOutlets: string[];
34
+ locations: string[];
35
+ }[]>;
36
+ candidatesTotal: import("vue").Ref<number, number>;
37
+ candidatesPage: import("vue").Ref<number, number>;
38
+ candidatesPageItemCount: import("vue").Ref<number, number>;
39
+ candidatesPageSize: number;
21
40
  candidatesLoading: import("vue").Ref<boolean, boolean>;
22
41
  candidatesError: import("vue").Ref<string | null, string | null>;
23
- openSelectExisting: () => void;
42
+ selectingExisting: import("vue").Ref<boolean, boolean>;
43
+ openSelectExisting: (search?: string) => void;
44
+ searchExisting: (search: string) => void;
45
+ goToExistingPage: (page: number, search: string) => void;
24
46
  closeSelectExisting: () => void;
25
47
  pickExisting: (employeeId: string) => Promise<void>;
26
48
  };
@@ -1,9 +1,11 @@
1
1
  import type { ComputedRef, Ref } from 'vue';
2
+ import type { IFdtoPosUserSummary } from '@/types/employee';
2
3
  import { type ScheduleAddEmployeeForm } from './schedule-add-employee-form';
3
4
  import type { ScheduleBoardApi } from './useScheduleBoard';
4
5
  interface UseScheduleEmployeePersistenceOptions {
5
6
  form: ScheduleAddEmployeeForm;
6
7
  pickedEmployeeId: Ref<string | null>;
8
+ selectedBusinessEmployee: Ref<IFdtoPosUserSummary | null>;
7
9
  payAmountNumber: ComputedRef<number>;
8
10
  saving: Ref<boolean>;
9
11
  saveError: Ref<string | null>;
@@ -18,6 +20,7 @@ interface UseScheduleEmployeePersistenceOptions {
18
20
  }[]>;
19
21
  effectiveRate: ComputedRef<number>;
20
22
  passcodeValue: ComputedRef<string>;
23
+ deferScheduleWrites: Ref<boolean>;
21
24
  notify?: (message: string, type?: 'success' | 'error' | 'info') => void;
22
25
  }
23
26
  /** Persistence for an existing business employee being added to this schedule. */
@@ -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 {};
@@ -26,6 +26,7 @@ export declare function useScheduleExport(board: ScheduleBoardApi): {
26
26
  printNow: () => void;
27
27
  jpgPreviewOpen: import("vue").Ref<boolean, boolean>;
28
28
  jpgPreviewUrl: import("vue").Ref<string | null, string | null>;
29
+ jpgPreviewError: import("vue").Ref<string | null, string | null>;
29
30
  jpgPreviewWidth: import("vue").Ref<number, number>;
30
31
  jpgPreviewHeight: import("vue").Ref<number, number>;
31
32
  jpgFilename: import("vue").Ref<string, string>;
@@ -15,10 +15,13 @@ export interface ScheduleLeaveState {
15
15
  selection: TimeOffSelection;
16
16
  mode: ScheduleLeaveMode;
17
17
  }
18
+ interface ScheduleLeaveOptions {
19
+ notify?: (message: string, type?: 'success' | 'error' | 'info') => void;
20
+ }
18
21
  /** The leave editor — V6.2's "Book leave" dialog: a reason, how much of the day it covers, and
19
22
  * what that does to the person's availability. Opened from the add popup's Off day / Leave rows
20
23
  * (booking) and from an existing leave card (editing, or approving a pending request). */
21
- export declare function useScheduleLeave(board: ScheduleBoardApi): {
24
+ export declare function useScheduleLeave(board: ScheduleBoardApi, leaveOptions?: ScheduleLeaveOptions): {
22
25
  state: {
23
26
  open: boolean;
24
27
  empId: number | null;
@@ -57,3 +60,4 @@ export declare function useScheduleLeave(board: ScheduleBoardApi): {
57
60
  remove: () => Promise<void>;
58
61
  };
59
62
  export type ScheduleLeaveApi = ReturnType<typeof useScheduleLeave>;
63
+ export {};
@@ -1,7 +1,7 @@
1
1
  import { type Ref } from 'vue';
2
2
  import type { ScheduleOnboardingDayHours, ScheduleOnboardingRange } from './onboarding-types';
3
3
  import type { SchedulePositionsApi } from './useSchedulePositions';
4
- export declare function useScheduleOnboardingDemand(hours: ScheduleOnboardingDayHours[], positions: SchedulePositionsApi, note: Ref<string>): {
4
+ export declare function useScheduleOnboardingDemand(hours: ScheduleOnboardingDayHours[], positions: SchedulePositionsApi, note: Ref<string>, isPastDay?: (dayIdx: number) => boolean): {
5
5
  demand: import("vue").Reactive<ScheduleOnboardingRange[][]>;
6
6
  dmDay: Ref<number, number>;
7
7
  staffingSaving: Ref<boolean, boolean>;
@@ -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;
@@ -133,6 +155,7 @@ export declare function useScheduleOnboardingEmployees(options: ScheduleOnboardi
133
155
  to: string;
134
156
  }[] | undefined;
135
157
  passcode?: string | undefined;
158
+ code?: string | undefined;
136
159
  masterUser?: boolean | undefined;
137
160
  };
138
161
  row: TeamRow;
@@ -147,17 +170,17 @@ export declare function useScheduleOnboardingEmployees(options: ScheduleOnboardi
147
170
  end: string;
148
171
  }[]>;
149
172
  rawEmployee: (empId: number) => {
173
+ minHoursPerDay?: number | null | undefined;
150
174
  overtime?: {
151
175
  maxHoursPerMonth: number | null;
152
176
  } | undefined;
153
- minHoursPerDay?: number | null | undefined;
154
177
  workingHours?: {
155
178
  minHoursPerDay: number | null;
156
179
  maxHoursPerDay: number | null;
157
180
  maxHoursPerWeek: number | null;
158
181
  } | undefined;
159
- name: string;
160
182
  employeeId: string;
183
+ name: string;
161
184
  employmentType: "FULLTIME" | "PARTTIME";
162
185
  wage: {
163
186
  type: "HOURLY" | "MONTHLY";
@@ -180,7 +203,10 @@ export declare function useScheduleOnboardingEmployees(options: ScheduleOnboardi
180
203
  seedEmployees: (missingOnly?: boolean) => void;
181
204
  pickAll: (checked: boolean) => void;
182
205
  setPosition: (empId: number, value: string) => void;
206
+ removePositionFromRows: (position: string) => void;
207
+ toggleSecond: (empId: number, position: string) => void;
183
208
  setEmployment: (empId: number, kind: TeamEmployment) => void;
209
+ maxHoursFor: (employment: TeamEmployment) => number | null;
184
210
  setHours: (empId: number, value: string) => void;
185
211
  setRate: (empId: number, value: string) => void;
186
212
  bulkOpen: import("vue").Ref<boolean, boolean>;
@@ -12,14 +12,12 @@ export { MAX_OPERATIONAL_SESSIONS } from './useScheduleOnboardingHours';
12
12
  export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, addEmployee: ScheduleAddEmployeeApi, onDemandChanged?: () => void | Promise<void>): {
13
13
  board: {
14
14
  dayNote: (dayIdx: number) => import("../types").ScheduleDayNote | null;
15
- setDayNote: (dayIdx: number, title: string, desc: string) => void;
15
+ setDayNote: (dayIdx: number, title: string, desc: string, isPublicHoliday?: boolean) => void;
16
16
  clearDayNote: (dayIdx: number) => void;
17
17
  isStandingClosedWeekday: (dayIdx: number) => boolean;
18
18
  holidayName: (dayIdx: number) => string | null;
19
- holidayIsAuto: (dayIdx: number) => boolean;
20
19
  isPublicHoliday: (dayIdx: number) => boolean;
21
20
  holidayRateApplies: (dayIdx: number) => boolean;
22
- setHolidayNormal: (dayIdx: number, toNormal: boolean) => void;
23
21
  setPublicHoliday: (dayIdx: number, on: boolean) => void;
24
22
  otRateOn: (dayIdx: number) => number;
25
23
  regularRateOn: (dayIdx: number) => number;
@@ -116,6 +114,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
116
114
  updatedAt?: string | undefined;
117
115
  splitGroupId?: string | undefined;
118
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;
119
139
  remarks: {
120
140
  author: string;
121
141
  date: string;
@@ -148,6 +168,7 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
148
168
  to: string;
149
169
  }[] | undefined;
150
170
  passcode?: string | undefined;
171
+ code?: string | undefined;
151
172
  masterUser?: boolean | undefined;
152
173
  }[], import("../types").Employee[] | {
153
174
  id: number;
@@ -241,6 +262,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
241
262
  updatedAt?: string | undefined;
242
263
  splitGroupId?: string | undefined;
243
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;
244
287
  remarks: {
245
288
  author: string;
246
289
  date: string;
@@ -273,6 +316,7 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
273
316
  to: string;
274
317
  }[] | undefined;
275
318
  passcode?: string | undefined;
319
+ code?: string | undefined;
276
320
  masterUser?: boolean | undefined;
277
321
  }[]>;
278
322
  sections: import("vue").Ref<{
@@ -323,12 +367,14 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
323
367
  dayIdx: number;
324
368
  kind: "add" | "change" | "remove";
325
369
  label: string;
370
+ conflict?: boolean | undefined;
326
371
  }[], import("../types").PendingChange[] | {
327
372
  empId: number;
328
373
  employeeKey: string;
329
374
  dayIdx: number;
330
375
  kind: "add" | "change" | "remove";
331
376
  label: string;
377
+ conflict?: boolean | undefined;
332
378
  }[]>;
333
379
  unpublishedChanges: import("vue").ComputedRef<import("../types").PendingChange[]>;
334
380
  persistPublish: (items: Array<{
@@ -553,12 +599,17 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
553
599
  clearEmployeeShifts: (empId: number) => {
554
600
  shifts: number;
555
601
  };
556
- moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number) => boolean;
602
+ moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number, targetPosition?: string, allowLocked?: boolean) => boolean;
557
603
  swapShifts: (empIdA: number, empIdB: number, dayA: number, dayB?: number, slotIndexA?: number, slotIndexB?: number, slotCountA?: number) => boolean;
558
- clearShiftsInRange: () => {
604
+ swapPositions: (empIdA: number, empIdB: number, dayA: number, dayB?: number, slotIndexA?: number, slotIndexB?: number, slotCountA?: number) => boolean;
605
+ clearShiftsInRange: (options?: {
606
+ persist?: boolean;
607
+ mutate?: boolean;
608
+ }) => {
559
609
  shifts: number;
560
610
  open: number;
561
611
  leave: number;
612
+ assignmentIds: string[];
562
613
  };
563
614
  requiredFor: (dayIdx: number, position: string) => number;
564
615
  scheduledFor: (dayIdx: number, position: string) => number;
@@ -583,6 +634,8 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
583
634
  id: string;
584
635
  name: string;
585
636
  }[]>;
637
+ pendingCreates: string[];
638
+ pendingDeletes: Set<string>;
586
639
  count: import("vue").ComputedRef<number>;
587
640
  isAdding: import("vue").Ref<boolean, boolean>;
588
641
  newName: import("vue").Ref<string, string>;
@@ -596,6 +649,9 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
596
649
  askDelete: (id: string) => void;
597
650
  cancelDelete: () => void;
598
651
  confirmDelete: (id: string) => Promise<void>;
652
+ commitCreates: () => Promise<void>;
653
+ commitDeletes: () => Promise<void>;
654
+ discardPending: () => void;
599
655
  };
600
656
  steps: ScheduleOnboardingStep[];
601
657
  isSkippable: import("vue").ComputedRef<boolean>;
@@ -643,8 +699,29 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
643
699
  removeRole: (index: number, roleIndex: number) => void;
644
700
  namedTotal: (range: import("./onboarding-types").ScheduleOnboardingRange) => number;
645
701
  copyDay: (mode: "all" | "wk" | "we") => void;
702
+ settings: {
703
+ payRate: {
704
+ NORMAL: {
705
+ overtime: number;
706
+ };
707
+ REST_DAY: {
708
+ regular: number;
709
+ overtime: number;
710
+ };
711
+ PUBLIC_HOLIDAY: {
712
+ regular: number;
713
+ overtime: number;
714
+ };
715
+ };
716
+ otCapHours: number | null;
717
+ workingHours: {
718
+ minHoursPerDay: number | null;
719
+ maxHoursPerDay: number | null;
720
+ maxHoursPerWeek: number | null;
721
+ };
722
+ };
646
723
  addPositionNamed: (name?: string) => void;
647
- removePosition: (id: string) => void;
724
+ removePosition: (id: string) => Promise<void>;
648
725
  reviewRows: import("vue").ComputedRef<ReviewRow[]>;
649
726
  goTo: (target: ScheduleOnboardingStep) => void;
650
727
  avail: Record<number, import("./onboarding-types").AvailRow>;
@@ -782,6 +859,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
782
859
  updatedAt?: string | undefined;
783
860
  splitGroupId?: string | undefined;
784
861
  }[] | null)[];
862
+ timeOff?: ({
863
+ timeOff: "approved" | "pending";
864
+ requestId?: string | undefined;
865
+ type?: "OFF_DAY" | "LEAVE" | undefined;
866
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
867
+ reason: string;
868
+ half?: boolean | undefined;
869
+ halfPart?: "AM" | "PM" | undefined;
870
+ from?: string | undefined;
871
+ to?: string | undefined;
872
+ appliedOn?: string | undefined;
873
+ note?: string | undefined;
874
+ cert?: {
875
+ name: string;
876
+ size: string;
877
+ } | null | undefined;
878
+ bal?: {
879
+ type: string;
880
+ entitled: number;
881
+ used: number;
882
+ } | undefined;
883
+ } | null)[] | undefined;
785
884
  remarks: {
786
885
  author: string;
787
886
  date: string;
@@ -814,6 +913,7 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
814
913
  to: string;
815
914
  }[] | undefined;
816
915
  passcode?: string | undefined;
916
+ code?: string | undefined;
817
917
  masterUser?: boolean | undefined;
818
918
  };
819
919
  row: import("./onboarding-types").TeamRow;
@@ -823,7 +923,10 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
823
923
  teamSomePicked: import("vue").ComputedRef<boolean>;
824
924
  pickAll: (checked: boolean) => void;
825
925
  setPosition: (empId: number, value: string) => void;
926
+ removePositionFromRows: (position: string) => void;
927
+ toggleSecond: (empId: number, position: string) => void;
826
928
  setEmployment: (empId: number, kind: import("./onboarding-types").TeamEmployment) => void;
929
+ maxHoursFor: (employment: import("./onboarding-types").TeamEmployment) => number | null;
827
930
  setHours: (empId: number, value: string) => void;
828
931
  setRate: (empId: number, value: string) => void;
829
932
  bulkOpen: import("vue").Ref<boolean, boolean>;
@@ -933,6 +1036,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
933
1036
  updatedAt?: string | undefined;
934
1037
  splitGroupId?: string | undefined;
935
1038
  }[] | null)[];
1039
+ timeOff?: ({
1040
+ timeOff: "approved" | "pending";
1041
+ requestId?: string | undefined;
1042
+ type?: "OFF_DAY" | "LEAVE" | undefined;
1043
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
1044
+ reason: string;
1045
+ half?: boolean | undefined;
1046
+ halfPart?: "AM" | "PM" | undefined;
1047
+ from?: string | undefined;
1048
+ to?: string | undefined;
1049
+ appliedOn?: string | undefined;
1050
+ note?: string | undefined;
1051
+ cert?: {
1052
+ name: string;
1053
+ size: string;
1054
+ } | null | undefined;
1055
+ bal?: {
1056
+ type: string;
1057
+ entitled: number;
1058
+ used: number;
1059
+ } | undefined;
1060
+ } | null)[] | undefined;
936
1061
  remarks: {
937
1062
  author: string;
938
1063
  date: string;
@@ -965,6 +1090,7 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
965
1090
  to: string;
966
1091
  }[] | undefined;
967
1092
  passcode?: string | undefined;
1093
+ code?: string | undefined;
968
1094
  masterUser?: boolean | undefined;
969
1095
  }[];
970
1096
  candidatesFor: (key: string) => {
@@ -1059,6 +1185,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1059
1185
  updatedAt?: string | undefined;
1060
1186
  splitGroupId?: string | undefined;
1061
1187
  }[] | null)[];
1188
+ timeOff?: ({
1189
+ timeOff: "approved" | "pending";
1190
+ requestId?: string | undefined;
1191
+ type?: "OFF_DAY" | "LEAVE" | undefined;
1192
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
1193
+ reason: string;
1194
+ half?: boolean | undefined;
1195
+ halfPart?: "AM" | "PM" | undefined;
1196
+ from?: string | undefined;
1197
+ to?: string | undefined;
1198
+ appliedOn?: string | undefined;
1199
+ note?: string | undefined;
1200
+ cert?: {
1201
+ name: string;
1202
+ size: string;
1203
+ } | null | undefined;
1204
+ bal?: {
1205
+ type: string;
1206
+ entitled: number;
1207
+ used: number;
1208
+ } | undefined;
1209
+ } | null)[] | undefined;
1062
1210
  remarks: {
1063
1211
  author: string;
1064
1212
  date: string;
@@ -1091,6 +1239,7 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1091
1239
  to: string;
1092
1240
  }[] | undefined;
1093
1241
  passcode?: string | undefined;
1242
+ code?: string | undefined;
1094
1243
  masterUser?: boolean | undefined;
1095
1244
  }[];
1096
1245
  posPicker: import("vue").Ref<string | null, string | null>;
@@ -1189,6 +1338,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1189
1338
  updatedAt?: string | undefined;
1190
1339
  splitGroupId?: string | undefined;
1191
1340
  }[] | null)[];
1341
+ timeOff?: ({
1342
+ timeOff: "approved" | "pending";
1343
+ requestId?: string | undefined;
1344
+ type?: "OFF_DAY" | "LEAVE" | undefined;
1345
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
1346
+ reason: string;
1347
+ half?: boolean | undefined;
1348
+ halfPart?: "AM" | "PM" | undefined;
1349
+ from?: string | undefined;
1350
+ to?: string | undefined;
1351
+ appliedOn?: string | undefined;
1352
+ note?: string | undefined;
1353
+ cert?: {
1354
+ name: string;
1355
+ size: string;
1356
+ } | null | undefined;
1357
+ bal?: {
1358
+ type: string;
1359
+ entitled: number;
1360
+ used: number;
1361
+ } | undefined;
1362
+ } | null)[] | undefined;
1192
1363
  remarks: {
1193
1364
  author: string;
1194
1365
  date: string;
@@ -1221,6 +1392,7 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1221
1392
  to: string;
1222
1393
  }[] | undefined;
1223
1394
  passcode?: string | undefined;
1395
+ code?: string | undefined;
1224
1396
  masterUser?: boolean | undefined;
1225
1397
  }[]>;
1226
1398
  pickerAllChecked: import("vue").ComputedRef<boolean>;
@@ -1291,7 +1463,6 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1291
1463
  passcodeOk: import("vue").ComputedRef<boolean>;
1292
1464
  currentLocationLabel: import("vue").ComputedRef<string>;
1293
1465
  locationOptions: import("vue").Reactive<string[]>;
1294
- masterCodeError: import("vue").ComputedRef<boolean>;
1295
1466
  isNewUser: import("vue").ComputedRef<boolean>;
1296
1467
  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.">;
1297
1468
  primaryRoleLabel: import("vue").ComputedRef<string>;
@@ -1303,10 +1474,30 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1303
1474
  availabilityError: import("vue").ComputedRef<boolean>;
1304
1475
  saving: import("vue").Ref<boolean, boolean>;
1305
1476
  saveError: import("vue").Ref<string | null, string | null>;
1477
+ deferScheduleWrites: import("vue").Ref<boolean, boolean>;
1306
1478
  candidatesLoading: import("vue").Ref<boolean, boolean>;
1307
1479
  candidatesError: import("vue").Ref<string | null, string | null>;
1480
+ selectingExisting: import("vue").Ref<boolean, boolean>;
1481
+ candidates: import("vue").Ref<{
1482
+ employeeId: string;
1483
+ name: string;
1484
+ otherOutlets: string[];
1485
+ locations: string[];
1486
+ }[], import("../types").ExistingStaffCandidate[] | {
1487
+ employeeId: string;
1488
+ name: string;
1489
+ otherOutlets: string[];
1490
+ locations: string[];
1491
+ }[]>;
1492
+ candidatesTotal: import("vue").Ref<number, number>;
1493
+ candidatesPage: import("vue").Ref<number, number>;
1494
+ candidatesPageItemCount: import("vue").Ref<number, number>;
1495
+ candidatesPageSize: number;
1496
+ searchExisting: (search: string) => void;
1497
+ goToExistingPage: (page: number, search: string) => void;
1308
1498
  openWizard: (section: string) => void;
1309
1499
  openEditFor: (emp: import("../types").Employee) => void;
1500
+ confirmClose: () => void;
1310
1501
  close: () => void;
1311
1502
  setMode: (m: import("./schedule-add-employee-form").ScheduleAddEmployeeMode) => void;
1312
1503
  openSelectExisting: () => void;
@@ -1326,7 +1517,8 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1326
1517
  setAvailHour: (index: number, field: "from" | "to", value: string) => void;
1327
1518
  copyAvailHourDown: (index: number) => void;
1328
1519
  setPasscodeDigit: (index: number, value: string) => void;
1329
- generatePasscode: () => void;
1520
+ generatePasscode: () => Promise<void>;
1521
+ isGeneratingPasscode: import("vue").Ref<boolean, boolean>;
1330
1522
  togglePosAccess: () => void;
1331
1523
  addPosRoleRow: () => void;
1332
1524
  removePosRoleRow: (index: number) => void;
@@ -1334,6 +1526,9 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1334
1526
  setPosRoleOutlet: (index: number, outlet: string) => void;
1335
1527
  setPosRoleId: (index: number, roleId: string) => void;
1336
1528
  posRoleOptionsFor: (outlet: string) => import("../../../types/role").Role[];
1529
+ isPosRoleUsable: (role: import("../../../types/role").Role) => boolean;
1530
+ setMasterUserRoleAccess: (roleIds: string[] | null | undefined) => void;
1531
+ isPosOutletUsable: (outlet: string) => boolean;
1337
1532
  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.">;
1338
1533
  create: () => Promise<boolean>;
1339
1534
  };
@@ -1,16 +1,18 @@
1
1
  import type { ScheduleSelectOption } from '../components/ScheduleSelect.vue';
2
2
  /** Which outlet the board is scheduling, and the picker that changes it.
3
3
  *
4
- * On entry the host shell's own selection wins — mf-common keeps `currentRestaurant` in sync
5
- * with the `?restaurantId=` in the URL, so arriving from anywhere else in the portal lands on
6
- * the outlet that was already being looked at. Only when the shell has no opinion does this
7
- * fall back to the first outlet in the business, which is better than an empty board.
4
+ * On entry the outlet last picked in the schedule wins, remembered per business in localStorage.
5
+ * The host shell (mf-common) resets its own `currentRestaurant` to the first manageable outlet
6
+ * and rewrites `?restaurantId=` on every reload, so neither the URL nor the shell's selection
7
+ * can carry the user's pick across a refresh. Only when nothing was ever picked here does the
8
+ * shell's selection decide, so arriving from elsewhere in the portal lands on the outlet that
9
+ * was already being looked at. Failing that it falls back to the first outlet in the business,
10
+ * which is better than an empty board. The picker offers only restaurants the user can manage.
8
11
  *
9
- * Switching from the picker writes the new id back into `?restaurantId=` too — via
10
- * `router.replace`, not a navigation, so it does not reload the page or add a history entry.
12
+ * Switching from the picker saves the pick and writes the new id back into `?restaurantId=` too,
13
+ * via `router.replace`, not a navigation, so it does not reload the page or add a history entry.
11
14
  * The picker already re-fetches everything the new outlet needs (see switchTo below); this just
12
- * keeps the address bar honest about which one is on screen, so a refresh or a copied link lands
13
- * back on it instead of silently snapping to whatever the shell had before. */
15
+ * keeps the address bar honest about which one is on screen. */
14
16
  export declare function useScheduleOutlet(): {
15
17
  options: import("vue").ComputedRef<ScheduleSelectOption[]>;
16
18
  ready: import("vue").Ref<boolean, boolean>;
@@ -18,5 +20,6 @@ export declare function useScheduleOutlet(): {
18
20
  resolve: () => Promise<string>;
19
21
  resolveOutlet: () => Promise<string>;
20
22
  switchTo: (restaurantId: string, weekStart: Date) => Promise<boolean>;
23
+ setBeforeSwitch: (handler: (restaurantId: string) => boolean | Promise<boolean>) => void;
21
24
  };
22
25
  export type ScheduleOutletApi = ReturnType<typeof useScheduleOutlet>;
@@ -11,7 +11,7 @@ export declare function useSchedulePageActions(options: UseSchedulePageActionsOp
11
11
  comingSoon: () => void;
12
12
  onSchedStatusClick: () => void;
13
13
  onApplyProposals: (count: number) => void;
14
- onApplyAndPublishProposals: (count: number) => void;
14
+ onApplyAndPublishProposals: (count: number) => Promise<void>;
15
15
  onProposalDragStart: (id: number, event: DragEvent) => void;
16
16
  onScroll: (delta: number) => void;
17
17
  };
@@ -13,6 +13,8 @@ interface UseSchedulePageCellDropOptions {
13
13
  notify: (message: string, type: 'error') => void;
14
14
  }
15
15
  export declare function useSchedulePageCellDrop(options: UseSchedulePageCellDropOptions): {
16
- onCellDrop: (empId: number, dayIdx: number, event: DragEvent) => void;
16
+ onCellDrop: (empId: number, dayIdx: number, event: DragEvent, targetSlotIndex?: number, kind?: "employee" | "position") => void;
17
+ confirmPositionSwap: (toEmpId: number, toDayIdx: number, onConfirm: () => void) => void;
18
+ confirmPositionDrop: (targetDayIdx: number, onConfirm: () => void) => void;
17
19
  };
18
20
  export {};
@@ -14,6 +14,7 @@ type Snackbar = {
14
14
  };
15
15
  export declare function useSchedulePageClearActions(board: ScheduleBoardApi, demand: ScheduleDemandApi, snackbar: Snackbar): {
16
16
  clearKind: import("vue").Ref<ClearKind | null, ClearKind | null>;
17
+ clearing: import("vue").Ref<boolean, boolean>;
17
18
  onConfirmClear: () => Promise<void>;
18
19
  };
19
20
  export type SchedulePageClearActionsApi = ReturnType<typeof useSchedulePageClearActions>;