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:
Janus C. H. Knudsen 2025-12-10 00:27:19 +01:00
parent 400de8c9d5
commit a2b95515fd
17 changed files with 563 additions and 36 deletions

View file

@ -4,6 +4,7 @@ import { IGroupingStore } from './core/IGroupingStore';
import { DateRenderer } from './features/date/DateRenderer';
import { DateService } from './core/DateService';
import { ITimeFormatConfig } from './core/ITimeFormatConfig';
import { IGridConfig } from './core/IGridConfig';
import { ResourceRenderer } from './features/resource/ResourceRenderer';
import { TeamRenderer } from './features/team/TeamRenderer';
import { CalendarOrchestrator } from './core/CalendarOrchestrator';
@ -42,6 +43,12 @@ import { DataSeeder } from './workers/DataSeeder';
// Features
import { EventRenderer } from './features/event/EventRenderer';
import { ScheduleRenderer } from './features/schedule/ScheduleRenderer';
// Schedule
import { ScheduleOverrideStore } from './storage/schedules/ScheduleOverrideStore';
import { ScheduleOverrideService } from './storage/schedules/ScheduleOverrideService';
import { ResourceScheduleService } from './storage/schedules/ResourceScheduleService';
const defaultTimeFormatConfig: ITimeFormatConfig = {
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
@ -51,12 +58,20 @@ const defaultTimeFormatConfig: ITimeFormatConfig = {
showSeconds: false
};
const defaultGridConfig: IGridConfig = {
hourHeight: 64,
dayStartHour: 6,
dayEndHour: 18,
snapInterval: 15
};
export function createV2Container(): Container {
const container = new Container();
const builder = container.builder();
// Config
builder.registerInstance(defaultTimeFormatConfig).as<ITimeFormatConfig>();
builder.registerInstance(defaultGridConfig).as<IGridConfig>();
// Core - EventBus
builder.registerType(EventBus).as<EventBus>();
@ -73,6 +88,7 @@ export function createV2Container(): Container {
builder.registerType(ResourceStore).as<IStore>();
builder.registerType(BookingStore).as<IStore>();
builder.registerType(CustomerStore).as<IStore>();
builder.registerType(ScheduleOverrideStore).as<IStore>();
// Entity services (for DataSeeder polymorphic array)
builder.registerType(EventService).as<IEntityService<ICalendarEvent>>();
@ -107,8 +123,13 @@ export function createV2Container(): Container {
// Workers
builder.registerType(DataSeeder).as<DataSeeder>();
// Schedule services
builder.registerType(ScheduleOverrideService).as<ScheduleOverrideService>();
builder.registerType(ResourceScheduleService).as<ResourceScheduleService>();
// Features
builder.registerType(EventRenderer).as<EventRenderer>();
builder.registerType(ScheduleRenderer).as<ScheduleRenderer>();
// Renderers - registreres som Renderer (array injection til CalendarOrchestrator)
builder.registerType(DateRenderer).as<IRenderer>();