Adds resource scheduling and unavailability tracking
Introduces comprehensive schedule management for resources: - Adds DateService with advanced time and date utilities - Implements ResourceScheduleService for managing work hours - Creates ScheduleRenderer to visualize unavailable time zones - Extends resource model to support default weekly schedules Enables granular tracking of resource availability and working hours
This commit is contained in:
parent
400de8c9d5
commit
a2b95515fd
17 changed files with 563 additions and 36 deletions
|
|
@ -25,6 +25,7 @@
|
|||
/* Colors - Grid */
|
||||
--color-hour-line: rgba(0, 0, 0, 0.2);
|
||||
--color-grid-line-light: rgba(0, 0, 0, 0.05);
|
||||
--color-unavailable: rgba(0, 0, 0, 0.02);
|
||||
|
||||
/* Named color palette for events (fra V1) */
|
||||
--b-color-red: #e53935;
|
||||
|
|
|
|||
|
|
@ -276,4 +276,21 @@ swp-day-column {
|
|||
swp-events-layer {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
/* Unavailable time zones (outside working hours) */
|
||||
swp-unavailable-layer {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
z-index: 5;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
swp-unavailable-zone {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background: var(--color-unavailable, rgba(0, 0, 0, 0.05));
|
||||
pointer-events: none;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,15 @@
|
|||
"avatarUrl": "/avatars/camilla.jpg",
|
||||
"color": "#9c27b0",
|
||||
"isActive": true,
|
||||
"defaultSchedule": {
|
||||
"1": { "start": "09:00", "end": "17:00" },
|
||||
"2": { "start": "09:00", "end": "17:00" },
|
||||
"3": { "start": "09:00", "end": "15:00" },
|
||||
"4": { "start": "09:00", "end": "17:00" },
|
||||
"5": { "start": "09:00", "end": "14:00" },
|
||||
"6": null,
|
||||
"7": null
|
||||
},
|
||||
"metadata": {
|
||||
"role": "master stylist",
|
||||
"specialties": ["balayage", "color", "bridal"]
|
||||
|
|
@ -20,6 +29,15 @@
|
|||
"avatarUrl": "/avatars/isabella.jpg",
|
||||
"color": "#e91e63",
|
||||
"isActive": true,
|
||||
"defaultSchedule": {
|
||||
"1": { "start": "10:00", "end": "18:00" },
|
||||
"2": { "start": "10:00", "end": "18:00" },
|
||||
"3": { "start": "10:00", "end": "18:00" },
|
||||
"4": { "start": "10:00", "end": "18:00" },
|
||||
"5": { "start": "10:00", "end": "16:00" },
|
||||
"6": null,
|
||||
"7": null
|
||||
},
|
||||
"metadata": {
|
||||
"role": "master stylist",
|
||||
"specialties": ["highlights", "ombre", "styling"]
|
||||
|
|
@ -33,6 +51,15 @@
|
|||
"avatarUrl": "/avatars/alexander.jpg",
|
||||
"color": "#3f51b5",
|
||||
"isActive": true,
|
||||
"defaultSchedule": {
|
||||
"1": { "start": "08:00", "end": "16:00" },
|
||||
"2": { "start": "08:00", "end": "16:00" },
|
||||
"3": { "start": "08:00", "end": "16:00" },
|
||||
"4": { "start": "08:00", "end": "16:00" },
|
||||
"5": { "start": "08:00", "end": "14:00" },
|
||||
"6": null,
|
||||
"7": null
|
||||
},
|
||||
"metadata": {
|
||||
"role": "master stylist",
|
||||
"specialties": ["men's cuts", "beard", "fade"]
|
||||
|
|
@ -46,6 +73,15 @@
|
|||
"avatarUrl": "/avatars/viktor.jpg",
|
||||
"color": "#009688",
|
||||
"isActive": true,
|
||||
"defaultSchedule": {
|
||||
"1": { "start": "09:00", "end": "17:00" },
|
||||
"2": null,
|
||||
"3": { "start": "09:00", "end": "17:00" },
|
||||
"4": { "start": "09:00", "end": "17:00" },
|
||||
"5": { "start": "09:00", "end": "17:00" },
|
||||
"6": { "start": "10:00", "end": "14:00" },
|
||||
"7": null
|
||||
},
|
||||
"metadata": {
|
||||
"role": "stylist",
|
||||
"specialties": ["cuts", "styling", "perms"]
|
||||
|
|
@ -59,6 +95,15 @@
|
|||
"avatarUrl": "/avatars/line.jpg",
|
||||
"color": "#8bc34a",
|
||||
"isActive": true,
|
||||
"defaultSchedule": {
|
||||
"1": { "start": "09:00", "end": "15:00" },
|
||||
"2": { "start": "09:00", "end": "15:00" },
|
||||
"3": { "start": "09:00", "end": "15:00" },
|
||||
"4": null,
|
||||
"5": { "start": "09:00", "end": "15:00" },
|
||||
"6": null,
|
||||
"7": null
|
||||
},
|
||||
"metadata": {
|
||||
"role": "student",
|
||||
"specialties": ["wash", "blow-dry", "basic cuts"]
|
||||
|
|
@ -72,6 +117,15 @@
|
|||
"avatarUrl": "/avatars/mads.jpg",
|
||||
"color": "#ff9800",
|
||||
"isActive": true,
|
||||
"defaultSchedule": {
|
||||
"1": null,
|
||||
"2": { "start": "10:00", "end": "16:00" },
|
||||
"3": { "start": "10:00", "end": "16:00" },
|
||||
"4": { "start": "10:00", "end": "16:00" },
|
||||
"5": null,
|
||||
"6": null,
|
||||
"7": null
|
||||
},
|
||||
"metadata": {
|
||||
"role": "student",
|
||||
"specialties": ["wash", "styling assistance"]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue