@feedmepos/mf-hrm-portal 2.3.0-dev.8 → 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-D5E_FN3f.js → ApprovalCodeList-DwubNElp.js} +7 -7
- package/dist/{AuditLogList-CqqiS2xW.js → AuditLogList-CTeMbyHL.js} +18 -19
- package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-DC_oQTsP.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-CmLLNcB4.js} +2 -2
- package/dist/{EmployeeList-ChMlGxmu.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-DA26W3K3.js → GrantUserList-Dx4jF2qJ.js} +8 -8
- package/dist/{Main-C0gVAR92.js → Main-BirWXk7o.js} +5 -5
- package/dist/{Main-m39gMG-a.js → Main-C2PBSCte.js} +11 -11
- package/dist/{Main-B27Qx8R2.js → Main-CL5JYCPg.js} +8 -8
- package/dist/{PermissionSetList-mdA65jmw.js → PermissionSetList-BtYcqPiO.js} +19 -18
- package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-Dp6bdEZp.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-BXw4aX39.js} +1211 -1211
- 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-BPayuLxA.js → RoleList-YS_LBfoJ.js} +21 -20
- package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-BorKuXxL.js +530 -0
- package/dist/ScheduleGeneralPage-C1p2mivt.js +780 -0
- package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-CnKzVz3I.js +2457 -0
- package/dist/SchedulePage-BP7x7JAl.js +19485 -0
- package/dist/{SchedulePositionPage-BUQy-Itg.js → SchedulePositionPage-BogOQZVW.js} +78 -80
- package/dist/{SelectFilter-CG13h83-.js → SelectFilter-Dh3eY1hV.js} +1 -1
- package/dist/{TeamMemberList-CIlvRlf8.js → TeamMemberList-Bv6_2bzs.js} +27 -27
- package/dist/{TimesheetList-DFAfhWYG.js → TimesheetList-B3BmpH0I.js} +52 -53
- package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-QGzHuY7V.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-C4rbnZh1.js} +3 -3
- package/dist/{app-C_EW9DFr.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-ibysRBBa.js → dayjs.min-BRlEc3-d.js} +1 -1
- package/dist/{employee-B1BQc4gB.js → employee-CcdjLOLQ.js} +51 -47
- package/dist/{grant-user-qzKHFTro.js → grant-user-uZmvD_bw.js} +1 -1
- package/dist/{iteration-DQVB-iz0.js → iteration-CL1RDmws.js} +1 -1
- package/dist/{lodash-DOj41a0A.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-B9MSLu4B.js → role-DtatkKp9.js} +2 -2
- package/dist/{rule-e6okoXK6.js → rule-DJJMpkoG.js} +3 -3
- package/dist/src/api/employee/index.d.ts +2 -2
- package/dist/src/api/schedule/index.d.ts +12 -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 +3 -4
- package/dist/src/views/audit-log/locales/index.d.ts +252 -0
- package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +4 -8
- package/dist/src/views/scheduling/components/ScheduleAutoScheduleDoneArt.vue.d.ts +2 -0
- package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +1 -4
- package/dist/src/views/scheduling/components/ScheduleBoardEditOverlays.vue.d.ts +0 -2
- package/dist/src/views/scheduling/components/ScheduleBoardEmployeeRows.vue.d.ts +0 -7
- package/dist/src/views/scheduling/components/ScheduleBoardGridHeader.vue.d.ts +5 -0
- package/dist/src/views/scheduling/components/ScheduleBoardInteractionOverlays.vue.d.ts +2 -6
- 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/ScheduleContextMenu.vue.d.ts +1 -5
- 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/{ScheduleAssignEmployeePopover.vue.d.ts → ScheduleOnboardingSettings.vue.d.ts} +2 -2
- package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +10 -0
- package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +1 -1
- package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +0 -10
- 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-add-employee-form.d.ts +12 -8
- 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 +46 -11
- package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +3 -11
- package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +0 -13
- package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +2 -9
- package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +25 -13
- package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +87 -11
- 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 -5
- package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +3 -5
- package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +18 -3
- package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +1 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +20 -7
- package/dist/src/views/scheduling/composables/useScheduleEmployeeAvailability.d.ts +1 -1
- package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +26 -3
- package/dist/src/views/scheduling/composables/useScheduleEmployeePersistence.d.ts +7 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +2 -2
- package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +1 -0
- package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +2 -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 +48 -4
- package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +302 -30
- 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/useSchedulePageOverlays.d.ts +0 -4
- package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +1 -0
- package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +7 -1
- package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +4 -1
- package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +70 -4
- package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +7 -2
- package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +2 -2
- package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +41 -3
- package/dist/src/views/scheduling/composables/useScheduleShiftDraft.d.ts +1 -0
- package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +47 -6
- package/dist/src/views/scheduling/country-rules/index.d.ts +9 -4
- package/dist/src/views/scheduling/data.d.ts +22 -1
- package/dist/src/views/scheduling/locales/index.d.ts +28 -0
- package/dist/src/views/scheduling/schedule-state.d.ts +276 -212
- package/dist/src/views/scheduling/schedule-store.d.ts +37 -11
- package/dist/src/views/scheduling/types.d.ts +30 -5
- 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-CJ9ey1bN.js → useReportPermissions-DI-xg3OX.js} +3 -3
- package/package.json +2 -2
- package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-C_EQivMd.js +0 -470
- package/dist/ScheduleGeneralPage-sAqR1-hf.js +0 -666
- package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-ABipaQiR.js +0 -2205
- package/dist/SchedulePage-DhbtCR8U.js +0 -18546
- package/dist/_plugin-vue_export-helper-CHgC5LLL.js +0 -9
- package/dist/src/views/scheduling/components/ScheduleAllShiftsRow.vue.d.ts +0 -22
- package/dist/src/views/scheduling/components/ScheduleStackPopover.vue.d.ts +0 -14
- package/dist/src/views/scheduling/composables/useScheduleAllShiftsRow.d.ts +0 -77
- package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +0 -124
- package/dist/src/views/scheduling/composables/useScheduleOpenShiftCard.d.ts +0 -23
- package/dist/useDiscardConfirm-DPhEV6v0.js +0 -157
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ScheduleOnboardingWizardApi } from '../composables/useScheduleOnboardingWizard';
|
|
2
2
|
type __VLS_Props = {
|
|
3
|
-
|
|
3
|
+
wizard: ScheduleOnboardingWizardApi;
|
|
4
4
|
};
|
|
5
5
|
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
6
6
|
export default _default;
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
export interface ScheduleSelectOption {
|
|
6
6
|
value: string;
|
|
7
7
|
label: string;
|
|
8
|
+
/** Stable identity used when two options can share the same display value. */
|
|
9
|
+
id?: string;
|
|
8
10
|
disabled?: boolean;
|
|
9
11
|
group?: string;
|
|
10
12
|
/** Second line under the label. Any option carrying one switches the menu to the rich
|
|
@@ -22,8 +24,12 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
22
24
|
* close the menu and emit `update:modelValue`. */
|
|
23
25
|
multiple?: boolean;
|
|
24
26
|
selected?: string[];
|
|
27
|
+
/** Stable selected identity for single-select menus whose labels may be duplicated. */
|
|
28
|
+
selectedId?: string;
|
|
25
29
|
/** Closed-control text while a multi-select has nothing picked. */
|
|
26
30
|
placeholder?: string;
|
|
31
|
+
/** Optional closed-control text for a selected value that is not available in the menu. */
|
|
32
|
+
selectedLabel?: string;
|
|
27
33
|
disabled?: boolean;
|
|
28
34
|
/** Heading over the menu. Also switches to the rich layout. */
|
|
29
35
|
menuTitle?: string;
|
|
@@ -42,8 +48,12 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
42
48
|
* close the menu and emit `update:modelValue`. */
|
|
43
49
|
multiple?: boolean;
|
|
44
50
|
selected?: string[];
|
|
51
|
+
/** Stable selected identity for single-select menus whose labels may be duplicated. */
|
|
52
|
+
selectedId?: string;
|
|
45
53
|
/** Closed-control text while a multi-select has nothing picked. */
|
|
46
54
|
placeholder?: string;
|
|
55
|
+
/** Optional closed-control text for a selected value that is not available in the menu. */
|
|
56
|
+
selectedLabel?: string;
|
|
47
57
|
disabled?: boolean;
|
|
48
58
|
/** Heading over the menu. Also switches to the rich layout. */
|
|
49
59
|
menuTitle?: string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ScheduleBoardApi } from '../composables/useScheduleBoard';
|
|
2
2
|
import type { ScheduleShiftPopoverApi } from '../composables/useScheduleShiftPopover';
|
|
3
|
-
import type
|
|
3
|
+
import { type ScheduleTimePickerApi } from '../composables/useScheduleTimePicker';
|
|
4
4
|
type __VLS_Props = {
|
|
5
5
|
board: ScheduleBoardApi;
|
|
6
6
|
popover: ScheduleShiftPopoverApi;
|
|
@@ -2,15 +2,11 @@ import type { Proposal } from '../types';
|
|
|
2
2
|
import type { ScheduleBoardApi } from '../composables/useScheduleBoard';
|
|
3
3
|
import type { ScheduleDragDropApi } from '../composables/useScheduleDragDrop';
|
|
4
4
|
import type { ScheduleRosterApi } from '../composables/useScheduleRoster';
|
|
5
|
-
import type { ScheduleOpenShiftCardApi } from '../composables/useScheduleOpenShiftCard';
|
|
6
|
-
import type { ScheduleAllShiftsRowApi } from '../composables/useScheduleAllShiftsRow';
|
|
7
5
|
import type { ScheduleDemandRowApi } from '../composables/useScheduleDemandRow';
|
|
8
6
|
type __VLS_Props = {
|
|
9
7
|
board: ScheduleBoardApi;
|
|
10
8
|
dragDrop: ScheduleDragDropApi;
|
|
11
9
|
roster: ScheduleRosterApi;
|
|
12
|
-
openShiftCard: ScheduleOpenShiftCardApi;
|
|
13
|
-
allShiftsRow: ScheduleAllShiftsRowApi;
|
|
14
10
|
demandRow: ScheduleDemandRowApi;
|
|
15
11
|
proposalAt?: (empId: number, dayIdx: number) => Proposal | undefined;
|
|
16
12
|
};
|
|
@@ -23,9 +19,6 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
23
19
|
toggleProposal: (id: number) => any;
|
|
24
20
|
proposalDragStart: (id: number, ev: DragEvent) => any;
|
|
25
21
|
proposalDragEnd: () => any;
|
|
26
|
-
openAssign: (openId: number) => any;
|
|
27
|
-
openOpenShiftMenu: (openId: number, anchor: HTMLElement) => any;
|
|
28
|
-
addOpenShift: (dayIdx: number) => any;
|
|
29
22
|
segEnter: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => any;
|
|
30
23
|
segLeave: () => any;
|
|
31
24
|
segClick: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => any;
|
|
@@ -44,9 +37,6 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
44
37
|
onToggleProposal?: ((id: number) => any) | undefined;
|
|
45
38
|
onProposalDragStart?: ((id: number, ev: DragEvent) => any) | undefined;
|
|
46
39
|
onProposalDragEnd?: (() => any) | undefined;
|
|
47
|
-
onOpenAssign?: ((openId: number) => any) | undefined;
|
|
48
|
-
onOpenOpenShiftMenu?: ((openId: number, anchor: HTMLElement) => any) | undefined;
|
|
49
|
-
onAddOpenShift?: ((dayIdx: number) => any) | undefined;
|
|
50
40
|
onSegEnter?: ((dayIdx: number, from: number, to: number, anchor: HTMLElement) => any) | undefined;
|
|
51
41
|
onSegLeave?: (() => any) | undefined;
|
|
52
42
|
onSegClick?: ((dayIdx: number, from: number, to: number, anchor: HTMLElement) => any) | undefined;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { FdtoScheduleAutoScheduleApplyReq, FdtoScheduleAutoScheduleObjective,
|
|
1
|
+
import type { FdtoScheduleAutoScheduleApplyReq, FdtoScheduleAutoScheduleObjective, FdtoScheduleAutoScheduleProposal, FdtoScheduleAutoScheduleResult } from '@/types/schedule';
|
|
2
2
|
import { ApiError } from '@/api';
|
|
3
3
|
import type { Proposal } from '../types';
|
|
4
4
|
/** ISO date of `dayIdx` in the week starting `weekKey` (YYYY-MM-DD, local arithmetic). */
|
|
@@ -8,7 +8,7 @@ export declare function dateOfProposal(weekKey: string, dayIdx: number): string;
|
|
|
8
8
|
* dropped. Ids come from `nextId` so they stay unique across weeks. */
|
|
9
9
|
export declare function proposalsFromResult(proposals: FdtoScheduleAutoScheduleProposal[], weekKey: string, dateKeyOf: (dayIdx: number) => string | null, nextId: () => number, holds: (empId: number) => boolean): Proposal[];
|
|
10
10
|
/** The apply body for the accepted proposals, each re-dated from its own week and day. */
|
|
11
|
-
export declare function applyRequestOf(proposals: Proposal[], allowOvertime: boolean): FdtoScheduleAutoScheduleApplyReq;
|
|
11
|
+
export declare function applyRequestOf(proposals: Proposal[], allowOvertime: boolean, status?: FdtoScheduleAutoScheduleApplyReq['status']): FdtoScheduleAutoScheduleApplyReq;
|
|
12
12
|
export interface ClassifiedExplanation {
|
|
13
13
|
kind: 'reject' | 'ai' | 'plain';
|
|
14
14
|
text: string;
|
|
@@ -30,4 +30,4 @@ export declare function fillGapsOffResult(week: {
|
|
|
30
30
|
/** The snackbar shown once a run finishes, whether it went to the server or (fill gaps off) was
|
|
31
31
|
* answered locally. `wallMs` is measured client-side around the request — it is what the manager
|
|
32
32
|
* actually waited, not just the server's own `timing.totalMs`. */
|
|
33
|
-
export declare function generateDoneMessage(result: FdtoScheduleAutoScheduleResult,
|
|
33
|
+
export declare function generateDoneMessage(result: FdtoScheduleAutoScheduleResult, wallMs: number): string;
|
|
@@ -23,7 +23,8 @@ export interface TeamRow {
|
|
|
23
23
|
picked: boolean;
|
|
24
24
|
/** '' means "Any position" — a person with none. */
|
|
25
25
|
position: string;
|
|
26
|
-
|
|
26
|
+
/** Additional positions this employee also covers. */
|
|
27
|
+
second: string[];
|
|
27
28
|
employment: TeamEmployment;
|
|
28
29
|
maxHours: string;
|
|
29
30
|
rate: string;
|
|
@@ -8,6 +8,8 @@ export type RemyDemandScope = {
|
|
|
8
8
|
} | {
|
|
9
9
|
mode: 'weekdays';
|
|
10
10
|
};
|
|
11
|
-
/** The
|
|
12
|
-
*
|
|
11
|
+
/** The text prefilled into the host Remy panel: one line naming the outlet and day, which the
|
|
12
|
+
* user continues with their demand. The "attach a roster image or describe it in words" guidance
|
|
13
|
+
* lives on the sheet's Ask Remy tooltip, not here. Names the outlet the way a manager knows it;
|
|
14
|
+
* Remy resolves it to an id itself (hrm_find_outlet), so no outlet id appears in the text. */
|
|
13
15
|
export declare function remyDemandPrompt(outletName: string, scope: RemyDemandScope): string;
|
|
@@ -11,12 +11,12 @@ export interface ScheduleAddEmployeeForm {
|
|
|
11
11
|
payBasis: 'hourly' | 'monthly';
|
|
12
12
|
payAmount: string;
|
|
13
13
|
maxHours: string;
|
|
14
|
+
maxHoursPerDay: string;
|
|
14
15
|
minHours: string;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
maxOtHours: string;
|
|
16
|
+
workingHoursEnabled: boolean;
|
|
17
|
+
overtimeEnabled: boolean;
|
|
18
|
+
/** Blank means no employee override; the outlet overtime setting is inherited. */
|
|
19
|
+
maxHoursPerMonth: string;
|
|
20
20
|
/** For a part-timer: days they CAN work. For a full-timer: days they're OFF — the
|
|
21
21
|
* mockup inverts the same array's meaning by employment type. */
|
|
22
22
|
availDays: boolean[];
|
|
@@ -31,9 +31,13 @@ export interface ScheduleAddEmployeeForm {
|
|
|
31
31
|
masterCode: string;
|
|
32
32
|
/** Gates the fields below it — someone can be fully scheduled with this off. */
|
|
33
33
|
posAccessEnabled: boolean;
|
|
34
|
-
/** WHAT the passcode opens the till as,
|
|
35
|
-
*
|
|
36
|
-
|
|
34
|
+
/** WHAT the passcode opens the till as, and WHERE — a row per outlet. Not restricted to the
|
|
35
|
+
* outlets picked in Work locations above: a floating manager can be rostered at one outlet
|
|
36
|
+
* and hold POS admin at several others. */
|
|
37
|
+
posRoles: {
|
|
38
|
+
outlet: string;
|
|
39
|
+
roleId: string;
|
|
40
|
+
}[];
|
|
37
41
|
}
|
|
38
42
|
/** A salaried month, for converting a monthly figure into the hourly one the cost rail
|
|
39
43
|
* actually reads. Ported verbatim from the mockup's MONTH_HOURS. */
|
|
@@ -6,6 +6,10 @@ export { isoDateKey } from './schedule-calendar';
|
|
|
6
6
|
export declare function isWorkSlot(slot: DaySlot): slot is WorkSlot;
|
|
7
7
|
export declare function isLeaveSlot(slot: DaySlot): slot is LeaveSlot;
|
|
8
8
|
export declare function workSlotsOf(day: DaySlot): WorkSlot[];
|
|
9
|
+
/** Whether two periods occupy any of the same working time. Endpoints that touch are
|
|
10
|
+
* back-to-back, not a conflict. Overnight ranges use the shared clock rules. */
|
|
11
|
+
export declare function shiftsOverlap(a: Pick<WorkSlot, 'start' | 'end'>, b: Pick<WorkSlot, 'start' | 'end'>): boolean;
|
|
12
|
+
export declare function overlapsAnotherSlot(slots: WorkSlot[], target: WorkSlot): boolean;
|
|
9
13
|
/** The inverse of `workSlotsOf` — bare slot for one, the array for two or more, so a day
|
|
10
14
|
* that's back down to its last period reads as a normal single shift again rather than a
|
|
11
15
|
* one-element array everything else has to unwrap. */
|
|
@@ -8,14 +8,12 @@ export declare function useScheduleDayMeta(dateKey: (dayIdx: number) => string |
|
|
|
8
8
|
onPersistError?: (message: string) => void;
|
|
9
9
|
}): {
|
|
10
10
|
dayNote: (dayIdx: number) => 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;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DemandPeriod } from '../types';
|
|
1
|
+
import type { DemandPeriod, Employee } from '../types';
|
|
2
2
|
import { format12h as t12, formatShortMinutes as minToShort, fromMinutes as minToHHMM, spanMinutes as spanOf, toMinutes as toMin } from './schedule-time';
|
|
3
3
|
export { minToHHMM, minToShort, spanOf, t12, toMin };
|
|
4
4
|
export declare function rangeText(from: number, to: number): string;
|
|
@@ -9,3 +9,15 @@ export interface ScheduleCoverageAxis {
|
|
|
9
9
|
from: number;
|
|
10
10
|
to: number;
|
|
11
11
|
}
|
|
12
|
+
/** Fills named position rows from the people on, as a maximum matching (Kuhn's augmenting
|
|
13
|
+
* paths) so a flexible person is moved off one row when another row has nobody else. Rows are
|
|
14
|
+
* tried in the order given (scarcest first); within a row, main-position holders are offered
|
|
15
|
+
* first, then secondary holders, then people with no positions. Returns heads filled per row
|
|
16
|
+
* (same order as `rows`) and the ids spent. */
|
|
17
|
+
export declare function matchSlots(rows: Array<{
|
|
18
|
+
position: string;
|
|
19
|
+
required: number;
|
|
20
|
+
}>, on: Employee[], qualified: (e: Employee, position: string) => boolean): {
|
|
21
|
+
got: number[];
|
|
22
|
+
spent: Set<number>;
|
|
23
|
+
};
|
|
@@ -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
|
|
@@ -21,10 +21,11 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi, options?
|
|
|
21
21
|
payBasis: "hourly" | "monthly";
|
|
22
22
|
payAmount: string;
|
|
23
23
|
maxHours: string;
|
|
24
|
+
maxHoursPerDay: string;
|
|
24
25
|
minHours: string;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
workingHoursEnabled: boolean;
|
|
27
|
+
overtimeEnabled: boolean;
|
|
28
|
+
maxHoursPerMonth: string;
|
|
28
29
|
availDays: boolean[];
|
|
29
30
|
availHours: {
|
|
30
31
|
from: string;
|
|
@@ -38,7 +39,10 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi, options?
|
|
|
38
39
|
masterUser: boolean;
|
|
39
40
|
masterCode: string;
|
|
40
41
|
posAccessEnabled: boolean;
|
|
41
|
-
|
|
42
|
+
posRoles: {
|
|
43
|
+
outlet: string;
|
|
44
|
+
roleId: string;
|
|
45
|
+
}[];
|
|
42
46
|
};
|
|
43
47
|
sectionId: import("vue").Ref<string, string>;
|
|
44
48
|
isEditing: import("vue").ComputedRef<boolean>;
|
|
@@ -50,16 +54,17 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi, options?
|
|
|
50
54
|
dayLit: (index: number) => boolean;
|
|
51
55
|
avLabel: import("vue").ComputedRef<"Weekly availability" | "Time off days">;
|
|
52
56
|
avAllLabel: import("vue").ComputedRef<"Clear all" | "Select all" | "No days off" | "Every day off">;
|
|
53
|
-
maxHoursPlaceholder: import("vue").ComputedRef<
|
|
54
|
-
|
|
55
|
-
|
|
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;
|
|
56
62
|
payUnit: import("vue").ComputedRef<"/month" | "/hour">;
|
|
57
63
|
effectiveRate: import("vue").ComputedRef<number>;
|
|
58
64
|
passcodeValue: import("vue").ComputedRef<string>;
|
|
59
65
|
passcodeOk: import("vue").ComputedRef<boolean>;
|
|
60
66
|
currentLocationLabel: import("vue").ComputedRef<string>;
|
|
61
67
|
locationOptions: import("vue").Reactive<string[]>;
|
|
62
|
-
masterCodeError: import("vue").ComputedRef<boolean>;
|
|
63
68
|
isNewUser: import("vue").ComputedRef<boolean>;
|
|
64
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.">;
|
|
65
70
|
primaryRoleLabel: import("vue").ComputedRef<string>;
|
|
@@ -67,13 +72,34 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi, options?
|
|
|
67
72
|
payLine: import("vue").ComputedRef<string>;
|
|
68
73
|
nameError: import("vue").ComputedRef<boolean>;
|
|
69
74
|
passError: import("vue").ComputedRef<boolean>;
|
|
75
|
+
posRolesError: import("vue").ComputedRef<boolean>;
|
|
70
76
|
availabilityError: import("vue").ComputedRef<boolean>;
|
|
71
77
|
saving: import("vue").Ref<boolean, boolean>;
|
|
72
78
|
saveError: import("vue").Ref<string | null, string | null>;
|
|
79
|
+
deferScheduleWrites: import("vue").Ref<boolean, boolean>;
|
|
73
80
|
candidatesLoading: import("vue").Ref<boolean, boolean>;
|
|
74
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;
|
|
75
100
|
openWizard: (section: string) => void;
|
|
76
101
|
openEditFor: (emp: Employee) => void;
|
|
102
|
+
confirmClose: () => void;
|
|
77
103
|
close: () => void;
|
|
78
104
|
setMode: (m: ScheduleAddEmployeeMode) => void;
|
|
79
105
|
openSelectExisting: () => void;
|
|
@@ -93,10 +119,19 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi, options?
|
|
|
93
119
|
setAvailHour: (index: number, field: "from" | "to", value: string) => void;
|
|
94
120
|
copyAvailHourDown: (index: number) => void;
|
|
95
121
|
setPasscodeDigit: (index: number, value: string) => void;
|
|
96
|
-
generatePasscode: () => void
|
|
122
|
+
generatePasscode: () => Promise<void>;
|
|
123
|
+
isGeneratingPasscode: import("vue").Ref<boolean, boolean>;
|
|
97
124
|
togglePosAccess: () => void;
|
|
98
|
-
|
|
99
|
-
|
|
125
|
+
addPosRoleRow: () => void;
|
|
126
|
+
removePosRoleRow: (index: number) => void;
|
|
127
|
+
isCurrentOutletRow: (index: number) => boolean;
|
|
128
|
+
setPosRoleOutlet: (index: number, outlet: string) => void;
|
|
129
|
+
setPosRoleId: (index: number, roleId: string) => void;
|
|
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;
|
|
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.">;
|
|
100
135
|
create: () => Promise<boolean>;
|
|
101
136
|
};
|
|
102
137
|
export type ScheduleAddEmployeeApi = ReturnType<typeof useScheduleAddEmployee>;
|
|
@@ -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;
|
|
@@ -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,14 +1,7 @@
|
|
|
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
|
-
onNotQualified: (empName: string, position: string) => void;
|
|
12
5
|
}): {
|
|
13
6
|
draggingEmpId: import("vue").Ref<number | null, number | null>;
|
|
14
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;
|
|
@@ -57,9 +55,9 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
57
55
|
occupied: number;
|
|
58
56
|
notQualified: number;
|
|
59
57
|
weeklyCap: number;
|
|
58
|
+
dailyCap: number;
|
|
60
59
|
rest: number;
|
|
61
60
|
dayOff: number;
|
|
62
|
-
dayCap: number;
|
|
63
61
|
};
|
|
64
62
|
}[];
|
|
65
63
|
metrics: {
|
|
@@ -100,12 +98,14 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
100
98
|
} | null, {
|
|
101
99
|
objective: "BALANCED" | "SERVICE" | "LOWER_COST" | "STABLE_HOURS";
|
|
102
100
|
allowOvertime: boolean;
|
|
101
|
+
model: string | null;
|
|
103
102
|
proposals: {
|
|
103
|
+
rejectReason?: string | null | undefined;
|
|
104
104
|
date: string;
|
|
105
105
|
startTime: string;
|
|
106
106
|
endTime: string;
|
|
107
|
-
positionId: string | null;
|
|
108
107
|
employeeId: string;
|
|
108
|
+
positionId: string | null;
|
|
109
109
|
employeeName: string;
|
|
110
110
|
position: string;
|
|
111
111
|
reason: string;
|
|
@@ -121,9 +121,9 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
121
121
|
occupied: number;
|
|
122
122
|
notQualified: number;
|
|
123
123
|
weeklyCap: number;
|
|
124
|
+
dailyCap: number;
|
|
124
125
|
rest: number;
|
|
125
126
|
dayOff: number;
|
|
126
|
-
dayCap: number;
|
|
127
127
|
};
|
|
128
128
|
}[];
|
|
129
129
|
metrics: {
|
|
@@ -164,12 +164,14 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
164
164
|
} | {
|
|
165
165
|
objective: "BALANCED" | "SERVICE" | "LOWER_COST" | "STABLE_HOURS";
|
|
166
166
|
allowOvertime: boolean;
|
|
167
|
+
model: string | null;
|
|
167
168
|
proposals: {
|
|
169
|
+
rejectReason?: string | null | undefined | undefined;
|
|
168
170
|
date: string;
|
|
169
171
|
startTime: string;
|
|
170
172
|
endTime: string;
|
|
171
|
-
positionId: string | null;
|
|
172
173
|
employeeId: string;
|
|
174
|
+
positionId: string | null;
|
|
173
175
|
employeeName: string;
|
|
174
176
|
position: string;
|
|
175
177
|
reason: string;
|
|
@@ -185,9 +187,9 @@ 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
|
-
dayCap: number;
|
|
191
193
|
};
|
|
192
194
|
}[];
|
|
193
195
|
metrics: {
|
|
@@ -230,12 +232,13 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
230
232
|
hasDemand: import("vue").ComputedRef<boolean>;
|
|
231
233
|
noDemandOpen: import("vue").Ref<boolean, boolean>;
|
|
232
234
|
rangeLabel: import("vue").ComputedRef<string>;
|
|
233
|
-
openWizard: () => void;
|
|
235
|
+
openWizard: (fromSetup?: boolean) => void;
|
|
234
236
|
closeWizard: () => void;
|
|
235
237
|
next: () => void;
|
|
236
238
|
back: () => void;
|
|
237
239
|
generate: () => Promise<void>;
|
|
238
240
|
reviewMode: import("vue").ComputedRef<boolean>;
|
|
241
|
+
hasPendingChanges: import("vue").ComputedRef<boolean>;
|
|
239
242
|
proposals: import("vue").ComputedRef<{
|
|
240
243
|
id: number;
|
|
241
244
|
empId: number;
|
|
@@ -248,6 +251,7 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
248
251
|
status: "pending" | "rejected";
|
|
249
252
|
weekKey?: string | undefined;
|
|
250
253
|
reason?: string | undefined;
|
|
254
|
+
rejectReason?: string | undefined;
|
|
251
255
|
}[]>;
|
|
252
256
|
weekHasProposals: import("vue").ComputedRef<boolean>;
|
|
253
257
|
unmetCount: import("vue").Ref<number, number>;
|
|
@@ -264,7 +268,15 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
264
268
|
toggleReject: (id: number) => void;
|
|
265
269
|
rejectAll: () => void;
|
|
266
270
|
exitReview: () => void;
|
|
267
|
-
|
|
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>;
|
|
268
280
|
applying: import("vue").Ref<boolean, boolean>;
|
|
269
281
|
applyRejections: import("vue").Ref<{
|
|
270
282
|
employeeName: string;
|