@feedmepos/mf-hrm-portal 2.3.0-dev → 2.3.0-dev.10
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-cG0zmQVJ.js → ApprovalCodeList-BLA2rhLB.js} +5 -5
- package/dist/{AuditLogList-BTifJhO1.js → AuditLogList-DBYdZhZl.js} +4 -4
- package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-qr5TwLTK.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-CtCEzPbE.js} +2 -2
- package/dist/{EmployeeList-DzcMtxJ3.js → EmployeeList-CA7DWLmy.js} +6 -6
- package/dist/{GrantUserList-D5b7tJ8Y.js → GrantUserList-BYnegeEr.js} +6 -6
- package/dist/{Main-DFwdAWqn.js → Main-BeXx0hAc.js} +8 -8
- package/dist/{Main-B2r59IOW.js → Main-Dh-gZSaa.js} +5 -5
- package/dist/{Main-DkLBemi7.js → Main-NDK7LUmm.js} +11 -11
- package/dist/{PermissionSetList-B80hrfMW.js → PermissionSetList-DDIacDpQ.js} +7 -7
- package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-ONMn3v_f.js +4167 -0
- package/dist/{PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-fe-Rdwn4.js → PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-BVz6q3HE.js} +1 -1
- package/dist/{RoleList-DHO4JRKF.js → RoleList-B30FHIzu.js} +9 -9
- package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-CRRguWTG.js +492 -0
- package/dist/ScheduleGeneralPage-8gEeZbFR.js +776 -0
- package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-TfxTAjO8.js +2252 -0
- package/dist/SchedulePage-DQ0VXWWi.js +17832 -0
- package/dist/{SchedulePositionPage-C0hrO11d.js → SchedulePositionPage-oGIDGneA.js} +66 -65
- package/dist/{TeamMemberList-CgFWLRBM.js → TeamMemberList-Drj6R4Y3.js} +10 -10
- package/dist/{TimesheetList-Dp40G-0I.js → TimesheetList-CDQfN5LE.js} +7 -7
- package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-BFjrMhUG.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-Bx-6hjs7.js} +3 -3
- package/dist/{app-CmBSTvaI.js → app-DWe_4-ct.js} +678 -594
- package/dist/app.js +1 -1
- package/dist/{approval-code-C9DmR4Md.js → approval-code-DHsUgc4K.js} +1 -1
- package/dist/{dayjs.min-CfL2DQ3d.js → dayjs.min-QSwC9dtX.js} +1 -1
- package/dist/{employee-DQcHjoij.js → employee-Bb2b3dP6.js} +29 -28
- package/dist/{grant-user-Bv-pJ9Wt.js → grant-user-qzKHFTro.js} +1 -1
- package/dist/{iteration-BlavheWG.js → iteration-TDU7bFxZ.js} +1 -1
- package/dist/{lodash-QerqayrJ.js → lodash-D3Ns5VMN.js} +1 -1
- package/dist/{restaurant-D7PEQjPY.js → restaurant-BbYRA_IT.js} +4 -3
- package/dist/{role-RM2YLO7n.js → role-D57Le_-U.js} +2 -2
- package/dist/{rule-DjlvYIuP.js → rule-DzesUEX7.js} +3 -3
- package/dist/src/api/schedule/index.d.ts +8 -1
- package/dist/src/components/layout/withScheduleShell.d.ts +10 -0
- package/dist/src/types/employee.d.ts +1 -0
- package/dist/src/types/schedule.d.ts +3 -4
- package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +0 -8
- package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +23 -0
- package/dist/src/views/scheduling/components/ScheduleBoardEditOverlays.vue.d.ts +17 -0
- package/dist/src/views/scheduling/components/ScheduleBoardEmployeeRows.vue.d.ts +31 -0
- package/dist/src/views/scheduling/components/ScheduleBoardGridHeader.vue.d.ts +24 -0
- package/dist/src/views/scheduling/components/ScheduleBoardInteractionOverlays.vue.d.ts +32 -0
- package/dist/src/views/scheduling/components/ScheduleBoardOnboardingOverlays.vue.d.ts +25 -0
- package/dist/src/views/scheduling/components/ScheduleBoardRails.vue.d.ts +17 -0
- package/dist/src/views/scheduling/components/ScheduleBoardToolbar.vue.d.ts +38 -0
- package/dist/src/views/scheduling/components/ScheduleBoardUtilityOverlays.vue.d.ts +22 -0
- package/dist/src/views/scheduling/components/{ScheduleOnboardingComplete.vue.d.ts → ScheduleCompletionDialog.vue.d.ts} +8 -3
- package/dist/src/views/scheduling/components/{ScheduleShiftCardMenu.vue.d.ts → ScheduleContextMenu.vue.d.ts} +7 -2
- package/dist/src/views/scheduling/components/{SchedulePdfPreview.vue.d.ts → ScheduleExportPreview.vue.d.ts} +1 -0
- package/dist/src/views/scheduling/components/ScheduleLoadState.vue.d.ts +9 -0
- package/dist/src/views/scheduling/components/ScheduleModal.vue.d.ts +26 -0
- package/dist/src/views/scheduling/components/{ScheduleExportDoneDialog.vue.d.ts → ScheduleOnboardingAssignPositionModal.vue.d.ts} +2 -2
- package/dist/src/views/scheduling/components/{ScheduleAssignEmployeePopover.vue.d.ts → ScheduleOnboardingClosedDayConfirm.vue.d.ts} +2 -2
- package/dist/src/views/scheduling/components/{ScheduleEmployeeMenu.vue.d.ts → ScheduleOnboardingDemandDays.vue.d.ts} +2 -2
- package/dist/src/views/scheduling/components/ScheduleOnboardingDemandFooter.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingDemandHeader.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingHoursProfileNotice.vue.d.ts +10 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingPositions.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingReview.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingWizardFooter.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingWizardHeader.vue.d.ts +11 -0
- package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +17 -1
- package/dist/src/views/scheduling/components/ScheduleSetupBanner.vue.d.ts +12 -0
- package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +2 -2
- package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +4 -4
- package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +2 -12
- package/dist/src/views/scheduling/components/ScheduleTopbar.vue.d.ts +3 -3
- package/dist/src/views/scheduling/composables/onboarding-types.d.ts +1 -1
- package/dist/src/views/scheduling/composables/remyPrompt.d.ts +13 -0
- package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +12 -8
- package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +5 -1
- package/dist/src/views/scheduling/composables/schedule-breaks.d.ts +7 -1
- package/dist/src/views/scheduling/composables/schedule-calendar.d.ts +7 -0
- package/dist/src/views/scheduling/composables/schedule-cost.d.ts +19 -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 +11 -0
- package/dist/src/views/scheduling/composables/schedule-export-matrix.d.ts +14 -0
- package/dist/src/views/scheduling/composables/schedule-time.d.ts +8 -0
- package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +1 -4
- package/dist/src/views/scheduling/composables/useRemyAppStore.d.ts +15 -0
- package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +34 -21
- package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +0 -13
- package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +2 -8
- package/dist/src/views/scheduling/composables/useScheduleAssignmentMutations.d.ts +13 -0
- package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +3 -0
- package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +50 -11
- package/dist/src/views/scheduling/composables/useScheduleCloneOutletModal.d.ts +3 -1
- package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +6 -1
- package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +1 -2
- package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +0 -3
- package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +7 -24
- package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +19 -5
- package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +16 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeAvailability.d.ts +13 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +27 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeCompensation.d.ts +7 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeForm.d.ts +22 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeIdentity.d.ts +9 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeMenu.d.ts +6 -3
- package/dist/src/views/scheduling/composables/useScheduleEmployeePersistence.d.ts +29 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +20 -0
- package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +19 -11
- package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +5 -6
- package/dist/src/views/scheduling/composables/useScheduleOnboardingAvailability.d.ts +58 -0
- package/dist/src/views/scheduling/composables/useScheduleOnboardingDemand.d.ts +45 -0
- package/dist/src/views/scheduling/composables/useScheduleOnboardingEmployees.d.ts +205 -0
- package/dist/src/views/scheduling/composables/useScheduleOnboardingHours.d.ts +15 -0
- package/dist/src/views/scheduling/composables/useScheduleOnboardingNavigation.d.ts +11 -0
- package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +306 -529
- package/dist/src/views/scheduling/composables/useSchedulePageActions.d.ts +18 -0
- package/dist/src/views/scheduling/composables/useSchedulePageCellActions.d.ts +21 -0
- package/dist/src/views/scheduling/composables/useSchedulePageCellDrop.d.ts +18 -0
- package/dist/src/views/scheduling/composables/useSchedulePageEmployeeActions.d.ts +22 -0
- package/dist/src/views/scheduling/composables/useSchedulePageOverlays.d.ts +10 -7
- package/dist/src/views/scheduling/composables/useSchedulePdfExport.d.ts +19 -0
- package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +4 -1
- package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +4 -2
- package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +9 -1
- package/dist/src/views/scheduling/composables/useSchedulePublishPersistence.d.ts +11 -0
- package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +30 -4
- package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +8 -25
- package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +18 -3
- package/dist/src/views/scheduling/composables/useScheduleShiftDraft.d.ts +63 -0
- package/dist/src/views/scheduling/composables/useScheduleShiftPersistence.d.ts +17 -0
- package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +25 -8
- package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +4 -1
- package/dist/src/views/scheduling/composables/useScheduleTour.d.ts +6 -4
- package/dist/src/views/scheduling/country-rules/index.d.ts +24 -0
- package/dist/src/views/scheduling/data.d.ts +16 -7
- package/dist/src/views/scheduling/locales/index.d.ts +80 -0
- package/dist/src/views/scheduling/schedule-constants.d.ts +7 -0
- package/dist/src/views/scheduling/schedule-state.d.ts +104 -16
- package/dist/src/views/scheduling/schedule-store.d.ts +17 -6
- package/dist/src/views/scheduling/types.d.ts +27 -5
- package/dist/style.css +1 -1
- package/dist/tsconfig.app.tsbuildinfo +1 -1
- package/dist/{useAppStore-d_nHyK5u.js → useAppStore-BoLkvkE2.js} +1 -1
- package/dist/{useLoading-JFoghhRz.js → useLoading-Ch1AUYT1.js} +1 -1
- package/dist/{useReportPermissions-Bl6Br79r.js → useReportPermissions-Cmuead1K.js} +3 -3
- package/package.json +2 -1
- package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DjNcJQM9.js +0 -4167
- package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-B-XtB64L.js +0 -452
- package/dist/ScheduleGeneralPage-WlBM8bxV.js +0 -629
- package/dist/SchedulePage-Nm0krGVU.js +0 -17056
- package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-DTDXir_7.js +0 -1150
- package/dist/src/components/layout/withShell.d.ts +0 -14
- package/dist/src/views/scheduling/components/ScheduleAllShiftsRow.vue.d.ts +0 -22
- package/dist/src/views/scheduling/components/ScheduleOpenShiftCardMenu.vue.d.ts +0 -14
- package/dist/src/views/scheduling/components/ScheduleStackPopover.vue.d.ts +0 -14
- package/dist/src/views/scheduling/components/ScheduleTourAllSet.vue.d.ts +0 -6
- package/dist/src/views/scheduling/composables/useScheduleAllShiftsRow.d.ts +0 -77
- package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +0 -122
- package/dist/src/views/scheduling/composables/useScheduleOpenShiftCard.d.ts +0 -23
- package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +0 -17
- package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +0 -10
- /package/dist/src/{components/layout/AppSidebar.vue.d.ts → views/scheduling/components/SchedulePublishShareArt.vue.d.ts} +0 -0
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { Role } from '@/types/role';
|
|
2
1
|
import type { Employee } from '../types';
|
|
3
2
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
4
3
|
import { type ScheduleAddEmployeeMode, type ScheduleAddEmployeeStep } from './schedule-add-employee-form';
|
|
@@ -6,7 +5,9 @@ export type { ScheduleAddEmployeeForm, ScheduleAddEmployeeMode, ScheduleAddEmplo
|
|
|
6
5
|
/** Add-employee wizard: a "how do you want to add them" step, then one detail form covering
|
|
7
6
|
* identity, locations, pay, scheduling caps, availability, positions and POS access — plus
|
|
8
7
|
* the "select existing POS staff" side dialog the first step can hand off to. */
|
|
9
|
-
export declare function useScheduleAddEmployee(board: ScheduleBoardApi
|
|
8
|
+
export declare function useScheduleAddEmployee(board: ScheduleBoardApi, options?: {
|
|
9
|
+
notify?: (message: string, type?: 'success' | 'error' | 'info') => void;
|
|
10
|
+
}): {
|
|
10
11
|
open: import("vue").Ref<boolean, boolean>;
|
|
11
12
|
selectExistingOpen: import("vue").Ref<boolean, boolean>;
|
|
12
13
|
step: import("vue").Ref<ScheduleAddEmployeeStep, ScheduleAddEmployeeStep>;
|
|
@@ -20,10 +21,11 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi): {
|
|
|
20
21
|
payBasis: "hourly" | "monthly";
|
|
21
22
|
payAmount: string;
|
|
22
23
|
maxHours: string;
|
|
24
|
+
maxHoursPerDay: string;
|
|
23
25
|
minHours: string;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
workingHoursEnabled: boolean;
|
|
27
|
+
overtimeEnabled: boolean;
|
|
28
|
+
maxHoursPerMonth: string;
|
|
27
29
|
availDays: boolean[];
|
|
28
30
|
availHours: {
|
|
29
31
|
from: string;
|
|
@@ -37,7 +39,10 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi): {
|
|
|
37
39
|
masterUser: boolean;
|
|
38
40
|
masterCode: string;
|
|
39
41
|
posAccessEnabled: boolean;
|
|
40
|
-
|
|
42
|
+
posRoles: {
|
|
43
|
+
outlet: string;
|
|
44
|
+
roleId: string;
|
|
45
|
+
}[];
|
|
41
46
|
};
|
|
42
47
|
sectionId: import("vue").Ref<string, string>;
|
|
43
48
|
isEditing: import("vue").ComputedRef<boolean>;
|
|
@@ -46,12 +51,14 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi): {
|
|
|
46
51
|
secOpen: import("vue").Ref<boolean, boolean>;
|
|
47
52
|
secondaryOptions: import("vue").ComputedRef<string[]>;
|
|
48
53
|
isPart: import("vue").ComputedRef<boolean>;
|
|
49
|
-
dayLit: (
|
|
54
|
+
dayLit: (index: number) => boolean;
|
|
50
55
|
avLabel: import("vue").ComputedRef<"Weekly availability" | "Time off days">;
|
|
51
56
|
avAllLabel: import("vue").ComputedRef<"Clear all" | "Select all" | "No days off" | "Every day off">;
|
|
52
|
-
maxHoursPlaceholder: import("vue").ComputedRef<
|
|
53
|
-
|
|
54
|
-
|
|
57
|
+
maxHoursPlaceholder: import("vue").ComputedRef<string>;
|
|
58
|
+
minHoursPlaceholder: import("vue").ComputedRef<string>;
|
|
59
|
+
maxHoursPerDayPlaceholder: import("vue").ComputedRef<string>;
|
|
60
|
+
maxHoursPerMonthPlaceholder: import("vue").ComputedRef<string>;
|
|
61
|
+
toggleOvertime: () => void;
|
|
55
62
|
payUnit: import("vue").ComputedRef<"/month" | "/hour">;
|
|
56
63
|
effectiveRate: import("vue").ComputedRef<number>;
|
|
57
64
|
passcodeValue: import("vue").ComputedRef<string>;
|
|
@@ -66,6 +73,7 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi): {
|
|
|
66
73
|
payLine: import("vue").ComputedRef<string>;
|
|
67
74
|
nameError: import("vue").ComputedRef<boolean>;
|
|
68
75
|
passError: import("vue").ComputedRef<boolean>;
|
|
76
|
+
posRolesError: import("vue").ComputedRef<boolean>;
|
|
69
77
|
availabilityError: import("vue").ComputedRef<boolean>;
|
|
70
78
|
saving: import("vue").Ref<boolean, boolean>;
|
|
71
79
|
saveError: import("vue").Ref<string | null, string | null>;
|
|
@@ -81,21 +89,26 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi): {
|
|
|
81
89
|
next: () => void;
|
|
82
90
|
back: () => void;
|
|
83
91
|
toggleMulti: (which: "loc" | "sec") => void;
|
|
84
|
-
toggleLocation: (
|
|
85
|
-
removeLocation: (
|
|
86
|
-
toggleSecondary: (
|
|
87
|
-
removeSecondary: (
|
|
88
|
-
setPrimaryPosition: (
|
|
92
|
+
toggleLocation: (location: string) => void;
|
|
93
|
+
removeLocation: (location: string) => void;
|
|
94
|
+
toggleSecondary: (position: string) => void;
|
|
95
|
+
removeSecondary: (position: string) => void;
|
|
96
|
+
setPrimaryPosition: (position: string) => void;
|
|
89
97
|
setPayBasis: (basis: "hourly" | "monthly") => void;
|
|
90
|
-
toggleAvailDay: (
|
|
98
|
+
toggleAvailDay: (index: number) => void;
|
|
91
99
|
availAll: () => void;
|
|
92
|
-
setAvailHour: (
|
|
93
|
-
copyAvailHourDown: (
|
|
94
|
-
setPasscodeDigit: (
|
|
100
|
+
setAvailHour: (index: number, field: "from" | "to", value: string) => void;
|
|
101
|
+
copyAvailHourDown: (index: number) => void;
|
|
102
|
+
setPasscodeDigit: (index: number, value: string) => void;
|
|
95
103
|
generatePasscode: () => void;
|
|
96
104
|
togglePosAccess: () => void;
|
|
97
|
-
|
|
98
|
-
|
|
105
|
+
addPosRoleRow: () => void;
|
|
106
|
+
removePosRoleRow: (index: number) => void;
|
|
107
|
+
isCurrentOutletRow: (index: number) => boolean;
|
|
108
|
+
setPosRoleOutlet: (index: number, outlet: string) => void;
|
|
109
|
+
setPosRoleId: (index: number, roleId: string) => void;
|
|
110
|
+
posRoleOptionsFor: (outlet: string) => import("../../../types/role").Role[];
|
|
111
|
+
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.">;
|
|
99
112
|
create: () => Promise<boolean>;
|
|
100
113
|
};
|
|
101
114
|
export type ScheduleAddEmployeeApi = ReturnType<typeof useScheduleAddEmployee>;
|
|
@@ -37,19 +37,6 @@ export declare function qualifiedFor(emp: Employee, position: string): boolean;
|
|
|
37
37
|
export declare function useScheduleAreaBoard(board: ScheduleBoardApi): {
|
|
38
38
|
positionRows: import("vue").ComputedRef<string[]>;
|
|
39
39
|
assignedOn: (dayIdx: number, position: string) => ScheduleAssignedSlot[];
|
|
40
|
-
unfilledOpenShiftsOn: (dayIdx: number, position: string) => {
|
|
41
|
-
id: number;
|
|
42
|
-
dayIdx: number;
|
|
43
|
-
position: string;
|
|
44
|
-
required: number;
|
|
45
|
-
filledBy: number | null;
|
|
46
|
-
sen?: "junior" | "senior" | undefined;
|
|
47
|
-
empType?: "full" | "part" | undefined;
|
|
48
|
-
name?: string | undefined;
|
|
49
|
-
start: string;
|
|
50
|
-
end: string;
|
|
51
|
-
breakMins?: number | undefined;
|
|
52
|
-
}[];
|
|
53
40
|
poolFor: (position: string) => Employee[];
|
|
54
41
|
cellMeta: (dayIdx: number, position: string) => SchedulePositionCellMeta;
|
|
55
42
|
positionWeekMeta: (position: string) => {
|
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* dropStaffOnCell(), scoped to this board's model (no "unspecialised, so ask what they can
|
|
5
|
-
* do" grant flow, no split shifts): dropping fills an existing open shift for that position/day
|
|
6
|
-
* if there is one, otherwise opens the shift editor pre-filled with this person, day and
|
|
7
|
-
* position so the manager sets the hours. */
|
|
8
|
-
export declare function useScheduleAreaDragDrop(board: ScheduleBoardApi, areaBoard: ScheduleAreaBoardApi, handlers: {
|
|
9
|
-
onFillOpenShift: (openId: number, empId: number) => void;
|
|
2
|
+
/** Dragging a person from the staff rail onto a position/day cell opens a normal assigned shift. */
|
|
3
|
+
export declare function useScheduleAreaDragDrop(board: ScheduleBoardApi, handlers: {
|
|
10
4
|
onCreateShift: (empId: number, dayIdx: number, position: string) => void;
|
|
11
5
|
onNotQualified: (empName: string, position: string) => void;
|
|
12
6
|
}): {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DaySlot, Employee, WorkSlot } from '../types';
|
|
2
|
+
export interface ScheduleAssignmentMutationOptions {
|
|
3
|
+
dateFor: (offset: number, dayIdx: number) => string | null;
|
|
4
|
+
employeeAt: (offset: number, employeeId: number) => Employee | undefined;
|
|
5
|
+
currentOffset: () => number;
|
|
6
|
+
onPersistError?: (message: string) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare function useScheduleAssignmentMutations(options: ScheduleAssignmentMutationOptions): {
|
|
9
|
+
persistSlot: (empId: number, dayIdx: number, oldSlot: DaySlot, newSlot: WorkSlot | WorkSlot[], dateOverride?: string | null, offset?: number, restoreDaySlot?: DaySlot) => Promise<void>;
|
|
10
|
+
persistRemoval: (oldSlot: DaySlot) => Promise<void>;
|
|
11
|
+
persistMove: (toEmpId: number, dayIdx: number, slot: WorkSlot | WorkSlot[], dateOverride?: string | null) => Promise<void>;
|
|
12
|
+
recoverPersistFailure: (error: unknown, fallback: string) => Promise<void>;
|
|
13
|
+
};
|
|
@@ -57,6 +57,7 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
57
57
|
occupied: number;
|
|
58
58
|
notQualified: number;
|
|
59
59
|
weeklyCap: number;
|
|
60
|
+
dailyCap: number;
|
|
60
61
|
rest: number;
|
|
61
62
|
dayOff: number;
|
|
62
63
|
dayCap: number;
|
|
@@ -121,6 +122,7 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
121
122
|
occupied: number;
|
|
122
123
|
notQualified: number;
|
|
123
124
|
weeklyCap: number;
|
|
125
|
+
dailyCap: number;
|
|
124
126
|
rest: number;
|
|
125
127
|
dayOff: number;
|
|
126
128
|
dayCap: number;
|
|
@@ -185,6 +187,7 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
185
187
|
occupied: number;
|
|
186
188
|
notQualified: number;
|
|
187
189
|
weeklyCap: number;
|
|
190
|
+
dailyCap: number;
|
|
188
191
|
rest: number;
|
|
189
192
|
dayOff: number;
|
|
190
193
|
dayCap: number;
|
|
@@ -1,27 +1,26 @@
|
|
|
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;
|
|
22
20
|
isHoliday: (dayIdx: number) => boolean;
|
|
23
21
|
employees: import("vue").Ref<{
|
|
24
22
|
id: number;
|
|
23
|
+
sourceId: string;
|
|
25
24
|
name: string;
|
|
26
25
|
employmentType: "FULLTIME" | "PARTTIME";
|
|
27
26
|
role: string;
|
|
@@ -32,10 +31,12 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
32
31
|
contractHours?: number | undefined;
|
|
33
32
|
rate: number;
|
|
34
33
|
positions: string[];
|
|
34
|
+
archivedPositions?: string[] | undefined;
|
|
35
35
|
shifts: ({
|
|
36
36
|
start: string;
|
|
37
37
|
end: string;
|
|
38
38
|
role: string;
|
|
39
|
+
positionId?: string | undefined;
|
|
39
40
|
status: import("../types").ShiftStatus;
|
|
40
41
|
clock?: {
|
|
41
42
|
in: string | null;
|
|
@@ -57,6 +58,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
57
58
|
breakPayType: "PAID" | "UNPAID";
|
|
58
59
|
})[] | undefined;
|
|
59
60
|
assignmentId?: string | undefined;
|
|
61
|
+
updatedAt?: string | undefined;
|
|
60
62
|
splitGroupId?: string | undefined;
|
|
61
63
|
} | {
|
|
62
64
|
timeOff: "approved" | "pending";
|
|
@@ -83,6 +85,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
83
85
|
start: string;
|
|
84
86
|
end: string;
|
|
85
87
|
role: string;
|
|
88
|
+
positionId?: string | undefined;
|
|
86
89
|
status: import("../types").ShiftStatus;
|
|
87
90
|
clock?: {
|
|
88
91
|
in: string | null;
|
|
@@ -104,6 +107,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
104
107
|
breakPayType: "PAID" | "UNPAID";
|
|
105
108
|
})[] | undefined;
|
|
106
109
|
assignmentId?: string | undefined;
|
|
110
|
+
updatedAt?: string | undefined;
|
|
107
111
|
splitGroupId?: string | undefined;
|
|
108
112
|
}[] | null)[];
|
|
109
113
|
remarks: {
|
|
@@ -120,9 +124,16 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
120
124
|
payBasis?: "hourly" | "monthly" | undefined;
|
|
121
125
|
payAmount?: number | undefined;
|
|
122
126
|
maxHours?: number | undefined;
|
|
123
|
-
maxOtHours?: number | undefined;
|
|
124
127
|
minHours?: number | undefined;
|
|
125
|
-
|
|
128
|
+
minHoursPerDay?: number | undefined;
|
|
129
|
+
workingHours?: {
|
|
130
|
+
minHoursPerDay: number | null;
|
|
131
|
+
maxHoursPerDay: number | null;
|
|
132
|
+
maxHoursPerWeek: number | null;
|
|
133
|
+
} | undefined;
|
|
134
|
+
overtime?: {
|
|
135
|
+
maxHoursPerMonth: number | null;
|
|
136
|
+
} | undefined;
|
|
126
137
|
preferences?: string[] | undefined;
|
|
127
138
|
seniority?: "senior" | "junior" | "" | undefined;
|
|
128
139
|
availDays?: boolean[] | undefined;
|
|
@@ -134,6 +145,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
134
145
|
masterUser?: boolean | undefined;
|
|
135
146
|
}[], Employee[] | {
|
|
136
147
|
id: number;
|
|
148
|
+
sourceId: string;
|
|
137
149
|
name: string;
|
|
138
150
|
employmentType: "FULLTIME" | "PARTTIME";
|
|
139
151
|
role: string;
|
|
@@ -144,10 +156,12 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
144
156
|
contractHours?: number | undefined;
|
|
145
157
|
rate: number;
|
|
146
158
|
positions: string[];
|
|
159
|
+
archivedPositions?: string[] | undefined;
|
|
147
160
|
shifts: ({
|
|
148
161
|
start: string;
|
|
149
162
|
end: string;
|
|
150
163
|
role: string;
|
|
164
|
+
positionId?: string | undefined;
|
|
151
165
|
status: import("../types").ShiftStatus;
|
|
152
166
|
clock?: {
|
|
153
167
|
in: string | null;
|
|
@@ -169,6 +183,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
169
183
|
breakPayType: "PAID" | "UNPAID";
|
|
170
184
|
})[] | undefined;
|
|
171
185
|
assignmentId?: string | undefined;
|
|
186
|
+
updatedAt?: string | undefined;
|
|
172
187
|
splitGroupId?: string | undefined;
|
|
173
188
|
} | {
|
|
174
189
|
timeOff: "approved" | "pending";
|
|
@@ -195,6 +210,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
195
210
|
start: string;
|
|
196
211
|
end: string;
|
|
197
212
|
role: string;
|
|
213
|
+
positionId?: string | undefined;
|
|
198
214
|
status: import("../types").ShiftStatus;
|
|
199
215
|
clock?: {
|
|
200
216
|
in: string | null;
|
|
@@ -216,6 +232,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
216
232
|
breakPayType: "PAID" | "UNPAID";
|
|
217
233
|
})[] | undefined;
|
|
218
234
|
assignmentId?: string | undefined;
|
|
235
|
+
updatedAt?: string | undefined;
|
|
219
236
|
splitGroupId?: string | undefined;
|
|
220
237
|
}[] | null)[];
|
|
221
238
|
remarks: {
|
|
@@ -232,9 +249,16 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
232
249
|
payBasis?: "hourly" | "monthly" | undefined;
|
|
233
250
|
payAmount?: number | undefined;
|
|
234
251
|
maxHours?: number | undefined;
|
|
235
|
-
maxOtHours?: number | undefined;
|
|
236
252
|
minHours?: number | undefined;
|
|
237
|
-
|
|
253
|
+
minHoursPerDay?: number | undefined;
|
|
254
|
+
workingHours?: {
|
|
255
|
+
minHoursPerDay: number | null;
|
|
256
|
+
maxHoursPerDay: number | null;
|
|
257
|
+
maxHoursPerWeek: number | null;
|
|
258
|
+
} | undefined;
|
|
259
|
+
overtime?: {
|
|
260
|
+
maxHoursPerMonth: number | null;
|
|
261
|
+
} | undefined;
|
|
238
262
|
preferences?: string[] | undefined;
|
|
239
263
|
seniority?: "senior" | "junior" | "" | undefined;
|
|
240
264
|
availDays?: boolean[] | undefined;
|
|
@@ -281,7 +305,6 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
281
305
|
end: string;
|
|
282
306
|
breakMins?: number | undefined;
|
|
283
307
|
}[]>;
|
|
284
|
-
highlightEmpId: import("vue").Ref<number | null, number | null>;
|
|
285
308
|
rangeStart: import("vue").Ref<Date, Date>;
|
|
286
309
|
weekOffset: import("vue").ComputedRef<number>;
|
|
287
310
|
peekWeek: (offset: number) => import("./schedule-week-cache").WeekBucket;
|
|
@@ -290,11 +313,13 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
290
313
|
dayLocked: (dayIdx: number) => boolean;
|
|
291
314
|
pendingChanges: import("vue").Ref<{
|
|
292
315
|
empId: number;
|
|
316
|
+
employeeKey: string;
|
|
293
317
|
dayIdx: number;
|
|
294
318
|
kind: "add" | "change" | "remove";
|
|
295
319
|
label: string;
|
|
296
320
|
}[], PendingChange[] | {
|
|
297
321
|
empId: number;
|
|
322
|
+
employeeKey: string;
|
|
298
323
|
dayIdx: number;
|
|
299
324
|
kind: "add" | "change" | "remove";
|
|
300
325
|
label: string;
|
|
@@ -304,7 +329,8 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
304
329
|
empId: number;
|
|
305
330
|
dayIdx: number;
|
|
306
331
|
slot: WorkSlot;
|
|
307
|
-
}>) => Promise<
|
|
332
|
+
}>) => Promise<boolean>;
|
|
333
|
+
flushAssignmentWrites: () => Promise<void>;
|
|
308
334
|
recordChange: (empId: number, dayIdx: number, kind: PendingChange["kind"], label: string) => void;
|
|
309
335
|
scheduleVersions: import("vue").Ref<{
|
|
310
336
|
v: number;
|
|
@@ -321,6 +347,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
321
347
|
start: string;
|
|
322
348
|
end: string;
|
|
323
349
|
role: string;
|
|
350
|
+
positionId?: string | undefined;
|
|
324
351
|
status: import("../types").ShiftStatus;
|
|
325
352
|
clock?: {
|
|
326
353
|
in: string | null;
|
|
@@ -342,6 +369,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
342
369
|
breakPayType: "PAID" | "UNPAID";
|
|
343
370
|
})[] | undefined;
|
|
344
371
|
assignmentId?: string | undefined;
|
|
372
|
+
updatedAt?: string | undefined;
|
|
345
373
|
splitGroupId?: string | undefined;
|
|
346
374
|
} | {
|
|
347
375
|
timeOff: "approved" | "pending";
|
|
@@ -368,6 +396,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
368
396
|
start: string;
|
|
369
397
|
end: string;
|
|
370
398
|
role: string;
|
|
399
|
+
positionId?: string | undefined;
|
|
371
400
|
status: import("../types").ShiftStatus;
|
|
372
401
|
clock?: {
|
|
373
402
|
in: string | null;
|
|
@@ -389,6 +418,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
389
418
|
breakPayType: "PAID" | "UNPAID";
|
|
390
419
|
})[] | undefined;
|
|
391
420
|
assignmentId?: string | undefined;
|
|
421
|
+
updatedAt?: string | undefined;
|
|
392
422
|
splitGroupId?: string | undefined;
|
|
393
423
|
}[] | null)[];
|
|
394
424
|
}[];
|
|
@@ -407,6 +437,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
407
437
|
start: string;
|
|
408
438
|
end: string;
|
|
409
439
|
role: string;
|
|
440
|
+
positionId?: string | undefined;
|
|
410
441
|
status: import("../types").ShiftStatus;
|
|
411
442
|
clock?: {
|
|
412
443
|
in: string | null;
|
|
@@ -428,6 +459,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
428
459
|
breakPayType: "PAID" | "UNPAID";
|
|
429
460
|
})[] | undefined;
|
|
430
461
|
assignmentId?: string | undefined;
|
|
462
|
+
updatedAt?: string | undefined;
|
|
431
463
|
splitGroupId?: string | undefined;
|
|
432
464
|
} | {
|
|
433
465
|
timeOff: "approved" | "pending";
|
|
@@ -454,6 +486,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
454
486
|
start: string;
|
|
455
487
|
end: string;
|
|
456
488
|
role: string;
|
|
489
|
+
positionId?: string | undefined;
|
|
457
490
|
status: import("../types").ShiftStatus;
|
|
458
491
|
clock?: {
|
|
459
492
|
in: string | null;
|
|
@@ -475,6 +508,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
475
508
|
breakPayType: "PAID" | "UNPAID";
|
|
476
509
|
})[] | undefined;
|
|
477
510
|
assignmentId?: string | undefined;
|
|
511
|
+
updatedAt?: string | undefined;
|
|
478
512
|
splitGroupId?: string | undefined;
|
|
479
513
|
}[] | null)[];
|
|
480
514
|
}[];
|
|
@@ -498,6 +532,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
498
532
|
rangeLabel: import("vue").ComputedRef<string>;
|
|
499
533
|
isToday: (dayIdx: number) => boolean;
|
|
500
534
|
dateKey: (dayIdx: number) => string | null;
|
|
535
|
+
dateKeyAt: (offset: number, dayIdx: number) => string | null;
|
|
501
536
|
navigate: (delta: number) => void;
|
|
502
537
|
goToday: () => void;
|
|
503
538
|
membersOf: (sectionId: string) => Employee[];
|
|
@@ -508,6 +543,10 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
508
543
|
commitShiftAt: (offset: number, empId: number, dayIdx: number, slot: WorkSlot | WorkSlot[], replaceIndex?: number, replaceCount?: number) => void;
|
|
509
544
|
removeShift: (empId: number, dayIdx: number, slotIndex?: number, count?: number) => void;
|
|
510
545
|
removeShiftAt: (offset: number, empId: number, dayIdx: number, slotIndex?: number, count?: number) => void;
|
|
546
|
+
employeeShiftsToClear: (empId: number) => number[];
|
|
547
|
+
clearEmployeeShifts: (empId: number) => {
|
|
548
|
+
shifts: number;
|
|
549
|
+
};
|
|
511
550
|
moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number) => boolean;
|
|
512
551
|
swapShifts: (empIdA: number, empIdB: number, dayA: number, dayB?: number, slotIndexA?: number, slotIndexB?: number, slotCountA?: number) => boolean;
|
|
513
552
|
clearShiftsInRange: () => {
|
|
@@ -3,7 +3,9 @@ import type { ScheduleOutletApi } from './useScheduleOutlet';
|
|
|
3
3
|
* not the page's draft — to one or more other outlets the manager ticks. Scoped to pay rates
|
|
4
4
|
* because that is the only outlet-scoped setting this page persists; the mockup's broader
|
|
5
5
|
* "rules, shifts, coverage and positions" clone lives on pages this one doesn't own. */
|
|
6
|
-
export declare function useScheduleCloneOutletModal(outlet: ScheduleOutletApi
|
|
6
|
+
export declare function useScheduleCloneOutletModal(outlet: ScheduleOutletApi, options?: {
|
|
7
|
+
notify?: (message: string, type?: 'success' | 'error' | 'info') => void;
|
|
8
|
+
}): {
|
|
7
9
|
open: import("vue").Ref<boolean, boolean>;
|
|
8
10
|
query: import("vue").Ref<string, string>;
|
|
9
11
|
selected: import("vue").Ref<Set<string> & Omit<Set<string>, keyof Set<any>>, Set<string> | (Set<string> & Omit<Set<string>, keyof Set<any>>)>;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { Proposal } from '../types';
|
|
1
2
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
3
|
+
import type { ScheduleEmployeeLoad } from './useScheduleEmployeeIdentity';
|
|
2
4
|
export declare function slotHours(start: string, end: string): number;
|
|
3
5
|
export interface ScheduleDayCost {
|
|
4
6
|
hours: number;
|
|
@@ -27,10 +29,13 @@ export interface ScheduleOtRisk {
|
|
|
27
29
|
hours: number;
|
|
28
30
|
contract: number;
|
|
29
31
|
}
|
|
32
|
+
/** The staff rail consumes the same employee identity/load derivation as the area view. */
|
|
33
|
+
export type ScheduleRailRow = ScheduleEmployeeLoad;
|
|
30
34
|
/** Weekly labour cost + monthly OT gauge for the collapsible cost rail, built off one
|
|
31
35
|
* per-day breakdown so the rail's totals and the stats row's per-day figures can never
|
|
32
36
|
* disagree about what a day cost. */
|
|
33
|
-
export declare function useScheduleCostRail(board: ScheduleBoardApi): {
|
|
37
|
+
export declare function useScheduleCostRail(board: ScheduleBoardApi, proposalAt?: () => ((empId: number, dayIdx: number) => Proposal | undefined) | undefined): {
|
|
38
|
+
rows: import("vue").ComputedRef<ScheduleEmployeeLoad[]>;
|
|
34
39
|
collapsed: import("vue").Ref<boolean, boolean>;
|
|
35
40
|
byDay: import("vue").ComputedRef<ScheduleDayCost[]>;
|
|
36
41
|
weeklyCost: import("vue").ComputedRef<number>;
|
|
@@ -7,7 +7,7 @@ export interface ScheduleDayNoteState {
|
|
|
7
7
|
}
|
|
8
8
|
export interface ScheduleDayNoteOptions {
|
|
9
9
|
/** Toasts for the writes that happen on the spot — closing a day, repricing it, saving. */
|
|
10
|
-
onToast?: (message: string) => void;
|
|
10
|
+
onToast?: (message: string, type?: 'info' | 'success' | 'error') => void;
|
|
11
11
|
}
|
|
12
12
|
/** One decimal, always: "2×" reads as a count, and 1.5 beside a bare 2 in one sentence looks
|
|
13
13
|
* like two different kinds of number. Ported from the mockup's fmtRate(). */
|
|
@@ -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;
|
|
@@ -51,8 +51,6 @@ export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster:
|
|
|
51
51
|
onAddShift: (empId: number, dayIdx: number) => void;
|
|
52
52
|
onEditShift: (empId: number, dayIdx: number) => void;
|
|
53
53
|
onEditLeave: (empId: number, dayIdx: number) => void;
|
|
54
|
-
onOpenAssign: (openId: number) => void;
|
|
55
|
-
onAddAreaShift: (dayIdx: number, position: string) => void;
|
|
56
54
|
onOpenDemand: (dayIdx: number) => void;
|
|
57
55
|
onOpenEmployeeMenu: (empId: number, anchor: HTMLElement) => void;
|
|
58
56
|
onDemandSegment: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => void;
|
|
@@ -68,7 +66,6 @@ export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster:
|
|
|
68
66
|
clock: string;
|
|
69
67
|
}[]>;
|
|
70
68
|
isOpenHour: (m: number) => boolean;
|
|
71
|
-
openShiftsRow: import("vue").ComputedRef<ScheduleTimelineRow | null>;
|
|
72
69
|
employeeRows: import("vue").ComputedRef<ScheduleTimelineRow[]>;
|
|
73
70
|
positionTimelineRows: import("vue").ComputedRef<ScheduleTimelineRow[]>;
|
|
74
71
|
demandRow: import("vue").ComputedRef<{
|
|
@@ -1,34 +1,17 @@
|
|
|
1
1
|
import type { CoverageSegment, DaySlot, DemandPeriod, Employee, Proposal } from '../types';
|
|
2
2
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export declare function spanOf(start: string, end: string): [number, number];
|
|
8
|
-
/** 12-hour clock for prose — the sheet and the popovers read as sentences, and "16:00" in the
|
|
9
|
-
* middle of one does not. */
|
|
10
|
-
export declare function t12(hhmm: string): string;
|
|
11
|
-
/** The timeline's two end labels — "8am", "10:30pm", meridiem spelled out. */
|
|
12
|
-
export declare function minToShort(m: number): string;
|
|
13
|
-
export declare function rangeText(from: number, to: number): string;
|
|
14
|
-
export declare function roleTotalOf(p: DemandPeriod): number;
|
|
15
|
-
/** The unnamed part of a period's headcount. Derived, never typed — so it cannot disagree with
|
|
16
|
-
* the total above it. Negative means the breakdown has overrun that total. */
|
|
17
|
-
export declare function anyLeftOf(p: DemandPeriod): number;
|
|
18
|
-
export interface ScheduleCoverageAxis {
|
|
19
|
-
from: number;
|
|
20
|
-
to: number;
|
|
21
|
-
}
|
|
3
|
+
import { anyLeftOf, minToHHMM, minToShort, rangeText, roleTotalOf, spanOf, t12, toMin } from './schedule-demand-domain';
|
|
4
|
+
import type { ScheduleCoverageAxis } from './schedule-demand-domain';
|
|
5
|
+
export { anyLeftOf, minToHHMM, minToShort, rangeText, roleTotalOf, spanOf, t12, toMin };
|
|
6
|
+
export type { ScheduleCoverageAxis } from './schedule-demand-domain';
|
|
22
7
|
/** Staffing demand, and coverage read against it.
|
|
23
8
|
*
|
|
24
9
|
* Storage follows this board's dayNotes rather than the mockup's flat `di` index: the mockup
|
|
25
10
|
* renders one long horizon so a day index identifies a date, but this board pages through
|
|
26
|
-
* weeks, and demand put on this Monday must not reappear on every other Monday.
|
|
27
|
-
*
|
|
11
|
+
* weeks, and demand put on this Monday must not reappear on every other Monday. Demand is
|
|
12
|
+
* therefore keyed by explicit ISO date.
|
|
28
13
|
*
|
|
29
|
-
*
|
|
30
|
-
* needs eight" is a standing statement, and "this Tuesday is different" has to be able to
|
|
31
|
-
* override it without rewriting the rule. */
|
|
14
|
+
* The weekday fallback remains only as a defensive read path until legacy records are removed. */
|
|
32
15
|
export declare function useScheduleDemand(board: ScheduleBoardApi): {
|
|
33
16
|
byDate: Record<string, DemandPeriod[]>;
|
|
34
17
|
byWeekday: Record<number, DemandPeriod[]>;
|
|
@@ -6,7 +6,7 @@ export interface ScheduleDemandSuggestion {
|
|
|
6
6
|
periods: DemandPeriod[];
|
|
7
7
|
}
|
|
8
8
|
export interface ScheduleDemandSheetOptions {
|
|
9
|
-
onToast?: (message: string) => void;
|
|
9
|
+
onToast?: (message: string, type?: 'info' | 'success' | 'error') => void;
|
|
10
10
|
/** Positions the breakdown can name — the same list the shift editor offers. */
|
|
11
11
|
positionOptions: () => string[];
|
|
12
12
|
/** Called instead of a toast when "+ Position breakdown" is pressed and there is no position
|
|
@@ -14,8 +14,7 @@ export interface ScheduleDemandSheetOptions {
|
|
|
14
14
|
onNeedPosition?: (periodIdx: number, roleIdx: number) => void;
|
|
15
15
|
}
|
|
16
16
|
/** The demand sheet — editing happens on a DRAFT, so Save is a real commit and closing is a
|
|
17
|
-
* real cancel.
|
|
18
|
-
* property of the statement being made rather than a second screen. */
|
|
17
|
+
* real cancel. Apply scopes are expanded into explicit dates in the visible week. */
|
|
19
18
|
export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand: ScheduleDemandApi, opts: ScheduleDemandSheetOptions): {
|
|
20
19
|
open: import("vue").Ref<boolean, boolean>;
|
|
21
20
|
dayIdx: import("vue").Ref<number | null, number | null>;
|
|
@@ -25,6 +24,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
|
|
|
25
24
|
n: number;
|
|
26
25
|
roles?: {
|
|
27
26
|
position: string;
|
|
27
|
+
positionId?: string | undefined;
|
|
28
28
|
n: number;
|
|
29
29
|
}[] | undefined;
|
|
30
30
|
}[], DemandPeriod[] | {
|
|
@@ -33,6 +33,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
|
|
|
33
33
|
n: number;
|
|
34
34
|
roles?: {
|
|
35
35
|
position: string;
|
|
36
|
+
positionId?: string | undefined;
|
|
36
37
|
n: number;
|
|
37
38
|
}[] | undefined;
|
|
38
39
|
}[]>;
|
|
@@ -68,7 +69,17 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
|
|
|
68
69
|
overlapWarning: import("vue").ComputedRef<string>;
|
|
69
70
|
whenLabel: import("vue").ComputedRef<string>;
|
|
70
71
|
openFor: (idx: number) => void;
|
|
71
|
-
close: () => void;
|
|
72
|
+
close: (preserveDraft?: boolean) => void;
|
|
73
|
+
hasUnsavedChanges: import("vue").ComputedRef<boolean>;
|
|
74
|
+
diffSummary: import("vue").ComputedRef<{
|
|
75
|
+
changed: number;
|
|
76
|
+
added: number;
|
|
77
|
+
removed: number;
|
|
78
|
+
modified: number;
|
|
79
|
+
}>;
|
|
80
|
+
isPeriodChanged: (index: number) => boolean;
|
|
81
|
+
isPeriodFieldChanged: (index: number, field: "from" | "to" | "n") => boolean;
|
|
82
|
+
revert: () => void;
|
|
72
83
|
addPeriod: () => void;
|
|
73
84
|
removePeriod: (i: number) => void;
|
|
74
85
|
setHeads: (i: number, value: number | string) => void;
|
|
@@ -105,6 +116,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
|
|
|
105
116
|
n: number;
|
|
106
117
|
roles?: {
|
|
107
118
|
position: string;
|
|
119
|
+
positionId?: string | undefined;
|
|
108
120
|
n: number;
|
|
109
121
|
}[] | undefined;
|
|
110
122
|
}[];
|
|
@@ -116,6 +128,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
|
|
|
116
128
|
n: number;
|
|
117
129
|
roles?: {
|
|
118
130
|
position: string;
|
|
131
|
+
positionId?: string | undefined;
|
|
119
132
|
n: number;
|
|
120
133
|
}[] | undefined;
|
|
121
134
|
}[];
|
|
@@ -126,6 +139,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
|
|
|
126
139
|
word: string;
|
|
127
140
|
}[]>;
|
|
128
141
|
suggest: () => void;
|
|
142
|
+
askRemy: () => Promise<void>;
|
|
129
143
|
acceptSuggestion: () => void;
|
|
130
144
|
dismissSuggestion: () => void;
|
|
131
145
|
canCopy: import("vue").ComputedRef<boolean>;
|
|
@@ -140,6 +154,6 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
|
|
|
140
154
|
openCopy: () => void;
|
|
141
155
|
closeCopy: () => void;
|
|
142
156
|
confirmCopy: () => Promise<void>;
|
|
143
|
-
setApply: (
|
|
157
|
+
setApply: (mode: DemandApplyMode) => void;
|
|
144
158
|
};
|
|
145
159
|
export type ScheduleDemandSheetApi = ReturnType<typeof useScheduleDemandSheet>;
|