Updates IndexedDB database schema to version 2 Adds support for bookings, customers, and resources stores Includes new serialization methods for booking data Extends events store with additional indexes for improved querying
485 lines
12 KiB
JSON
485 lines
12 KiB
JSON
[
|
|
{
|
|
"id": "EVT001",
|
|
"title": "Sofie Nielsen - Klipning og styling",
|
|
"start": "2025-08-05T10:00:00Z",
|
|
"end": "2025-08-05T11:00:00Z",
|
|
"type": "customer",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"bookingId": "BOOK001",
|
|
"resourceId": "EMP001",
|
|
"customerId": "CUST001"
|
|
},
|
|
{
|
|
"id": "EVT002",
|
|
"title": "Emma Andersen - Hårvask",
|
|
"start": "2025-08-05T11:00:00Z",
|
|
"end": "2025-08-05T11:30:00Z",
|
|
"type": "customer",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"bookingId": "BOOK002",
|
|
"resourceId": "STUDENT001",
|
|
"customerId": "CUST002"
|
|
},
|
|
{
|
|
"id": "EVT003",
|
|
"title": "Emma Andersen - Bundfarve",
|
|
"start": "2025-08-05T11:30:00Z",
|
|
"end": "2025-08-05T13:00:00Z",
|
|
"type": "customer",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"bookingId": "BOOK002",
|
|
"resourceId": "EMP001",
|
|
"customerId": "CUST002"
|
|
},
|
|
{
|
|
"id": "EVT004",
|
|
"title": "Freja Christensen - Bryllupsfrisure (Camilla)",
|
|
"start": "2025-08-05T08:00:00Z",
|
|
"end": "2025-08-05T10:00:00Z",
|
|
"type": "customer",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"bookingId": "BOOK003",
|
|
"resourceId": "EMP001",
|
|
"customerId": "CUST003",
|
|
"metadata": {
|
|
"note": "To stylister arbejder sammen"
|
|
}
|
|
},
|
|
{
|
|
"id": "EVT005",
|
|
"title": "Freja Christensen - Bryllupsfrisure (Isabella)",
|
|
"start": "2025-08-05T08:00:00Z",
|
|
"end": "2025-08-05T10:00:00Z",
|
|
"type": "customer",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"bookingId": "BOOK003",
|
|
"resourceId": "EMP002",
|
|
"customerId": "CUST003",
|
|
"metadata": {
|
|
"note": "To stylister arbejder sammen"
|
|
}
|
|
},
|
|
{
|
|
"id": "EVT006",
|
|
"title": "Laura Pedersen - Herreklipning",
|
|
"start": "2025-08-05T11:00:00Z",
|
|
"end": "2025-08-05T11:30:00Z",
|
|
"type": "customer",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"bookingId": "BOOK004",
|
|
"resourceId": "EMP003",
|
|
"customerId": "CUST004"
|
|
},
|
|
{
|
|
"id": "EVT007",
|
|
"title": "Ida Larsen - Balayage langt hår",
|
|
"start": "2025-08-05T13:00:00Z",
|
|
"end": "2025-08-05T15:00:00Z",
|
|
"type": "customer",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"bookingId": "BOOK005",
|
|
"resourceId": "EMP002",
|
|
"customerId": "CUST005"
|
|
},
|
|
{
|
|
"id": "EVT008",
|
|
"title": "Frokostpause",
|
|
"start": "2025-08-05T12:00:00Z",
|
|
"end": "2025-08-05T12:30:00Z",
|
|
"type": "break",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"resourceId": "EMP003"
|
|
},
|
|
{
|
|
"id": "EVT009",
|
|
"title": "Caroline Jensen - Permanent",
|
|
"start": "2025-08-06T09:00:00Z",
|
|
"end": "2025-08-06T10:30:00Z",
|
|
"type": "customer",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"bookingId": "BOOK006",
|
|
"resourceId": "EMP004",
|
|
"customerId": "CUST006"
|
|
},
|
|
{
|
|
"id": "EVT010",
|
|
"title": "Mathilde Hansen - Highlights",
|
|
"start": "2025-08-06T10:00:00Z",
|
|
"end": "2025-08-06T11:30:00Z",
|
|
"type": "customer",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"bookingId": "BOOK007",
|
|
"resourceId": "EMP001",
|
|
"customerId": "CUST007"
|
|
},
|
|
{
|
|
"id": "EVT011",
|
|
"title": "Mathilde Hansen - Styling",
|
|
"start": "2025-08-06T11:30:00Z",
|
|
"end": "2025-08-06T12:00:00Z",
|
|
"type": "customer",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"bookingId": "BOOK007",
|
|
"resourceId": "EMP001",
|
|
"customerId": "CUST007"
|
|
},
|
|
{
|
|
"id": "EVT012",
|
|
"title": "Olivia Sørensen - Klipning",
|
|
"start": "2025-08-06T13:00:00Z",
|
|
"end": "2025-08-06T13:45:00Z",
|
|
"type": "customer",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"bookingId": "BOOK008",
|
|
"resourceId": "EMP004",
|
|
"customerId": "CUST008"
|
|
},
|
|
{
|
|
"id": "EVT013",
|
|
"title": "Team møde - Salgsmål",
|
|
"start": "2025-08-06T08:00:00Z",
|
|
"end": "2025-08-06T08:30:00Z",
|
|
"type": "meeting",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"resourceId": "EMP001",
|
|
"metadata": {
|
|
"attendees": ["EMP001", "EMP002", "EMP003", "EMP004"]
|
|
}
|
|
},
|
|
{
|
|
"id": "EVT014",
|
|
"title": "Frokostpause",
|
|
"start": "2025-08-06T12:00:00Z",
|
|
"end": "2025-08-06T12:30:00Z",
|
|
"type": "break",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"resourceId": "EMP002"
|
|
},
|
|
{
|
|
"id": "EVT015",
|
|
"title": "Sofie Nielsen - Farve behandling",
|
|
"start": "2025-08-07T10:00:00Z",
|
|
"end": "2025-08-07T12:00:00Z",
|
|
"type": "customer",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"bookingId": "BOOK009",
|
|
"resourceId": "EMP002",
|
|
"customerId": "CUST001"
|
|
},
|
|
{
|
|
"id": "EVT016",
|
|
"title": "Emma Andersen - Skæg trimning",
|
|
"start": "2025-08-07T09:00:00Z",
|
|
"end": "2025-08-07T09:20:00Z",
|
|
"type": "customer",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"bookingId": "BOOK010",
|
|
"resourceId": "EMP003",
|
|
"customerId": "CUST002"
|
|
},
|
|
{
|
|
"id": "EVT017",
|
|
"title": "Freja Christensen - Hårvask",
|
|
"start": "2025-08-07T11:00:00Z",
|
|
"end": "2025-08-07T11:30:00Z",
|
|
"type": "customer",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"bookingId": "BOOK011",
|
|
"resourceId": "STUDENT002",
|
|
"customerId": "CUST003"
|
|
},
|
|
{
|
|
"id": "EVT018",
|
|
"title": "Freja Christensen - Ombré",
|
|
"start": "2025-08-07T11:30:00Z",
|
|
"end": "2025-08-07T13:10:00Z",
|
|
"type": "customer",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"bookingId": "BOOK011",
|
|
"resourceId": "EMP002",
|
|
"customerId": "CUST003"
|
|
},
|
|
{
|
|
"id": "EVT019",
|
|
"title": "Frokostpause",
|
|
"start": "2025-08-07T12:00:00Z",
|
|
"end": "2025-08-07T12:30:00Z",
|
|
"type": "break",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"resourceId": "EMP001"
|
|
},
|
|
{
|
|
"id": "EVT020",
|
|
"title": "Laura Pedersen - Føntørring",
|
|
"start": "2025-08-08T09:00:00Z",
|
|
"end": "2025-08-08T09:30:00Z",
|
|
"type": "customer",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"bookingId": "BOOK012",
|
|
"resourceId": "STUDENT001",
|
|
"customerId": "CUST004"
|
|
},
|
|
{
|
|
"id": "EVT021",
|
|
"title": "Ida Larsen - Opsætning",
|
|
"start": "2025-08-08T10:00:00Z",
|
|
"end": "2025-08-08T11:00:00Z",
|
|
"type": "customer",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"bookingId": "BOOK013",
|
|
"resourceId": "EMP004",
|
|
"customerId": "CUST005"
|
|
},
|
|
{
|
|
"id": "EVT022",
|
|
"title": "Produktleverance møde",
|
|
"start": "2025-08-08T08:00:00Z",
|
|
"end": "2025-08-08T08:30:00Z",
|
|
"type": "meeting",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"resourceId": "EMP001",
|
|
"metadata": {
|
|
"attendees": ["EMP001", "EMP004"]
|
|
}
|
|
},
|
|
{
|
|
"id": "EVT023",
|
|
"title": "Frokostpause",
|
|
"start": "2025-08-08T12:00:00Z",
|
|
"end": "2025-08-08T12:30:00Z",
|
|
"type": "break",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"resourceId": "EMP004"
|
|
},
|
|
{
|
|
"id": "EVT024",
|
|
"title": "Caroline Jensen - Ekstensions (Camilla)",
|
|
"start": "2025-08-09T09:00:00Z",
|
|
"end": "2025-08-09T12:00:00Z",
|
|
"type": "customer",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"bookingId": "BOOK014",
|
|
"resourceId": "EMP001",
|
|
"customerId": "CUST006",
|
|
"metadata": {
|
|
"note": "To stylister arbejder sammen"
|
|
}
|
|
},
|
|
{
|
|
"id": "EVT025",
|
|
"title": "Caroline Jensen - Ekstensions (Viktor)",
|
|
"start": "2025-08-09T09:00:00Z",
|
|
"end": "2025-08-09T12:00:00Z",
|
|
"type": "customer",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"bookingId": "BOOK014",
|
|
"resourceId": "EMP004",
|
|
"customerId": "CUST006",
|
|
"metadata": {
|
|
"note": "To stylister arbejder sammen"
|
|
}
|
|
},
|
|
{
|
|
"id": "EVT026",
|
|
"title": "Mathilde Hansen - Klipning og styling",
|
|
"start": "2025-08-09T10:00:00Z",
|
|
"end": "2025-08-09T11:00:00Z",
|
|
"type": "customer",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"bookingId": "BOOK015",
|
|
"resourceId": "EMP002",
|
|
"customerId": "CUST007",
|
|
"metadata": {
|
|
"note": "NOSHOW - kunde mødte ikke op"
|
|
}
|
|
},
|
|
{
|
|
"id": "EVT027",
|
|
"title": "Ferie - Spanien",
|
|
"start": "2025-08-10T00:00:00Z",
|
|
"end": "2025-08-17T23:59:59Z",
|
|
"type": "vacation",
|
|
"allDay": true,
|
|
"syncStatus": "synced",
|
|
"resourceId": "EMP003",
|
|
"metadata": {
|
|
"destination": "Mallorca"
|
|
}
|
|
},
|
|
{
|
|
"id": "EVT028",
|
|
"title": "Frokostpause",
|
|
"start": "2025-08-09T12:00:00Z",
|
|
"end": "2025-08-09T12:30:00Z",
|
|
"type": "break",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"resourceId": "EMP002"
|
|
},
|
|
{
|
|
"id": "EVT029",
|
|
"title": "Kaffepause",
|
|
"start": "2025-08-05T14:00:00Z",
|
|
"end": "2025-08-05T14:15:00Z",
|
|
"type": "break",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"resourceId": "EMP004"
|
|
},
|
|
{
|
|
"id": "EVT030",
|
|
"title": "Kursus - Nye farvningsteknikker",
|
|
"start": "2025-08-11T09:00:00Z",
|
|
"end": "2025-08-11T16:00:00Z",
|
|
"type": "meeting",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"resourceId": "EMP001",
|
|
"metadata": {
|
|
"location": "København",
|
|
"type": "external_course"
|
|
}
|
|
},
|
|
{
|
|
"id": "EVT031",
|
|
"title": "Supervision - Elev",
|
|
"start": "2025-08-05T15:00:00Z",
|
|
"end": "2025-08-05T15:30:00Z",
|
|
"type": "meeting",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"resourceId": "EMP001",
|
|
"metadata": {
|
|
"attendees": ["EMP001", "STUDENT001"]
|
|
}
|
|
},
|
|
{
|
|
"id": "EVT032",
|
|
"title": "Aftensmad pause",
|
|
"start": "2025-08-06T17:00:00Z",
|
|
"end": "2025-08-06T17:30:00Z",
|
|
"type": "break",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"resourceId": "EMP001"
|
|
},
|
|
{
|
|
"id": "EVT033",
|
|
"title": "Supervision - Elev",
|
|
"start": "2025-08-07T15:00:00Z",
|
|
"end": "2025-08-07T15:30:00Z",
|
|
"type": "meeting",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"resourceId": "EMP002",
|
|
"metadata": {
|
|
"attendees": ["EMP002", "STUDENT002"]
|
|
}
|
|
},
|
|
{
|
|
"id": "EVT034",
|
|
"title": "Rengøring af arbejdsstation",
|
|
"start": "2025-08-08T16:00:00Z",
|
|
"end": "2025-08-08T16:30:00Z",
|
|
"type": "blocked",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"resourceId": "STUDENT001"
|
|
},
|
|
{
|
|
"id": "EVT035",
|
|
"title": "Rengøring af arbejdsstation",
|
|
"start": "2025-08-08T16:00:00Z",
|
|
"end": "2025-08-08T16:30:00Z",
|
|
"type": "blocked",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"resourceId": "STUDENT002"
|
|
},
|
|
{
|
|
"id": "EVT036",
|
|
"title": "Leverandør møde",
|
|
"start": "2025-08-09T14:00:00Z",
|
|
"end": "2025-08-09T15:00:00Z",
|
|
"type": "meeting",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"resourceId": "EMP004",
|
|
"metadata": {
|
|
"attendees": ["EMP004"]
|
|
}
|
|
},
|
|
{
|
|
"id": "EVT037",
|
|
"title": "Sygedag",
|
|
"start": "2025-08-12T00:00:00Z",
|
|
"end": "2025-08-12T23:59:59Z",
|
|
"type": "vacation",
|
|
"allDay": true,
|
|
"syncStatus": "synced",
|
|
"resourceId": "STUDENT001",
|
|
"metadata": {
|
|
"reason": "sick_leave"
|
|
}
|
|
},
|
|
{
|
|
"id": "EVT038",
|
|
"title": "Frokostpause",
|
|
"start": "2025-08-05T12:00:00Z",
|
|
"end": "2025-08-05T12:30:00Z",
|
|
"type": "break",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"resourceId": "STUDENT001"
|
|
},
|
|
{
|
|
"id": "EVT039",
|
|
"title": "Frokostpause",
|
|
"start": "2025-08-05T12:00:00Z",
|
|
"end": "2025-08-05T12:30:00Z",
|
|
"type": "break",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"resourceId": "STUDENT002"
|
|
},
|
|
{
|
|
"id": "EVT040",
|
|
"title": "Morgen briefing",
|
|
"start": "2025-08-05T08:30:00Z",
|
|
"end": "2025-08-05T08:45:00Z",
|
|
"type": "meeting",
|
|
"allDay": false,
|
|
"syncStatus": "synced",
|
|
"resourceId": "EMP004",
|
|
"metadata": {
|
|
"attendees": ["EMP001", "EMP002", "EMP003", "EMP004", "STUDENT001", "STUDENT002"]
|
|
}
|
|
}
|
|
]
|