Passed
Push — master ( 0e29a7...dfba81 )
by Mathieu
02:20 queued 23s
created

LeaveRequestToMealTicketRemovalConverter.convert   A

Complexity

Conditions 4

Size

Total Lines 29
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 22
dl 0
loc 29
rs 9.352
c 0
b 0
f 0
cc 4
1
import { Inject } from '@nestjs/common';
2
import { IDateUtils } from 'src/Application/IDateUtils';
3
import { IMealTicketRemovalRepository } from '../Repository/IMealTicketRemovalRepository';
4
import { MealTicketRemoval } from '../MealTicketRemoval.entity';
5
import { LeaveRequest } from '../../Leave/LeaveRequest.entity';
6
import { IsMealTicketRemovalAlreadyExist } from '../Specification/IsMealTicketRemovalAlreadyExist';
7
8
export class LeaveRequestToMealTicketRemovalConverter {
9
  constructor(
10
    @Inject('IMealTicketRemovalRepository')
11
    private readonly mealTicketRemovalRepository: IMealTicketRemovalRepository,
12
    @Inject('IDateUtils')
13
    private readonly dateUtils: IDateUtils,
14
    private readonly isMealTicketRemovalAlreadyExist: IsMealTicketRemovalAlreadyExist,
15
  ) {}
16
17
  public async convert(leaveRequest: LeaveRequest): Promise<void> {
18
    const exceptions: MealTicketRemoval[] = [];
19
    const dates = this.dateUtils.getWorkedDaysDuringAPeriod(
20
      new Date(leaveRequest.getStartDate()),
21
      new Date(leaveRequest.getEndDate())
22
    );
23
24
    if (!dates || 0 === dates.length) {
25
      return;
26
    }
27
28
    const user = leaveRequest.getUser();
29
30
    for (const date of dates) {
31
      if (true === (await this.isMealTicketRemovalAlreadyExist.isSatisfiedBy(user, date))) {
32
        continue;
33
      }
34
35
      exceptions.push(
36
        new MealTicketRemoval(
37
          date.toISOString(),
38
          leaveRequest.getUser(),
39
          'leave',
40
        )
41
      );
42
    }
43
44
    await this.mealTicketRemovalRepository.save(exceptions);
45
  }
46
}
47