Completed
Push — feature/link_expense_note ( 1fd4be )
by Laurent
01:47
created

FlightForQuarterAndPilotQueryHandler::__invoke()   A

Complexity

Conditions 5
Paths 3

Size

Total Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
nc 3
nop 1
dl 0
loc 24
rs 9.2248
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, $flight->justif_kilometers, $flight->kilometers, new \DateTime($flight->date));
50
                    }
51
                    $i++;
52
                }
53
            }
54
        }
55
56
57
        return $flights;
58
    }
59
60
    /**
61
     * @param FlightForQuarterAndPilotQuery $query
62
     *
63
     * @return string
64
     */
65
    private function generateQuery(FlightForQuarterAndPilotQuery $query)
66
    {
67
        $sql = "SELECT USR.rowid, USR.lastname, USR.firstname, QUARTER(VOL.date) as quartil ";
68
        $sql .= " , VOL.*";
69
70
        $sql .= " FROM llx_bbc_vols as VOL";
71
        $sql .= " LEFT OUTER JOIN llx_user AS USR ON VOL.fk_pilot = USR.rowid";
72
        $sql .= " WHERE ";
73
        $sql .= " YEAR(VOL.date) = " . $query->getYear();
74
        $sql .= " AND ( VOL.fk_type = 1 OR VOL.fk_type = 2 ) ";
75
        $sql .= " AND USR.rowid = " . $query->getPilotId();
76
        $sql .= " AND QUARTER(VOL.date) = " . $query->getQuarter();
77
        $sql .= " ORDER BY QUARTER(VOL.date), VOL.fk_pilot";
78
79
        return $this->db->escape($sql);
80
    }
81
82
}