Projekt

Obecné

Profil

Stáhnout (3 KB) Statistiky
| Větev: | Revize:
1 d58f0fda Cajova-Houba
<?php
2
/**
3
 * Created by PhpStorm.
4
 * User: Zdenda
5
 * Date: 23.4.2018
6
 * Time: 12:47
7
 */
8
9
namespace App\Model;
10
11
use Illuminate\Support\Facades\DB;
12
13
14
/**
15
 * Trida reprezentujici entitu zarizeni v databazi.
16
 * @package App\Model
17
 */
18
class Zaznam extends BaseModel
19
{
20
    protected $table = 'zaznam';
21
22
    /**
23
     * Vrati posledni datum pro ktere existuji nejake zaznamy.
24
     */
25
    public static function lastInsertedDate() {
26
        return DB::table('zaznam_cas')->select(DB::raw('max(date(datetime_od)) as last_day'))->get();
27
    }
28
29
    /**
30
     * Vrati zaznamy pro urcite zarizeni.
31
     * Typ vozidla je vracen s kazdym zaznamem.
32
     *
33
     * @param $deviceId Id zarizeni pro ktere budou vraceny zaznamy.
34
     * @param $dateFrom Pocatecni datum. Null znamená poledni vlozeny den.
35
     * @param $dateTo Koncove datum. Null znamena posledni vlozeny den.
36
     * @param $timeFrom Pocatecni cas. Null znamena 00:00.
37
     * @param $timeTo Koncovy cas. Null znamena 23:59.
38
     * @param $direction Pozadovany smer. Null znamena oba smery.
39
     */
40
    public static function findByDevice($deviceId, $dateFrom, $dateTo, $timeFrom, $timeTo, $direction) {
41
        $dateTimeFrom = null;
42
        $dateTimeTo = null;
43
        $lastDate = null;
44
        $dir = null;
45
46
        // jedno z omezujicich dat je null => ziskej posledni vlozene datum
47
        if ($dateFrom == null || $dateTo == null) {
48
            $lastDate = Zaznam::lastInsertedDate();
49
            if ($lastDate == null) {
50
                // database is empty
51
                // todo: error codes
52
                return "no-data";
53
            } else {
54
                $lastDate = $lastDate[0]->last_day;
55
            }
56
        }
57
        if ($dateFrom == null) {
58
            $dateFrom = $lastDate;
59
        }
60
        if ($dateTo == null) {
61
            $dateTo = $lastDate;
62
        }
63
        // omezujici casy
64
        if ($timeFrom == null) {
65
            $timeFrom = '00:00:00';
66
        }
67
        if ($timeTo == null) {
68
            $timeTo = '23:59:59';
69
        }
70
        $dateTimeFrom = date('Y-m-d H:i:s', strtotime("$dateFrom $timeFrom"));
71
        $dateTimeTo = date('Y-m-d H:i:s', strtotime("$dateTo $timeTo"));
72
73
74
        // vytvoreni query - vsechno to dat dohromady
75
        $query = DB::table('zaznam')
76
            ->join('zaznam_cas', 'zaznam.zaznam_cas_id', '=', 'zaznam_cas.id')
77
            ->join('vozidlo', 'zaznam.vozidlo_id', '=', 'vozidlo.id')
78
            ->select('zaznam_cas.datetime_od as datetimeFrom',
79
                'zaznam_cas.datetime_do as datetimeTo',
80
                'zaznam_cas.smer as direction',
81
                'zaznam.rychlost_prumer as speedAverage',
82
                'vozidlo.nazev as typeVehicle',
83
                'vozidlo.id as numberVehicle')
84
            ->where('zaznam_cas.datetime_od', '>=', $dateTimeFrom)
85
            ->where('zaznam_cas.datetime_do', '<=', $dateTimeTo)
86
            ->where('zaznam_cas.zarizeni_id', '=', $deviceId);
87
88
        if($direction != null) {
89
            $query = $query->where('zaznam_cas.smer', '=', $direction);
90
        }
91
92
        return $query->get();
93
    }
94
}