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

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

Complexity

Total Complexity 9
Complexity/F 4.5

Size

Lines of Code 64
Function Count 2

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 9
eloc 49
mnd 7
bc 7
fnc 2
dl 0
loc 64
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 35 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
      other: 0,
15
      mealTicket: 0,
16
      totalTimeSpent: 0
17
    };
18
19
    for (const event of events) {
20
      const dayIndex = new Date(event.getDate()).getDate() - 1;
21
      const time = event.getTime() / 100;
22
      const type = event.getType();
23
24
      if (eventsByDate[dayIndex]) {
25
        eventsByDate[dayIndex].push({time, type});
26
      } else {
27
        eventsByDate[dayIndex] = [{time, type}];
28
      }
29
30
      overview[event.getType()] += time;
31
32
      if (Event.WORKED_TYPES.includes(type)) {
33
        overview.totalTimeSpent += time;
34
      }
35
    }
36
37
    return this.calculateNumberOfMealTicket(
38
      overview,
39
      Object.values(eventsByDate)
40
    );
41
  }
42
43
  public calculateNumberOfMealTicket(
44
    overview: IEventsOverview,
45
    eventsByDate: any[]
46
  ): IEventsOverview {
47
    for (const sortedEvent of eventsByDate) {
48
      let totalPerDay = 0;
49
50
      for (const {time, type} of sortedEvent) {
51
        if (Event.WORKED_TYPES.includes(type)) {
52
          totalPerDay += time;
53
        }
54
      }
55
56
      if (totalPerDay > 0.5) {
57
        overview.mealTicket++;
58
      }
59
    }
60
61
    return overview;
62
  }
63
}
64