Projekt

Obecné

Profil

Stáhnout (19.8 KB) Statistiky
| Větev: | Revize:
1 49df590a Jan Kohlíček
let app = angular.module('pvpk', ['ngRoute', 'ngResource', 'ngSanitize']);
2 19963e5b kohlicekjan
3 0b27c108 Jan Kohlíček
app.constant('config', {
4
    APP_NAME: 'PVPK',
5
    APP_VERSION: 1.0,
6
    API_URL: API_URL,
7 d68f7bbd Jan Kohlíček
    API_TOKEN: API_TOKEN,
8
    DEFAULT_POSITION: {LAT: 49.53, LNG: 13.3},
9
    DEFAULT_ZOOM: 10
10 0b27c108 Jan Kohlíček
});
11
12 d68f7bbd Jan Kohlíček
//PRIPRAVA PRO REFAKTORING
13 0b27c108 Jan Kohlíček
// app.config(function($stateProvider, $locationProvider) {
14
//     // $stateProvider
15
//     // .state('report',{
16
//     //     views: {
17
//     //         'search': {
18
//     //             templateUrl: 'report-filters.html',
19
//     //             controller: searchController
20
//     //         },
21
//     //         'graph': {
22
//     //             templateUrl: 'report-table.html',
23
//     //             controller: graphController
24
//     //         },
25
//     //         'map': {
26
//     //             templateUrl: 'report-graph.html',
27
//     //             controller: mapController
28
//     //         }
29
//     //     }
30
//     // });
31
//    $locationProvider.html5Mode(true);
32
// });
33
34
35 49df590a Jan Kohlíček
app.controller('mainController', function ($rootScope, $scope, $location, $window) {
36 0b27c108 Jan Kohlíček
37
    this.$onInit = function () {
38 49df590a Jan Kohlíček
39
    };
40
41
    $window.onload = function () {
42
        let params = $location.search();
43
        if (params.deviceId) {
44
            $rootScope.$emit('infoLocation', {id: params.deviceId, direction: params.direction});
45
            $rootScope.$emit('activeMarker', {id: params.deviceId});
46
        }
47
48 0b27c108 Jan Kohlíček
        $scope.showLoadingScreen = false;
49
    };
50
51 49df590a Jan Kohlíček
    $rootScope.$on('$locationChangeSuccess', function (event, newUrl, oldUrl) {
52
53
        if (newUrl !== oldUrl && $scope.historyUrl) {
54
            let params = $location.search();
55
56
            if ($scope.historyUrl.q !== $scope.historyUrl.q || $scope.historyUrl.isDirection != params.isDirection) {
57
                $rootScope.$emit('setSearchFromUrl', null);
58
            }
59
60
            if ($scope.historyUrl.fromDate !== params.fromDate || $scope.historyUrl.toDate !== params.toDate ||
61
                $scope.historyUrl.fromTime !== params.fromTime || $scope.historyUrl.toTime !== params.toTime) {
62
                $rootScope.$emit('setRangeFromUrl', null);
63
                if (params.deviceId) {
64
                    $rootScope.$emit('infoLocation', {id: params.deviceId, direction: params.direction});
65
                }
66
            } else if (params.deviceId && ($scope.historyUrl.deviceId !== params.deviceId || $scope.historyUrl.direction !== params.direction)) {
67
                $rootScope.$emit('infoLocation', {id: params.deviceId, direction: params.direction});
68
                $rootScope.$emit('activeMarker', {id: params.deviceId});
69 437ed5e7 Jan Kohlíček
            }else if(!params.deviceId && $scope.historyUrl.deviceId){
70
                $rootScope.selectDevice = null;
71
                $rootScope.$emit('setDefaultMap', null);
72 49df590a Jan Kohlíček
            }
73
        }
74
75
        $scope.historyUrl = $location.search();
76
    });
77
78 0b27c108 Jan Kohlíček
    $rootScope.handleErrorResponse = function (response) {
79 49df590a Jan Kohlíček
80
        let modalError = jQuery('#modalError');
81 0b27c108 Jan Kohlíček
        switch (response.status) {
82
            case 400:
83
                console.log('API ERROR 400');
84 e4f78eb8 Jan Kohlíček
                $scope.modalError = {
85
                    title: 'Neplatný požadavek',
86
                    body: 'Požadavek nemůže být vyřízen, poněvadž byl syntakticky nesprávně zapsán.',
87
                    button: 'OK'
88
                };
89 49df590a Jan Kohlíček
                modalError.modal('show');
90 0b27c108 Jan Kohlíček
                break;
91
            case 401:
92 e4f78eb8 Jan Kohlíček
                $scope.modalError = {
93
                    title: 'Platnost webové aplikace vypršela',
94
                    body: 'Pro obnovení platnosti stačí stisknout tlačítko <strong>Obnovit</strong>.',
95
                    button: 'Obnovit',
96
                    clickButton: $scope.reloadApp
97
                };
98 49df590a Jan Kohlíček
                modalError.modal({backdrop: 'static', keyboard: false});
99 0b27c108 Jan Kohlíček
                break;
100
            case 404:
101
                console.log('API ERROR 404');
102 e4f78eb8 Jan Kohlíček
                $scope.modalError = {title: 'Nenalezen', body: 'Záznam nebyl nalezen.', button: 'OK'};
103 49df590a Jan Kohlíček
                modalError.modal('show');
104 0b27c108 Jan Kohlíček
                break;
105
            case 500:
106
                console.log('API ERROR 500');
107 e4f78eb8 Jan Kohlíček
                $scope.modalError = {title: 'Chyba', body: 'Chyba serveru. Zopakujte akci později.', button: 'OK'};
108 49df590a Jan Kohlíček
                modalError.modal('show');
109 e4f78eb8 Jan Kohlíček
                break;
110
            case -1:
111
                console.log('API NOT CONNECTED');
112
                $scope.modalError = {
113
                    title: 'Připojení k internetu',
114
                    body: 'Nejste připojeni k internetu. Zkontrolujte připojení.',
115
                    button: 'OK'
116
                };
117 49df590a Jan Kohlíček
                modalError.modal('show');
118 0b27c108 Jan Kohlíček
                break;
119
            default:
120 e4f78eb8 Jan Kohlíček
                console.log('API UNKNOWN ERROR');
121
                $scope.modalError = {title: 'Neočekávaná chyba', body: 'Nastala neočekávaná chyba.', button: 'OK'};
122 49df590a Jan Kohlíček
                modalError.modal('show');
123 e4f78eb8 Jan Kohlíček
                break;
124 0b27c108 Jan Kohlíček
        }
125
    };
126
127
    $scope.reloadApp = function () {
128
        $window.location.reload();
129
    }
130
});
131
132
133
app.controller('searchController', function ($rootScope, $scope, $location, config, Device) {
134
135
    this.$onInit = function () {
136
        $scope.locations = [];
137 d68f7bbd Jan Kohlíček
        $scope.showSearchLoading = false;
138 0b27c108 Jan Kohlíček
139 49df590a Jan Kohlíček
        $rootScope.$emit('setSearchFromUrl', null);
140 0b27c108 Jan Kohlíček
    };
141
142 49df590a Jan Kohlíček
    $scope.searchLocations = function () {
143
        if (!$scope.search.q || $scope.search.q.length <= 1) {
144 d68f7bbd Jan Kohlíček
            $scope.locations = [];
145
            return;
146
        }
147
148
        $scope.showSearchLoading = true;
149 0b27c108 Jan Kohlíček
150 49df590a Jan Kohlíček
        let params = $location.search();
151
        params.q = $scope.search.q;
152
        params.isDirection = $scope.search.isDirection ? 1 : 0;
153
        $location.search(params);
154 0b27c108 Jan Kohlíček
155 d68f7bbd Jan Kohlíček
        Device.query({
156 49df590a Jan Kohlíček
            address: $scope.search.q,
157
            showDirection: $scope.search.isDirection ? 1 : 0
158 0b27c108 Jan Kohlíček
        }, function (data) {
159
            $scope.locations = data;
160 d68f7bbd Jan Kohlíček
            $scope.showSearchLoading = false;
161 0b27c108 Jan Kohlíček
        }, function (response) {
162 d68f7bbd Jan Kohlíček
            $scope.showSearchLoading = false;
163 0b27c108 Jan Kohlíček
            console.log('Error api all Devices');
164
            $rootScope.handleErrorResponse(response);
165
        });
166
    };
167
168 49df590a Jan Kohlíček
    $rootScope.$on('setSearchFromUrl', function (event, args) {
169
        let params = $location.search();
170 0b27c108 Jan Kohlíček
171 49df590a Jan Kohlíček
        $scope.search = {
172
            q: params.q,
173
            isDirection: params.isDirection ? !!+params.isDirection : false
174
        };
175
        $scope.searchLocations();
176
    });
177
178
    $scope.selectDevice = function (id, direction) {
179 d68f7bbd Jan Kohlíček
        $rootScope.$emit('activeMarker', {id: id});
180 49df590a Jan Kohlíček
        $rootScope.$emit('infoLocation', {id: id, direction: direction});
181 d68f7bbd Jan Kohlíček
    };
182
183
});
184
185
186 49df590a Jan Kohlíček
app.controller('infoController', function ($rootScope, $scope, $location, config, Device, Vehicle) {
187 d68f7bbd Jan Kohlíček
188
    this.$onInit = function () {
189
        $rootScope.selectDevice = null;
190
        $scope.showInfoLoading = false;
191 49df590a Jan Kohlíček
        $scope.vehicles = [];
192
        $scope.typeVehicle = null;
193
        $scope.filterVehicles = [];
194 d68f7bbd Jan Kohlíček
195
        Vehicle.query(null, function (data) {
196
            $scope.vehicles = data;
197
        }, function (response) {
198
            $rootScope.graphShow = false;
199
            console.log('Error api all Vehicles');
200
            $rootScope.handleErrorResponse(response);
201
        });
202 49df590a Jan Kohlíček
203
        $rootScope.$emit('setRangeFromUrl', null);
204 d68f7bbd Jan Kohlíček
    };
205
206 49df590a Jan Kohlíček
    $rootScope.$on('setRangeFromUrl', function (event, args) {
207
        let params = $location.search();
208
        let defaultRange = $scope.defaultRange();
209
210
        $scope.range = {
211
            fromDate: moment(params.fromDate, 'YYYY-MM-DD').isValid() ? moment(params.fromDate).toDate() : defaultRange.fromDate.toDate(),
212
            toDate: moment(params.toDate, 'YYYY-MM-DD').isValid() ? moment(params.toDate).toDate() : defaultRange.toDate.toDate(),
213
            fromTime: moment(params.fromTime, 'HH:mm').isValid() ? moment(params.fromTime, 'HH:mm').toDate() : defaultRange.fromTime.toDate(),
214
            toTime: moment(params.toTime, 'HH:mm').isValid() ? moment(params.toTime, 'HH:mm').toDate() : defaultRange.toTime.toDate()
215
        };
216
217
    });
218
219 d68f7bbd Jan Kohlíček
    $rootScope.$on('infoLocation', function (event, args) {
220
        $scope.showInfoLoading = true;
221
222 49df590a Jan Kohlíček
        let params = $location.search();
223
        params.deviceId = args.id;
224
        params.direction = args.direction;
225
        $location.search(params);
226
227
        let range = $scope.getRange();
228
229 d68f7bbd Jan Kohlíček
        Device.get({
230 49df590a Jan Kohlíček
            id: args.id,
231
            direction: args.direction,
232
            dateFrom: range.fromDate.format('YYYY-MM-DD'),
233
            dateTo: range.toDate.format('YYYY-MM-DD'),
234
            timeFrom: range.fromTime.format('HH:mm'),
235
            timeTo: range.toTime.format('HH:mm'),
236 0b27c108 Jan Kohlíček
        }, function (data) {
237 d68f7bbd Jan Kohlíček
            $rootScope.selectDevice = data;
238 49df590a Jan Kohlíček
239
            $scope.typeVehicle = null;
240
            $scope.renderGraphAverageSpeed();
241
            $scope.renderGraphNumberVehicles();
242
243 d68f7bbd Jan Kohlíček
            $scope.showInfoLoading = false;
244 0b27c108 Jan Kohlíček
        }, function (response) {
245 d68f7bbd Jan Kohlíček
            $rootScope.selectDevice = null;
246
            $scope.showInfoLoading = false;
247 0b27c108 Jan Kohlíček
            console.log('Error api get Devices');
248
            $rootScope.handleErrorResponse(response);
249
        });
250
251 d68f7bbd Jan Kohlíček
    });
252
253 49df590a Jan Kohlíček
    $scope.changeRange = function () {
254
        if ($scope.range.fromDate >= $scope.range.toDate || $scope.range.fromTime >= $scope.range.toTime) {
255
            $rootScope.selectDevice.traffics = [];
256
            return;
257
        }
258
259
        let range = $scope.getRange();
260
261
        let params = $location.search();
262
        params.fromDate = range.fromDate.format('YYYY-MM-DD');
263
        params.toDate = range.toDate.format('YYYY-MM-DD');
264
        params.fromTime = range.fromTime.format('HH:mm');
265
        params.toTime = range.toTime.format('HH:mm');
266
        $location.search(params);
267
268
        if ($rootScope.selectDevice)
269
            $rootScope.$emit('infoLocation', {
270
                id: $rootScope.selectDevice.id,
271
                direction: $rootScope.selectDevice.direction
272
            });
273
    };
274
275
    $scope.getRange = function () {
276
        let defaultRange = $scope.defaultRange();
277
278
        return {
279
            fromDate: moment($scope.range.fromDate).isValid() ? moment($scope.range.fromDate) : defaultRange.fromDate,
280
            toDate: moment($scope.range.toDate).isValid() ? moment($scope.range.toDate) : defaultRange.toDate,
281
            fromTime: moment($scope.range.fromTime).isValid() ? moment($scope.range.fromTime) : defaultRange.fromTime,
282
            toTime: moment($scope.range.toTime).isValid() ? moment($scope.range.toTime) : defaultRange.toTime
283
        };
284
    };
285
286
    $scope.defaultRange = function () {
287
        return {
288
            fromDate: moment().day(-30),
289
            toDate: moment().day(-1),
290
            fromTime: moment({hour: 7}),
291
            toTime: moment({hour: 16})
292
        };
293
    };
294
295
296
    $scope.renderGraphAverageSpeed = function () {
297
298
        let t = $rootScope.selectDevice.traffics.reduce(function (l, r) {
299
            let key = r.timeFrom;
300
            if (typeof l[key] === 'undefined') {
301
                l[key] = {
302
                    numberVehicle: 0,
303
                    speedSum: 0
304
                };
305
            }
306
307
            if (r.speedAverage > 0) {
308
                l[key].numberVehicle += r.numberVehicle;
309
                l[key].speedSum += r.speedAverage * r.numberVehicle;
310
            }
311
            return l;
312
        }, {});
313
314
        let labels = jQuery.unique($rootScope.selectDevice.traffics.map(function (d) {
315
            return d.timeFrom;
316
        }));
317
        let data = Object.values(t).map(function (d) {
318
            return Math.round(d.speedSum / d.numberVehicle);
319
        });
320
321
322
        let canvasGraphAverageSpeed = document.getElementById('graphAverageSpeed').getContext('2d');
323
324
        if ($scope.graphAverageSpeed)
325
            $scope.graphAverageSpeed.destroy();
326
327
        $scope.graphAverageSpeed = new Chart(canvasGraphAverageSpeed, {
328
            type: 'line',
329
            data: {
330
                labels: labels,
331
                datasets: [{
332
                    data: data,
333
                    borderWidth: 2,
334
                    label: "Rychlost",
335
                    fill: 'start',
336
                    backgroundColor: 'rgba(0, 123, 255, 0.3)',
337
                    borderColor: 'rgba(0, 123, 255,1)',
338
                    cubicInterpolationMode: 'monotone',
339
                    radius: 0
340
                }]
341
            },
342
            options: {
343
                responsive: true,
344
                pointDot: false,
345
                scales: {
346
                    xAxes: [{
347
                        ticks: {
348
                            autoSkip: true,
349
                            maxTicksLimit: 15
350
                        }
351
                    }],
352
                    yAxes: [{
353
                        scaleLabel: {
354
                            display: true,
355
                            labelString: 'km/h'
356
                        },
357
                        ticks: {
358
                            beginAtZero: true
359
                        }
360
                    }]
361
                },
362
                tooltips: {
363
                    enabled: true,
364
                    mode: 'single',
365
                    callbacks: {
366
                        label: function (tooltipItems) {
367
                            return tooltipItems.yLabel + ' km/h';
368
                        }
369
                    }
370
                }
371
            }
372
        });
373
    };
374
375
376
    $scope.renderGraphNumberVehicles = function () {
377
        let color = ['rgba(158, 158, 158, #alpha)', 'rgba(213, 0, 0, #alpha)', 'rgba(0, 123, 255, #alpha)', 'rgba(170, 0, 255, #alpha)',
378
            'rgba(0, 200, 83, #alpha)', 'rgba(255, 214, 0, #alpha)', 'rgba(255, 109, 0, #alpha)',
379
            'rgba(174, 234, 0, #alpha)', 'rgba(98, 0, 234, #alpha)', 'rgba(255, 171, 0, #alpha)', 'rgba(100, 221, 23, #alpha)', 'rgba(0, 184, 212, #alpha)'];
380
381
382
        let labels = jQuery.unique($rootScope.selectDevice.traffics.map(function (d) {
383
            return d.timeFrom;
384
        }));
385
386
        let useVehiclesIds = jQuery.unique($rootScope.selectDevice.traffics.map(function (d) {
387
            return d.typeVehicleId;
388
        }));
389
390
        $scope.filterVehicles = jQuery.grep($scope.vehicles, function (n) {
391
            return useVehiclesIds.indexOf(n.id) >= 0;
392
        });
393
394
        let datasets = [];
395
        for (let i = 0, vehicle; vehicle = $scope.filterVehicles[i]; i++) {
396
            if ($scope.typeVehicle == null || $scope.typeVehicle === vehicle.id) {
397
                let dataset = {
398
                    label: vehicle.name,
399
                    backgroundColor: color[vehicle.id].replace("#alpha", "0.3"),
400
                    borderColor: color[vehicle.id].replace("#alpha", "1"),
401
                    borderWidth: 2,
402
                    data: []
403
                };
404
405
                let l = 0;
406
                for (let j = 0, traffic; traffic = $rootScope.selectDevice.traffics[j]; j++) {
407
                    if (labels[l] !== traffic.timeFrom) {
408
                        l++;
409
                        if (dataset.data.length < l) {
410
                            dataset.data.push(0);
411
                        }
412
                    }
413
                    if (traffic.typeVehicleId === vehicle.id) {
414
                        dataset.data.push(traffic.numberVehicleAverage);
415
                    }
416
                }
417
                datasets.push(dataset);
418
            }
419
        }
420
421
        let canvasGraphNumberVehicles = document.getElementById('graphNumberVehicles').getContext('2d');
422
423
        if ($scope.graphNumberVehicles)
424
            $scope.graphNumberVehicles.destroy();
425
426
        $scope.graphNumberVehicles = new Chart(canvasGraphNumberVehicles, {
427
            type: 'bar',
428
            data: {
429
                labels: labels,
430
                datasets: datasets
431
            },
432
            options: {
433
                tooltips: {
434
                    mode: 'index',
435
                    intersect: false
436
                },
437
                responsive: true,
438
                scales: {
439
                    xAxes: [{
440
                        stacked: true,
441
                        ticks: {
442
                            autoSkip: true,
443
                            maxTicksLimit: 15
444
                        }
445
                    }],
446
                    yAxes: [{
447
                        scaleLabel: {
448
                            display: true,
449
                            labelString: "počet vozidel"
450
                        },
451
                        stacked: true
452
                    }]
453
                }
454
            }
455
        });
456
    };
457
458
459 d68f7bbd Jan Kohlíček
    $scope.infoClose = function () {
460
        $rootScope.selectDevice = null;
461
462 49df590a Jan Kohlíček
        let params = $location.search();
463
        params.deviceId = null;
464
        params.direction = null;
465
        $location.search(params);
466
467 d68f7bbd Jan Kohlíček
        $rootScope.$emit('setDefaultMap', null);
468
    };
469 0b27c108 Jan Kohlíček
});
470
471
472 d68f7bbd Jan Kohlíček
app.controller('mapController', function ($rootScope, $scope, config, Device) {
473 0b27c108 Jan Kohlíček
474
    this.$onInit = function () {
475
476 d68f7bbd Jan Kohlíček
        $scope.map = new GMaps({
477
            div: '#map',
478
            zoomControl: true,
479
            mapTypeControl: false,
480
            scaleControl: false,
481
            streetViewControl: false,
482
            rotateControl: false,
483
            fullscreenControl: false,
484
            mapTypeId: 'roadmap',
485
            zoom: config.DEFAULT_ZOOM,
486
            lat: config.DEFAULT_POSITION.LAT,
487 49df590a Jan Kohlíček
            lng: config.DEFAULT_POSITION.LNG,
488
            // styles: [
489
            //     {
490
            //         featureType: "poi",
491
            //         elementType: "labels",
492
            //         stylers: [{ visibility: "off" }]
493
            //     }
494
            // ]
495 d68f7bbd Jan Kohlíček
        });
496 0b27c108 Jan Kohlíček
497 d68f7bbd Jan Kohlíček
        Device.query({showDirection: 0}, function (data) {
498 49df590a Jan Kohlíček
            for (let i = 0, lctn; lctn = data[i]; i++) {
499
                $scope.createMarker(lctn);
500
            }
501 0b27c108 Jan Kohlíček
        }, function (response) {
502 d68f7bbd Jan Kohlíček
            console.log('Error api all Devices');
503 0b27c108 Jan Kohlíček
            $rootScope.handleErrorResponse(response);
504
        });
505 d68f7bbd Jan Kohlíček
    };
506 0b27c108 Jan Kohlíček
507
508 49df590a Jan Kohlíček
    $scope.createMarker = function (lctn) {
509
        if (lctn.lat && lctn.lng) {
510
            $scope.map.addMarker({
511
                lat: lctn.lat,
512
                lng: lctn.lng,
513
                title: lctn.name,
514
                click: function () {
515
                    $rootScope.$emit('infoLocation', {id: lctn.id});
516
                },
517
                infoWindow: {
518
                    content: '<h6 class="mb-1">' + lctn.name + '</h6>'
519
                    + '<address>' + lctn.street + ', ' + lctn.town + '</address>'
520
                },
521
                id: lctn.id
522
            });
523
        }
524 d68f7bbd Jan Kohlíček
    };
525 0b27c108 Jan Kohlíček
526 d68f7bbd Jan Kohlíček
    $rootScope.$on('activeMarker', function (event, args) {
527 49df590a Jan Kohlíček
        let id = args.id;
528
        for (let i = 0, marker; marker = $scope.map.markers[i]; i++) {
529 d68f7bbd Jan Kohlíček
            if (marker.id && marker.id === id && marker.infoWindow) {
530
                $scope.map.setCenter(marker.position.lat(), marker.position.lng());
531
                $scope.map.setZoom(12);
532 49df590a Jan Kohlíček
                $scope.map.hideInfoWindows();
533 d68f7bbd Jan Kohlíček
                marker.infoWindow.open($scope.map, marker);
534
                return;
535
            }
536
        }
537
    });
538 0b27c108 Jan Kohlíček
539 d68f7bbd Jan Kohlíček
    $rootScope.$on('setDefaultMap', function (event, args) {
540
        $scope.map.setCenter(config.DEFAULT_POSITION.LAT, config.DEFAULT_POSITION.LNG);
541
        $scope.map.setZoom(config.DEFAULT_ZOOM);
542
        $scope.map.hideInfoWindows();
543
    });
544 0b27c108 Jan Kohlíček
});
545
546
547 49df590a Jan Kohlíček
app.factory('Device', function ($resource, config) {
548
    return $resource(config.API_URL + '/devices/:id', {id: '@id'}, {
549 d68f7bbd Jan Kohlíček
        'get': {
550 49df590a Jan Kohlíček
            url: config.API_URL + '/devices/:id/time-period',
551 d68f7bbd Jan Kohlíček
            method: 'GET',
552 49df590a Jan Kohlíček
            headers: {
553
                'Content-Type': 'application/json',
554
                'Accept': 'application/json',
555
                'jwt': config.API_TOKEN
556
            }
557 d68f7bbd Jan Kohlíček
        },
558
        'query': {
559
            url: config.API_URL + '/devices',
560
            method: 'GET',
561
            isArray: true,
562 49df590a Jan Kohlíček
            headers: {
563
                'Content-Type': 'application/json',
564
                'Accept': 'application/json',
565
                'jwt': config.API_TOKEN
566
            }
567 d68f7bbd Jan Kohlíček
        }
568
    });
569 0b27c108 Jan Kohlíček
});
570
571 49df590a Jan Kohlíček
app.factory('Vehicle', function ($resource, config) {
572
    return $resource(config.API_URL + '/vehicles', null, {
573 d68f7bbd Jan Kohlíček
        'query': {
574
            url: config.API_URL + '/vehicles',
575
            method: 'GET',
576
            isArray: true,
577 49df590a Jan Kohlíček
            headers: {
578
                'Content-Type': 'application/json',
579
                'Accept': 'application/json',
580
                'jwt': config.API_TOKEN
581
            }
582 d68f7bbd Jan Kohlíček
        }
583
    });
584 0b27c108 Jan Kohlíček
});