Creneau.ts 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. import dayjs from "dayjs";
  2. import { isString } from "lodash";
  3. import { Event } from "jc-timeline";
  4. export interface ICreneau {
  5. event: Event;
  6. penibility: number;
  7. minAttendee: number;
  8. maxAttendee: number;
  9. benevoleIdList: Array<number>;
  10. competencesIdList: Array<number>;
  11. description: string;
  12. }
  13. class Creneau implements ICreneau {
  14. event: Event;
  15. public get title(): string {
  16. return this.event.title;
  17. }
  18. public set title(value: string) {
  19. this.event.title = value;
  20. }
  21. _minAttendee: number;
  22. public get minAttendee(): number {
  23. return this._minAttendee;
  24. }
  25. public set minAttendee(value: number) {
  26. this._minAttendee = value;
  27. this.updateEventContent();
  28. }
  29. maxAttendee: number;
  30. penibility: number;
  31. _benevoleIdList: number[];
  32. public get benevoleIdList(): number[] {
  33. return this._benevoleIdList;
  34. }
  35. public set benevoleIdList(value: number[]) {
  36. this._benevoleIdList = value;
  37. this.updateEventContent();
  38. }
  39. competencesIdList: number[];
  40. description: string;
  41. constructor(obj: ICreneau) {
  42. if (!isString(obj.event.id) || obj.event.id == "") {
  43. throw new TypeError(
  44. "missing argument 0 (event.id:String) when calling function Creneau.constructor"
  45. );
  46. }
  47. if (!isString(obj.event.ressourceId) || obj.event.ressourceId == "") {
  48. throw new TypeError(
  49. "missing argument 0 (event.ressourceId:String) when calling function Creneau.constructor"
  50. );
  51. }
  52. this.event = obj.event;
  53. this.description = "description" in obj ? obj.description : "";
  54. this.penibility = "penibility" in obj ? obj.penibility : 12;
  55. this._minAttendee = "minAttendee" in obj ? obj.minAttendee : 0;
  56. this.maxAttendee = "maxAttendee" in obj ? obj.maxAttendee : 0;
  57. this._benevoleIdList = "benevoleIdList" in obj ? obj.benevoleIdList : [];
  58. this.competencesIdList = "competencesIdList" in obj ? obj.competencesIdList : [];
  59. this.updateEventContent();
  60. }
  61. get id(): string {
  62. return this.event.id;
  63. }
  64. get ressourceId(): string {
  65. return this.event.ressourceId;
  66. }
  67. set ressourceId(value: string) {
  68. this.event.ressourceId = value;
  69. }
  70. get start(): Date {
  71. return this.event.start;
  72. }
  73. set start(value: Date) {
  74. this.event.start = value;
  75. }
  76. get end(): Date {
  77. return this.event.end;
  78. }
  79. set end(value: Date) {
  80. this.event.end = value;
  81. }
  82. get durationMs(): number {
  83. return this.event.end.getTime() - this.event.start.getTime();
  84. }
  85. get durationMin(): number {
  86. return this.durationMs / 1000 / 60;
  87. }
  88. get durationH(): number {
  89. return this.durationMin / 60;
  90. }
  91. get horaire(): string {
  92. return (
  93. "De " +
  94. dayjs(this.event.start).format("HH:mm") +
  95. " à " +
  96. dayjs(this.event.end).format("HH:mm")
  97. );
  98. }
  99. updateEventContent() {
  100. const missingbenevole = Math.max(this.minAttendee - this.benevoleIdList.length, 0);
  101. const spanClass = this.benevoleIdList.length == 0 ? "red" : missingbenevole > 0 ? "orange" : "";
  102. this.event.content = `<div class="bubble ${spanClass}">${missingbenevole}</div>`;
  103. }
  104. toPlainObject(): ICreneau {
  105. return {
  106. event: this.event,
  107. penibility: this.penibility,
  108. minAttendee: this.minAttendee,
  109. maxAttendee: this.maxAttendee,
  110. benevoleIdList: this.benevoleIdList,
  111. competencesIdList: this.competencesIdList,
  112. description: this.description,
  113. };
  114. }
  115. }
  116. export default Creneau;