FlightForQuarterAndPilotQueryHandler::__invoke()   A
last analyzed

Complexity

Conditions 5
Paths 3

Size

Total Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
nc 3
nop 1
dl 0
loc 25
rs 9.2088
c 0
b 0
f 0
1
<?php
2
/**
3
 *
4
 */
5
6
namespace flightlog\query;
7
8
use flightlog\model\missions\FlightMission;
9
10
/**
11
 * @author Laurent De Coninck <[email protected]>
12
 */
13
class FlightForQuarterAndPilotQueryHandler
14
{
15
16
17
    /**
18
     * @var \DoliDB
19
     */
20
    private $db;
21
22
    /**
23
     * @param \DoliDB $db
24
     */
25
    public function __construct(\DoliDB $db)
26
    {
27
        $this->db = $db;
28
    }
29
30
    /**
31
     * @param FlightForQuarterAndPilotQuery $query
32
     *
33
     * @return array|FlightMission[]
34
     */
35
    public function __invoke(FlightForQuarterAndPilotQuery $query)
36
    {
37
        $sql = $this->generateQuery($query);
38
39
        /** @var FlightMission[]|array $flights */
40
        $flights = [];
41
        $resql = $this->db->query($sql);
42
        if ($resql) {
43
            $num = $this->db->num_rows($resql);
44
            $i = 0;
45
            if ($num) {
46
                while ($i < $num) {
47
                    $flight = $this->db->fetch_object($resql);
48
                    if ($flight) {
49
                        $flights[] = new FlightMission($flight->rowid, $flight->lieuD, $flight->lieuA,
50
                            $flight->justif_kilometers, $flight->kilometers, new \DateTime($flight->date));
51
                    }
52
                    $i++;
53
                }
54
            }
55
        }
56
57
58
        return $flights;
59
    }
60
61
    /**
62
     * @param FlightForQuarterAndPilotQuery $query
63
     *
64
     * @return string
65
     */
66
    private function generateQuery(FlightForQuarterAndPilotQuery $query)
67
    {
68
        $sql = "SELECT USR.rowid, USR.lastname, USR.firstname, QUARTER(VOL.date) as quartil ";
69
        $sql .= " , VOL.*";
70
71
        $sql .= " FROM llx_bbc_vols as VOL";
72
        $sql .= " LEFT OUTER JOIN llx_user AS USR ON VOL.fk_pilot = USR.rowid";
73
        $sql .= " WHERE ";
74
        $sql .= " YEAR(VOL.date) = " . $query->getYear();
75
        $sql .= " AND ( VOL.fk_type = 1 OR VOL.fk_type = 2 ) ";
76
        $sql .= " AND USR.rowid = " . $query->getPilotId();
77
        $sql .= " AND QUARTER(VOL.date) = " . $query->getQuarter();
78
        $sql .= " ORDER BY QUARTER(VOL.date), VOL.fk_pilot";
79
80
        return $this->db->escape($sql);
81
    }
82
83
}