Passed
Pull Request — master (#148)
by Mathieu
01:42
created

server/src/Domain/HumanResource/Leave/Converter/LeaveRequestToLeavesConverter.ts   A

Complexity

Total Complexity 5
Complexity/F 2.5

Size

Lines of Code 51
Function Count 2

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 5
eloc 38
mnd 3
bc 3
fnc 2
dl 0
loc 51
bpm 1.5
cpm 2.5
noi 0
c 0
b 0
f 0
rs 10

2 Functions

Rating   Name   Duplication   Size   Complexity  
A LeaveRequestToLeavesConverter.getTime 0 11 2
A LeaveRequestToLeavesConverter.convert 0 20 3
1
import { Inject } from '@nestjs/common';
2
import { LeaveRequest } from '../LeaveRequest.entity';
3
import { IDateUtils } from 'src/Application/IDateUtils';
4
import { Leave } from 'src/Domain/HumanResource/Leave/Leave.entity';
5
import { ILeaveRepository } from 'src/Domain/HumanResource/Leave/Repository/ILeaveRepository';
6
7
export class LeaveRequestToLeavesConverter {
8
  constructor(
9
    @Inject('ILeaveRepository')
10
    private readonly veaveRepository: ILeaveRepository,
11
    @Inject('IDateUtils')
12
    private readonly dateUtils: IDateUtils
13
  ) {}
14
15
  public convert(leaveRequest: LeaveRequest): void {
16
    const dates = this.dateUtils.getWorkedDaysDuringAPeriod(
17
      new Date(leaveRequest.getStartDate()),
18
      new Date(leaveRequest.getEndDate())
19
    );
20
21
    if (!dates || 0 === dates.length) {
22
      return;
23
    }
24
25
    const firstDate = dates[0].toISOString();
26
    const lastDate = dates[dates.length - 1].toISOString();
27
28
    for (const date of dates) {
29
      this.veaveRepository.save(
30
        new Leave(
31
          leaveRequest,
32
          this.getTime(leaveRequest, firstDate, lastDate, date.toISOString()),
33
          date.toISOString()
34
        )
35
      );
36
    }
37
  }
38
39
  private getTime(
40
    leaveRequest: LeaveRequest,
41
    firstDate: string,
42
    lastDate: string,
43
    currentDate: string
44
  ): number {
45
    return (firstDate === currentDate && false === leaveRequest.isStartsAllDay()) ||
46
      (lastDate === currentDate && false === leaveRequest.isEndsAllDay())
47
      ? 50
48
      : 100;
49
  }
50
}
51