Moves POC-files into PlanTempus
This commit is contained in:
parent
51f3b92d69
commit
ea3ecdfb68
91 changed files with 59868 additions and 0 deletions
88
.workbench/POC/data/calendar-config.json
Normal file
88
.workbench/POC/data/calendar-config.json
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
{
|
||||
"gridSettings": {
|
||||
"hourHeight": 80,
|
||||
"dayStartHour": 6,
|
||||
"dayEndHour": 22,
|
||||
"workStartHour": 8,
|
||||
"workEndHour": 17,
|
||||
"snapInterval": 15,
|
||||
"gridStartThresholdMinutes": 30,
|
||||
"showCurrentTime": true,
|
||||
"showWorkHours": true,
|
||||
"fitToWidth": false,
|
||||
"scrollToHour": 8
|
||||
},
|
||||
"dateViewSettings": {
|
||||
"period": "week",
|
||||
"weekDays": 7,
|
||||
"firstDayOfWeek": 1,
|
||||
"showAllDay": true
|
||||
},
|
||||
"timeFormatConfig": {
|
||||
"timezone": "Europe/Copenhagen",
|
||||
"use24HourFormat": true,
|
||||
"locale": "da-DK",
|
||||
"dateFormat": "technical",
|
||||
"showSeconds": false
|
||||
},
|
||||
"workWeekPresets": {
|
||||
"standard": {
|
||||
"id": "standard",
|
||||
"workDays": [1, 2, 3, 4, 5],
|
||||
"totalDays": 5,
|
||||
"firstWorkDay": 1
|
||||
},
|
||||
"compressed": {
|
||||
"id": "compressed",
|
||||
"workDays": [1, 2, 3, 4],
|
||||
"totalDays": 4,
|
||||
"firstWorkDay": 1
|
||||
},
|
||||
"midweek": {
|
||||
"id": "midweek",
|
||||
"workDays": [3, 4, 5],
|
||||
"totalDays": 3,
|
||||
"firstWorkDay": 3
|
||||
},
|
||||
"weekend": {
|
||||
"id": "weekend",
|
||||
"workDays": [6, 7],
|
||||
"totalDays": 2,
|
||||
"firstWorkDay": 6
|
||||
},
|
||||
"fullweek": {
|
||||
"id": "fullweek",
|
||||
"workDays": [1, 2, 3, 4, 5, 6, 7],
|
||||
"totalDays": 7,
|
||||
"firstWorkDay": 1
|
||||
}
|
||||
},
|
||||
"currentWorkWeek": "standard",
|
||||
"currentView": "week",
|
||||
"scrollbar": {
|
||||
"width": 16,
|
||||
"color": "#666",
|
||||
"trackColor": "#f0f0f0",
|
||||
"hoverColor": "#b53f7aff",
|
||||
"borderRadius": 6
|
||||
},
|
||||
"interaction": {
|
||||
"allowDrag": true,
|
||||
"allowResize": true,
|
||||
"allowCreate": true
|
||||
},
|
||||
"api": {
|
||||
"endpoint": "/api/events",
|
||||
"dateFormat": "YYYY-MM-DD",
|
||||
"timeFormat": "HH:mm"
|
||||
},
|
||||
"features": {
|
||||
"enableSearch": true,
|
||||
"enableTouch": true
|
||||
},
|
||||
"eventDefaults": {
|
||||
"defaultEventDuration": 60,
|
||||
"minEventDuration": 15,
|
||||
"maxEventDuration": 480
|
||||
}
|
||||
}
|
||||
67
.workbench/POC/data/employee-revenue-utilization.json
Normal file
67
.workbench/POC/data/employee-revenue-utilization.json
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
{
|
||||
"categories": ["Uge 40", "Uge 41", "Uge 42", "Uge 43", "Uge 44", "Uge 45", "Uge 46", "Uge 47", "Uge 48", "Uge 49", "Uge 50", "Uge 51", "Uge 52", "Uge 1", "Uge 2", "Uge 3", "Uge 4", "Uge 5", "Uge 6", "Uge 7", "Uge 8", "Uge 9", "Uge 10", "Uge 11", "Uge 12"],
|
||||
"nowCategory": "Uge 52",
|
||||
"forecastStartCategory": "Uge 1",
|
||||
"actual": {
|
||||
"revenue": [
|
||||
{ "x": "Uge 40", "y": 38500 },
|
||||
{ "x": "Uge 41", "y": 42000 },
|
||||
{ "x": "Uge 42", "y": 35200 },
|
||||
{ "x": "Uge 43", "y": 44800 },
|
||||
{ "x": "Uge 44", "y": 41500 },
|
||||
{ "x": "Uge 45", "y": 39200 },
|
||||
{ "x": "Uge 46", "y": 46100 },
|
||||
{ "x": "Uge 47", "y": 43800 },
|
||||
{ "x": "Uge 48", "y": 40500 },
|
||||
{ "x": "Uge 49", "y": 45200 },
|
||||
{ "x": "Uge 50", "y": 42800 },
|
||||
{ "x": "Uge 51", "y": 44500 },
|
||||
{ "x": "Uge 52", "y": 28450 }
|
||||
],
|
||||
"utilization": [
|
||||
{ "x": "Uge 40", "y": 82 },
|
||||
{ "x": "Uge 41", "y": 88 },
|
||||
{ "x": "Uge 42", "y": 75 },
|
||||
{ "x": "Uge 43", "y": 91 },
|
||||
{ "x": "Uge 44", "y": 85 },
|
||||
{ "x": "Uge 45", "y": 80 },
|
||||
{ "x": "Uge 46", "y": 94 },
|
||||
{ "x": "Uge 47", "y": 89 },
|
||||
{ "x": "Uge 48", "y": 83 },
|
||||
{ "x": "Uge 49", "y": 92 },
|
||||
{ "x": "Uge 50", "y": 87 },
|
||||
{ "x": "Uge 51", "y": 90 },
|
||||
{ "x": "Uge 52", "y": 84 }
|
||||
]
|
||||
},
|
||||
"forecast": {
|
||||
"revenue": [
|
||||
{ "x": "Uge 1", "y": 0 },
|
||||
{ "x": "Uge 2", "y": 32500 },
|
||||
{ "x": "Uge 3", "y": 28800 },
|
||||
{ "x": "Uge 4", "y": 22400 },
|
||||
{ "x": "Uge 5", "y": 15200 },
|
||||
{ "x": "Uge 6", "y": 9800 },
|
||||
{ "x": "Uge 7", "y": 6500 },
|
||||
{ "x": "Uge 8", "y": 4200 },
|
||||
{ "x": "Uge 9", "y": 2800 },
|
||||
{ "x": "Uge 10", "y": 1500 },
|
||||
{ "x": "Uge 11", "y": 800 },
|
||||
{ "x": "Uge 12", "y": 0 }
|
||||
],
|
||||
"utilization": [
|
||||
{ "x": "Uge 1", "y": 0 },
|
||||
{ "x": "Uge 2", "y": 74 },
|
||||
{ "x": "Uge 3", "y": 58 },
|
||||
{ "x": "Uge 4", "y": 39 },
|
||||
{ "x": "Uge 5", "y": 21 },
|
||||
{ "x": "Uge 6", "y": 11 },
|
||||
{ "x": "Uge 7", "y": 8 },
|
||||
{ "x": "Uge 8", "y": 5 },
|
||||
{ "x": "Uge 9", "y": 3 },
|
||||
{ "x": "Uge 10", "y": 2 },
|
||||
{ "x": "Uge 11", "y": 1 },
|
||||
{ "x": "Uge 12", "y": 0 }
|
||||
]
|
||||
}
|
||||
}
|
||||
125
.workbench/POC/data/kk-services.json
Normal file
125
.workbench/POC/data/kk-services.json
Normal file
|
|
@ -0,0 +1,125 @@
|
|||
{
|
||||
"Klip dame, herre og børn": [
|
||||
{ "name": "Dameklip", "duration": 60, "price": 725 },
|
||||
{ "name": "Dameklip uden snak", "duration": 60, "price": 725 },
|
||||
{ "name": "Dameklip spidser mellemlangt og langt hår", "duration": 40, "price": 575 },
|
||||
{ "name": "Dameklip Luksus ekstra glans og pleje", "duration": 75, "price": 925 },
|
||||
{ "name": "Herreklip", "duration": 60, "price": 645 },
|
||||
{ "name": "Herreklip uden snak", "duration": 60, "price": 645 },
|
||||
{ "name": "Skin fade", "duration": 60, "price": 645 },
|
||||
{ "name": "Klip med maskine (herre klip)", "duration": 30, "price": 475 },
|
||||
{ "name": "Børneklip 0-4 år", "duration": 45, "price": 475 },
|
||||
{ "name": "Børneklip 4-8 år", "duration": 45, "price": 525 },
|
||||
{ "name": "Touch up Dame", "duration": 10, "price": 0 },
|
||||
{ "name": "Touch up Herre", "duration": 10, "price": 0 },
|
||||
{ "name": "Pandehår helt nyt", "duration": 20, "price": 325 },
|
||||
{ "name": "Konsultation uden behandling", "duration": 10, "price": 0 },
|
||||
{ "name": "Herreklip", "duration": 60, "price": 550 },
|
||||
{ "name": "Klip med maskine (herre klip)", "duration": 45, "price": 525 }
|
||||
],
|
||||
|
||||
"Farvebehandlinger": [
|
||||
{ "name": "Bundfarve almindelig udgroning maks 3 cm", "duration": 90, "price": 785 },
|
||||
{ "name": "Helfarve kort hår", "duration": 105, "price": 950 },
|
||||
{ "name": "Helfarve mellemlangt hår", "duration": 120, "price": 1450 },
|
||||
{ "name": "Helfarve langt hår", "duration": 120, "price": 1550 },
|
||||
{ "name": "Bundfarve/ Lysning", "duration": 105, "price": 975 },
|
||||
{ "name": "Afblegning kort hår + gloss", "duration": 150, "price": 1895 }
|
||||
],
|
||||
|
||||
"Striber/ Refleksbehandling": [
|
||||
{ "name": "Striber kort hår", "duration": 120, "price": 1465 },
|
||||
{ "name": "Striber mellemlangt hår", "duration": 150, "price": 1665 },
|
||||
{ "name": "Striber langt hår", "duration": 180, "price": 1865 },
|
||||
{ "name": "Striber på toppen/ overhår", "duration": 90, "price": 1065 },
|
||||
{ "name": "Striber babylights tæt lysning mellemlangt hår", "duration": 180, "price": 2650 },
|
||||
{ "name": "Striber babylights tæt lysning langt hår", "duration": 180, "price": 2850 },
|
||||
{ "name": "Striber babylights tæt lysning på toppen", "duration": 120, "price": 1650 },
|
||||
{ "name": "AirTouch skulderlangt hår", "duration": 210, "price": 3250 },
|
||||
{ "name": "AirTouch langt hår", "duration": 240, "price": 3850 }
|
||||
],
|
||||
|
||||
"Hårvask med styling eller uden styling": [
|
||||
{ "name": "Hårvask uden styling", "duration": 30, "price": 265 },
|
||||
{ "name": "Hårvask med styling (kun føn)", "duration": 40, "price": 450 },
|
||||
{ "name": "Vask + Styling med varme glatning/krøller (mellemlangt/langt)", "duration": 60, "price": 650 }
|
||||
],
|
||||
|
||||
"Henna naturlig hårfarver": [
|
||||
{ "name": "Henna kort hår", "duration": 90, "price": 965 },
|
||||
{ "name": "Henna mellemlangt/langt hår", "duration": 90, "price": 1265 },
|
||||
{ "name": "Henna bundfarve", "duration": 90, "price": 750 }
|
||||
],
|
||||
|
||||
"Kurbehandling": [
|
||||
{ "name": "Olaplex Stand alone", "duration": 60, "price": 550 },
|
||||
{ "name": "Kurbehandling fugt/protein", "duration": 40, "price": 365 }
|
||||
],
|
||||
|
||||
"Bryn og vipper": [
|
||||
{ "name": "Farvning vipper & bryn", "duration": 30, "price": 345 },
|
||||
{ "name": "Farvning vipper", "duration": 20, "price": 185 },
|
||||
{ "name": "Farvning og retning af bryn", "duration": 20, "price": 185 },
|
||||
{ "name": "Retning af bryn", "duration": 10, "price": 100 }
|
||||
],
|
||||
|
||||
"Balayage": [
|
||||
{ "name": "Balayage maks til skulderen", "duration": 150, "price": 1850 },
|
||||
{ "name": "Balayage maks skulder + gloss/toning", "duration": 180, "price": 2250 },
|
||||
{ "name": "Balayage langt hår", "duration": 150, "price": 2150 },
|
||||
{ "name": "Balayage langt hår + gloss/toning", "duration": 180, "price": 2550 }
|
||||
],
|
||||
|
||||
"Skæg": [
|
||||
{ "name": "Skægtrim", "duration": 20, "price": 300 }
|
||||
],
|
||||
|
||||
"Gloss": [
|
||||
{ "name": "Gloss ekstra langt/tykt hår", "duration": 75, "price": 900 },
|
||||
{ "name": "Glossing kort hår", "duration": 60, "price": 685 },
|
||||
{ "name": "Glossing mellemlangt/ langt hår", "duration": 60, "price": 745 },
|
||||
{ "name": "Glossing mænd", "duration": 40, "price": 350 },
|
||||
{ "name": "Gloss ifb. anden farvebehandling", "duration": 20, "price": 450 },
|
||||
{ "name": "Gloss ifb. anden farvebehandling", "duration": 30, "price": 450 }
|
||||
],
|
||||
|
||||
"Håropsætning": [
|
||||
{ "name": "Håropsætning kort hår", "duration": 60, "price": 850 },
|
||||
{ "name": "Håropsætning langt hår", "duration": 60, "price": 1450 },
|
||||
{ "name": "Håropsætning Brud/brudepiger/Galla/Oscar", "duration": 90, "price": 1599 },
|
||||
{ "name": "Make-up Special Brud/Galla mm", "duration": 90, "price": 3000 }
|
||||
],
|
||||
|
||||
"Modeller": [
|
||||
{ "name": "Dameklip Model", "duration": 60, "price": 0 },
|
||||
{ "name": "Herreklip Model", "duration": 60, "price": 0 },
|
||||
{ "name": "Balayage Model", "duration": 240, "price": 0 },
|
||||
{ "name": "Striber Model", "duration": 180, "price": 0 },
|
||||
{ "name": "Bryn & Vippe Model", "duration": 40, "price": 0 },
|
||||
{ "name": "Bundfarve Model", "duration": 120, "price": 0 },
|
||||
{ "name": "Gloss", "duration": 30, "price": 0 }
|
||||
],
|
||||
|
||||
"Tristan farve modeller": [
|
||||
{ "name": "Bundfarve med HP/HPF", "duration": 90, "price": 325 },
|
||||
{ "name": "Striber Model", "duration": 240, "price": 400 }
|
||||
],
|
||||
|
||||
"Uden kategori": [
|
||||
{ "name": "P-afgift", "duration": 0, "price": -25 },
|
||||
{ "name": "Børneklip 9-12 år", "duration": 60, "price": 450 }
|
||||
],
|
||||
|
||||
"Tilvalg services": [
|
||||
{ "name": "Touch up kur", "duration": 15, "price": 175 },
|
||||
{ "name": "Root shading", "duration": 30, "price": 425 },
|
||||
{ "name": "Styling med varme (efter behandling)", "duration": 60, "price": 475 },
|
||||
{ "name": "Styling kort hår (efter farve)", "duration": 20, "price": 175 },
|
||||
{ "name": "Olaplex efter afblegning", "duration": 10, "price": 325 },
|
||||
{ "name": "Let afrensning af gloss/klor/kemi", "duration": 20, "price": 220 },
|
||||
{ "name": "Forpigmentering", "duration": 20, "price": 300 },
|
||||
{ "name": "Knække bund ifb. farvebehandling", "duration": 20, "price": 400 },
|
||||
{ "name": "Olaplex i farve", "duration": 10, "price": 230 },
|
||||
{ "name": "Metal DX intens kur redken gloss", "duration": 20, "price": 225 }
|
||||
]
|
||||
}
|
||||
514
.workbench/POC/data/mock-bookings.json
Normal file
514
.workbench/POC/data/mock-bookings.json
Normal file
|
|
@ -0,0 +1,514 @@
|
|||
[
|
||||
{
|
||||
"id": "BOOK001",
|
||||
"customerId": "CUST001",
|
||||
"status": "arrived",
|
||||
"createdAt": "2025-08-05T08:00:00Z",
|
||||
"services": [
|
||||
{
|
||||
"serviceId": "SRV001",
|
||||
"serviceName": "Klipning og styling",
|
||||
"baseDuration": 60,
|
||||
"basePrice": 500,
|
||||
"customPrice": 500,
|
||||
"resourceId": "EMP001"
|
||||
}
|
||||
],
|
||||
"totalPrice": 500,
|
||||
"notes": "Kunde ønsker lidt kortere"
|
||||
},
|
||||
{
|
||||
"id": "BOOK002",
|
||||
"customerId": "CUST002",
|
||||
"status": "paid",
|
||||
"createdAt": "2025-08-05T09:00:00Z",
|
||||
"services": [
|
||||
{
|
||||
"serviceId": "SRV002",
|
||||
"serviceName": "Hårvask",
|
||||
"baseDuration": 30,
|
||||
"basePrice": 100,
|
||||
"customPrice": 100,
|
||||
"resourceId": "STUDENT001"
|
||||
},
|
||||
{
|
||||
"serviceId": "SRV003",
|
||||
"serviceName": "Bundfarve",
|
||||
"baseDuration": 90,
|
||||
"basePrice": 800,
|
||||
"customPrice": 800,
|
||||
"resourceId": "EMP001"
|
||||
}
|
||||
],
|
||||
"totalPrice": 900,
|
||||
"notes": "Split booking: Elev laver hårvask, master laver farve"
|
||||
},
|
||||
{
|
||||
"id": "BOOK003",
|
||||
"customerId": "CUST003",
|
||||
"status": "created",
|
||||
"createdAt": "2025-08-05T07:00:00Z",
|
||||
"services": [
|
||||
{
|
||||
"serviceId": "SRV004A",
|
||||
"serviceName": "Bryllupsfrisure - Del 1",
|
||||
"baseDuration": 60,
|
||||
"basePrice": 750,
|
||||
"customPrice": 750,
|
||||
"resourceId": "EMP001"
|
||||
},
|
||||
{
|
||||
"serviceId": "SRV004B",
|
||||
"serviceName": "Bryllupsfrisure - Del 2",
|
||||
"baseDuration": 60,
|
||||
"basePrice": 750,
|
||||
"customPrice": 750,
|
||||
"resourceId": "EMP002"
|
||||
}
|
||||
],
|
||||
"totalPrice": 1500,
|
||||
"notes": "Equal-split: To master stylister arbejder sammen"
|
||||
},
|
||||
{
|
||||
"id": "BOOK004",
|
||||
"customerId": "CUST004",
|
||||
"status": "arrived",
|
||||
"createdAt": "2025-08-05T10:00:00Z",
|
||||
"services": [
|
||||
{
|
||||
"serviceId": "SRV005",
|
||||
"serviceName": "Herreklipning",
|
||||
"baseDuration": 30,
|
||||
"basePrice": 350,
|
||||
"customPrice": 350,
|
||||
"resourceId": "EMP003"
|
||||
}
|
||||
],
|
||||
"totalPrice": 350
|
||||
},
|
||||
{
|
||||
"id": "BOOK005",
|
||||
"customerId": "CUST005",
|
||||
"status": "paid",
|
||||
"createdAt": "2025-08-05T11:00:00Z",
|
||||
"services": [
|
||||
{
|
||||
"serviceId": "SRV006",
|
||||
"serviceName": "Balayage langt hår",
|
||||
"baseDuration": 120,
|
||||
"basePrice": 1200,
|
||||
"customPrice": 1200,
|
||||
"resourceId": "EMP002"
|
||||
}
|
||||
],
|
||||
"totalPrice": 1200,
|
||||
"notes": "Kunde ønsker naturlig blond tone"
|
||||
},
|
||||
{
|
||||
"id": "BOOK006",
|
||||
"customerId": "CUST006",
|
||||
"status": "created",
|
||||
"createdAt": "2025-08-06T08:00:00Z",
|
||||
"services": [
|
||||
{
|
||||
"serviceId": "SRV007",
|
||||
"serviceName": "Permanent",
|
||||
"baseDuration": 90,
|
||||
"basePrice": 900,
|
||||
"customPrice": 900,
|
||||
"resourceId": "EMP004"
|
||||
}
|
||||
],
|
||||
"totalPrice": 900
|
||||
},
|
||||
{
|
||||
"id": "BOOK007",
|
||||
"customerId": "CUST007",
|
||||
"status": "arrived",
|
||||
"createdAt": "2025-08-06T09:00:00Z",
|
||||
"services": [
|
||||
{
|
||||
"serviceId": "SRV008",
|
||||
"serviceName": "Highlights",
|
||||
"baseDuration": 90,
|
||||
"basePrice": 850,
|
||||
"customPrice": 850,
|
||||
"resourceId": "EMP001"
|
||||
},
|
||||
{
|
||||
"serviceId": "SRV009",
|
||||
"serviceName": "Styling",
|
||||
"baseDuration": 30,
|
||||
"basePrice": 200,
|
||||
"customPrice": 200,
|
||||
"resourceId": "EMP001"
|
||||
}
|
||||
],
|
||||
"totalPrice": 1050,
|
||||
"notes": "Highlights + styling samme stylist"
|
||||
},
|
||||
{
|
||||
"id": "BOOK008",
|
||||
"customerId": "CUST008",
|
||||
"status": "paid",
|
||||
"createdAt": "2025-08-06T10:00:00Z",
|
||||
"services": [
|
||||
{
|
||||
"serviceId": "SRV010",
|
||||
"serviceName": "Klipning",
|
||||
"baseDuration": 45,
|
||||
"basePrice": 450,
|
||||
"customPrice": 450,
|
||||
"resourceId": "EMP004"
|
||||
}
|
||||
],
|
||||
"totalPrice": 450
|
||||
},
|
||||
{
|
||||
"id": "BOOK009",
|
||||
"customerId": "CUST001",
|
||||
"status": "created",
|
||||
"createdAt": "2025-08-07T08:00:00Z",
|
||||
"services": [
|
||||
{
|
||||
"serviceId": "SRV011",
|
||||
"serviceName": "Farve behandling",
|
||||
"baseDuration": 120,
|
||||
"basePrice": 950,
|
||||
"customPrice": 950,
|
||||
"resourceId": "EMP002"
|
||||
}
|
||||
],
|
||||
"totalPrice": 950
|
||||
},
|
||||
{
|
||||
"id": "BOOK010",
|
||||
"customerId": "CUST002",
|
||||
"status": "arrived",
|
||||
"createdAt": "2025-08-07T09:00:00Z",
|
||||
"services": [
|
||||
{
|
||||
"serviceId": "SRV012",
|
||||
"serviceName": "Skæg trimning",
|
||||
"baseDuration": 20,
|
||||
"basePrice": 200,
|
||||
"customPrice": 200,
|
||||
"resourceId": "EMP003"
|
||||
}
|
||||
],
|
||||
"totalPrice": 200
|
||||
},
|
||||
{
|
||||
"id": "BOOK011",
|
||||
"customerId": "CUST003",
|
||||
"status": "paid",
|
||||
"createdAt": "2025-08-07T10:00:00Z",
|
||||
"services": [
|
||||
{
|
||||
"serviceId": "SRV002",
|
||||
"serviceName": "Hårvask",
|
||||
"baseDuration": 30,
|
||||
"basePrice": 100,
|
||||
"customPrice": 100,
|
||||
"resourceId": "STUDENT002"
|
||||
},
|
||||
{
|
||||
"serviceId": "SRV013",
|
||||
"serviceName": "Ombré",
|
||||
"baseDuration": 100,
|
||||
"basePrice": 1100,
|
||||
"customPrice": 1100,
|
||||
"resourceId": "EMP002"
|
||||
}
|
||||
],
|
||||
"totalPrice": 1200,
|
||||
"notes": "Split booking: Student hårvask, master ombré"
|
||||
},
|
||||
{
|
||||
"id": "BOOK012",
|
||||
"customerId": "CUST004",
|
||||
"status": "created",
|
||||
"createdAt": "2025-08-08T08:00:00Z",
|
||||
"services": [
|
||||
{
|
||||
"serviceId": "SRV014",
|
||||
"serviceName": "Føntørring",
|
||||
"baseDuration": 30,
|
||||
"basePrice": 250,
|
||||
"customPrice": 250,
|
||||
"resourceId": "STUDENT001"
|
||||
}
|
||||
],
|
||||
"totalPrice": 250
|
||||
},
|
||||
{
|
||||
"id": "BOOK013",
|
||||
"customerId": "CUST005",
|
||||
"status": "arrived",
|
||||
"createdAt": "2025-08-08T09:00:00Z",
|
||||
"services": [
|
||||
{
|
||||
"serviceId": "SRV015",
|
||||
"serviceName": "Opsætning",
|
||||
"baseDuration": 60,
|
||||
"basePrice": 700,
|
||||
"customPrice": 700,
|
||||
"resourceId": "EMP004"
|
||||
}
|
||||
],
|
||||
"totalPrice": 700,
|
||||
"notes": "Fest opsætning"
|
||||
},
|
||||
{
|
||||
"id": "BOOK014",
|
||||
"customerId": "CUST006",
|
||||
"status": "created",
|
||||
"createdAt": "2025-08-09T08:00:00Z",
|
||||
"services": [
|
||||
{
|
||||
"serviceId": "SRV016A",
|
||||
"serviceName": "Ekstensions - Del 1",
|
||||
"baseDuration": 90,
|
||||
"basePrice": 1250,
|
||||
"customPrice": 1250,
|
||||
"resourceId": "EMP001"
|
||||
},
|
||||
{
|
||||
"serviceId": "SRV016B",
|
||||
"serviceName": "Ekstensions - Del 2",
|
||||
"baseDuration": 90,
|
||||
"basePrice": 1250,
|
||||
"customPrice": 1250,
|
||||
"resourceId": "EMP004"
|
||||
}
|
||||
],
|
||||
"totalPrice": 2500,
|
||||
"notes": "Equal-split: To stylister arbejder sammen om extensions"
|
||||
},
|
||||
{
|
||||
"id": "BOOK015",
|
||||
"customerId": "CUST007",
|
||||
"status": "noshow",
|
||||
"createdAt": "2025-08-09T09:00:00Z",
|
||||
"services": [
|
||||
{
|
||||
"serviceId": "SRV001",
|
||||
"serviceName": "Klipning og styling",
|
||||
"baseDuration": 60,
|
||||
"basePrice": 500,
|
||||
"customPrice": 500,
|
||||
"resourceId": "EMP002"
|
||||
}
|
||||
],
|
||||
"totalPrice": 500,
|
||||
"notes": "Kunde mødte ikke op"
|
||||
},
|
||||
{
|
||||
"id": "BOOK-NOV22-001",
|
||||
"customerId": "CUST001",
|
||||
"status": "arrived",
|
||||
"createdAt": "2025-11-20T10:00:00Z",
|
||||
"services": [
|
||||
{ "serviceId": "SRV-WASH", "serviceName": "Hårvask", "baseDuration": 30, "basePrice": 100, "resourceId": "STUDENT001" },
|
||||
{ "serviceId": "SRV-BAL", "serviceName": "Balayage", "baseDuration": 90, "basePrice": 1200, "resourceId": "EMP001" }
|
||||
],
|
||||
"totalPrice": 1300,
|
||||
"notes": "Split: Elev vasker, Camilla farver"
|
||||
},
|
||||
{
|
||||
"id": "BOOK-NOV22-002",
|
||||
"customerId": "CUST002",
|
||||
"status": "arrived",
|
||||
"createdAt": "2025-11-20T11:00:00Z",
|
||||
"services": [
|
||||
{ "serviceId": "SRV-HERREKLIP", "serviceName": "Herreklipning", "baseDuration": 30, "basePrice": 350, "resourceId": "EMP003" }
|
||||
],
|
||||
"totalPrice": 350
|
||||
},
|
||||
{
|
||||
"id": "BOOK-NOV22-003",
|
||||
"customerId": "CUST003",
|
||||
"status": "created",
|
||||
"createdAt": "2025-11-20T12:00:00Z",
|
||||
"services": [
|
||||
{ "serviceId": "SRV-FARVE", "serviceName": "Farvning", "baseDuration": 120, "basePrice": 900, "resourceId": "EMP002" }
|
||||
],
|
||||
"totalPrice": 900
|
||||
},
|
||||
{
|
||||
"id": "BOOK-NOV22-004",
|
||||
"customerId": "CUST004",
|
||||
"status": "arrived",
|
||||
"createdAt": "2025-11-20T13:00:00Z",
|
||||
"services": [
|
||||
{ "serviceId": "SRV-KLIP", "serviceName": "Dameklipning", "baseDuration": 60, "basePrice": 450, "resourceId": "EMP004" }
|
||||
],
|
||||
"totalPrice": 450
|
||||
},
|
||||
{
|
||||
"id": "BOOK-NOV22-005",
|
||||
"customerId": "CUST005",
|
||||
"status": "created",
|
||||
"createdAt": "2025-11-20T14:00:00Z",
|
||||
"services": [
|
||||
{ "serviceId": "SRV-STYLE", "serviceName": "Styling", "baseDuration": 60, "basePrice": 400, "resourceId": "EMP001" }
|
||||
],
|
||||
"totalPrice": 400
|
||||
},
|
||||
{
|
||||
"id": "BOOK-NOV23-001",
|
||||
"customerId": "CUST006",
|
||||
"status": "created",
|
||||
"createdAt": "2025-11-21T09:00:00Z",
|
||||
"services": [
|
||||
{ "serviceId": "SRV-PERM", "serviceName": "Permanent", "baseDuration": 150, "basePrice": 1100, "resourceId": "EMP002" }
|
||||
],
|
||||
"totalPrice": 1100
|
||||
},
|
||||
{
|
||||
"id": "BOOK-NOV23-002",
|
||||
"customerId": "CUST007",
|
||||
"status": "created",
|
||||
"createdAt": "2025-11-21T10:00:00Z",
|
||||
"services": [
|
||||
{ "serviceId": "SRV-SKAEG", "serviceName": "Skæg trimning", "baseDuration": 30, "basePrice": 200, "resourceId": "EMP003" }
|
||||
],
|
||||
"totalPrice": 200
|
||||
},
|
||||
{
|
||||
"id": "BOOK-NOV23-003",
|
||||
"customerId": "CUST008",
|
||||
"status": "created",
|
||||
"createdAt": "2025-11-21T11:00:00Z",
|
||||
"services": [
|
||||
{ "serviceId": "SRV-WASH", "serviceName": "Hårvask", "baseDuration": 30, "basePrice": 100, "resourceId": "STUDENT002" },
|
||||
{ "serviceId": "SRV-HIGH", "serviceName": "Highlights", "baseDuration": 120, "basePrice": 1000, "resourceId": "EMP001" }
|
||||
],
|
||||
"totalPrice": 1100,
|
||||
"notes": "Split: Elev vasker, Camilla laver highlights"
|
||||
},
|
||||
{
|
||||
"id": "BOOK-NOV24-001",
|
||||
"customerId": "CUST001",
|
||||
"status": "created",
|
||||
"createdAt": "2025-11-22T08:00:00Z",
|
||||
"services": [
|
||||
{ "serviceId": "SRV-BRYLLUP1", "serviceName": "Bryllupsfrisure Del 1", "baseDuration": 60, "basePrice": 750, "resourceId": "EMP001" },
|
||||
{ "serviceId": "SRV-BRYLLUP2", "serviceName": "Bryllupsfrisure Del 2", "baseDuration": 60, "basePrice": 750, "resourceId": "EMP002" }
|
||||
],
|
||||
"totalPrice": 1500,
|
||||
"notes": "Equal split: Camilla og Isabella arbejder sammen"
|
||||
},
|
||||
{
|
||||
"id": "BOOK-NOV24-002",
|
||||
"customerId": "CUST002",
|
||||
"status": "created",
|
||||
"createdAt": "2025-11-22T09:00:00Z",
|
||||
"services": [
|
||||
{ "serviceId": "SRV-FADE", "serviceName": "Fade klipning", "baseDuration": 45, "basePrice": 400, "resourceId": "EMP003" }
|
||||
],
|
||||
"totalPrice": 400
|
||||
},
|
||||
{
|
||||
"id": "BOOK-NOV24-003",
|
||||
"customerId": "CUST003",
|
||||
"status": "created",
|
||||
"createdAt": "2025-11-22T10:00:00Z",
|
||||
"services": [
|
||||
{ "serviceId": "SRV-KLIPVASK", "serviceName": "Klipning og vask", "baseDuration": 60, "basePrice": 500, "resourceId": "EMP004" }
|
||||
],
|
||||
"totalPrice": 500
|
||||
},
|
||||
{
|
||||
"id": "BOOK-NOV25-001",
|
||||
"customerId": "CUST004",
|
||||
"status": "created",
|
||||
"createdAt": "2025-11-23T08:00:00Z",
|
||||
"services": [
|
||||
{ "serviceId": "SRV-BALKORT", "serviceName": "Balayage kort hår", "baseDuration": 90, "basePrice": 900, "resourceId": "EMP001" }
|
||||
],
|
||||
"totalPrice": 900
|
||||
},
|
||||
{
|
||||
"id": "BOOK-NOV25-002",
|
||||
"customerId": "CUST005",
|
||||
"status": "created",
|
||||
"createdAt": "2025-11-23T09:00:00Z",
|
||||
"services": [
|
||||
{ "serviceId": "SRV-EXT", "serviceName": "Extensions", "baseDuration": 180, "basePrice": 2500, "resourceId": "EMP002" }
|
||||
],
|
||||
"totalPrice": 2500
|
||||
},
|
||||
{
|
||||
"id": "BOOK-NOV25-003",
|
||||
"customerId": "CUST006",
|
||||
"status": "created",
|
||||
"createdAt": "2025-11-23T10:00:00Z",
|
||||
"services": [
|
||||
{ "serviceId": "SRV-HERRESKAEG", "serviceName": "Herreklipning + skæg", "baseDuration": 60, "basePrice": 500, "resourceId": "EMP003" }
|
||||
],
|
||||
"totalPrice": 500
|
||||
},
|
||||
{
|
||||
"id": "BOOK-NOV26-001",
|
||||
"customerId": "CUST007",
|
||||
"status": "created",
|
||||
"createdAt": "2025-11-24T08:00:00Z",
|
||||
"services": [
|
||||
{ "serviceId": "SRV-FARVKOR", "serviceName": "Farvekorrektion", "baseDuration": 180, "basePrice": 1800, "resourceId": "EMP001" }
|
||||
],
|
||||
"totalPrice": 1800
|
||||
},
|
||||
{
|
||||
"id": "BOOK-NOV26-002",
|
||||
"customerId": "CUST008",
|
||||
"status": "created",
|
||||
"createdAt": "2025-11-24T09:00:00Z",
|
||||
"services": [
|
||||
{ "serviceId": "SRV-KERATIN", "serviceName": "Keratinbehandling", "baseDuration": 150, "basePrice": 1400, "resourceId": "EMP002" }
|
||||
],
|
||||
"totalPrice": 1400
|
||||
},
|
||||
{
|
||||
"id": "BOOK-NOV26-003",
|
||||
"customerId": "CUST001",
|
||||
"status": "created",
|
||||
"createdAt": "2025-11-24T10:00:00Z",
|
||||
"services": [
|
||||
{ "serviceId": "SRV-SKINFADE", "serviceName": "Skin fade", "baseDuration": 45, "basePrice": 450, "resourceId": "EMP003" }
|
||||
],
|
||||
"totalPrice": 450
|
||||
},
|
||||
{
|
||||
"id": "BOOK-NOV27-001",
|
||||
"customerId": "CUST002",
|
||||
"status": "created",
|
||||
"createdAt": "2025-11-25T08:00:00Z",
|
||||
"services": [
|
||||
{ "serviceId": "SRV-FULLCOLOR", "serviceName": "Full color", "baseDuration": 120, "basePrice": 1000, "resourceId": "EMP001" }
|
||||
],
|
||||
"totalPrice": 1000
|
||||
},
|
||||
{
|
||||
"id": "BOOK-NOV27-002",
|
||||
"customerId": "CUST003",
|
||||
"status": "created",
|
||||
"createdAt": "2025-11-25T09:00:00Z",
|
||||
"services": [
|
||||
{ "serviceId": "SRV-WASH", "serviceName": "Hårvask", "baseDuration": 30, "basePrice": 100, "resourceId": "STUDENT001" },
|
||||
{ "serviceId": "SRV-BABY", "serviceName": "Babylights", "baseDuration": 180, "basePrice": 1500, "resourceId": "EMP002" }
|
||||
],
|
||||
"totalPrice": 1600,
|
||||
"notes": "Split: Elev vasker, Isabella laver babylights"
|
||||
},
|
||||
{
|
||||
"id": "BOOK-NOV27-003",
|
||||
"customerId": "CUST004",
|
||||
"status": "created",
|
||||
"createdAt": "2025-11-25T10:00:00Z",
|
||||
"services": [
|
||||
{ "serviceId": "SRV-KLASSISK", "serviceName": "Klassisk herreklip", "baseDuration": 30, "basePrice": 300, "resourceId": "EMP003" }
|
||||
],
|
||||
"totalPrice": 300
|
||||
}
|
||||
]
|
||||
49
.workbench/POC/data/mock-customers.json
Normal file
49
.workbench/POC/data/mock-customers.json
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
[
|
||||
{
|
||||
"id": "CUST001",
|
||||
"name": "Sofie Nielsen",
|
||||
"phone": "+45 23 45 67 89",
|
||||
"email": "sofie.nielsen@email.dk"
|
||||
},
|
||||
{
|
||||
"id": "CUST002",
|
||||
"name": "Emma Andersen",
|
||||
"phone": "+45 31 24 56 78",
|
||||
"email": "emma.andersen@email.dk"
|
||||
},
|
||||
{
|
||||
"id": "CUST003",
|
||||
"name": "Freja Christensen",
|
||||
"phone": "+45 42 67 89 12",
|
||||
"email": "freja.christensen@email.dk"
|
||||
},
|
||||
{
|
||||
"id": "CUST004",
|
||||
"name": "Laura Pedersen",
|
||||
"phone": "+45 51 98 76 54"
|
||||
},
|
||||
{
|
||||
"id": "CUST005",
|
||||
"name": "Ida Larsen",
|
||||
"phone": "+45 29 87 65 43",
|
||||
"email": "ida.larsen@email.dk"
|
||||
},
|
||||
{
|
||||
"id": "CUST006",
|
||||
"name": "Caroline Jensen",
|
||||
"phone": "+45 38 76 54 32",
|
||||
"email": "caroline.jensen@email.dk"
|
||||
},
|
||||
{
|
||||
"id": "CUST007",
|
||||
"name": "Mathilde Hansen",
|
||||
"phone": "+45 47 65 43 21",
|
||||
"email": "mathilde.hansen@email.dk"
|
||||
},
|
||||
{
|
||||
"id": "CUST008",
|
||||
"name": "Olivia Sørensen",
|
||||
"phone": "+45 56 54 32 10",
|
||||
"email": "olivia.sorensen@email.dk"
|
||||
}
|
||||
]
|
||||
14
.workbench/POC/data/mock-departments.json
Normal file
14
.workbench/POC/data/mock-departments.json
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
[
|
||||
{
|
||||
"id": "dept-styling",
|
||||
"name": "Styling",
|
||||
"resourceIds": ["EMP001", "EMP002", "EMP003"],
|
||||
"syncStatus": "synced"
|
||||
},
|
||||
{
|
||||
"id": "dept-training",
|
||||
"name": "Training",
|
||||
"resourceIds": ["EMP004", "STUDENT001", "STUDENT002"],
|
||||
"syncStatus": "synced"
|
||||
}
|
||||
]
|
||||
669
.workbench/POC/data/mock-events.json
Normal file
669
.workbench/POC/data/mock-events.json
Normal file
|
|
@ -0,0 +1,669 @@
|
|||
[
|
||||
{
|
||||
"id": "EVT-NOV24-001",
|
||||
"title": "Herreklipning",
|
||||
"start": "2025-11-24T09:00:00",
|
||||
"end": "2025-11-24T09:30:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-N01",
|
||||
"resourceId": "EMP001",
|
||||
"customerId": "CUST001",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "blue" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-NOV24-002",
|
||||
"title": "Balayage",
|
||||
"start": "2025-11-24T10:00:00",
|
||||
"end": "2025-11-24T12:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-N02",
|
||||
"resourceId": "EMP002",
|
||||
"customerId": "CUST002",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "purple" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-NOV24-003",
|
||||
"title": "Klipning dame",
|
||||
"start": "2025-11-24T14:00:00",
|
||||
"end": "2025-11-24T15:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-N03",
|
||||
"resourceId": "EMP003",
|
||||
"customerId": "CUST003",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "teal" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-NOV25-001",
|
||||
"title": "Farve behandling",
|
||||
"start": "2025-11-25T09:00:00",
|
||||
"end": "2025-11-25T11:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-N04",
|
||||
"resourceId": "EMP001",
|
||||
"customerId": "CUST004",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "orange" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-NOV25-002",
|
||||
"title": "Permanent",
|
||||
"start": "2025-11-25T12:00:00",
|
||||
"end": "2025-11-25T14:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-N05",
|
||||
"resourceId": "EMP004",
|
||||
"customerId": "CUST005",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "indigo" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-NOV26-001",
|
||||
"title": "Highlights",
|
||||
"start": "2025-11-26T10:00:00",
|
||||
"end": "2025-11-26T12:30:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-N06",
|
||||
"resourceId": "EMP002",
|
||||
"customerId": "CUST006",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "lime" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-NOV26-002",
|
||||
"title": "Børneklip",
|
||||
"start": "2025-11-26T14:00:00",
|
||||
"end": "2025-11-26T14:30:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-N07",
|
||||
"resourceId": "EMP003",
|
||||
"customerId": "CUST007",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "cyan" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-NOV27-001",
|
||||
"title": "Olaplex behandling",
|
||||
"start": "2025-11-27T09:00:00",
|
||||
"end": "2025-11-27T10:30:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-N08",
|
||||
"resourceId": "EMP005",
|
||||
"customerId": "CUST008",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "pink" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-NOV27-002",
|
||||
"title": "Skæg trim",
|
||||
"start": "2025-11-27T11:00:00",
|
||||
"end": "2025-11-27T11:30:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-N09",
|
||||
"resourceId": "EMP001",
|
||||
"customerId": "CUST009",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "teal" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-NOV28-001",
|
||||
"title": "Extensions",
|
||||
"start": "2025-11-28T09:00:00",
|
||||
"end": "2025-11-28T12:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-N10",
|
||||
"resourceId": "EMP002",
|
||||
"customerId": "CUST010",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "deep-purple" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC01-001",
|
||||
"title": "Klipning og føn",
|
||||
"start": "2025-12-01T10:00:00",
|
||||
"end": "2025-12-01T11:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-N11",
|
||||
"resourceId": "EMP001",
|
||||
"customerId": "CUST011",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "blue" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC01-002",
|
||||
"title": "Farve korrektion",
|
||||
"start": "2025-12-01T13:00:00",
|
||||
"end": "2025-12-01T16:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-N12",
|
||||
"resourceId": "EMP004",
|
||||
"customerId": "CUST012",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "magenta" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC02-001",
|
||||
"title": "Bryllupsfrisure prøve",
|
||||
"start": "2025-12-02T09:00:00",
|
||||
"end": "2025-12-02T11:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-N13",
|
||||
"resourceId": "EMP002",
|
||||
"customerId": "CUST013",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "green" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC02-002",
|
||||
"title": "Herreklip express",
|
||||
"start": "2025-12-02T14:00:00",
|
||||
"end": "2025-12-02T14:30:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-N14",
|
||||
"resourceId": "EMP003",
|
||||
"customerId": "CUST014",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "amber" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC03-001",
|
||||
"title": "Keratin behandling",
|
||||
"start": "2025-12-03T10:00:00",
|
||||
"end": "2025-12-03T13:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-N15",
|
||||
"resourceId": "EMP005",
|
||||
"customerId": "CUST001",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "violet" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC03-002",
|
||||
"title": "Vask og styling",
|
||||
"start": "2025-12-03T15:00:00",
|
||||
"end": "2025-12-03T15:45:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-N16",
|
||||
"resourceId": "EMP001",
|
||||
"customerId": "CUST002",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "light-green" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC04-001",
|
||||
"title": "Balayage kort hår",
|
||||
"start": "2025-12-04T09:00:00",
|
||||
"end": "2025-12-04T10:30:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-N17",
|
||||
"resourceId": "EMP002",
|
||||
"customerId": "CUST003",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "purple" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC04-002",
|
||||
"title": "Ferie",
|
||||
"start": "2025-12-04T00:00:00",
|
||||
"end": "2025-12-05T23:59:59",
|
||||
"type": "vacation",
|
||||
"allDay": true,
|
||||
"resourceId": "EMP004",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "red" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC05-001",
|
||||
"title": "Dameklip langt hår",
|
||||
"start": "2025-12-05T11:00:00",
|
||||
"end": "2025-12-05T12:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-N18",
|
||||
"resourceId": "EMP003",
|
||||
"customerId": "CUST004",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "pink" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC05-002",
|
||||
"title": "Highlights delvis",
|
||||
"start": "2025-12-05T14:00:00",
|
||||
"end": "2025-12-05T15:30:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-N19",
|
||||
"resourceId": "EMP005",
|
||||
"customerId": "CUST005",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "lime" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC08-001",
|
||||
"title": "Balayage langt hår",
|
||||
"description": "Fuld balayage behandling",
|
||||
"start": "2025-12-08T10:00:00",
|
||||
"end": "2025-12-08T11:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-001",
|
||||
"resourceId": "EMP001",
|
||||
"customerId": "CUST001",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "purple" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC08-002",
|
||||
"title": "Klipning og styling",
|
||||
"description": "Dameklipning med føn",
|
||||
"start": "2025-12-08T14:00:00",
|
||||
"end": "2025-12-08T15:30:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-002",
|
||||
"resourceId": "EMP001",
|
||||
"customerId": "CUST002",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "pink" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC08-003",
|
||||
"title": "Permanent",
|
||||
"description": "Permanent med curler",
|
||||
"start": "2025-12-08T09:00:00",
|
||||
"end": "2025-12-08T11:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-003",
|
||||
"resourceId": "EMP002",
|
||||
"customerId": "CUST003",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "indigo" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC08-004",
|
||||
"title": "Farve behandling",
|
||||
"description": "Farve og pleje",
|
||||
"start": "2025-12-08T13:00:00",
|
||||
"end": "2025-12-08T15:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-004",
|
||||
"resourceId": "EMP002",
|
||||
"customerId": "CUST004",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "orange" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC09-001",
|
||||
"title": "Herreklipning",
|
||||
"description": "Klassisk herreklip",
|
||||
"start": "2025-12-09T11:00:00",
|
||||
"end": "2025-12-09T11:30:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-005",
|
||||
"resourceId": "EMP003",
|
||||
"customerId": "CUST005",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "teal" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC09-002",
|
||||
"title": "Kursus",
|
||||
"description": "Ekstern kursusdag",
|
||||
"start": "2025-12-09T00:00:00",
|
||||
"end": "2025-12-10T23:59:59",
|
||||
"type": "blocked",
|
||||
"allDay": true,
|
||||
"resourceId": "EMP003",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "cyan" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC09-003",
|
||||
"title": "Bryllupsfrisure",
|
||||
"description": "Bryllupsfrisure med prøve",
|
||||
"start": "2025-12-09T08:00:00",
|
||||
"end": "2025-12-09T10:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-007",
|
||||
"resourceId": "EMP004",
|
||||
"customerId": "CUST007",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "green" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC10-001",
|
||||
"title": "Highlights",
|
||||
"description": "Highlights med folie",
|
||||
"start": "2025-12-10T12:00:00",
|
||||
"end": "2025-12-10T14:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-008",
|
||||
"resourceId": "EMP005",
|
||||
"customerId": "CUST008",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "lime" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC10-002",
|
||||
"title": "Styling konsultation",
|
||||
"description": "Rådgivning om ny stil",
|
||||
"start": "2025-12-10T15:00:00",
|
||||
"end": "2025-12-10T15:30:00",
|
||||
"type": "meeting",
|
||||
"allDay": false,
|
||||
"resourceId": "EMP005",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "amber" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC10-003",
|
||||
"title": "Olaplex behandling",
|
||||
"description": "Fuld Olaplex kur",
|
||||
"start": "2025-12-10T09:00:00",
|
||||
"end": "2025-12-10T10:30:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-009",
|
||||
"resourceId": "EMP001",
|
||||
"customerId": "CUST009",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "blue" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC11-001",
|
||||
"title": "Extensions",
|
||||
"description": "Hair extensions påsætning",
|
||||
"start": "2025-12-11T09:00:00",
|
||||
"end": "2025-12-11T12:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-010",
|
||||
"resourceId": "EMP002",
|
||||
"customerId": "CUST010",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "deep-purple" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC11-002",
|
||||
"title": "Børneklip",
|
||||
"description": "Klipning af barn",
|
||||
"start": "2025-12-11T14:00:00",
|
||||
"end": "2025-12-11T14:30:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-011",
|
||||
"resourceId": "EMP003",
|
||||
"customerId": "CUST011",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "light-blue" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC11-003",
|
||||
"title": "Team møde",
|
||||
"description": "Morgen briefing",
|
||||
"start": "2025-12-11T08:00:00",
|
||||
"end": "2025-12-11T08:30:00",
|
||||
"type": "meeting",
|
||||
"allDay": false,
|
||||
"resourceId": "EMP001",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "red" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC12-001",
|
||||
"title": "Keratin behandling",
|
||||
"description": "Brasiliansk keratin",
|
||||
"start": "2025-12-12T10:00:00",
|
||||
"end": "2025-12-12T13:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-012",
|
||||
"resourceId": "EMP004",
|
||||
"customerId": "CUST012",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "violet" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC12-002",
|
||||
"title": "Vask og føn",
|
||||
"description": "Express service",
|
||||
"start": "2025-12-12T15:00:00",
|
||||
"end": "2025-12-12T15:45:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-013",
|
||||
"resourceId": "EMP005",
|
||||
"customerId": "CUST013",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "light-green" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC12-003",
|
||||
"title": "Farvekorrektion",
|
||||
"description": "Korrektion af tidligere farve",
|
||||
"start": "2025-12-12T09:00:00",
|
||||
"end": "2025-12-12T12:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-014",
|
||||
"resourceId": "EMP001",
|
||||
"customerId": "CUST014",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "magenta" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC15-001",
|
||||
"title": "Juleklipning",
|
||||
"start": "2025-12-15T09:00:00",
|
||||
"end": "2025-12-15T10:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-F01",
|
||||
"resourceId": "EMP001",
|
||||
"customerId": "CUST001",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "red" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC15-002",
|
||||
"title": "Balayage jul",
|
||||
"start": "2025-12-15T11:00:00",
|
||||
"end": "2025-12-15T13:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-F02",
|
||||
"resourceId": "EMP002",
|
||||
"customerId": "CUST002",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "purple" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC15-003",
|
||||
"title": "Herreklip",
|
||||
"start": "2025-12-15T14:00:00",
|
||||
"end": "2025-12-15T14:30:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-F03",
|
||||
"resourceId": "EMP003",
|
||||
"customerId": "CUST003",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "blue" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC16-001",
|
||||
"title": "Farve og klip",
|
||||
"start": "2025-12-16T10:00:00",
|
||||
"end": "2025-12-16T12:30:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-F04",
|
||||
"resourceId": "EMP004",
|
||||
"customerId": "CUST004",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "orange" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC16-002",
|
||||
"title": "Permanent",
|
||||
"start": "2025-12-16T13:00:00",
|
||||
"end": "2025-12-16T15:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-F05",
|
||||
"resourceId": "EMP005",
|
||||
"customerId": "CUST005",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "indigo" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC17-001",
|
||||
"title": "Julefrokost",
|
||||
"start": "2025-12-17T12:00:00",
|
||||
"end": "2025-12-17T14:00:00",
|
||||
"type": "meeting",
|
||||
"allDay": false,
|
||||
"resourceId": "EMP001",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "green" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC17-002",
|
||||
"title": "Extensions fjernelse",
|
||||
"start": "2025-12-17T09:00:00",
|
||||
"end": "2025-12-17T11:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-F06",
|
||||
"resourceId": "EMP002",
|
||||
"customerId": "CUST006",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "deep-purple" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC18-001",
|
||||
"title": "Highlights jul",
|
||||
"start": "2025-12-18T10:00:00",
|
||||
"end": "2025-12-18T12:30:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-F07",
|
||||
"resourceId": "EMP001",
|
||||
"customerId": "CUST007",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "lime" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC18-002",
|
||||
"title": "Børneklip jul",
|
||||
"start": "2025-12-18T14:00:00",
|
||||
"end": "2025-12-18T14:30:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-F08",
|
||||
"resourceId": "EMP003",
|
||||
"customerId": "CUST008",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "cyan" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC19-001",
|
||||
"title": "Festfrisure",
|
||||
"start": "2025-12-19T09:00:00",
|
||||
"end": "2025-12-19T10:30:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-F09",
|
||||
"resourceId": "EMP004",
|
||||
"customerId": "CUST009",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "pink" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC19-002",
|
||||
"title": "Julestyling",
|
||||
"start": "2025-12-19T11:00:00",
|
||||
"end": "2025-12-19T12:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-F10",
|
||||
"resourceId": "EMP005",
|
||||
"customerId": "CUST010",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "amber" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC19-003",
|
||||
"title": "Klipning og farve",
|
||||
"start": "2025-12-19T14:00:00",
|
||||
"end": "2025-12-19T16:30:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-F11",
|
||||
"resourceId": "EMP001",
|
||||
"customerId": "CUST011",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "violet" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC22-001",
|
||||
"title": "Sidste jul klip",
|
||||
"start": "2025-12-22T09:00:00",
|
||||
"end": "2025-12-22T10:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-F12",
|
||||
"resourceId": "EMP002",
|
||||
"customerId": "CUST012",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "red" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC22-002",
|
||||
"title": "Juleaften forberedelse",
|
||||
"start": "2025-12-22T11:00:00",
|
||||
"end": "2025-12-22T13:00:00",
|
||||
"type": "customer",
|
||||
"allDay": false,
|
||||
"bookingId": "BOOK-F13",
|
||||
"resourceId": "EMP003",
|
||||
"customerId": "CUST013",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "green" }
|
||||
},
|
||||
{
|
||||
"id": "EVT-DEC22-003",
|
||||
"title": "Juleferie start",
|
||||
"start": "2025-12-22T00:00:00",
|
||||
"end": "2025-12-27T23:59:59",
|
||||
"type": "vacation",
|
||||
"allDay": true,
|
||||
"resourceId": "EMP004",
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "color": "light-blue" }
|
||||
}
|
||||
]
|
||||
135
.workbench/POC/data/mock-resource-events.json
Normal file
135
.workbench/POC/data/mock-resource-events.json
Normal file
|
|
@ -0,0 +1,135 @@
|
|||
{
|
||||
"date": "2025-08-05",
|
||||
"resources": [
|
||||
{
|
||||
"name": "karina.knudsen",
|
||||
"displayName": "Karina Knudsen",
|
||||
"avatarUrl": "/avatars/karina.jpg",
|
||||
"employeeId": "EMP001",
|
||||
"events": [
|
||||
{
|
||||
"id": "1",
|
||||
"title": "Balayage langt hår",
|
||||
"start": "2025-08-05T10:00:00",
|
||||
"end": "2025-08-05T11:00:00",
|
||||
"type": "work",
|
||||
"allDay": false,
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "duration": 60, "color": "#9c27b0" }
|
||||
},
|
||||
{
|
||||
"id": "2",
|
||||
"title": "Klipning og styling",
|
||||
"start": "2025-08-05T14:00:00",
|
||||
"end": "2025-08-05T15:30:00",
|
||||
"type": "work",
|
||||
"allDay": false,
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "duration": 90, "color": "#e91e63" }
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "maria.hansen",
|
||||
"displayName": "Maria Hansen",
|
||||
"avatarUrl": "/avatars/maria.jpg",
|
||||
"employeeId": "EMP002",
|
||||
"events": [
|
||||
{
|
||||
"id": "3",
|
||||
"title": "Permanent",
|
||||
"start": "2025-08-05T09:00:00",
|
||||
"end": "2025-08-05T11:00:00",
|
||||
"type": "work",
|
||||
"allDay": false,
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "duration": 120, "color": "#3f51b5" }
|
||||
},
|
||||
{
|
||||
"id": "4",
|
||||
"title": "Farve behandling",
|
||||
"start": "2025-08-05T13:00:00",
|
||||
"end": "2025-08-05T15:00:00",
|
||||
"type": "work",
|
||||
"allDay": false,
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "duration": 120, "color": "#ff9800" }
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "lars.nielsen",
|
||||
"displayName": "Lars Nielsen",
|
||||
"avatarUrl": "/avatars/lars.jpg",
|
||||
"employeeId": "EMP003",
|
||||
"events": [
|
||||
{
|
||||
"id": "5",
|
||||
"title": "Herreklipning",
|
||||
"start": "2025-08-05T11:00:00",
|
||||
"end": "2025-08-05T11:30:00",
|
||||
"type": "work",
|
||||
"allDay": false,
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "duration": 30, "color": "#795548" }
|
||||
},
|
||||
{
|
||||
"id": "6",
|
||||
"title": "Skæg trimning",
|
||||
"start": "2025-08-05T16:00:00",
|
||||
"end": "2025-08-05T16:30:00",
|
||||
"type": "work",
|
||||
"allDay": false,
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "duration": 30, "color": "#607d8b" }
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "anna.petersen",
|
||||
"displayName": "Anna Petersen",
|
||||
"avatarUrl": "/avatars/anna.jpg",
|
||||
"employeeId": "EMP004",
|
||||
"events": [
|
||||
{
|
||||
"id": "7",
|
||||
"title": "Bryllupsfrisure",
|
||||
"start": "2025-08-05T08:00:00",
|
||||
"end": "2025-08-05T10:00:00",
|
||||
"type": "work",
|
||||
"allDay": false,
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "duration": 120, "color": "#009688" }
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "thomas.olsen",
|
||||
"displayName": "Thomas Olsen",
|
||||
"avatarUrl": "/avatars/thomas.jpg",
|
||||
"employeeId": "EMP005",
|
||||
"events": [
|
||||
{
|
||||
"id": "8",
|
||||
"title": "Highlights",
|
||||
"start": "2025-08-05T12:00:00",
|
||||
"end": "2025-08-05T14:00:00",
|
||||
"type": "work",
|
||||
"allDay": false,
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "duration": 120, "color": "#8bc34a" }
|
||||
},
|
||||
{
|
||||
"id": "9",
|
||||
"title": "Styling konsultation",
|
||||
"start": "2025-08-05T15:00:00",
|
||||
"end": "2025-08-05T15:30:00",
|
||||
"type": "meeting",
|
||||
"allDay": false,
|
||||
"syncStatus": "synced",
|
||||
"metadata": { "duration": 30, "color": "#cddc39" }
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
134
.workbench/POC/data/mock-resources.json
Normal file
134
.workbench/POC/data/mock-resources.json
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
[
|
||||
{
|
||||
"id": "EMP001",
|
||||
"name": "camilla.jensen",
|
||||
"displayName": "Camilla Jensen",
|
||||
"type": "person",
|
||||
"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"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "EMP002",
|
||||
"name": "isabella.hansen",
|
||||
"displayName": "Isabella Hansen",
|
||||
"type": "person",
|
||||
"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"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "EMP003",
|
||||
"name": "alexander.nielsen",
|
||||
"displayName": "Alexander Nielsen",
|
||||
"type": "person",
|
||||
"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"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "EMP004",
|
||||
"name": "viktor.andersen",
|
||||
"displayName": "Viktor Andersen",
|
||||
"type": "person",
|
||||
"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"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "STUDENT001",
|
||||
"name": "line.pedersen",
|
||||
"displayName": "Line Pedersen (Elev)",
|
||||
"type": "person",
|
||||
"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"]
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "STUDENT002",
|
||||
"name": "mads.larsen",
|
||||
"displayName": "Mads Larsen (Elev)",
|
||||
"type": "person",
|
||||
"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"]
|
||||
}
|
||||
}
|
||||
]
|
||||
14
.workbench/POC/data/mock-teams.json
Normal file
14
.workbench/POC/data/mock-teams.json
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
[
|
||||
{
|
||||
"id": "team1",
|
||||
"name": "Team Alpha",
|
||||
"resourceIds": ["EMP001", "EMP002"],
|
||||
"syncStatus": "synced"
|
||||
},
|
||||
{
|
||||
"id": "team2",
|
||||
"name": "Team Beta",
|
||||
"resourceIds": ["EMP003", "EMP004"],
|
||||
"syncStatus": "synced"
|
||||
}
|
||||
]
|
||||
69
.workbench/POC/data/tenant-settings.json
Normal file
69
.workbench/POC/data/tenant-settings.json
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
[
|
||||
{
|
||||
"id": "workweek",
|
||||
"syncStatus": "synced",
|
||||
"presets": {
|
||||
"standard": {
|
||||
"id": "standard",
|
||||
"workDays": [1, 2, 3, 4, 5],
|
||||
"label": "Man-Fre",
|
||||
"periodDays": 7
|
||||
},
|
||||
"compressed": {
|
||||
"id": "compressed",
|
||||
"workDays": [1, 2, 3],
|
||||
"label": "Man-Ons",
|
||||
"periodDays": 7
|
||||
},
|
||||
"midweek": {
|
||||
"id": "midweek",
|
||||
"workDays": [4, 5],
|
||||
"label": "Tors-Fre",
|
||||
"periodDays": 7
|
||||
},
|
||||
"weekend": {
|
||||
"id": "weekend",
|
||||
"workDays": [6, 7],
|
||||
"label": "Weekend",
|
||||
"periodDays": 7
|
||||
},
|
||||
"fullweek": {
|
||||
"id": "fullweek",
|
||||
"workDays": [1, 2, 3, 4, 5, 6, 7],
|
||||
"label": "Alle dage",
|
||||
"periodDays": 7
|
||||
},
|
||||
"day": {
|
||||
"id": "day",
|
||||
"workDays": [1],
|
||||
"label": "Dag",
|
||||
"periodDays": 1
|
||||
}
|
||||
},
|
||||
"defaultPreset": "standard",
|
||||
"firstDayOfWeek": 1
|
||||
},
|
||||
{
|
||||
"id": "grid",
|
||||
"syncStatus": "synced",
|
||||
"dayStartHour": 6,
|
||||
"dayEndHour": 22,
|
||||
"workStartHour": 8,
|
||||
"workEndHour": 17,
|
||||
"hourHeight": 80,
|
||||
"snapInterval": 15
|
||||
},
|
||||
{
|
||||
"id": "timeFormat",
|
||||
"syncStatus": "synced",
|
||||
"timezone": "Europe/Copenhagen",
|
||||
"locale": "da-DK",
|
||||
"use24HourFormat": true
|
||||
},
|
||||
{
|
||||
"id": "views",
|
||||
"syncStatus": "synced",
|
||||
"availableViews": ["simple", "resource", "team", "department"],
|
||||
"defaultView": "simple"
|
||||
}
|
||||
]
|
||||
45
.workbench/POC/data/viewconfigs.json
Normal file
45
.workbench/POC/data/viewconfigs.json
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
[
|
||||
{
|
||||
"id": "day",
|
||||
"groupings": [
|
||||
{ "type": "resource", "values": ["EMP001", "EMP002"], "idProperty": "resourceId" },
|
||||
{ "type": "date", "values": [], "idProperty": "date", "derivedFrom": "start", "hideHeader": true }
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "simple",
|
||||
"groupings": [
|
||||
{ "type": "date", "values": [], "idProperty": "date", "derivedFrom": "start" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "resource",
|
||||
"groupings": [
|
||||
{ "type": "resource", "values": ["EMP001", "EMP002"], "idProperty": "resourceId" },
|
||||
{ "type": "date", "values": [], "idProperty": "date", "derivedFrom": "start" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "team",
|
||||
"groupings": [
|
||||
{ "type": "team", "values": ["team1", "team2"] },
|
||||
{ "type": "resource", "values": ["EMP001", "EMP002", "EMP003", "EMP004"], "idProperty": "resourceId", "belongsTo": "team.resourceIds" },
|
||||
{ "type": "date", "values": [], "idProperty": "date", "derivedFrom": "start" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "department",
|
||||
"groupings": [
|
||||
{ "type": "department", "values": ["dept-styling", "dept-training"] },
|
||||
{ "type": "resource", "values": ["EMP001", "EMP002", "EMP003", "EMP004", "STUDENT001", "STUDENT002"], "idProperty": "resourceId", "belongsTo": "department.resourceIds" },
|
||||
{ "type": "date", "values": [], "idProperty": "date", "derivedFrom": "start" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "picker",
|
||||
"groupings": [
|
||||
{ "type": "resource", "values": ["EMP001", "EMP002", "EMP003", "EMP004"], "idProperty": "resourceId" },
|
||||
{ "type": "date", "values": [], "idProperty": "date", "derivedFrom": "start" }
|
||||
]
|
||||
}
|
||||
]
|
||||
Loading…
Add table
Add a link
Reference in a new issue