@feedmepos/mf-hrm-portal 2.2.5-dev.5 → 2.2.5-dev.7
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-DqR6ouRS.js → ApprovalCodeList-dn-WwNAd.js} +4 -4
- package/dist/{AuditLogList-CG2BiQX6.js → AuditLogList-BqVp9fxD.js} +18 -17
- package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-C7nMXx8R.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-DnAet2oc.js} +2 -2
- package/dist/{EmployeeList-CGZzol7v.js → EmployeeList-BwTJre5k.js} +29 -27
- package/dist/{FormItem.vue_vue_type_script_setup_true_lang-DPT2FoIc.js → FormItem.vue_vue_type_script_setup_true_lang-CUnlKsxk.js} +1 -1
- package/dist/{GrantUserList-D1fBv1KQ.js → GrantUserList-CZek1r4F.js} +5 -5
- package/dist/{Main-BOt-Y1wv.js → Main-CbmA-SYo.js} +9 -9
- package/dist/{Main-zg7fbEtx.js → Main-DVA51sj2.js} +2 -2
- package/dist/{Main-CFoZot3K.js → Main-MjSYZdOq.js} +5 -5
- package/dist/{PermissionSetList-bJpwD62u.js → PermissionSetList-lkHmXhNm.js} +11 -10
- package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-C4C8Cvf4.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-cFQDQCal.js} +1174 -1173
- package/dist/{RoleList-DUVZ7dkO.js → RoleList-BSs0SmFo.js} +7 -7
- package/dist/ScheduleGeneralPage-DD9n2TUe.js +242 -0
- package/dist/SchedulePage-B0X97zVC.js +10761 -0
- package/dist/SchedulePositionPage-BXz1USn3.js +220 -0
- package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-DAHke2rH.js +201 -0
- package/dist/SelectFilter-CG13h83-.js +264 -0
- package/dist/{TeamMemberList-DAnM-DSd.js → TeamMemberList-Dit_nV6d.js} +36 -34
- package/dist/{TimesheetList-5sdcWjEf.js → TimesheetList-B-FlRO7E.js} +54 -53
- package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-GhPw_mCW.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-DZUJR8K_.js} +2 -2
- package/dist/_plugin-vue_export-helper-CHgC5LLL.js +9 -0
- package/dist/{app-D-cQzgkr.js → app-BpnOPodL.js} +2947 -2362
- package/dist/app.js +1 -1
- package/dist/{dayjs.min-DqFS0ebn.js → dayjs.min-4GLfSOGZ.js} +1 -1
- package/dist/employee-ChdVnSmd.js +139 -0
- package/dist/index-CilJxsY7.js +70 -0
- package/dist/{iteration-BjW8Cs9e.js → index-DYoVJQTd.js} +698 -726
- package/dist/iteration-CcXrOMQe.js +30 -0
- package/dist/{lodash-wjhSWqez.js → lodash-CcFIMCiJ.js} +1 -1
- package/dist/{role-CEUcSmA6.js → role-OXCiWTVq.js} +4 -3
- package/dist/{rule-Df8LOhxm.js → rule-8iyCO_LZ.js} +71 -70
- package/dist/src/api/schedule/index.d.ts +44 -0
- package/dist/src/components/layout/AppSidebar.vue.d.ts +2 -0
- package/dist/src/components/layout/PortalShell.vue.d.ts +12 -0
- package/dist/src/components/layout/withShell.d.ts +14 -0
- package/dist/src/router/shared.d.ts +4 -1
- package/dist/src/types/schedule.d.ts +232 -0
- package/dist/src/views/scheduling/ScheduleGeneralPage.vue.d.ts +4 -0
- package/dist/src/views/scheduling/SchedulePage.vue.d.ts +4 -0
- package/dist/src/views/scheduling/SchedulePositionPage.vue.d.ts +4 -0
- package/dist/src/views/scheduling/components/ScheduleAddEmployeeIdentitySection.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleAddEmployeeModal.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleAddEmployeeModeStep.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleAddEmployeePosAccessSection.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleAddEmployeePositionsSection.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleAddEmployeeSchedulingSection.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleAddPickPopover.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleAllShiftsRow.vue.d.ts +22 -0
- package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +34 -0
- package/dist/src/views/scheduling/components/ScheduleAssignEmployeePopover.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleAutoScheduleModal.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleChangeEmployeeModal.vue.d.ts +8 -0
- package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +24 -0
- package/dist/src/views/scheduling/components/ScheduleCostRail.vue.d.ts +8 -0
- package/dist/src/views/scheduling/components/ScheduleDateRangePopover.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleDayNotePopover.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleDayTimeline.vue.d.ts +12 -0
- package/dist/src/views/scheduling/components/ScheduleDemandRow.vue.d.ts +23 -0
- package/dist/src/views/scheduling/components/ScheduleDemandSheet.vue.d.ts +10 -0
- package/dist/src/views/scheduling/components/ScheduleDotsIcon.vue.d.ts +2 -0
- package/dist/src/views/scheduling/components/ScheduleEmployeeDetailPanel.vue.d.ts +12 -0
- package/dist/src/views/scheduling/components/ScheduleEmployeeIdentity.vue.d.ts +17 -0
- package/dist/src/views/scheduling/components/ScheduleFilterBar.vue.d.ts +18 -0
- package/dist/src/views/scheduling/components/ScheduleGapPopover.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleGridHeader.vue.d.ts +18 -0
- package/dist/src/views/scheduling/components/ScheduleLeaveEditModal.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleLegendBar.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingWelcome.vue.d.ts +12 -0
- package/dist/src/views/scheduling/components/ScheduleOnboardingWizard.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleOpenShiftCardMenu.vue.d.ts +14 -0
- package/dist/src/views/scheduling/components/SchedulePdfPreview.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/SchedulePublishModal.vue.d.ts +8 -0
- package/dist/src/views/scheduling/components/ScheduleReviewBar.vue.d.ts +12 -0
- package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +24 -0
- package/dist/src/views/scheduling/components/ScheduleSelectExistingEmployeeModal.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleShiftCardMenu.vue.d.ts +12 -0
- package/dist/src/views/scheduling/components/ScheduleShiftCell.vue.d.ts +31 -0
- package/dist/src/views/scheduling/components/ScheduleShiftHeadcountEditor.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleShiftImpact.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleShiftMoreOptions.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +14 -0
- package/dist/src/views/scheduling/components/ScheduleShiftRepeatDaysRow.vue.d.ts +8 -0
- package/dist/src/views/scheduling/components/ScheduleShiftSegmentsEditor.vue.d.ts +8 -0
- package/dist/src/views/scheduling/components/ScheduleShiftWhoPicker.vue.d.ts +25 -0
- package/dist/src/views/scheduling/components/ScheduleStackPopover.vue.d.ts +14 -0
- package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +16 -0
- package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +54 -0
- package/dist/src/views/scheduling/components/ScheduleStatsRow.vue.d.ts +12 -0
- package/dist/src/views/scheduling/components/ScheduleSwapShiftsModal.vue.d.ts +8 -0
- package/dist/src/views/scheduling/components/ScheduleTimePickerPopover.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleTopbar.vue.d.ts +22 -0
- package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +67 -0
- package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +38 -0
- package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +29 -0
- package/dist/src/views/scheduling/composables/schedule-employee-profile.d.ts +7 -0
- package/dist/src/views/scheduling/composables/schedule-shift-time.d.ts +14 -0
- package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +10 -0
- package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +86 -0
- package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +66 -0
- package/dist/src/views/scheduling/composables/useScheduleAllShiftsRow.d.ts +77 -0
- package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +50 -0
- package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +18 -0
- package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +113 -0
- package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +136 -0
- package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +415 -0
- package/dist/src/views/scheduling/composables/useScheduleCellState.d.ts +27 -0
- package/dist/src/views/scheduling/composables/useScheduleClashDetection.d.ts +18 -0
- package/dist/src/views/scheduling/composables/useScheduleCopyWeek.d.ts +17 -0
- package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +43 -0
- package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +48 -0
- package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +82 -0
- package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +68 -0
- package/dist/src/views/scheduling/composables/useScheduleDemandRow.d.ts +45 -0
- package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +139 -0
- package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +22 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeIdentity.d.ts +32 -0
- package/dist/src/views/scheduling/composables/useScheduleEmployeeProfile.d.ts +16 -0
- package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +26 -0
- package/dist/src/views/scheduling/composables/useScheduleFilterBar.d.ts +14 -0
- package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +80 -0
- package/dist/src/views/scheduling/composables/useScheduleLeave.d.ts +20 -0
- package/dist/src/views/scheduling/composables/useScheduleLegend.d.ts +15 -0
- package/dist/src/views/scheduling/composables/useScheduleLegendBar.d.ts +35 -0
- package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +179 -0
- package/dist/src/views/scheduling/composables/useScheduleOpenShiftCard.d.ts +23 -0
- package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +19 -0
- package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +32 -0
- package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +91 -0
- package/dist/src/views/scheduling/composables/useScheduleRangeCalendar.d.ts +18 -0
- package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +183 -0
- package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +54 -0
- package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +18 -0
- package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +225 -0
- package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +174 -0
- package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +20 -0
- package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +25 -0
- package/dist/src/views/scheduling/composables/useScheduleTimePicker.d.ts +44 -0
- package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +10 -0
- package/dist/src/views/scheduling/data.d.ts +105 -0
- package/dist/src/views/scheduling/locales/index.d.ts +496 -0
- package/dist/src/views/scheduling/schedule-store.d.ts +116 -0
- package/dist/src/views/scheduling/types.d.ts +311 -0
- package/dist/src/views/team/components/PortalConditionForm.vue.d.ts +2 -2
- package/dist/src/views/team/condition-builders/ConditionBuilderForm.vue.d.ts +2 -2
- package/dist/style.css +1 -1
- package/dist/tsconfig.app.tsbuildinfo +1 -1
- package/dist/{useReportPermissions-4wm7pJcK.js → useReportPermissions-C3fuFTUC.js} +3 -3
- package/dist/useScheduleOutlet-TPZJHgSY.js +546 -0
- package/dist/useSchedulePositions-DCkaKHQm.js +103 -0
- package/package.json +1 -1
- package/dist/SelectFilter-ATOm0hdn.js +0 -269
- package/dist/employee-DvvnCQMK.js +0 -204
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
export type ShiftStatus = 'confirmed' | 'pending' | 'ot';
|
|
2
|
+
export interface ShiftClock {
|
|
3
|
+
in: string | null;
|
|
4
|
+
out: string | null;
|
|
5
|
+
status: 'on-time' | 'late' | 'early-out' | 'absent';
|
|
6
|
+
}
|
|
7
|
+
export interface WorkSlot {
|
|
8
|
+
start: string;
|
|
9
|
+
end: string;
|
|
10
|
+
role: string;
|
|
11
|
+
status: ShiftStatus;
|
|
12
|
+
clock?: ShiftClock;
|
|
13
|
+
conflict?: boolean;
|
|
14
|
+
conflictReason?: string;
|
|
15
|
+
/** Set when this slot is the filled form of an OpenShift record. */
|
|
16
|
+
openId?: number;
|
|
17
|
+
/** Unpaid break length in minutes, authored in the shift popover. Not currently
|
|
18
|
+
* subtracted by the cost rail / stats row's hour totals — those stay gross-hours,
|
|
19
|
+
* matching how this board priced shifts before the popover surfaced a break field. */
|
|
20
|
+
breakMins?: number;
|
|
21
|
+
/** The ShiftAssignments document this slot is saved as, once it has one — see
|
|
22
|
+
* useScheduleBoard's commitShift/removeShift/moveShift. Absent means either it hasn't
|
|
23
|
+
* round-tripped to the backend yet, or it's an OpenShift fill (see openId), which has its
|
|
24
|
+
* own record shape and no write path of its own yet. */
|
|
25
|
+
assignmentId?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface LeaveBalance {
|
|
28
|
+
type: string;
|
|
29
|
+
entitled: number;
|
|
30
|
+
used: number;
|
|
31
|
+
}
|
|
32
|
+
export interface LeaveSlot {
|
|
33
|
+
timeOff: 'approved' | 'pending';
|
|
34
|
+
reason: string;
|
|
35
|
+
half?: boolean;
|
|
36
|
+
halfPart?: 'AM' | 'PM';
|
|
37
|
+
appliedOn?: string;
|
|
38
|
+
note?: string;
|
|
39
|
+
cert?: {
|
|
40
|
+
name: string;
|
|
41
|
+
size: string;
|
|
42
|
+
} | null;
|
|
43
|
+
bal?: LeaveBalance;
|
|
44
|
+
}
|
|
45
|
+
export type DaySlot = WorkSlot | WorkSlot[] | LeaveSlot | null;
|
|
46
|
+
export interface EmployeeRemark {
|
|
47
|
+
author: string;
|
|
48
|
+
date: string;
|
|
49
|
+
type: 'note' | 'warning' | 'praise';
|
|
50
|
+
text: string;
|
|
51
|
+
}
|
|
52
|
+
/** One weekday's availability window, used only for the part-timer "hours they can work"
|
|
53
|
+
* editor on the Add Employee form — informational HR data, not read by the grid. This board
|
|
54
|
+
* has no standing weekly rest-day pattern (see cellStateClasses); a day someone is actually
|
|
55
|
+
* away is booked as dated leave, not derived from this. */
|
|
56
|
+
export interface EmployeeAvailHours {
|
|
57
|
+
from: string;
|
|
58
|
+
to: string;
|
|
59
|
+
}
|
|
60
|
+
export interface Employee {
|
|
61
|
+
id: number;
|
|
62
|
+
name: string;
|
|
63
|
+
role: string;
|
|
64
|
+
initials: string;
|
|
65
|
+
color: string;
|
|
66
|
+
weekHours: number;
|
|
67
|
+
/** Full-time-equivalent percentage, e.g. 100 for a full-timer, 60 for 0.6 FTE. */
|
|
68
|
+
pct: number;
|
|
69
|
+
/** Hours per week this person is contracted to, as agreed with them. Per-person rather than
|
|
70
|
+
* a venue default: ScheduleSettings holds pay rates only, and EmployeeProfiles.workingHour
|
|
71
|
+
* is where the figure is actually stated. Undefined means nobody has agreed one. */
|
|
72
|
+
contractHours?: number;
|
|
73
|
+
rate: number;
|
|
74
|
+
positions: string[];
|
|
75
|
+
/** One entry per visible day of the horizon; null = day off. */
|
|
76
|
+
shifts: DaySlot[];
|
|
77
|
+
remarks: EmployeeRemark[];
|
|
78
|
+
section: string;
|
|
79
|
+
compGroup?: string;
|
|
80
|
+
mobile?: string;
|
|
81
|
+
dial?: string;
|
|
82
|
+
/** Outlets this person may be rostered at. */
|
|
83
|
+
locations?: string[];
|
|
84
|
+
payBasis?: 'hourly' | 'monthly';
|
|
85
|
+
/** The figure as agreed with them, in payBasis's unit — `rate` above is always the
|
|
86
|
+
* hourly figure derived from this and is what the grid actually costs shifts with. */
|
|
87
|
+
payAmount?: number;
|
|
88
|
+
maxHours?: number;
|
|
89
|
+
maxOtHours?: number;
|
|
90
|
+
otAfterDaily?: number;
|
|
91
|
+
preferences?: string[];
|
|
92
|
+
seniority?: 'senior' | 'junior' | '';
|
|
93
|
+
/** Recurring days off (full-timer) or days available (part-timer) — see
|
|
94
|
+
* EmployeeAvailHours above for why the grid does not read this. */
|
|
95
|
+
availDays?: boolean[];
|
|
96
|
+
availHours?: EmployeeAvailHours[];
|
|
97
|
+
/** POS sign-in code. Optional: rostering, costing and publishing never depend on it. */
|
|
98
|
+
passcode?: string;
|
|
99
|
+
masterUser?: boolean;
|
|
100
|
+
}
|
|
101
|
+
export interface Section {
|
|
102
|
+
id: string;
|
|
103
|
+
label: string;
|
|
104
|
+
roles: string[];
|
|
105
|
+
/** The "Unassigned" bucket — always present, never deletable. */
|
|
106
|
+
system?: boolean;
|
|
107
|
+
}
|
|
108
|
+
export interface OpenShift {
|
|
109
|
+
id: number;
|
|
110
|
+
dayIdx: number;
|
|
111
|
+
position: string;
|
|
112
|
+
required: number;
|
|
113
|
+
filledBy: number | null;
|
|
114
|
+
sen?: 'junior' | 'senior';
|
|
115
|
+
empType?: 'full' | 'part';
|
|
116
|
+
/** Optional custom label for this open shift, shown above the time on its card
|
|
117
|
+
* (e.g. "Weekend cover") — distinct from the position it asks for. */
|
|
118
|
+
name?: string;
|
|
119
|
+
/** Hours this record asks for. Defaults to the active shift template's hours at
|
|
120
|
+
* creation, but the shift popover lets a manager retime one open shift on its own. */
|
|
121
|
+
start: string;
|
|
122
|
+
end: string;
|
|
123
|
+
breakMins?: number;
|
|
124
|
+
}
|
|
125
|
+
export interface ShiftTemplate {
|
|
126
|
+
key: string;
|
|
127
|
+
label: string;
|
|
128
|
+
start: string;
|
|
129
|
+
end: string;
|
|
130
|
+
color: string;
|
|
131
|
+
active: boolean;
|
|
132
|
+
breakMins: number;
|
|
133
|
+
}
|
|
134
|
+
/** Coverage requirement for one shift template: position -> [Mon..Sun] headcount. */
|
|
135
|
+
export type CoverageRow = Record<string, number[]>;
|
|
136
|
+
/** What an hour costs, by the kind of day it falls on — the ScheduleSettings document's whole
|
|
137
|
+
* content. `regular` multiplies ORDINARY hours and `overtime` multiplies hours past the OT
|
|
138
|
+
* threshold; a NORMAL day has no `regular` because an ordinary hour at ordinary pay is 1×.
|
|
139
|
+
*
|
|
140
|
+
* REST_DAY is carried but unread: this board has no standing weekly rest-day pattern to decide
|
|
141
|
+
* which dates are rest days (see cellStateClasses), so nothing can ask for its rates yet. */
|
|
142
|
+
export interface PayRate {
|
|
143
|
+
NORMAL: {
|
|
144
|
+
overtime: number;
|
|
145
|
+
};
|
|
146
|
+
REST_DAY: {
|
|
147
|
+
regular: number;
|
|
148
|
+
overtime: number;
|
|
149
|
+
};
|
|
150
|
+
PUBLIC_HOLIDAY: {
|
|
151
|
+
regular: number;
|
|
152
|
+
overtime: number;
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
export interface ScheduleRules {
|
|
156
|
+
coverage: Record<string, CoverageRow>;
|
|
157
|
+
openFrom: string;
|
|
158
|
+
openTo: string;
|
|
159
|
+
/** Per grid day (0 = Mon) trading windows straight off the outlet's own profile — one or
|
|
160
|
+
* more `{start, end}` pairs a day (a lunch/dinner split reads as two windows, not one that
|
|
161
|
+
* spans the gap between them), empty for a structurally closed day. `openFrom`/`openTo`
|
|
162
|
+
* above stay the widest span across the whole week: the coverage bar, day timeline and shift
|
|
163
|
+
* forms are still drawn against one axis for the whole board, not a different one per day. */
|
|
164
|
+
dayHours: Array<{
|
|
165
|
+
start: string;
|
|
166
|
+
end: string;
|
|
167
|
+
}>[];
|
|
168
|
+
payRate: PayRate;
|
|
169
|
+
otAfterDaily: number;
|
|
170
|
+
/** Weekly sales forecast (RM) — the stats row's editable input and the figure the
|
|
171
|
+
* per-day forecast curve distributes across the week. */
|
|
172
|
+
salesForecast: number;
|
|
173
|
+
/** Weekday indices (0 = Mon) the venue never opens on. Empty by default — this seed venue
|
|
174
|
+
* runs every day. Feeds copy-week's and export's "Closed" labeling. */
|
|
175
|
+
closedWeekdays: number[];
|
|
176
|
+
/** Labour cost target as a % of sales — Settings page "Labour budget" tab. */
|
|
177
|
+
labourTarget: number;
|
|
178
|
+
/** When true, the weekly labour cap is derived from salesForecast * labourTarget instead
|
|
179
|
+
* of being a standalone figure. */
|
|
180
|
+
budgetFromSales: boolean;
|
|
181
|
+
/** Weekly labour cap (RM), editable directly when budgetFromSales is false. */
|
|
182
|
+
budget: number;
|
|
183
|
+
/** Monthly OT cap (hours) — Settings page "Overtime" tab. */
|
|
184
|
+
otCapHours: number;
|
|
185
|
+
/** Monthly OT budget (RM), advisory only. */
|
|
186
|
+
otBudget: number;
|
|
187
|
+
notify: {
|
|
188
|
+
waConnected: boolean;
|
|
189
|
+
waNumber: string;
|
|
190
|
+
waDisplayName: string;
|
|
191
|
+
defaults: {
|
|
192
|
+
wa: boolean;
|
|
193
|
+
push: boolean;
|
|
194
|
+
email: boolean;
|
|
195
|
+
};
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
export interface PendingChange {
|
|
199
|
+
empId: number;
|
|
200
|
+
dayIdx: number;
|
|
201
|
+
kind: 'add' | 'change' | 'remove';
|
|
202
|
+
label: string;
|
|
203
|
+
}
|
|
204
|
+
export type NotifyChannel = 'wa' | 'push' | 'email';
|
|
205
|
+
export interface ScheduleVersionSnapshot {
|
|
206
|
+
id: number;
|
|
207
|
+
name: string;
|
|
208
|
+
weekHours: number;
|
|
209
|
+
shifts: DaySlot[];
|
|
210
|
+
}
|
|
211
|
+
export interface ScheduleVersion {
|
|
212
|
+
v: number;
|
|
213
|
+
at: Date;
|
|
214
|
+
by: string;
|
|
215
|
+
note: string;
|
|
216
|
+
changeCount: number;
|
|
217
|
+
staffAffected: number;
|
|
218
|
+
snapshot: ScheduleVersionSnapshot[];
|
|
219
|
+
}
|
|
220
|
+
export type ScheduleStatusTone = 'neutral' | 'warn' | 'ok' | 'locked';
|
|
221
|
+
export interface ScheduleStatusInfo {
|
|
222
|
+
tone: ScheduleStatusTone;
|
|
223
|
+
label: string;
|
|
224
|
+
hint: string;
|
|
225
|
+
allLocked: boolean;
|
|
226
|
+
}
|
|
227
|
+
/** Someone in the business's employee directory who is not yet on THIS outlet's schedule —
|
|
228
|
+
* they may already be scheduled elsewhere (see `otherOutlets`), or nowhere at all. Picking one
|
|
229
|
+
* puts a second, independent EmployeeProfiles document against their `employeeId`; it does not
|
|
230
|
+
* move or copy their profile from wherever else they work. */
|
|
231
|
+
export interface ExistingStaffCandidate {
|
|
232
|
+
employeeId: string;
|
|
233
|
+
name: string;
|
|
234
|
+
/** Other outlets this person already has a POS/HR association with — not necessarily a
|
|
235
|
+
* scheduling profile there, just enough context to tell two same-named people apart and to
|
|
236
|
+
* warn against loaning someone who's clearly based elsewhere. */
|
|
237
|
+
otherOutlets: string[];
|
|
238
|
+
}
|
|
239
|
+
export interface CompGroupMeta {
|
|
240
|
+
basis: 'Hourly' | 'Monthly';
|
|
241
|
+
rate: number;
|
|
242
|
+
note: string;
|
|
243
|
+
}
|
|
244
|
+
/** A manager's note on a DATE, not on a shift — it survives every shift on that date being
|
|
245
|
+
* deleted, because a day with nothing rostered can still be an event day. The title is what
|
|
246
|
+
* makes the note visible on the day card; the description shows on hover. */
|
|
247
|
+
export interface ScheduleDayNote {
|
|
248
|
+
title: string;
|
|
249
|
+
desc: string;
|
|
250
|
+
}
|
|
251
|
+
/** One named slice of a staffing-demand period: "of the 8 people, 2 on grill". Named rows are
|
|
252
|
+
* a PART of the period's headcount, never an addition to it — whatever they don't name is the
|
|
253
|
+
* "any position" remainder, which is derived and never stored. */
|
|
254
|
+
export interface DemandRole {
|
|
255
|
+
position: string;
|
|
256
|
+
n: number;
|
|
257
|
+
}
|
|
258
|
+
/** A stretch of a day and how many people the floor needs across it. Deliberately not a shift:
|
|
259
|
+
* it carries no person and no times anybody works, so five staggered shifts can add up to the
|
|
260
|
+
* five people it asks for at 4pm without any of them being "the" shift for it. */
|
|
261
|
+
export interface DemandPeriod {
|
|
262
|
+
from: string;
|
|
263
|
+
to: string;
|
|
264
|
+
n: number;
|
|
265
|
+
/** Absent and empty mean the same thing — "anybody" — so only a stated breakdown is kept. */
|
|
266
|
+
roles?: DemandRole[];
|
|
267
|
+
}
|
|
268
|
+
/** One slice of a day where neither what was asked for nor who is on the floor changes. The
|
|
269
|
+
* timeline draws one of these per segment and the day's percentage is their weighted sum. */
|
|
270
|
+
export interface CoverageSegment {
|
|
271
|
+
from: number;
|
|
272
|
+
to: number;
|
|
273
|
+
required: number;
|
|
274
|
+
scheduled: number;
|
|
275
|
+
/** Heads asked for that nobody present answers — which is not the same as "too few bodies":
|
|
276
|
+
* eight people none of whom is a cook leaves a 2-grill ask two short with nobody missing. */
|
|
277
|
+
short: number;
|
|
278
|
+
over: number;
|
|
279
|
+
roles: Array<DemandRole & {
|
|
280
|
+
required: number;
|
|
281
|
+
got: number;
|
|
282
|
+
short: number;
|
|
283
|
+
}>;
|
|
284
|
+
/** The unnamed remainder of the period's headcount, and how much of it is covered. */
|
|
285
|
+
anyReq: number;
|
|
286
|
+
anyGot: number;
|
|
287
|
+
/** Nothing was asked for in these hours — an absence of a question, not a gap in one. */
|
|
288
|
+
none: boolean;
|
|
289
|
+
}
|
|
290
|
+
export type DemandApplyMode = 'day' | 'weekday' | 'weekdays' | 'custom';
|
|
291
|
+
export interface NoticeBanner {
|
|
292
|
+
variant: 'holiday' | 'info' | 'warning';
|
|
293
|
+
dayIdx: number;
|
|
294
|
+
label: string;
|
|
295
|
+
detail: string;
|
|
296
|
+
action?: string;
|
|
297
|
+
}
|
|
298
|
+
/** One Auto-Schedule suggestion: put `empId` on `dayIdx` for the given hours/position.
|
|
299
|
+
* Phase 2 only ever proposes filling an empty day (an open shift or a coverage gap),
|
|
300
|
+
* so there is no 'change'/'remove' kind like the mockup's fuller engine. */
|
|
301
|
+
export interface Proposal {
|
|
302
|
+
id: number;
|
|
303
|
+
empId: number;
|
|
304
|
+
dayIdx: number;
|
|
305
|
+
start: string;
|
|
306
|
+
end: string;
|
|
307
|
+
role: string;
|
|
308
|
+
/** Set when this proposal would fill a named OpenShift record. */
|
|
309
|
+
openId?: number;
|
|
310
|
+
status: 'pending' | 'rejected';
|
|
311
|
+
}
|
|
@@ -17,21 +17,21 @@ type __VLS_Props = {
|
|
|
17
17
|
title?: string;
|
|
18
18
|
};
|
|
19
19
|
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
20
|
-
apply: () => any;
|
|
21
20
|
"update-form": (payload: {
|
|
22
21
|
builder: ConditionBuilder;
|
|
23
22
|
form: unknown;
|
|
24
23
|
}) => any;
|
|
24
|
+
apply: () => any;
|
|
25
25
|
"update-inherit-mode": (payload: {
|
|
26
26
|
builder: ConditionBuilder;
|
|
27
27
|
mode: "inherit" | "custom";
|
|
28
28
|
}) => any;
|
|
29
29
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
30
|
-
onApply?: (() => any) | undefined;
|
|
31
30
|
"onUpdate-form"?: ((payload: {
|
|
32
31
|
builder: ConditionBuilder;
|
|
33
32
|
form: unknown;
|
|
34
33
|
}) => any) | undefined;
|
|
34
|
+
onApply?: (() => any) | undefined;
|
|
35
35
|
"onUpdate-inherit-mode"?: ((payload: {
|
|
36
36
|
builder: ConditionBuilder;
|
|
37
37
|
mode: "inherit" | "custom";
|
|
@@ -14,17 +14,17 @@ type __VLS_Slots = {} & {
|
|
|
14
14
|
section?: (props: typeof __VLS_1) => any;
|
|
15
15
|
};
|
|
16
16
|
declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
|
|
17
|
-
apply: () => any;
|
|
18
17
|
"update-form": (payload: {
|
|
19
18
|
builder: ConditionBuilder;
|
|
20
19
|
form: unknown;
|
|
21
20
|
}) => any;
|
|
21
|
+
apply: () => any;
|
|
22
22
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
23
|
-
onApply?: (() => any) | undefined;
|
|
24
23
|
"onUpdate-form"?: ((payload: {
|
|
25
24
|
builder: ConditionBuilder;
|
|
26
25
|
form: unknown;
|
|
27
26
|
}) => any) | undefined;
|
|
27
|
+
onApply?: (() => any) | undefined;
|
|
28
28
|
}>, {
|
|
29
29
|
title: string;
|
|
30
30
|
disable: boolean;
|