@feedmepos/mf-hrm-portal 2.3.0-dev → 2.3.0-dev.3
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-SjyWZghY.js} +2 -2
- package/dist/{AuditLogList-BTifJhO1.js → AuditLogList-aTI3QeO0.js} +3 -3
- package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-qr5TwLTK.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang--JTV7non.js} +2 -2
- package/dist/{EmployeeList-DzcMtxJ3.js → EmployeeList-D2Q_2ZE0.js} +4 -4
- package/dist/{GrantUserList-D5b7tJ8Y.js → GrantUserList-6YXLPuHR.js} +3 -3
- package/dist/{Main-DFwdAWqn.js → Main-B-a6F9g8.js} +5 -5
- package/dist/{Main-B2r59IOW.js → Main-CFIWlIaC.js} +2 -2
- package/dist/{Main-DkLBemi7.js → Main-dSqOeBRJ.js} +9 -9
- package/dist/{PermissionSetList-B80hrfMW.js → PermissionSetList-DxkaPCMs.js} +5 -5
- package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DjNcJQM9.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DnKckKZ0.js} +1165 -1165
- package/dist/{RoleList-DHO4JRKF.js → RoleList-DQZ_w5uM.js} +7 -7
- package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-Dr6QruG6.js +470 -0
- package/dist/{ScheduleGeneralPage-WlBM8bxV.js → ScheduleGeneralPage-CvskrXcV.js} +273 -236
- package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-C4On5sVD.js +2157 -0
- package/dist/SchedulePage-CW-K836l.js +18248 -0
- package/dist/{SchedulePositionPage-C0hrO11d.js → SchedulePositionPage-BGrZBU3g.js} +67 -66
- package/dist/{TeamMemberList-CgFWLRBM.js → TeamMemberList-BiTHVJwE.js} +6 -6
- package/dist/{TimesheetList-Dp40G-0I.js → TimesheetList-CUkYacGW.js} +5 -5
- package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-BFjrMhUG.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-B1Y587O-.js} +2 -2
- package/dist/{app-CmBSTvaI.js → app-CAKCDrbJ.js} +657 -577
- package/dist/app.js +1 -1
- package/dist/{dayjs.min-CfL2DQ3d.js → dayjs.min-CZ8QYRoc.js} +1 -1
- package/dist/{employee-DQcHjoij.js → employee-D56eWEFe.js} +28 -27
- package/dist/{iteration-BlavheWG.js → iteration-BVJdyLNq.js} +1 -1
- package/dist/{lodash-QerqayrJ.js → lodash-BcIRkQPW.js} +1 -1
- package/dist/{role-RM2YLO7n.js → role-B-eZDaBX.js} +1 -1
- package/dist/{rule-DjlvYIuP.js → rule-D6AIfx8b.js} +2 -2
- package/dist/src/api/schedule/index.d.ts +6 -4
- package/dist/src/components/layout/withScheduleShell.d.ts +10 -0
- package/dist/src/composables/useMessage.d.ts +2 -8
- package/dist/src/types/employee.d.ts +1 -0
- package/dist/src/types/schedule.d.ts +1 -1
- package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +28 -0
- package/dist/src/views/scheduling/components/ScheduleBoardEditOverlays.vue.d.ts +19 -0
- package/dist/src/views/scheduling/components/ScheduleBoardEmployeeRows.vue.d.ts +38 -0
- package/dist/src/views/scheduling/components/ScheduleBoardGridHeader.vue.d.ts +24 -0
- package/dist/src/views/scheduling/components/ScheduleBoardInteractionOverlays.vue.d.ts +38 -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 +39 -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/{ScheduleOpenShiftCardMenu.vue.d.ts → ScheduleContextMenu.vue.d.ts} +10 -3
- 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 +10 -0
- package/dist/src/views/scheduling/components/ScheduleModal.vue.d.ts +26 -0
- package/dist/src/views/scheduling/components/{ScheduleExportDoneDialog.vue.d.ts → ScheduleOnboardingClosedDayConfirm.vue.d.ts} +2 -2
- package/dist/src/views/scheduling/components/{ScheduleAutoScheduleDetailsModal.vue.d.ts → ScheduleOnboardingDemandDays.vue.d.ts} +2 -2
- package/dist/src/views/scheduling/components/{ScheduleEmployeeMenu.vue.d.ts → ScheduleOnboardingDemandFooter.vue.d.ts} +2 -2
- 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 +7 -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 -2
- 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/schedule-board-helpers.d.ts +1 -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-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/scheduleAutoSolver.d.ts +23 -0
- package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +14 -13
- package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +3 -1
- package/dist/src/views/scheduling/composables/useScheduleAssignmentMutations.d.ts +13 -0
- package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +4 -114
- package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +18 -2
- 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 -1
- package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +4 -19
- package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +12 -2
- package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +11 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeAvailability.d.ts +13 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +26 -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 +25 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +18 -0
- package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +19 -11
- package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +3 -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 +187 -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 +64 -487
- 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 -3
- package/dist/src/views/scheduling/composables/useSchedulePdfExport.d.ts +19 -0
- package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +3 -1
- package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +3 -1
- package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +7 -1
- package/dist/src/views/scheduling/composables/useSchedulePublishPersistence.d.ts +11 -0
- package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +6 -0
- package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +2 -24
- package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +6 -1
- package/dist/src/views/scheduling/composables/useScheduleShiftDraft.d.ts +62 -0
- package/dist/src/views/scheduling/composables/useScheduleShiftPersistence.d.ts +17 -0
- package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +10 -5
- 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 +11 -6
- 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 +134 -110
- package/dist/src/views/scheduling/schedule-store.d.ts +6 -5
- package/dist/src/views/scheduling/types.d.ts +5 -3
- package/dist/style.css +1 -1
- package/dist/tsconfig.app.tsbuildinfo +1 -1
- package/dist/{useReportPermissions-Bl6Br79r.js → useReportPermissions-DHA0jrIr.js} +3 -3
- package/package.json +1 -1
- package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-B-XtB64L.js +0 -452
- 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/AppSidebar.vue.d.ts +0 -2
- package/dist/src/components/layout/withShell.d.ts +0 -14
- package/dist/src/views/scheduling/components/ScheduleShiftCardMenu.vue.d.ts +0 -12
- package/dist/src/views/scheduling/components/ScheduleTourAllSet.vue.d.ts +0 -6
- package/dist/src/views/scheduling/composables/auto-schedule-mapping.d.ts +0 -33
- package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +0 -17
- package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +0 -10
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
|
+
import type { ScheduleAutoScheduleApi } from './useScheduleAutoSchedule';
|
|
3
|
+
import type { SchedulePublishApi } from './useSchedulePublish';
|
|
4
|
+
interface UseSchedulePageActionsOptions {
|
|
5
|
+
board: ScheduleBoardApi;
|
|
6
|
+
autoSchedule: ScheduleAutoScheduleApi;
|
|
7
|
+
publish: SchedulePublishApi;
|
|
8
|
+
notify: (message: string, type: 'info' | 'success') => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function useSchedulePageActions(options: UseSchedulePageActionsOptions): {
|
|
11
|
+
comingSoon: () => void;
|
|
12
|
+
onSchedStatusClick: () => void;
|
|
13
|
+
onApplyProposals: (count: number) => void;
|
|
14
|
+
onApplyAndPublishProposals: (count: number) => void;
|
|
15
|
+
onProposalDragStart: (id: number, event: DragEvent) => void;
|
|
16
|
+
onScroll: (delta: number) => void;
|
|
17
|
+
};
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
|
+
import type { ScheduleClashDetectionApi } from './useScheduleClashDetection';
|
|
3
|
+
import type { ScheduleDemandApi } from './useScheduleDemand';
|
|
4
|
+
import type { ScheduleAddPickApi } from './useScheduleAddPick';
|
|
5
|
+
import type { ScheduleShiftPopoverApi } from './useScheduleShiftPopover';
|
|
6
|
+
import type { ScheduleDemandSheetApi } from './useScheduleDemandSheet';
|
|
7
|
+
interface UseSchedulePageCellActionsOptions {
|
|
8
|
+
board: ScheduleBoardApi;
|
|
9
|
+
clash: ScheduleClashDetectionApi;
|
|
10
|
+
demand: ScheduleDemandApi;
|
|
11
|
+
addPick: ScheduleAddPickApi;
|
|
12
|
+
popover: ScheduleShiftPopoverApi;
|
|
13
|
+
demandSheet: ScheduleDemandSheetApi;
|
|
14
|
+
}
|
|
15
|
+
export declare function useSchedulePageCellActions(options: UseSchedulePageCellActionsOptions): {
|
|
16
|
+
dayHasAnyShift: (dayIdx: number) => boolean;
|
|
17
|
+
onAddShift: (empId: number, dayIdx: number, anchor: HTMLElement) => void;
|
|
18
|
+
onEditShift: (empId: number, dayIdx: number, slotIndex?: number) => void;
|
|
19
|
+
onOpenDemandSheet: (dayIdx: number) => void;
|
|
20
|
+
};
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
|
+
import type { ScheduleClashDetectionApi } from './useScheduleClashDetection';
|
|
3
|
+
import type { ScheduleDragDropApi } from './useScheduleDragDrop';
|
|
4
|
+
import type { ScheduleShiftActionsApi } from './useScheduleShiftActions';
|
|
5
|
+
import type { ScheduleAutoScheduleApi } from './useScheduleAutoSchedule';
|
|
6
|
+
interface UseSchedulePageCellDropOptions {
|
|
7
|
+
board: ScheduleBoardApi;
|
|
8
|
+
autoSchedule: ScheduleAutoScheduleApi;
|
|
9
|
+
dragDrop: ScheduleDragDropApi;
|
|
10
|
+
shiftActions: ScheduleShiftActionsApi;
|
|
11
|
+
clash: ScheduleClashDetectionApi;
|
|
12
|
+
dayHasAnyShift: (dayIdx: number) => boolean;
|
|
13
|
+
notify: (message: string, type: 'error') => void;
|
|
14
|
+
}
|
|
15
|
+
export declare function useSchedulePageCellDrop(options: UseSchedulePageCellDropOptions): {
|
|
16
|
+
onCellDrop: (empId: number, dayIdx: number, event: DragEvent) => void;
|
|
17
|
+
};
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
|
+
import type { Ref } from 'vue';
|
|
3
|
+
import { useScheduleEmployeeProfile } from './useScheduleEmployeeProfile';
|
|
4
|
+
import type { ScheduleAddEmployeeApi } from './useScheduleAddEmployee';
|
|
5
|
+
import type { ScheduleClashDetectionApi } from './useScheduleClashDetection';
|
|
6
|
+
type ScheduleEmployeeProfileApi = ReturnType<typeof useScheduleEmployeeProfile>;
|
|
7
|
+
interface UseSchedulePageEmployeeActionsOptions {
|
|
8
|
+
board: ScheduleBoardApi;
|
|
9
|
+
employeeProfile: ScheduleEmployeeProfileApi;
|
|
10
|
+
addEmployee: ScheduleAddEmployeeApi;
|
|
11
|
+
removeEmployeeId: Ref<number | null>;
|
|
12
|
+
clash: ScheduleClashDetectionApi;
|
|
13
|
+
notify: (message: string, type: 'error' | 'info' | 'success') => void;
|
|
14
|
+
}
|
|
15
|
+
export declare function useSchedulePageEmployeeActions(options: UseSchedulePageEmployeeActionsOptions): {
|
|
16
|
+
onOpenEmployeeMenu: (empId: number) => void;
|
|
17
|
+
onEditEmployee: () => void;
|
|
18
|
+
onClearAllShifts: (empId: number) => void;
|
|
19
|
+
onRemoveEmployee: () => void;
|
|
20
|
+
onConfirmRemoveEmployee: () => Promise<void>;
|
|
21
|
+
};
|
|
22
|
+
export {};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ref } from 'vue';
|
|
1
2
|
import type { ScheduleAddPickApi } from './useScheduleAddPick';
|
|
2
3
|
import type { ScheduleAllShiftsRowApi } from './useScheduleAllShiftsRow';
|
|
3
4
|
import type { ScheduleDayNoteApi } from './useScheduleDayNote';
|
|
@@ -5,9 +6,13 @@ import type { ScheduleGapPopoverApi } from './useScheduleGapPopover';
|
|
|
5
6
|
import type { ScheduleOpenShiftCardApi } from './useScheduleOpenShiftCard';
|
|
6
7
|
import type { ScheduleShiftActionsApi } from './useScheduleShiftActions';
|
|
7
8
|
import type { ScheduleTimePickerApi } from './useScheduleTimePicker';
|
|
8
|
-
|
|
9
|
+
export type ScheduleTopbarMenu = 'actions' | 'export';
|
|
10
|
+
export interface ScheduleTopbarApi {
|
|
11
|
+
openMenu: ReturnType<typeof ref<ScheduleTopbarMenu | null>>;
|
|
12
|
+
toggleMenu: (id: ScheduleTopbarMenu) => void;
|
|
13
|
+
closeMenus: () => void;
|
|
14
|
+
}
|
|
9
15
|
export declare function useSchedulePageOverlays(apis: {
|
|
10
|
-
topbar: ScheduleTopbarApi;
|
|
11
16
|
dayNote: ScheduleDayNoteApi;
|
|
12
17
|
allShiftsRow: ScheduleAllShiftsRowApi;
|
|
13
18
|
gap: ScheduleGapPopoverApi;
|
|
@@ -15,4 +20,6 @@ export declare function useSchedulePageOverlays(apis: {
|
|
|
15
20
|
addPick: ScheduleAddPickApi;
|
|
16
21
|
shiftActions: ScheduleShiftActionsApi;
|
|
17
22
|
openShiftCard: ScheduleOpenShiftCardApi;
|
|
18
|
-
}):
|
|
23
|
+
}): {
|
|
24
|
+
topbar: ScheduleTopbarApi;
|
|
25
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type ComputedRef, type Ref } from 'vue';
|
|
2
|
+
export interface SchedulePdfCanvas {
|
|
3
|
+
canvas: HTMLCanvasElement;
|
|
4
|
+
}
|
|
5
|
+
export interface SchedulePdfExportOptions {
|
|
6
|
+
subtitle: ComputedRef<string>;
|
|
7
|
+
title: ComputedRef<string>;
|
|
8
|
+
buildCanvas: () => SchedulePdfCanvas | null;
|
|
9
|
+
buildSheetImage: (onReady: () => void) => void;
|
|
10
|
+
jpgPreviewOpen: Ref<boolean>;
|
|
11
|
+
releaseSheetImage: () => void;
|
|
12
|
+
}
|
|
13
|
+
export declare function useSchedulePdfExport(options: SchedulePdfExportOptions): {
|
|
14
|
+
previewOpen: Ref<boolean, boolean>;
|
|
15
|
+
barMeta: ComputedRef<string>;
|
|
16
|
+
openPreview: () => void;
|
|
17
|
+
closePreview: () => void;
|
|
18
|
+
printNow: () => void;
|
|
19
|
+
};
|
|
@@ -16,7 +16,9 @@ export interface PositionModalDone {
|
|
|
16
16
|
* as their main position when they have none yet, otherwise as one more they are trained in.
|
|
17
17
|
* The profile write replaces `secondaryPositions` wholesale, so a person's existing ones are
|
|
18
18
|
* sent back with the new one rather than being dropped. */
|
|
19
|
-
export declare function useSchedulePositionModal(onCreated?: (positionName: string) => void
|
|
19
|
+
export declare function useSchedulePositionModal(onCreated?: (positionName: string) => void, options?: {
|
|
20
|
+
notify?: (message: string, type?: 'success' | 'error' | 'info') => void;
|
|
21
|
+
}): {
|
|
20
22
|
open: import("vue").Ref<boolean, boolean>;
|
|
21
23
|
name: import("vue").Ref<string, string>;
|
|
22
24
|
search: import("vue").Ref<string, string>;
|
|
@@ -2,7 +2,9 @@ export interface SchedulePositionRow {
|
|
|
2
2
|
id: string;
|
|
3
3
|
name: string;
|
|
4
4
|
}
|
|
5
|
-
export declare function useSchedulePositions(
|
|
5
|
+
export declare function useSchedulePositions(options?: {
|
|
6
|
+
notify?: (message: string, type?: 'success' | 'error' | 'info') => void;
|
|
7
|
+
}): {
|
|
6
8
|
positions: import("vue").Ref<{
|
|
7
9
|
id: string;
|
|
8
10
|
name: string;
|
|
@@ -58,6 +58,7 @@ export declare function useSchedulePublish(board: ScheduleBoardApi): {
|
|
|
58
58
|
breakPayType: "PAID" | "UNPAID";
|
|
59
59
|
})[] | undefined;
|
|
60
60
|
assignmentId?: string | undefined;
|
|
61
|
+
updatedAt?: string | undefined;
|
|
61
62
|
splitGroupId?: string | undefined;
|
|
62
63
|
} | {
|
|
63
64
|
timeOff: "approved" | "pending";
|
|
@@ -105,6 +106,7 @@ export declare function useSchedulePublish(board: ScheduleBoardApi): {
|
|
|
105
106
|
breakPayType: "PAID" | "UNPAID";
|
|
106
107
|
})[] | undefined;
|
|
107
108
|
assignmentId?: string | undefined;
|
|
109
|
+
updatedAt?: string | undefined;
|
|
108
110
|
splitGroupId?: string | undefined;
|
|
109
111
|
}[] | null)[];
|
|
110
112
|
}[];
|
|
@@ -112,7 +114,11 @@ export declare function useSchedulePublish(board: ScheduleBoardApi): {
|
|
|
112
114
|
toggleAllVersions: () => void;
|
|
113
115
|
toggleVersionDiff: (v: number) => void;
|
|
114
116
|
diffFor: (version: ScheduleVersion) => VersionDiffRow[];
|
|
115
|
-
confirm: () => void
|
|
117
|
+
confirm: () => Promise<void>;
|
|
116
118
|
restoreVersion: (v: number) => void;
|
|
119
|
+
shareOpen: import("vue").Ref<boolean, boolean>;
|
|
120
|
+
shareVersion: import("vue").Ref<number | null, number | null>;
|
|
121
|
+
shareStaffAffected: import("vue").Ref<number, number>;
|
|
122
|
+
closeShare: () => void;
|
|
117
123
|
};
|
|
118
124
|
export type SchedulePublishApi = ReturnType<typeof useSchedulePublish>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { WorkSlot } from '../types';
|
|
2
|
+
export interface SchedulePublishPersistenceOptions {
|
|
3
|
+
recoverPersistFailure: (error: unknown, fallback: string) => Promise<void>;
|
|
4
|
+
}
|
|
5
|
+
export declare function useSchedulePublishPersistence(options: SchedulePublishPersistenceOptions): {
|
|
6
|
+
persistPublish: (items: Array<{
|
|
7
|
+
empId: number;
|
|
8
|
+
dayIdx: number;
|
|
9
|
+
slot: WorkSlot;
|
|
10
|
+
}>) => Promise<boolean>;
|
|
11
|
+
};
|
|
@@ -11,6 +11,7 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
|
|
|
11
11
|
search: import("vue").Ref<string, string>;
|
|
12
12
|
filteredEmployees: import("vue").ComputedRef<{
|
|
13
13
|
id: number;
|
|
14
|
+
sourceId: string;
|
|
14
15
|
name: string;
|
|
15
16
|
employmentType: "FULLTIME" | "PARTTIME";
|
|
16
17
|
role: string;
|
|
@@ -46,6 +47,7 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
|
|
|
46
47
|
breakPayType: "PAID" | "UNPAID";
|
|
47
48
|
})[] | undefined;
|
|
48
49
|
assignmentId?: string | undefined;
|
|
50
|
+
updatedAt?: string | undefined;
|
|
49
51
|
splitGroupId?: string | undefined;
|
|
50
52
|
} | {
|
|
51
53
|
timeOff: "approved" | "pending";
|
|
@@ -93,6 +95,7 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
|
|
|
93
95
|
breakPayType: "PAID" | "UNPAID";
|
|
94
96
|
})[] | undefined;
|
|
95
97
|
assignmentId?: string | undefined;
|
|
98
|
+
updatedAt?: string | undefined;
|
|
96
99
|
splitGroupId?: string | undefined;
|
|
97
100
|
}[] | null)[];
|
|
98
101
|
remarks: {
|
|
@@ -124,6 +127,7 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
|
|
|
124
127
|
}[]>;
|
|
125
128
|
orderedEmployees: import("vue").ComputedRef<{
|
|
126
129
|
id: number;
|
|
130
|
+
sourceId: string;
|
|
127
131
|
name: string;
|
|
128
132
|
employmentType: "FULLTIME" | "PARTTIME";
|
|
129
133
|
role: string;
|
|
@@ -159,6 +163,7 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
|
|
|
159
163
|
breakPayType: "PAID" | "UNPAID";
|
|
160
164
|
})[] | undefined;
|
|
161
165
|
assignmentId?: string | undefined;
|
|
166
|
+
updatedAt?: string | undefined;
|
|
162
167
|
splitGroupId?: string | undefined;
|
|
163
168
|
} | {
|
|
164
169
|
timeOff: "approved" | "pending";
|
|
@@ -206,6 +211,7 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
|
|
|
206
211
|
breakPayType: "PAID" | "UNPAID";
|
|
207
212
|
})[] | undefined;
|
|
208
213
|
assignmentId?: string | undefined;
|
|
214
|
+
updatedAt?: string | undefined;
|
|
209
215
|
splitGroupId?: string | undefined;
|
|
210
216
|
}[] | null)[];
|
|
211
217
|
remarks: {
|
|
@@ -1,25 +1,14 @@
|
|
|
1
1
|
export type ScheduleSettingsSection = 'budget' | 'payrates' | 'overtime' | 'notify';
|
|
2
|
-
/**
|
|
3
|
-
* ScheduleSettingsPage's own note. `ScheduleSettingsSection` stays the full union (rather
|
|
4
|
-
* than narrowing to a literal `'payrates' | 'overtime'`) so `draft`/`save()` below don't have
|
|
5
|
-
* to change shape the day a section comes back; only the nav and the page's own rendering
|
|
6
|
-
* are trimmed. */
|
|
2
|
+
/** Keep unsupported sections out of the navigation until their API fields exist. */
|
|
7
3
|
export declare const SETTINGS_SECTIONS: {
|
|
8
4
|
key: ScheduleSettingsSection;
|
|
9
5
|
label: string;
|
|
10
6
|
}[];
|
|
11
|
-
/**
|
|
12
|
-
* (Labour budget / Overtime / Notifications). The mockup's sibling Shift & coverage / Seasonal
|
|
13
|
-
* / Positions pages are a separate, out-of-scope epic — not built here. One draft object, like
|
|
14
|
-
* the mockup's settingsDraft/spSnapshot(). */
|
|
7
|
+
/** Settings currently supported by the schedule API: pay rates and monthly OT hours. */
|
|
15
8
|
export declare function useScheduleSettings(): {
|
|
16
9
|
isOpen: import("vue").Ref<boolean, boolean>;
|
|
17
10
|
activeSection: import("vue").Ref<ScheduleSettingsSection, ScheduleSettingsSection>;
|
|
18
11
|
draft: {
|
|
19
|
-
salesForecast: number;
|
|
20
|
-
labourTarget: number;
|
|
21
|
-
budgetFromSales: boolean;
|
|
22
|
-
budget: number;
|
|
23
12
|
payRate: {
|
|
24
13
|
NORMAL: {
|
|
25
14
|
overtime: number;
|
|
@@ -34,17 +23,6 @@ export declare function useScheduleSettings(): {
|
|
|
34
23
|
};
|
|
35
24
|
};
|
|
36
25
|
otCapHours: number;
|
|
37
|
-
otBudget: number;
|
|
38
|
-
notify: {
|
|
39
|
-
waConnected: boolean;
|
|
40
|
-
waNumber: string;
|
|
41
|
-
waDisplayName: string;
|
|
42
|
-
defaults: {
|
|
43
|
-
wa: boolean;
|
|
44
|
-
push: boolean;
|
|
45
|
-
email: boolean;
|
|
46
|
-
};
|
|
47
|
-
};
|
|
48
26
|
};
|
|
49
27
|
dirty: import("vue").ComputedRef<boolean>;
|
|
50
28
|
loading: import("vue").Ref<boolean, boolean>;
|
|
@@ -36,7 +36,9 @@ export interface ScheduleSwapState {
|
|
|
36
36
|
* and trading two people's shifts on the same day. Both skip the mockup's OT/pay-band cost
|
|
37
37
|
* preview and hard/soft override tiers — this board has no per-person pay bands to price
|
|
38
38
|
* against, so a candidate is either qualified-and-free or it isn't offered at all. */
|
|
39
|
-
export declare function useScheduleShiftActions(board: ScheduleBoardApi
|
|
39
|
+
export declare function useScheduleShiftActions(board: ScheduleBoardApi, options?: {
|
|
40
|
+
onToast?: (message: string, type?: 'success' | 'error' | 'info') => void;
|
|
41
|
+
}): {
|
|
40
42
|
menu: {
|
|
41
43
|
open: boolean;
|
|
42
44
|
empId: number | null;
|
|
@@ -56,6 +58,7 @@ export declare function useScheduleShiftActions(board: ScheduleBoardApi): {
|
|
|
56
58
|
changeSlot: import("vue").ComputedRef<import("../types").WorkSlot[]>;
|
|
57
59
|
changeCandidates: import("vue").ComputedRef<{
|
|
58
60
|
id: number;
|
|
61
|
+
sourceId: string;
|
|
59
62
|
name: string;
|
|
60
63
|
employmentType: "FULLTIME" | "PARTTIME";
|
|
61
64
|
role: string;
|
|
@@ -91,6 +94,7 @@ export declare function useScheduleShiftActions(board: ScheduleBoardApi): {
|
|
|
91
94
|
breakPayType: "PAID" | "UNPAID";
|
|
92
95
|
})[] | undefined;
|
|
93
96
|
assignmentId?: string | undefined;
|
|
97
|
+
updatedAt?: string | undefined;
|
|
94
98
|
splitGroupId?: string | undefined;
|
|
95
99
|
} | {
|
|
96
100
|
timeOff: "approved" | "pending";
|
|
@@ -138,6 +142,7 @@ export declare function useScheduleShiftActions(board: ScheduleBoardApi): {
|
|
|
138
142
|
breakPayType: "PAID" | "UNPAID";
|
|
139
143
|
})[] | undefined;
|
|
140
144
|
assignmentId?: string | undefined;
|
|
145
|
+
updatedAt?: string | undefined;
|
|
141
146
|
splitGroupId?: string | undefined;
|
|
142
147
|
}[] | null)[];
|
|
143
148
|
remarks: {
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { WorkSlot } from '../types';
|
|
2
|
+
import { type ScheduleBreakChoice, type ScheduleShiftSegment } from './schedule-shift-time';
|
|
3
|
+
export interface ScheduleHeadcountRole {
|
|
4
|
+
position: string;
|
|
5
|
+
count: number;
|
|
6
|
+
sen: '' | 'senior' | 'junior';
|
|
7
|
+
}
|
|
8
|
+
export declare function useScheduleShiftDraft(): {
|
|
9
|
+
open: import("vue").Ref<boolean, boolean>;
|
|
10
|
+
dayIdx: import("vue").Ref<number | null, number | null>;
|
|
11
|
+
empId: import("vue").Ref<number | null, number | null>;
|
|
12
|
+
originalEmpId: import("vue").Ref<number | null, number | null>;
|
|
13
|
+
editingOpenShiftId: import("vue").Ref<number | null, number | null>;
|
|
14
|
+
isNew: import("vue").Ref<boolean, boolean>;
|
|
15
|
+
originalSlotIndex: import("vue").Ref<number, number>;
|
|
16
|
+
originalSlotCount: import("vue").Ref<number, number>;
|
|
17
|
+
originalSplitGroupId: import("vue").Ref<string | undefined, string | undefined>;
|
|
18
|
+
originalDayHadContent: import("vue").Ref<boolean, boolean>;
|
|
19
|
+
name: import("vue").Ref<string, string>;
|
|
20
|
+
segments: import("vue").Ref<{
|
|
21
|
+
start: string;
|
|
22
|
+
end: string;
|
|
23
|
+
}[], ScheduleShiftSegment[] | {
|
|
24
|
+
start: string;
|
|
25
|
+
end: string;
|
|
26
|
+
}[]>;
|
|
27
|
+
role: import("vue").Ref<string, string>;
|
|
28
|
+
required: import("vue").Ref<number, number>;
|
|
29
|
+
sen: import("vue").Ref<"" | "senior" | "junior", "" | "senior" | "junior">;
|
|
30
|
+
empType: import("vue").Ref<"" | "full" | "part", "" | "full" | "part">;
|
|
31
|
+
roles: import("vue").Ref<{
|
|
32
|
+
position: string;
|
|
33
|
+
count: number;
|
|
34
|
+
sen: "" | "senior" | "junior";
|
|
35
|
+
}[], ScheduleHeadcountRole[] | {
|
|
36
|
+
position: string;
|
|
37
|
+
count: number;
|
|
38
|
+
sen: "" | "senior" | "junior";
|
|
39
|
+
}[]>;
|
|
40
|
+
breakChoice: import("vue").Ref<ScheduleBreakChoice, ScheduleBreakChoice>;
|
|
41
|
+
breakCustomMins: import("vue").Ref<number, number>;
|
|
42
|
+
breakCustomUnit: import("vue").Ref<"mins" | "hrs", "mins" | "hrs">;
|
|
43
|
+
breakMode: import("vue").Ref<"time" | "duration", "time" | "duration">;
|
|
44
|
+
breakStartTime: import("vue").Ref<string, string>;
|
|
45
|
+
breakEndTime: import("vue").Ref<string, string>;
|
|
46
|
+
repeatDays: import("vue").Ref<boolean[], boolean[]>;
|
|
47
|
+
gapNote: import("vue").Ref<string | null, string | null>;
|
|
48
|
+
conflictNote: import("vue").Ref<string | null, string | null>;
|
|
49
|
+
grantSkill: import("vue").Ref<boolean, boolean>;
|
|
50
|
+
unassignMode: import("vue").Ref<boolean, boolean>;
|
|
51
|
+
resetCommon: (day: number) => void;
|
|
52
|
+
applyNormalizedBreak: (minutes: number | undefined) => void;
|
|
53
|
+
applyPersistedBreaks: (breaks: WorkSlot["breaks"], fallbackMins: number | undefined) => void;
|
|
54
|
+
resolvedBreakMins: () => number | undefined;
|
|
55
|
+
resolvedBreaks: () => WorkSlot["breaks"];
|
|
56
|
+
buildDraftSlot: () => WorkSlot | WorkSlot[];
|
|
57
|
+
close: () => void;
|
|
58
|
+
removeSegment: (index: number) => void;
|
|
59
|
+
addRole: () => void;
|
|
60
|
+
removeRole: (index: number) => void;
|
|
61
|
+
segmentHoursOf: (segment: ScheduleShiftSegment) => number;
|
|
62
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ComputedRef } from 'vue';
|
|
2
|
+
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
3
|
+
import { useScheduleShiftDraft } from './useScheduleShiftDraft';
|
|
4
|
+
type ShiftDraft = ReturnType<typeof useScheduleShiftDraft>;
|
|
5
|
+
interface UseScheduleShiftPersistenceOptions {
|
|
6
|
+
draft: ShiftDraft;
|
|
7
|
+
saveDisabled: ComputedRef<boolean>;
|
|
8
|
+
showGrantSkill: ComputedRef<boolean>;
|
|
9
|
+
onToast?: (message: string, type?: 'success' | 'error' | 'info') => void;
|
|
10
|
+
}
|
|
11
|
+
/** Mutations for the shift popover. Draft editing stays separate so the UI can preview and
|
|
12
|
+
* validate without owning board writes. */
|
|
13
|
+
export declare function useScheduleShiftPersistence(board: ScheduleBoardApi, options: UseScheduleShiftPersistenceOptions): {
|
|
14
|
+
save: () => void;
|
|
15
|
+
remove: () => void;
|
|
16
|
+
};
|
|
17
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
2
|
import type { ScheduleDemandApi } from './useScheduleDemand';
|
|
3
|
-
import { type
|
|
3
|
+
import { type ScheduleShiftSegment } from './schedule-shift-time';
|
|
4
4
|
export type { ScheduleBreakChoice, ScheduleShiftSegment } from './schedule-shift-time';
|
|
5
5
|
export interface ScheduleHeadcountRole {
|
|
6
6
|
position: string;
|
|
@@ -13,7 +13,9 @@ export interface ScheduleHeadcountRole {
|
|
|
13
13
|
* it into open demand. Opened three ways: for an employee's cell (assign/edit), for a brand
|
|
14
14
|
* new open shift (multi-position headcount authoring), or to edit one existing open-shift
|
|
15
15
|
* record (single position, like an assigned shift's "Position needed" row). */
|
|
16
|
-
export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand: ScheduleDemandApi
|
|
16
|
+
export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand: ScheduleDemandApi, options?: {
|
|
17
|
+
onToast?: (message: string, type?: 'success' | 'error' | 'info') => void;
|
|
18
|
+
}): {
|
|
17
19
|
open: import("vue").Ref<boolean, boolean>;
|
|
18
20
|
dayIdx: import("vue").Ref<number | null, number | null>;
|
|
19
21
|
empId: import("vue").Ref<number | null, number | null>;
|
|
@@ -36,7 +38,7 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
|
|
|
36
38
|
position: string;
|
|
37
39
|
count: number;
|
|
38
40
|
sen: "" | "senior" | "junior";
|
|
39
|
-
}[], ScheduleHeadcountRole[] | {
|
|
41
|
+
}[], import("./useScheduleShiftDraft").ScheduleHeadcountRole[] | {
|
|
40
42
|
position: string;
|
|
41
43
|
count: number;
|
|
42
44
|
sen: "" | "senior" | "junior";
|
|
@@ -56,13 +58,13 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
|
|
|
56
58
|
};
|
|
57
59
|
beforeSegs: import("../types").CoverageSegment[];
|
|
58
60
|
afterSegs: import("../types").CoverageSegment[];
|
|
59
|
-
axis: import("./
|
|
61
|
+
axis: import("./schedule-demand-domain").ScheduleCoverageAxis;
|
|
60
62
|
} | null>;
|
|
61
63
|
requiresAssignment: import("vue").ComputedRef<boolean>;
|
|
62
64
|
saveDisabled: import("vue").ComputedRef<boolean>;
|
|
63
65
|
saveTitle: import("vue").ComputedRef<"" | "Choose who covers it — this shift is answering a staffing gap, and a shift with nobody on it leaves that gap exactly as it is">;
|
|
64
66
|
saveLabel: import("vue").ComputedRef<"Create & assign" | "Save">;
|
|
65
|
-
breakChoice: import("vue").Ref<ScheduleBreakChoice, ScheduleBreakChoice>;
|
|
67
|
+
breakChoice: import("vue").Ref<import("./schedule-shift-time").ScheduleBreakChoice, import("./schedule-shift-time").ScheduleBreakChoice>;
|
|
66
68
|
breakCustomMins: import("vue").Ref<number, number>;
|
|
67
69
|
breakCustomUnit: import("vue").Ref<"mins" | "hrs", "mins" | "hrs">;
|
|
68
70
|
breakMode: import("vue").Ref<"time" | "duration", "time" | "duration">;
|
|
@@ -77,6 +79,7 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
|
|
|
77
79
|
positionOptions: import("vue").ComputedRef<string[]>;
|
|
78
80
|
whoOptions: import("vue").ComputedRef<{
|
|
79
81
|
id: number;
|
|
82
|
+
sourceId: string;
|
|
80
83
|
name: string;
|
|
81
84
|
employmentType: "FULLTIME" | "PARTTIME";
|
|
82
85
|
role: string;
|
|
@@ -112,6 +115,7 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
|
|
|
112
115
|
breakPayType: "PAID" | "UNPAID";
|
|
113
116
|
})[] | undefined;
|
|
114
117
|
assignmentId?: string | undefined;
|
|
118
|
+
updatedAt?: string | undefined;
|
|
115
119
|
splitGroupId?: string | undefined;
|
|
116
120
|
} | {
|
|
117
121
|
timeOff: "approved" | "pending";
|
|
@@ -159,6 +163,7 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
|
|
|
159
163
|
breakPayType: "PAID" | "UNPAID";
|
|
160
164
|
})[] | undefined;
|
|
161
165
|
assignmentId?: string | undefined;
|
|
166
|
+
updatedAt?: string | undefined;
|
|
162
167
|
splitGroupId?: string | undefined;
|
|
163
168
|
}[] | null)[];
|
|
164
169
|
remarks: {
|
|
@@ -8,7 +8,10 @@ import type { useScheduleLegend } from './useScheduleLegend';
|
|
|
8
8
|
* the reference's renderedDays()-scoped totals. The 7-day RULES.salesForecast/SALES_CURVE
|
|
9
9
|
* baseline underneath it stays weekly regardless — only the on-screen total and the
|
|
10
10
|
* redistribution on edit are span-scoped. */
|
|
11
|
-
export declare function useScheduleStatsRow(board: ScheduleBoardApi, costRail: ScheduleCostRailApi, legend: ReturnType<typeof useScheduleLegend
|
|
11
|
+
export declare function useScheduleStatsRow(board: ScheduleBoardApi, costRail: ScheduleCostRailApi, legend: ReturnType<typeof useScheduleLegend>, handlers?: {
|
|
12
|
+
onPersistError?: (message: string) => void;
|
|
13
|
+
onPersistSuccess?: (message: string) => void;
|
|
14
|
+
}): {
|
|
12
15
|
open: import("vue").Ref<boolean, boolean>;
|
|
13
16
|
toggle: () => void;
|
|
14
17
|
forecast: import("vue").Ref<number, number>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type Ref } from 'vue';
|
|
1
2
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
3
|
import type { ScheduleDemandRowApi } from './useScheduleDemandRow';
|
|
3
4
|
import type { ScheduleDemandSheetApi } from './useScheduleDemandSheet';
|
|
@@ -7,6 +8,7 @@ import type { SchedulePublishApi } from './useSchedulePublish';
|
|
|
7
8
|
import type { ScheduleExportApi } from './useScheduleExport';
|
|
8
9
|
import type { IntroRecapRow } from './onboarding-types';
|
|
9
10
|
interface TourDeps {
|
|
11
|
+
rootEl: Ref<HTMLElement | null>;
|
|
10
12
|
board: ScheduleBoardApi;
|
|
11
13
|
demandRow: ScheduleDemandRowApi;
|
|
12
14
|
demandSheet: ScheduleDemandSheetApi;
|
|
@@ -22,9 +24,9 @@ interface TourDeps {
|
|
|
22
24
|
* popover. No Back button, matching the source: the only way on is Next or Skip. */
|
|
23
25
|
export declare function useScheduleTour(deps: TourDeps): {
|
|
24
26
|
coach: {
|
|
25
|
-
open:
|
|
26
|
-
placing:
|
|
27
|
-
tip:
|
|
27
|
+
open: Ref<boolean, boolean>;
|
|
28
|
+
placing: Ref<boolean, boolean>;
|
|
29
|
+
tip: Ref<{
|
|
28
30
|
title: string;
|
|
29
31
|
body: string;
|
|
30
32
|
count?: string | undefined;
|
|
@@ -85,7 +87,7 @@ export declare function useScheduleTour(deps: TourDeps): {
|
|
|
85
87
|
skip: () => void;
|
|
86
88
|
};
|
|
87
89
|
start: () => void;
|
|
88
|
-
allSetOpen:
|
|
90
|
+
allSetOpen: Ref<boolean, boolean>;
|
|
89
91
|
allSetRecap: import("vue").ComputedRef<IntroRecapRow[]>;
|
|
90
92
|
closeAllSet: () => void;
|
|
91
93
|
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { PayRate } from '../types';
|
|
2
|
+
export interface CountryScheduleRules {
|
|
3
|
+
countryCode: string;
|
|
4
|
+
timezone: string;
|
|
5
|
+
payRate: PayRate;
|
|
6
|
+
overtime: {
|
|
7
|
+
maxMonthlyHours: number | null;
|
|
8
|
+
afterDailyHours: number | null;
|
|
9
|
+
};
|
|
10
|
+
workingHours: {
|
|
11
|
+
standardWeeklyHours: number | null;
|
|
12
|
+
maxDailyHours: number | null;
|
|
13
|
+
};
|
|
14
|
+
recurringPublicHolidays: Array<{
|
|
15
|
+
month: number;
|
|
16
|
+
day: number;
|
|
17
|
+
name: string;
|
|
18
|
+
}>;
|
|
19
|
+
publicHolidays: Record<string, Record<string, string>>;
|
|
20
|
+
}
|
|
21
|
+
export declare function normalizeCountryCode(country: unknown): string;
|
|
22
|
+
export declare function getCountryScheduleRules(country?: unknown): CountryScheduleRules;
|
|
23
|
+
export declare function holidayNameForDate(rules: CountryScheduleRules, date: string): string | null;
|
|
24
|
+
export declare const SUPPORTED_SCHEDULE_COUNTRIES: string[];
|
|
@@ -7,7 +7,10 @@ export declare const ALL_STATIONS = "All Stations";
|
|
|
7
7
|
/** Employment seniority is a closed set in the model, not something an outlet configures. */
|
|
8
8
|
export declare const SENIORITY_OPTIONS: Array<'senior' | 'junior'>;
|
|
9
9
|
/** The one section every board has. Scheduling sections are not a Mongo concept yet, so the
|
|
10
|
-
* whole roster sits in this bucket and its `roles` list stays empty.
|
|
10
|
+
* whole roster sits in this bucket and its `roles` list stays empty. Labelled "Assigned" rather
|
|
11
|
+
* than the id's own `UNASSIGNED` — this is where every shift's actual cost lives (the cost rail
|
|
12
|
+
* is the only place this label shows), and "Unassigned" read like a warning that nobody was
|
|
13
|
+
* covering those hours rather than just "not sorted into a work area yet". */
|
|
11
14
|
export declare const SECTIONS: Section[];
|
|
12
15
|
/** The position catalogue, from the Positions collection. Name-only: this is read as plain
|
|
13
16
|
* strings everywhere on this board (dropdown options, coverage-matrix keys, role lookups), and
|
|
@@ -41,13 +44,13 @@ export declare function positionSelectorOf(name: string | undefined): FdtoSchedu
|
|
|
41
44
|
* no real forecast to shape: a curve invented here would make one day look busier than another
|
|
42
45
|
* for no reason anybody could point at. */
|
|
43
46
|
export declare const SALES_CURVE: number[];
|
|
44
|
-
/** Scheduling configuration, from two places and no others:
|
|
45
|
-
* the ScheduleSettings document, and the trading window comes from the
|
|
46
|
-
* profile (see `restaurantProfile` on the DTO).
|
|
47
|
+
/** Scheduling configuration, from two places and no others: pay rates, setup state, and the
|
|
48
|
+
* monthly OT cap come from the ScheduleSettings document, and the trading window comes from the
|
|
49
|
+
* outlet's own Restaurants profile (see `restaurantProfile` on the DTO).
|
|
47
50
|
*
|
|
48
51
|
* The fields with no Mongo source stay zero rather than being guessed: `coverage` (per-template
|
|
49
|
-
* headcount matrices), `salesForecast`, `labourTarget`, `budget`,
|
|
50
|
-
*
|
|
52
|
+
* headcount matrices), `salesForecast`, `labourTarget`, `budget`, and notification channels.
|
|
53
|
+
* Nothing on screen derived from them is a figure this file made up.
|
|
51
54
|
*
|
|
52
55
|
* `openFrom`/`openTo` are the one pair that must never be blank — they are the axis every
|
|
53
56
|
* coverage bar, day timeline and shift form is drawn against, and there is no such thing as a
|
|
@@ -63,6 +66,8 @@ export declare function gridDayIdx(dayOfWeek: number): number;
|
|
|
63
66
|
export declare function jsDayOfWeek(gridIdx: number): number;
|
|
64
67
|
export declare function employeeIdOf(num: number): string | undefined;
|
|
65
68
|
export declare function employeeNumberOf(employeeId: string): number;
|
|
69
|
+
/** Stable identity for change tracking. Keep the numeric id only for legacy board lookups. */
|
|
70
|
+
export declare function employeeKeyOf(employee: Pick<Employee, 'sourceId' | 'id'>): string;
|
|
66
71
|
/** The outlets a person is rostered at, by name, from the POS roster's `restaurantRole`. */
|
|
67
72
|
/** The outlet being scheduled goes first in a list of locations; the rest keep their order. */
|
|
68
73
|
export declare function currentLocationFirst(locations: string[]): string[];
|