@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.
- package/dist/{ApprovalCodeList-BDpxEJpC.js → ApprovalCodeList-DwubNElp.js} +7 -7
- package/dist/{AuditLogList-Dgwj1gz8.js → AuditLogList-CTeMbyHL.js} +18 -19
- package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-BBK2gl7r.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-CmLLNcB4.js} +2 -2
- package/dist/{EmployeeList-C8cbVcmY.js → EmployeeList-DEAJPx9F.js} +255 -266
- package/dist/{FormItem.vue_vue_type_script_setup_true_lang-CUnlKsxk.js → FormItem.vue_vue_type_script_setup_true_lang-OAvd6eHM.js} +6 -6
- package/dist/{GrantUserList-zul0_Dlm.js → GrantUserList-Dx4jF2qJ.js} +8 -8
- package/dist/{Main-Cjo4FMZZ.js → Main-BirWXk7o.js} +5 -5
- package/dist/{Main-DSr9KbjT.js → Main-C2PBSCte.js} +11 -11
- package/dist/{Main-5TsFTFpc.js → Main-CL5JYCPg.js} +8 -8
- package/dist/{PermissionSetList-CDhiiu37.js → PermissionSetList-BtYcqPiO.js} +19 -18
- package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DoK944l0.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-BXw4aX39.js} +1127 -1127
- 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
- package/dist/ResponsiveContextMenu.vue_vue_type_script_setup_true_lang-mSJFKo7r.js +132 -0
- package/dist/{RoleList-DEbOPQD_.js → RoleList-YS_LBfoJ.js} +21 -20
- package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-BorKuXxL.js +530 -0
- package/dist/{ScheduleGeneralPage-B8PWNsc2.js → ScheduleGeneralPage-C1p2mivt.js} +252 -248
- package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-CnKzVz3I.js +2457 -0
- package/dist/SchedulePage-BP7x7JAl.js +19485 -0
- package/dist/{SchedulePositionPage-Cuv4ydOK.js → SchedulePositionPage-BogOQZVW.js} +78 -80
- package/dist/{SelectFilter-CG13h83-.js → SelectFilter-Dh3eY1hV.js} +1 -1
- package/dist/{TeamMemberList-DpCGqHCk.js → TeamMemberList-Bv6_2bzs.js} +27 -27
- package/dist/{TimesheetList-B7HAC5zS.js → TimesheetList-B3BmpH0I.js} +52 -53
- 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
- package/dist/{app-Lh0cqgHy.js → app-CyS8c8dx.js} +2879 -2462
- package/dist/app.js +1 -1
- package/dist/{approval-code-DHsUgc4K.js → approval-code-BIpLingm.js} +1 -1
- package/dist/{dayjs.min-joq4stsa.js → dayjs.min-BRlEc3-d.js} +1 -1
- package/dist/{employee-BPmp9c6i.js → employee-CcdjLOLQ.js} +51 -47
- package/dist/{grant-user-qzKHFTro.js → grant-user-uZmvD_bw.js} +1 -1
- package/dist/{iteration-jvdTHQUx.js → iteration-CL1RDmws.js} +1 -1
- package/dist/{lodash-CIAEpr9s.js → lodash-C00ieagp.js} +1 -1
- package/dist/object-Dwyg2LgX.js +16 -0
- package/dist/{restaurant-BbYRA_IT.js → restaurant-CHpkjUPy.js} +46 -47
- package/dist/{role-Dd1TUMhn.js → role-DtatkKp9.js} +2 -2
- package/dist/{rule-DmxI7qEY.js → rule-DJJMpkoG.js} +3 -3
- package/dist/src/api/employee/index.d.ts +2 -2
- package/dist/src/api/schedule/index.d.ts +11 -1
- package/dist/src/components/layout/SchedulePromoBanner.vue.d.ts +2 -0
- package/dist/src/composables/useDiscardConfirm.d.ts +3 -1
- package/dist/src/stores/employee.d.ts +12 -12
- package/dist/src/types/schedule.d.ts +1 -1
- package/dist/src/views/audit-log/locales/index.d.ts +252 -0
- package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +6 -2
- package/dist/src/views/scheduling/components/ScheduleAutoScheduleDoneArt.vue.d.ts +2 -0
- package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +2 -0
- package/dist/src/views/scheduling/components/ScheduleBoardGridHeader.vue.d.ts +5 -0
- package/dist/src/views/scheduling/components/ScheduleBoardInteractionOverlays.vue.d.ts +2 -0
- package/dist/src/views/scheduling/components/ScheduleBoardOnboardingOverlays.vue.d.ts +1 -0
- package/dist/src/views/scheduling/components/ScheduleBoardToolbar.vue.d.ts +0 -1
- package/dist/src/views/scheduling/components/ScheduleCompletionDialog.vue.d.ts +1 -1
- package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +4 -1
- package/dist/src/views/scheduling/components/ScheduleDayTimeline.vue.d.ts +5 -0
- package/dist/src/views/scheduling/components/ScheduleLoadState.vue.d.ts +0 -1
- package/dist/src/views/scheduling/components/ScheduleOnboardingSettings.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +1 -1
- package/dist/src/views/scheduling/composables/auto-schedule-mapping.d.ts +3 -3
- package/dist/src/views/scheduling/composables/onboarding-types.d.ts +2 -1
- package/dist/src/views/scheduling/composables/remyPrompt.d.ts +4 -2
- package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +4 -0
- package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +1 -3
- package/dist/src/views/scheduling/composables/schedule-demand-domain.d.ts +13 -1
- package/dist/src/views/scheduling/composables/schedule-error.d.ts +1 -0
- package/dist/src/views/scheduling/composables/schedule-leave-split.d.ts +5 -0
- package/dist/src/views/scheduling/composables/schedule-quick-pick.d.ts +22 -0
- package/dist/src/views/scheduling/composables/schedule-shift-time.d.ts +3 -0
- package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +3 -1
- package/dist/src/views/scheduling/composables/useRemyAppStore.d.ts +1 -0
- package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +25 -2
- package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +3 -11
- package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +0 -1
- package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +22 -13
- package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +58 -7
- package/dist/src/views/scheduling/composables/useScheduleCopyWeek.d.ts +3 -10
- package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +13 -1
- package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +0 -1
- package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +16 -2
- package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +7 -0
- package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +1 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +14 -6
- package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +26 -4
- package/dist/src/views/scheduling/composables/useScheduleEmployeePersistence.d.ts +3 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +0 -2
- package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +1 -0
- package/dist/src/views/scheduling/composables/useScheduleLeave.d.ts +5 -1
- package/dist/src/views/scheduling/composables/useScheduleOnboardingDemand.d.ts +1 -1
- package/dist/src/views/scheduling/composables/useScheduleOnboardingEmployees.d.ts +28 -2
- package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +203 -8
- package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +11 -8
- package/dist/src/views/scheduling/composables/useSchedulePageActions.d.ts +1 -1
- package/dist/src/views/scheduling/composables/useSchedulePageCellDrop.d.ts +3 -1
- package/dist/src/views/scheduling/composables/useSchedulePageClearActions.d.ts +1 -0
- package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +6 -0
- package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +2 -1
- package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +46 -0
- package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +2 -2
- package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +29 -1
- package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +32 -3
- package/dist/src/views/scheduling/country-rules/index.d.ts +8 -3
- package/dist/src/views/scheduling/data.d.ts +17 -0
- package/dist/src/views/scheduling/locales/index.d.ts +28 -0
- package/dist/src/views/scheduling/schedule-state.d.ts +236 -236
- package/dist/src/views/scheduling/schedule-store.d.ts +26 -7
- package/dist/src/views/scheduling/types.d.ts +8 -0
- package/dist/style.css +1 -1
- package/dist/tsconfig.app.tsbuildinfo +1 -1
- package/dist/{useAppStore-BoLkvkE2.js → useAppStore-Bp0PwbAN.js} +1 -1
- package/dist/useDiscardConfirm-CzZSPyvh.js +28 -0
- package/dist/{useLoading-Ch1AUYT1.js → useLoading-sgL8DRUz.js} +1 -1
- package/dist/{useReportPermissions-DM3GOFCC.js → useReportPermissions-DI-xg3OX.js} +3 -3
- package/package.json +2 -2
- package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-Cx9jFgBS.js +0 -492
- package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-V1sZ_xhO.js +0 -2253
- package/dist/SchedulePage-ndLByVBl.js +0 -17785
- package/dist/_plugin-vue_export-helper-CHgC5LLL.js +0 -9
- package/dist/useDiscardConfirm-DPhEV6v0.js +0 -157
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function errorMessage(error: unknown, fallback: string): string;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { FdtoScheduleCreateTimeOffReq, FdtoScheduleTimeOff } from '@/types/schedule';
|
|
2
|
+
/** The create requests that keep the rest of a multi-day record alive once `date` is carved out
|
|
3
|
+
* of it. Single-day records leave nothing behind. The contract requires a same-day request to
|
|
4
|
+
* have matching parts, so a one-day remainder takes the part from its outer edge. */
|
|
5
|
+
export declare function remainderRequests(record: FdtoScheduleTimeOff, date: string): FdtoScheduleCreateTimeOffReq[];
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CoverageSegment, Employee } from '../types';
|
|
2
|
+
import type { ScheduleCoverageAxis } from './schedule-demand-domain';
|
|
3
|
+
export interface QuickPickRules {
|
|
4
|
+
minHoursPerDay: number | null;
|
|
5
|
+
maxHoursPerDay: number | null;
|
|
6
|
+
}
|
|
7
|
+
export interface QuickPickCandidate {
|
|
8
|
+
start: string;
|
|
9
|
+
end: string;
|
|
10
|
+
/** Position name, or '' for any position. */
|
|
11
|
+
role: string;
|
|
12
|
+
/** Max short among the runs this shift covers. */
|
|
13
|
+
short: number;
|
|
14
|
+
label: string;
|
|
15
|
+
covers: string;
|
|
16
|
+
title: string;
|
|
17
|
+
}
|
|
18
|
+
/** Up to 3 shifts for one employee on one day, built the way the auto-schedule planner builds
|
|
19
|
+
* them: one per (short run, position the person can fill), padded to their daily minimum,
|
|
20
|
+
* capped at their maximum, kept inside their availability window and clear of their existing
|
|
21
|
+
* shifts. Rest-gap and weekly-cap checks are left to the shift editor's own warnings. */
|
|
22
|
+
export declare function buildQuickPicks(emp: Employee, dayIdx: number, segments: CoverageSegment[], axis: ScheduleCoverageAxis, rules: QuickPickRules, qualifiedFor: (emp: Employee, position: string) => boolean): QuickPickCandidate[];
|
|
@@ -12,6 +12,9 @@ export declare function timeRangeBreakOf(sl: WorkSlot): {
|
|
|
12
12
|
startTime: string;
|
|
13
13
|
endTime: string;
|
|
14
14
|
} | null;
|
|
15
|
+
/** The two visible paid periods around a custom clock-window break. Shared by Weekly cards and
|
|
16
|
+
* Daily timeline bars so the split wording cannot drift between views. */
|
|
17
|
+
export declare function splitTimeLabels(sl: WorkSlot): [string, string] | null;
|
|
15
18
|
/** Same face as `t12`, but never drops the minutes — two ranges stacked on a split card need
|
|
16
19
|
* to line up at a glance, and "10am" next to "10:30am" reads as two different units. */
|
|
17
20
|
export declare function t12Full(hhmm: string): string;
|
|
@@ -4,4 +4,6 @@ export interface WeekBucket {
|
|
|
4
4
|
employees: Employee[];
|
|
5
5
|
openShifts: OpenShift[];
|
|
6
6
|
}
|
|
7
|
-
|
|
7
|
+
/** `from` is the date the offset is relative to (the board passes the Monday it anchored on, so a
|
|
8
|
+
* tab left open past midnight keeps building the week it is showing). */
|
|
9
|
+
export declare function weekData(offset: number, from?: Date): WeekBucket;
|
|
@@ -2,6 +2,7 @@ import { useAppStore } from '@feedmepos/mf-remy-panel';
|
|
|
2
2
|
export interface RemyActivateOptions {
|
|
3
3
|
prompt?: string;
|
|
4
4
|
forceNewConversation?: boolean;
|
|
5
|
+
fullscreen?: boolean;
|
|
5
6
|
}
|
|
6
7
|
/** HRM never bundles or mounts a Remy panel of its own — `@feedmepos/mf-remy-panel` is externalised
|
|
7
8
|
* by the shared vite preset, so inside the host portal this import resolves to the ONE panel
|
|
@@ -65,7 +65,6 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi, options?
|
|
|
65
65
|
passcodeOk: import("vue").ComputedRef<boolean>;
|
|
66
66
|
currentLocationLabel: import("vue").ComputedRef<string>;
|
|
67
67
|
locationOptions: import("vue").Reactive<string[]>;
|
|
68
|
-
masterCodeError: import("vue").ComputedRef<boolean>;
|
|
69
68
|
isNewUser: import("vue").ComputedRef<boolean>;
|
|
70
69
|
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.">;
|
|
71
70
|
primaryRoleLabel: import("vue").ComputedRef<string>;
|
|
@@ -77,10 +76,30 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi, options?
|
|
|
77
76
|
availabilityError: import("vue").ComputedRef<boolean>;
|
|
78
77
|
saving: import("vue").Ref<boolean, boolean>;
|
|
79
78
|
saveError: import("vue").Ref<string | null, string | null>;
|
|
79
|
+
deferScheduleWrites: import("vue").Ref<boolean, boolean>;
|
|
80
80
|
candidatesLoading: import("vue").Ref<boolean, boolean>;
|
|
81
81
|
candidatesError: import("vue").Ref<string | null, string | null>;
|
|
82
|
+
selectingExisting: import("vue").Ref<boolean, boolean>;
|
|
83
|
+
candidates: import("vue").Ref<{
|
|
84
|
+
employeeId: string;
|
|
85
|
+
name: string;
|
|
86
|
+
otherOutlets: string[];
|
|
87
|
+
locations: string[];
|
|
88
|
+
}[], import("../types").ExistingStaffCandidate[] | {
|
|
89
|
+
employeeId: string;
|
|
90
|
+
name: string;
|
|
91
|
+
otherOutlets: string[];
|
|
92
|
+
locations: string[];
|
|
93
|
+
}[]>;
|
|
94
|
+
candidatesTotal: import("vue").Ref<number, number>;
|
|
95
|
+
candidatesPage: import("vue").Ref<number, number>;
|
|
96
|
+
candidatesPageItemCount: import("vue").Ref<number, number>;
|
|
97
|
+
candidatesPageSize: number;
|
|
98
|
+
searchExisting: (search: string) => void;
|
|
99
|
+
goToExistingPage: (page: number, search: string) => void;
|
|
82
100
|
openWizard: (section: string) => void;
|
|
83
101
|
openEditFor: (emp: Employee) => void;
|
|
102
|
+
confirmClose: () => void;
|
|
84
103
|
close: () => void;
|
|
85
104
|
setMode: (m: ScheduleAddEmployeeMode) => void;
|
|
86
105
|
openSelectExisting: () => void;
|
|
@@ -100,7 +119,8 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi, options?
|
|
|
100
119
|
setAvailHour: (index: number, field: "from" | "to", value: string) => void;
|
|
101
120
|
copyAvailHourDown: (index: number) => void;
|
|
102
121
|
setPasscodeDigit: (index: number, value: string) => void;
|
|
103
|
-
generatePasscode: () => void
|
|
122
|
+
generatePasscode: () => Promise<void>;
|
|
123
|
+
isGeneratingPasscode: import("vue").Ref<boolean, boolean>;
|
|
104
124
|
togglePosAccess: () => void;
|
|
105
125
|
addPosRoleRow: () => void;
|
|
106
126
|
removePosRoleRow: (index: number) => void;
|
|
@@ -108,6 +128,9 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi, options?
|
|
|
108
128
|
setPosRoleOutlet: (index: number, outlet: string) => void;
|
|
109
129
|
setPosRoleId: (index: number, roleId: string) => void;
|
|
110
130
|
posRoleOptionsFor: (outlet: string) => import("../../../types/role").Role[];
|
|
131
|
+
isPosRoleUsable: (role: import("../../../types/role").Role) => boolean;
|
|
132
|
+
setMasterUserRoleAccess: (roleIds: string[] | null | undefined) => void;
|
|
133
|
+
isPosOutletUsable: (outlet: string) => boolean;
|
|
111
134
|
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.">;
|
|
112
135
|
create: () => Promise<boolean>;
|
|
113
136
|
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
2
|
import type { ScheduleDemandApi } from './useScheduleDemand';
|
|
3
|
+
import { type QuickPickCandidate } from './schedule-quick-pick';
|
|
3
4
|
import { type ScheduleAnchorRect } from './schedule-popover-position';
|
|
4
5
|
export interface ScheduleAddPickState {
|
|
5
6
|
open: boolean;
|
|
@@ -15,15 +16,6 @@ export interface ScheduleAddPickLeaveOption {
|
|
|
15
16
|
reason: string;
|
|
16
17
|
swatch: string;
|
|
17
18
|
}
|
|
18
|
-
export interface ScheduleAddPickSuggestion {
|
|
19
|
-
start: string;
|
|
20
|
-
end: string;
|
|
21
|
-
short: number;
|
|
22
|
-
label: string;
|
|
23
|
-
/** "Covers 16:00–22:00 demand" — the demand this offer answers, shown under the label. */
|
|
24
|
-
covers: string;
|
|
25
|
-
title: string;
|
|
26
|
-
}
|
|
27
19
|
/** The "+ Add" quick-pick popover on an employee's empty cell — ported from the mockup's
|
|
28
20
|
* openAddShiftPicker()/renderAddPickList(), scoped to what this board actually has: our one
|
|
29
21
|
* active shift pattern, a fixed leave-reason list, and a demand-gap suggestion, all committed
|
|
@@ -57,7 +49,7 @@ export declare function useScheduleAddPick(board: ScheduleBoardApi, demand: Sche
|
|
|
57
49
|
start: string;
|
|
58
50
|
end: string;
|
|
59
51
|
} | null>;
|
|
60
|
-
|
|
52
|
+
suggestions: import("vue").ComputedRef<QuickPickCandidate[]>;
|
|
61
53
|
filteredPatterns: import("vue").ComputedRef<{
|
|
62
54
|
key: string;
|
|
63
55
|
label: string;
|
|
@@ -71,7 +63,7 @@ export declare function useScheduleAddPick(board: ScheduleBoardApi, demand: Sche
|
|
|
71
63
|
hasResults: import("vue").ComputedRef<boolean>;
|
|
72
64
|
openFor: (empId: number, dayIdx: number, anchor: HTMLElement) => void;
|
|
73
65
|
close: () => void;
|
|
74
|
-
pickSuggested: () => void;
|
|
66
|
+
pickSuggested: (index: number) => void;
|
|
75
67
|
pickPattern: (key: string) => void;
|
|
76
68
|
pickTypedRange: (start: string, end: string) => void;
|
|
77
69
|
pickLeave: (reason: string) => void;
|
|
@@ -2,7 +2,6 @@ import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
|
2
2
|
/** Dragging a person from the staff rail onto a position/day cell opens a normal assigned shift. */
|
|
3
3
|
export declare function useScheduleAreaDragDrop(board: ScheduleBoardApi, handlers: {
|
|
4
4
|
onCreateShift: (empId: number, dayIdx: number, position: string) => void;
|
|
5
|
-
onNotQualified: (empName: string, position: string) => void;
|
|
6
5
|
}): {
|
|
7
6
|
draggingEmpId: import("vue").Ref<number | null, number | null>;
|
|
8
7
|
startRailDrag: (empId: number) => void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FdtoScheduleAutoScheduleObjective
|
|
1
|
+
import type { FdtoScheduleAutoScheduleObjective } from '@/types/schedule';
|
|
2
2
|
import type { Proposal } from '../types';
|
|
3
3
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
4
4
|
import type { ScheduleDemandApi } from './useScheduleDemand';
|
|
@@ -6,7 +6,6 @@ export type ScheduleAutoScheduleStep = 'options' | 'summary';
|
|
|
6
6
|
export interface ScheduleAutoScheduleOptions {
|
|
7
7
|
fillGaps: boolean;
|
|
8
8
|
objective: FdtoScheduleAutoScheduleObjective;
|
|
9
|
-
planner: FdtoScheduleAutoSchedulePlanner;
|
|
10
9
|
allowOvertime: boolean;
|
|
11
10
|
/** Shown as preferences in the dialog but not sent: the generator takes no input for them yet
|
|
12
11
|
* (availability and time off are always respected; patterns and cost ride on the objective). */
|
|
@@ -23,25 +22,24 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
23
22
|
options: {
|
|
24
23
|
fillGaps: boolean;
|
|
25
24
|
objective: FdtoScheduleAutoScheduleObjective;
|
|
26
|
-
planner: FdtoScheduleAutoSchedulePlanner;
|
|
27
25
|
allowOvertime: boolean;
|
|
28
26
|
respectAvailability: boolean;
|
|
29
27
|
followPatterns: boolean;
|
|
30
28
|
costEfficient: boolean;
|
|
31
29
|
};
|
|
32
|
-
planners: import("vue").Ref<("GREEDY" | "LLM")[], ("GREEDY" | "LLM")[]>;
|
|
33
|
-
plannerChoice: import("vue").ComputedRef<boolean>;
|
|
34
30
|
generating: import("vue").Ref<boolean, boolean>;
|
|
35
31
|
generateError: import("vue").Ref<string | null, string | null>;
|
|
36
32
|
result: import("vue").Ref<{
|
|
37
33
|
objective: "BALANCED" | "SERVICE" | "LOWER_COST" | "STABLE_HOURS";
|
|
38
34
|
allowOvertime: boolean;
|
|
35
|
+
model: string | null;
|
|
39
36
|
proposals: {
|
|
37
|
+
rejectReason?: string | null | undefined | undefined;
|
|
40
38
|
date: string;
|
|
41
39
|
startTime: string;
|
|
42
40
|
endTime: string;
|
|
43
|
-
positionId: string | null;
|
|
44
41
|
employeeId: string;
|
|
42
|
+
positionId: string | null;
|
|
45
43
|
employeeName: string;
|
|
46
44
|
position: string;
|
|
47
45
|
reason: string;
|
|
@@ -60,7 +58,6 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
60
58
|
dailyCap: number;
|
|
61
59
|
rest: number;
|
|
62
60
|
dayOff: number;
|
|
63
|
-
dayCap: number;
|
|
64
61
|
};
|
|
65
62
|
}[];
|
|
66
63
|
metrics: {
|
|
@@ -101,12 +98,14 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
101
98
|
} | null, {
|
|
102
99
|
objective: "BALANCED" | "SERVICE" | "LOWER_COST" | "STABLE_HOURS";
|
|
103
100
|
allowOvertime: boolean;
|
|
101
|
+
model: string | null;
|
|
104
102
|
proposals: {
|
|
103
|
+
rejectReason?: string | null | undefined;
|
|
105
104
|
date: string;
|
|
106
105
|
startTime: string;
|
|
107
106
|
endTime: string;
|
|
108
|
-
positionId: string | null;
|
|
109
107
|
employeeId: string;
|
|
108
|
+
positionId: string | null;
|
|
110
109
|
employeeName: string;
|
|
111
110
|
position: string;
|
|
112
111
|
reason: string;
|
|
@@ -125,7 +124,6 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
125
124
|
dailyCap: number;
|
|
126
125
|
rest: number;
|
|
127
126
|
dayOff: number;
|
|
128
|
-
dayCap: number;
|
|
129
127
|
};
|
|
130
128
|
}[];
|
|
131
129
|
metrics: {
|
|
@@ -166,12 +164,14 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
166
164
|
} | {
|
|
167
165
|
objective: "BALANCED" | "SERVICE" | "LOWER_COST" | "STABLE_HOURS";
|
|
168
166
|
allowOvertime: boolean;
|
|
167
|
+
model: string | null;
|
|
169
168
|
proposals: {
|
|
169
|
+
rejectReason?: string | null | undefined | undefined;
|
|
170
170
|
date: string;
|
|
171
171
|
startTime: string;
|
|
172
172
|
endTime: string;
|
|
173
|
-
positionId: string | null;
|
|
174
173
|
employeeId: string;
|
|
174
|
+
positionId: string | null;
|
|
175
175
|
employeeName: string;
|
|
176
176
|
position: string;
|
|
177
177
|
reason: string;
|
|
@@ -190,7 +190,6 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
190
190
|
dailyCap: number;
|
|
191
191
|
rest: number;
|
|
192
192
|
dayOff: number;
|
|
193
|
-
dayCap: number;
|
|
194
193
|
};
|
|
195
194
|
}[];
|
|
196
195
|
metrics: {
|
|
@@ -233,12 +232,13 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
233
232
|
hasDemand: import("vue").ComputedRef<boolean>;
|
|
234
233
|
noDemandOpen: import("vue").Ref<boolean, boolean>;
|
|
235
234
|
rangeLabel: import("vue").ComputedRef<string>;
|
|
236
|
-
openWizard: () => void;
|
|
235
|
+
openWizard: (fromSetup?: boolean) => void;
|
|
237
236
|
closeWizard: () => void;
|
|
238
237
|
next: () => void;
|
|
239
238
|
back: () => void;
|
|
240
239
|
generate: () => Promise<void>;
|
|
241
240
|
reviewMode: import("vue").ComputedRef<boolean>;
|
|
241
|
+
hasPendingChanges: import("vue").ComputedRef<boolean>;
|
|
242
242
|
proposals: import("vue").ComputedRef<{
|
|
243
243
|
id: number;
|
|
244
244
|
empId: number;
|
|
@@ -251,6 +251,7 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
251
251
|
status: "pending" | "rejected";
|
|
252
252
|
weekKey?: string | undefined;
|
|
253
253
|
reason?: string | undefined;
|
|
254
|
+
rejectReason?: string | undefined;
|
|
254
255
|
}[]>;
|
|
255
256
|
weekHasProposals: import("vue").ComputedRef<boolean>;
|
|
256
257
|
unmetCount: import("vue").Ref<number, number>;
|
|
@@ -267,7 +268,15 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
267
268
|
toggleReject: (id: number) => void;
|
|
268
269
|
rejectAll: () => void;
|
|
269
270
|
exitReview: () => void;
|
|
270
|
-
|
|
271
|
+
completionOpen: import("vue").Ref<boolean, boolean>;
|
|
272
|
+
completionCount: import("vue").Ref<number, number>;
|
|
273
|
+
completionPublished: import("vue").Ref<boolean, boolean>;
|
|
274
|
+
completionFromSetup: import("vue").Ref<boolean, boolean>;
|
|
275
|
+
closeCompletion: () => void;
|
|
276
|
+
leaveReviewOpen: import("vue").Ref<boolean, boolean>;
|
|
277
|
+
confirmLeaveReview: () => void;
|
|
278
|
+
cancelLeaveReview: () => void;
|
|
279
|
+
apply: (showCompletion?: boolean, status?: "DRAFT" | "PUBLISHED") => Promise<number | null>;
|
|
271
280
|
applying: import("vue").Ref<boolean, boolean>;
|
|
272
281
|
applyRejections: import("vue").Ref<{
|
|
273
282
|
employeeName: string;
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
import type { Employee, OpenShift, PendingChange, ScheduleStatusInfo, ScheduleVersion, ScheduleVersionSnapshot, Section, WorkSlot } from '../types';
|
|
2
2
|
import { RANGE_LEN } from './schedule-week-cache';
|
|
3
|
-
import { contractCapFor, isGenuineSplitGroup, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, positionKeyOf, workSlotsOf } from './schedule-board-helpers';
|
|
4
|
-
export { contractCapFor, isGenuineSplitGroup, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, positionKeyOf, workSlotsOf, };
|
|
3
|
+
import { contractCapFor, isGenuineSplitGroup, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, overlapsAnotherSlot, positionKeyOf, workSlotsOf } from './schedule-board-helpers';
|
|
4
|
+
export { contractCapFor, isGenuineSplitGroup, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, overlapsAnotherSlot, positionKeyOf, workSlotsOf, };
|
|
5
5
|
export { RANGE_LEN };
|
|
6
6
|
export type ScheduleGranularity = 'day' | 'week';
|
|
7
7
|
export declare function useScheduleBoard(handlers?: {
|
|
8
8
|
onPersistError?: (message: string) => void;
|
|
9
9
|
}): {
|
|
10
10
|
dayNote: (dayIdx: number) => import("../types").ScheduleDayNote | null;
|
|
11
|
-
setDayNote: (dayIdx: number, title: string, desc: string) => void;
|
|
11
|
+
setDayNote: (dayIdx: number, title: string, desc: string, isPublicHoliday?: boolean) => void;
|
|
12
12
|
clearDayNote: (dayIdx: number) => void;
|
|
13
13
|
isStandingClosedWeekday: (dayIdx: number) => boolean;
|
|
14
14
|
holidayName: (dayIdx: number) => string | null;
|
|
15
|
-
holidayIsAuto: (dayIdx: number) => boolean;
|
|
16
15
|
isPublicHoliday: (dayIdx: number) => boolean;
|
|
17
16
|
holidayRateApplies: (dayIdx: number) => boolean;
|
|
18
|
-
setHolidayNormal: (dayIdx: number, toNormal: boolean) => void;
|
|
19
17
|
setPublicHoliday: (dayIdx: number, on: boolean) => void;
|
|
20
18
|
otRateOn: (dayIdx: number) => number;
|
|
21
19
|
regularRateOn: (dayIdx: number) => number;
|
|
@@ -112,6 +110,28 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
112
110
|
updatedAt?: string | undefined;
|
|
113
111
|
splitGroupId?: string | undefined;
|
|
114
112
|
}[] | null)[];
|
|
113
|
+
timeOff?: ({
|
|
114
|
+
timeOff: "approved" | "pending";
|
|
115
|
+
requestId?: string | undefined;
|
|
116
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
117
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
118
|
+
reason: string;
|
|
119
|
+
half?: boolean | undefined;
|
|
120
|
+
halfPart?: "AM" | "PM" | undefined;
|
|
121
|
+
from?: string | undefined;
|
|
122
|
+
to?: string | undefined;
|
|
123
|
+
appliedOn?: string | undefined;
|
|
124
|
+
note?: string | undefined;
|
|
125
|
+
cert?: {
|
|
126
|
+
name: string;
|
|
127
|
+
size: string;
|
|
128
|
+
} | null | undefined;
|
|
129
|
+
bal?: {
|
|
130
|
+
type: string;
|
|
131
|
+
entitled: number;
|
|
132
|
+
used: number;
|
|
133
|
+
} | undefined;
|
|
134
|
+
} | null)[] | undefined;
|
|
115
135
|
remarks: {
|
|
116
136
|
author: string;
|
|
117
137
|
date: string;
|
|
@@ -144,6 +164,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
144
164
|
to: string;
|
|
145
165
|
}[] | undefined;
|
|
146
166
|
passcode?: string | undefined;
|
|
167
|
+
code?: string | undefined;
|
|
147
168
|
masterUser?: boolean | undefined;
|
|
148
169
|
}[], Employee[] | {
|
|
149
170
|
id: number;
|
|
@@ -237,6 +258,28 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
237
258
|
updatedAt?: string | undefined;
|
|
238
259
|
splitGroupId?: string | undefined;
|
|
239
260
|
}[] | null)[];
|
|
261
|
+
timeOff?: ({
|
|
262
|
+
timeOff: "approved" | "pending";
|
|
263
|
+
requestId?: string | undefined;
|
|
264
|
+
type?: "OFF_DAY" | "LEAVE" | undefined;
|
|
265
|
+
leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
|
|
266
|
+
reason: string;
|
|
267
|
+
half?: boolean | undefined;
|
|
268
|
+
halfPart?: "AM" | "PM" | undefined;
|
|
269
|
+
from?: string | undefined;
|
|
270
|
+
to?: string | undefined;
|
|
271
|
+
appliedOn?: string | undefined;
|
|
272
|
+
note?: string | undefined;
|
|
273
|
+
cert?: {
|
|
274
|
+
name: string;
|
|
275
|
+
size: string;
|
|
276
|
+
} | null | undefined;
|
|
277
|
+
bal?: {
|
|
278
|
+
type: string;
|
|
279
|
+
entitled: number;
|
|
280
|
+
used: number;
|
|
281
|
+
} | undefined;
|
|
282
|
+
} | null)[] | undefined;
|
|
240
283
|
remarks: {
|
|
241
284
|
author: string;
|
|
242
285
|
date: string;
|
|
@@ -269,6 +312,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
269
312
|
to: string;
|
|
270
313
|
}[] | undefined;
|
|
271
314
|
passcode?: string | undefined;
|
|
315
|
+
code?: string | undefined;
|
|
272
316
|
masterUser?: boolean | undefined;
|
|
273
317
|
}[]>;
|
|
274
318
|
sections: import("vue").Ref<{
|
|
@@ -319,12 +363,14 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
319
363
|
dayIdx: number;
|
|
320
364
|
kind: "add" | "change" | "remove";
|
|
321
365
|
label: string;
|
|
366
|
+
conflict?: boolean | undefined;
|
|
322
367
|
}[], PendingChange[] | {
|
|
323
368
|
empId: number;
|
|
324
369
|
employeeKey: string;
|
|
325
370
|
dayIdx: number;
|
|
326
371
|
kind: "add" | "change" | "remove";
|
|
327
372
|
label: string;
|
|
373
|
+
conflict?: boolean | undefined;
|
|
328
374
|
}[]>;
|
|
329
375
|
unpublishedChanges: import("vue").ComputedRef<PendingChange[]>;
|
|
330
376
|
persistPublish: (items: Array<{
|
|
@@ -549,12 +595,17 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
549
595
|
clearEmployeeShifts: (empId: number) => {
|
|
550
596
|
shifts: number;
|
|
551
597
|
};
|
|
552
|
-
moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number) => boolean;
|
|
598
|
+
moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number, targetPosition?: string, allowLocked?: boolean) => boolean;
|
|
553
599
|
swapShifts: (empIdA: number, empIdB: number, dayA: number, dayB?: number, slotIndexA?: number, slotIndexB?: number, slotCountA?: number) => boolean;
|
|
554
|
-
|
|
600
|
+
swapPositions: (empIdA: number, empIdB: number, dayA: number, dayB?: number, slotIndexA?: number, slotIndexB?: number, slotCountA?: number) => boolean;
|
|
601
|
+
clearShiftsInRange: (options?: {
|
|
602
|
+
persist?: boolean;
|
|
603
|
+
mutate?: boolean;
|
|
604
|
+
}) => {
|
|
555
605
|
shifts: number;
|
|
556
606
|
open: number;
|
|
557
607
|
leave: number;
|
|
608
|
+
assignmentIds: string[];
|
|
558
609
|
};
|
|
559
610
|
requiredFor: (dayIdx: number, position: string) => number;
|
|
560
611
|
scheduledFor: (dayIdx: number, position: string) => number;
|
|
@@ -1,19 +1,12 @@
|
|
|
1
1
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
|
-
export interface ScheduleCopySkipReport {
|
|
3
|
-
leave: number;
|
|
4
|
-
already: number;
|
|
5
|
-
hours: number;
|
|
6
|
-
full: number;
|
|
7
|
-
closed: number;
|
|
8
|
-
}
|
|
9
2
|
/** The mockup's Copy schedule feature (copyLastWeek/copyThisWeekForward), ported against this
|
|
10
|
-
* board's per-week-offset bucket cache instead of the mockup's absolute 91-day horizon.
|
|
11
|
-
* shifts (copyUnitsOf in the mockup) aren't ported — WorkSlot has no splitId concept in this
|
|
12
|
-
* data model, so each slot is copied as its own unit. */
|
|
3
|
+
* board's per-week-offset bucket cache instead of the mockup's absolute 91-day horizon. */
|
|
13
4
|
export declare function useScheduleCopyWeek(board: ScheduleBoardApi, handlers?: {
|
|
14
5
|
onDemandChanged?: () => void;
|
|
6
|
+
onConfirmOverwrite?: (message: string, onConfirm: () => void) => void;
|
|
15
7
|
}): {
|
|
16
8
|
copyLastWeek: (mode: "staffed" | "open") => Promise<void>;
|
|
17
9
|
copyThisWeekForward: (mode: "staffed" | "open") => Promise<void>;
|
|
10
|
+
isCopying: import("vue").Ref<boolean, boolean>;
|
|
18
11
|
};
|
|
19
12
|
export type ScheduleCopyWeekApi = ReturnType<typeof useScheduleCopyWeek>;
|
|
@@ -27,8 +27,17 @@ export interface ScheduleOtRisk {
|
|
|
27
27
|
empId: number;
|
|
28
28
|
name: string;
|
|
29
29
|
hours: number;
|
|
30
|
+
otHours: number;
|
|
30
31
|
contract: number;
|
|
31
32
|
}
|
|
33
|
+
export interface ScheduleMonthlyOtSummary {
|
|
34
|
+
key: string;
|
|
35
|
+
label: string;
|
|
36
|
+
used: number;
|
|
37
|
+
cap: number | null;
|
|
38
|
+
progress: number;
|
|
39
|
+
high: boolean;
|
|
40
|
+
}
|
|
32
41
|
/** The staff rail consumes the same employee identity/load derivation as the area view. */
|
|
33
42
|
export type ScheduleRailRow = ScheduleEmployeeLoad;
|
|
34
43
|
/** Weekly labour cost + monthly OT gauge for the collapsible cost rail, built off one
|
|
@@ -41,7 +50,10 @@ export declare function useScheduleCostRail(board: ScheduleBoardApi, proposalAt?
|
|
|
41
50
|
weeklyCost: import("vue").ComputedRef<number>;
|
|
42
51
|
otHours: import("vue").ComputedRef<number>;
|
|
43
52
|
monthlyOtUsed: import("vue").ComputedRef<number>;
|
|
44
|
-
|
|
53
|
+
monthlyOtSummaries: import("vue").ComputedRef<ScheduleMonthlyOtSummary[]>;
|
|
54
|
+
monthlyOtCapHours: import("vue").ComputedRef<number | null>;
|
|
55
|
+
monthlyOtProgress: import("vue").ComputedRef<number>;
|
|
56
|
+
monthlyOtHigh: import("vue").ComputedRef<boolean>;
|
|
45
57
|
bySection: import("vue").ComputedRef<ScheduleSectionCost[]>;
|
|
46
58
|
otRisk: import("vue").ComputedRef<ScheduleOtRisk[]>;
|
|
47
59
|
};
|
|
@@ -33,7 +33,6 @@ export declare function useScheduleDayNote(board: ScheduleBoardApi, opts?: Sched
|
|
|
33
33
|
savedNote: import("vue").ComputedRef<import("../types").ScheduleDayNote | null>;
|
|
34
34
|
hasSaved: import("vue").ComputedRef<boolean>;
|
|
35
35
|
whenLabel: import("vue").ComputedRef<string>;
|
|
36
|
-
isAuto: import("vue").ComputedRef<boolean>;
|
|
37
36
|
rateApplies: import("vue").ComputedRef<boolean>;
|
|
38
37
|
holidayHint: import("vue").ComputedRef<string>;
|
|
39
38
|
openFor: (dayIdx: number, anchor: HTMLElement) => void;
|
|
@@ -2,14 +2,19 @@ import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
|
2
2
|
import type { ScheduleRosterApi } from './useScheduleRoster';
|
|
3
3
|
import type { ScheduleAreaBoardApi } from './useScheduleAreaBoard';
|
|
4
4
|
import type { ScheduleDemandApi } from './useScheduleDemand';
|
|
5
|
+
import { type ScheduleEmployeeLoad } from './useScheduleEmployeeIdentity';
|
|
5
6
|
declare function minToHHMM(m: number): string;
|
|
6
7
|
export interface ScheduleTimelineBar {
|
|
7
8
|
key: string;
|
|
9
|
+
start: number;
|
|
10
|
+
end: number;
|
|
8
11
|
left: number;
|
|
9
12
|
width: number;
|
|
10
13
|
cls: string;
|
|
11
14
|
label: string;
|
|
15
|
+
labels?: string[];
|
|
12
16
|
sub?: string;
|
|
17
|
+
conflict?: boolean;
|
|
13
18
|
title: string;
|
|
14
19
|
brk?: {
|
|
15
20
|
left: number;
|
|
@@ -17,6 +22,8 @@ export interface ScheduleTimelineBar {
|
|
|
17
22
|
};
|
|
18
23
|
laneTop?: number;
|
|
19
24
|
laneHeight?: number;
|
|
25
|
+
employeeId?: number;
|
|
26
|
+
slotIndex?: number;
|
|
20
27
|
onClick?: () => void;
|
|
21
28
|
}
|
|
22
29
|
export interface ScheduleTimelineRow {
|
|
@@ -27,6 +34,7 @@ export interface ScheduleTimelineRow {
|
|
|
27
34
|
avatarInitials?: string;
|
|
28
35
|
avatarColor?: string;
|
|
29
36
|
employeeId?: number;
|
|
37
|
+
employeeLoad?: ScheduleEmployeeLoad;
|
|
30
38
|
roleLabel?: string;
|
|
31
39
|
hoursLabel?: string;
|
|
32
40
|
hoursPct?: number;
|
|
@@ -34,9 +42,14 @@ export interface ScheduleTimelineRow {
|
|
|
34
42
|
name: string;
|
|
35
43
|
sub: string;
|
|
36
44
|
bars: ScheduleTimelineBar[];
|
|
45
|
+
pastDay?: boolean;
|
|
46
|
+
lockedDay?: boolean;
|
|
47
|
+
closedDay?: boolean;
|
|
48
|
+
availabilityDay?: boolean;
|
|
49
|
+
availabilityLabel?: string;
|
|
37
50
|
minHeight?: number;
|
|
38
51
|
emptyText?: string;
|
|
39
|
-
onTrackClick?: () => void;
|
|
52
|
+
onTrackClick?: (anchor: HTMLElement) => void;
|
|
40
53
|
}
|
|
41
54
|
export interface ScheduleHourCell {
|
|
42
55
|
m: number;
|
|
@@ -48,7 +61,8 @@ export interface ScheduleHourCell {
|
|
|
48
61
|
n: number;
|
|
49
62
|
}
|
|
50
63
|
export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster: ScheduleRosterApi, areaBoard: ScheduleAreaBoardApi, demand: ScheduleDemandApi, handlers: {
|
|
51
|
-
onAddShift: (empId: number, dayIdx: number) => void;
|
|
64
|
+
onAddShift: (empId: number, dayIdx: number, anchor: HTMLElement) => void;
|
|
65
|
+
onAddPositionShift: (dayIdx: number, position: string, anchor: HTMLElement) => void;
|
|
52
66
|
onEditShift: (empId: number, dayIdx: number) => void;
|
|
53
67
|
onEditLeave: (empId: number, dayIdx: number) => void;
|
|
54
68
|
onOpenDemand: (dayIdx: number) => void;
|
|
@@ -66,6 +66,13 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
|
|
|
66
66
|
}[]>;
|
|
67
67
|
toggleCustomDay: (i: number) => void;
|
|
68
68
|
applyNote: import("vue").ComputedRef<string>;
|
|
69
|
+
replaceConfirmOpen: import("vue").ComputedRef<boolean>;
|
|
70
|
+
replaceConfirmTitle: import("vue").ComputedRef<"Replace existing demand?" | "Clear existing demand?">;
|
|
71
|
+
replaceConfirmActionLabel: import("vue").ComputedRef<"Confirm" | "Clear demand">;
|
|
72
|
+
replaceConfirmMessage: import("vue").ComputedRef<"Demand already exists on the dates below. Applying this demand will replace it on all selected dates." | "Demand exists on the dates below. Saving an empty time range will clear it on all selected dates.">;
|
|
73
|
+
replaceConfirmDates: import("vue").ComputedRef<string[]>;
|
|
74
|
+
confirmReplace: () => Promise<void>;
|
|
75
|
+
cancelReplace: () => void;
|
|
69
76
|
overlapWarning: import("vue").ComputedRef<string>;
|
|
70
77
|
whenLabel: import("vue").ComputedRef<string>;
|
|
71
78
|
openFor: (idx: 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, allowLocked?: boolean) => 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 {
|
|
3
|
-
export declare function useScheduleEmployeeAccess(form: ScheduleAddEmployeeForm
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
import type { ScheduleAddEmployeeForm } from './schedule-add-employee-form';
|
|
4
|
+
export declare function useScheduleEmployeeAccess(form: ScheduleAddEmployeeForm, options?: {
|
|
5
|
+
excludePosUserId?: ComputedRef<string | undefined>;
|
|
6
|
+
}): {
|
|
7
|
+
passcodeValue: ComputedRef<string>;
|
|
8
|
+
passcodeOk: ComputedRef<boolean>;
|
|
6
9
|
setPasscodeDigit: (index: number, value: string) => void;
|
|
7
|
-
generatePasscode: () => void
|
|
10
|
+
generatePasscode: () => Promise<void>;
|
|
11
|
+
isGeneratingPasscode: import("vue").Ref<boolean, boolean>;
|
|
8
12
|
togglePosAccess: () => void;
|
|
9
13
|
addPosRoleRow: () => void;
|
|
10
14
|
removePosRoleRow: (index: number) => void;
|
|
@@ -12,5 +16,9 @@ export declare function useScheduleEmployeeAccess(form: ScheduleAddEmployeeForm)
|
|
|
12
16
|
setPosRoleOutlet: (index: number, outlet: string) => void;
|
|
13
17
|
setPosRoleId: (index: number, roleId: string) => void;
|
|
14
18
|
posRoleOptionsFor: (outlet: string) => Role[];
|
|
15
|
-
|
|
19
|
+
isPosRoleUsable: (role: Role) => boolean;
|
|
20
|
+
setMasterUserRoleAccess: (roleIds: string[] | null | undefined) => void;
|
|
21
|
+
isPosOutletUsable: (outlet: string) => boolean;
|
|
22
|
+
setMasterUserRestaurantAccess: (restaurantIds: string[] | null | undefined) => void;
|
|
23
|
+
posRolesHint: ComputedRef<"" | "No outlet assigned, so their passcode will not open a till yet." | "The same outlet is listed twice — only the last role on it will apply.">;
|
|
16
24
|
};
|