Passed
Pull Request — master (#148)
by Mathieu
02:11
created

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

Complexity

Total Complexity 5
Complexity/F 2.5

Size

Lines of Code 54
Function Count 2

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 5
eloc 41
mnd 3
bc 3
fnc 2
dl 0
loc 54
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 26 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 leaveRepository: ILeaveRepository,
11
    @Inject('IDateUtils')
12
    private readonly dateUtils: IDateUtils
13
  ) {}
14
15
  public convert(leaveRequest: LeaveRequest): void {
16
    const leaves: Leave[] = [];
17
    const dates = this.dateUtils.getWorkedDaysDuringAPeriod(
18
      new Date(leaveRequest.getStartDate()),
19
      new Date(leaveRequest.getEndDate())
20
    );
21
22
    if (!dates || 0 === dates.length) {
23
      return;
24
    }
25
26
    const firstDate = dates[0].toISOString();
27
    const lastDate = dates[dates.length - 1].toISOString();
28
29
    for (const date of dates) {
30
      leaves.push(
31
        new Leave(
32
          leaveRequest,
33
          this.getTime(leaveRequest, firstDate, lastDate, date.toISOString()),
34
          date.toISOString()
35
        )
36
      );
37
    }
38
39
    this.leaveRepository.save(leaves);
40
  }
41
42
  private getTime(
43
    leaveRequest: LeaveRequest,
44
    firstDate: string,
45
    lastDate: string,
46
    currentDate: string
47
  ): number {
48
    return (firstDate === currentDate && false === leaveRequest.isStartsAllDay()) ||
49
      (lastDate === currentDate && false === leaveRequest.isEndsAllDay())
50
      ? 50
51
      : 100;
52
  }
53
}
54