import dayjs from "dayjs"; import { isString } from "lodash"; import { Event } from "jc-timeline"; export interface ICreneau { event: Event; penibility: number; minAttendee: number; maxAttendee: number; benevoleIdList: Array; competencesIdList: Array; description: string; } class Creneau implements ICreneau { event: Event; public get title(): string { return this.event.title; } public set title(value: string) { this.event.title = value; } _minAttendee: number; public get minAttendee(): number { return this._minAttendee; } public set minAttendee(value: number) { this._minAttendee = value; this.updateEventContent(); } maxAttendee: number; penibility: number; _benevoleIdList: number[]; public get benevoleIdList(): number[] { return this._benevoleIdList; } public set benevoleIdList(value: number[]) { this._benevoleIdList = value; this.updateEventContent(); } competencesIdList: number[]; description: string; constructor(obj: ICreneau) { if (!isString(obj.event.id) || obj.event.id == "") { throw new TypeError( "missing argument 0 (event.id:String) when calling function Creneau.constructor" ); } if (!isString(obj.event.ressourceId) || obj.event.ressourceId == "") { throw new TypeError( "missing argument 0 (event.ressourceId:String) when calling function Creneau.constructor" ); } this.event = obj.event; this.description = "description" in obj ? obj.description : ""; this.penibility = "penibility" in obj ? obj.penibility : 12; this._minAttendee = "minAttendee" in obj ? obj.minAttendee : 0; this.maxAttendee = "maxAttendee" in obj ? obj.maxAttendee : 0; this._benevoleIdList = "benevoleIdList" in obj ? obj.benevoleIdList : []; this.competencesIdList = "competencesIdList" in obj ? obj.competencesIdList : []; this.updateEventContent(); } get id(): string { return this.event.id; } get ressourceId(): string { return this.event.ressourceId; } set ressourceId(value: string) { this.event.ressourceId = value; } get start(): Date { return this.event.start; } set start(value: Date) { this.event.start = value; } get end(): Date { return this.event.end; } set end(value: Date) { this.event.end = value; } get durationMs(): number { return this.event.end.getTime() - this.event.start.getTime(); } get durationMin(): number { return this.durationMs / 1000 / 60; } get durationH(): number { return this.durationMin / 60; } get horaire(): string { return ( "De " + dayjs(this.event.start).format("HH:mm") + " à " + dayjs(this.event.end).format("HH:mm") ); } updateEventContent() { const missingbenevole = Math.max(this.minAttendee - this.benevoleIdList.length, 0); const spanClass = this.benevoleIdList.length == 0 ? "red" : missingbenevole > 0 ? "orange" : ""; this.event.content = `
${missingbenevole}
`; } toPlainObject(): ICreneau { return { event: this.event, penibility: this.penibility, minAttendee: this.minAttendee, maxAttendee: this.maxAttendee, benevoleIdList: this.benevoleIdList, competencesIdList: this.competencesIdList, description: this.description, }; } } export default Creneau;