Completed
Push — master ( 9d7d7a...69fd23 )
by Amine
04:04
created

Attendance::getDayAttendanceList()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 0
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
    public function __construct(array $dayAttendanceList = [])
21
    {
22
        foreach ($dayAttendanceList as $dayAttendance) {
23
            $this->addDayAttendance($dayAttendance);
24
        }
25
    }
26
27
    /**
28
     * @return DayAttendance[]
29
     */
30
    public function getDayAttendanceList()
31
    {
32
        return $this->dayAttendanceList;
33
    }
34
35
    /**
36
     * @param DayAttendance $dayAttendance
37
     */
38
    private function addDayAttendance(DayAttendance $dayAttendance)
39
    {
40
        $date = $dayAttendance->getArrival()->format('Y-m-d');
41
42
        if (isset($this->dayAttendanceList[$date])) {
43
            throw new \InvalidArgumentException;
44
        }
45
46
        $this->dayAttendanceList[$date] = $dayAttendance;
47
    }
48
49
    /**
50
     * @return int
51
     */
52
    public function getTotalMinutes()
53
    {
54
        $totalMinutes = 0;
55
56
        foreach ($this->getDayAttendanceList() as $dayAttendance) {
57
            $totalMinutes += $dayAttendance->getTotalMinutes();
58
        }
59
60
        return $totalMinutes;
61
    }
62
63
    /**
64
     * @return \DateInterval
65
     */
66
    public function getAverage()
67
    {
68
        if (empty($this->getDayAttendanceList())) {
69
            return new \DateInterval('PT0S');
70
        }
71
72
        $totalMinutes = $this->getTotalMinutes();
73
74
        $averageMinutes = $totalMinutes / count($this->getDayAttendanceList());
75
76
        return new \DateInterval('PT' . floor($averageMinutes / 60) . 'H' . $averageMinutes % 60 . 'M');
77
    }
78
}
79