Attendance   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 71
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 2
Bugs 1 Features 1
Metric Value
wmc 9
c 2
b 1
f 1
lcom 1
cbo 1
dl 0
loc 71
ccs 26
cts 26
cp 1
rs 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getDayAttendanceList() 0 4 1
A __construct() 0 6 2
A addDayAttendance() 0 10 2
A getTotalMinutes() 0 10 2
A getAverage() 0 13 2
1
<?php
2
3
namespace AmineBenHariz\Attendance;
4
5
/**
6
 * Class Attendance
7
 * @package AmineBenHariz\Attendance
8
 */
9
class Attendance
10
{
11
    /**
12
     * @var DayAttendance[]
13
     */
14
    private $dayAttendanceList = [];
15
16
    /**
17
     * Attendance constructor.
18
     * @param DayAttendance[] $dayAttendanceList
19
     */
20 9
    public function __construct(array $dayAttendanceList = [])
21
    {
22 9
        foreach ($dayAttendanceList as $dayAttendance) {
23 6
            $this->addDayAttendance($dayAttendance);
24 9
        }
25 6
    }
26
27
    /**
28
     * @return DayAttendance[]
29
     */
30 9
    public function getDayAttendanceList()
31
    {
32 9
        return $this->dayAttendanceList;
33
    }
34
35
    /**
36
     * @param DayAttendance $dayAttendance
37
     */
38 6
    private function addDayAttendance(DayAttendance $dayAttendance)
39
    {
40 6
        $date = $dayAttendance->getArrival()->format('Y-m-d');
41
42 6
        if (isset($this->dayAttendanceList[$date])) {
43 3
            throw new \InvalidArgumentException;
44
        }
45
46 6
        $this->dayAttendanceList[$date] = $dayAttendance;
47 6
    }
48
49
    /**
50
     * @return int
51
     */
52 6
    public function getTotalMinutes()
53
    {
54 6
        $totalMinutes = 0;
55
56 6
        foreach ($this->getDayAttendanceList() as $dayAttendance) {
57 6
            $totalMinutes += $dayAttendance->getTotalMinutes();
58 6
        }
59
60 6
        return $totalMinutes;
61
    }
62
63
    /**
64
     * @return \DateInterval
65
     */
66 3
    public function getAverage()
67
    {
68 3
        $getAttendanceList = $this->getDayAttendanceList();
69 3
        if (empty($getAttendanceList)) {
70 3
            return new \DateInterval('PT0S');
71
        }
72
73 3
        $totalMinutes = $this->getTotalMinutes();
74
75 3
        $averageMinutes = $totalMinutes / count($getAttendanceList);
76
77 3
        return new \DateInterval('PT' . floor($averageMinutes / 60) . 'H' . $averageMinutes % 60 . 'M');
78
    }
79
}
80