Passed
Pull Request — master (#75)
by Mathieu
01:18
created

server/src/Domain/FairCalendar/GetEventsOverview.ts   A

Complexity

Total Complexity 9
Complexity/F 4.5

Size

Lines of Code 65
Function Count 2

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 9
eloc 50
mnd 7
bc 7
fnc 2
dl 0
loc 65
rs 10
bpm 3.5
cpm 4.5
noi 0
c 0
b 0
f 0

2 Functions

Rating   Name   Duplication   Size   Complexity  
A GetEventsOverview.index 0 36 4
A GetEventsOverview.calculateNumberOfMealTicket 0 20 5
1
import {Event} from './Event.entity';
2
import {IEventsOverview} from './IEventsOverview';
3
4
export class GetEventsOverview {
5
  public index(events: Event[]): IEventsOverview {
6
    const eventsByDate = [];
7
    const overview: IEventsOverview = {
8
      mission: 0,
9
      dojo: 0,
10
      formationConference: 0,
11
      holiday: 0,
12
      medicalLeave: 0,
13
      support: 0,
14
      workFree: 0,
15
      other: 0,
16
      mealTicket: 0,
17
      totalTimeSpent: 0
18
    };
19
20
    for (const event of events) {
21
      const dayIndex = new Date(event.getDate()).getDate() - 1;
22
      const time = event.getTime() / 100;
23
      const type = event.getType();
24
25
      if (eventsByDate[dayIndex]) {
26
        eventsByDate[dayIndex].push({time, type});
27
      } else {
28
        eventsByDate[dayIndex] = [{time, type}];
29
      }
30
31
      overview[event.getType()] += time;
32
33
      if (Event.WORKED_TYPES.includes(type)) {
34
        overview.totalTimeSpent += time;
35
      }
36
    }
37
38
    return this.calculateNumberOfMealTicket(
39
      overview,
40
      Object.values(eventsByDate)
41
    );
42
  }
43
44
  public calculateNumberOfMealTicket(
45
    overview: IEventsOverview,
46
    eventsByDate: any[]
47
  ): IEventsOverview {
48
    for (const sortedEvent of eventsByDate) {
49
      let totalPerDay = 0;
50
51
      for (const {time, type} of sortedEvent) {
52
        if (Event.WORKED_TYPES.includes(type)) {
53
          totalPerDay += time;
54
        }
55
      }
56
57
      if (totalPerDay > 0.5) {
58
        overview.mealTicket++;
59
      }
60
    }
61
62
    return overview;
63
  }
64
}
65