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 |
|
|
}
|