Projekt

Obecné

Profil

Stáhnout (10.3 KB) Statistiky
| Větev: | Revize:
1
angular.module('pvpk')
2
    .controller('infoController', ['$rootScope', '$scope', '$location', 'config', 'Device', 'Vehicle', 'Range', function ($rootScope, $scope, $location, config, Device, Vehicle, Range) {
3

    
4
        this.$onInit = function () {
5
            $rootScope.selectDevice = null;
6
            $scope.showInfoLoading = false;
7
            $scope.vehicles = [];
8
            $scope.urlExportCsv = null;
9
            $scope.directions = [
10
                {id: undefined, name: 'po směru i proti směru'},
11
                {id: 1, name: 'po směru'},
12
                {id: 2, name: 'proti směru'}];
13
            $scope.isLoadRange = false;
14

    
15
            Vehicle.query(null, function (data) {
16
                $scope.vehicles = data;
17
            }, function (response) {
18
                $rootScope.graphShow = false;
19
                console.log('Error api all Vehicles');
20
                $rootScope.handleErrorResponse(response);
21
            });
22

    
23
            $rootScope.$emit('setRangeFromUrl', null);
24
        };
25

    
26
        $rootScope.$on('setRangeFromUrl', function (event, args) {
27
            var params = $location.search();
28

    
29
            $scope.range = {
30
                fromDate: moment(params.fromDate, 'YYYY-MM-DD').isValid() ? moment(params.fromDate).toDate() : moment().add(config.DEFAULT_RANGE_DATE_DAY.from, 'd').toDate(),
31
                toDate: moment(params.toDate, 'YYYY-MM-DD').isValid() ? moment(params.toDate).toDate() : moment().add(config.DEFAULT_RANGE_DATE_DAY.to, 'd').toDate(),
32
                fromTime: moment(params.fromTime, 'HH:mm').isValid() ? moment(params.fromTime, 'HH:mm').toDate() : moment({hour: config.DEFAULT_RANGE_TIME_HOUR.from}).toDate(),
33
                toTime: moment(params.toTime, 'HH:mm').isValid() ? moment(params.toTime, 'HH:mm').toDate() : moment({hour: config.DEFAULT_RANGE_TIME_HOUR.to}).toDate(),
34
                isTime: params.isTime == 0 ? false : true,
35
                maxDate: $scope.range == null ? null : $scope.range.maxDate,
36
                minDate: $scope.range == null ? null : $scope.range.minDate
37
            };
38

    
39
            if (!$scope.isLoadRange) {
40
                Range.get(null, function (data) {
41
                    $scope.range.fromDate = moment.max(moment(data.last_date).add(config.DEFAULT_RANGE_DATE_DAY.from, 'd'), moment(data.first_date)).toDate();
42
                    $scope.range.toDate = moment.min(moment($scope.range.toDate), moment(data.last_date)).toDate();
43
                    $scope.range.maxDate = moment(data.last_date).toDate();
44
                    $scope.range.minDate = moment(data.first_date).toDate();
45
                    $scope.isLoadRange = true;
46
                }, function (response) {
47
                    console.log('Error api get Range');
48
                    $rootScope.handleErrorResponse(response);
49
                });
50
            }
51
        });
52

    
53
        $rootScope.$on('infoLocation', function (event, args) {
54
            $scope.showInfoLoading = true;
55

    
56
            var params = $location.search();
57
            params.deviceId = args.id;
58
            params.direction = args.direction;
59
            $location.search(params);
60

    
61
            var range = $scope.getRange();
62

    
63
            var query = {
64
                period: range.isTime ? 'time-period' : 'day-period',
65
                id: args.id,
66
                direction: args.direction,
67
                dateFrom: range.fromDate.format('YYYY-MM-DD'),
68
                dateTo: range.toDate.format('YYYY-MM-DD'),
69
                timeFrom: range.isTime ? range.fromTime.format('HH:mm') : null,
70
                timeTo: range.isTime ? range.toTime.format('HH:mm') : null
71
            };
72

    
73
            Device.get(query, function (data) {
74
                $rootScope.selectDevice = data;
75
                $scope.renderGraph();
76
                $scope.urlExportCsv = $scope.generateUrlExportCsv(query);
77

    
78
                $scope.showInfoLoading = false;
79
            }, function (response) {
80
                $rootScope.selectDevice = null;
81
                $scope.showInfoLoading = false;
82
                console.log('Error api get Devices');
83
                $rootScope.handleErrorResponse(response);
84
            });
85

    
86
        });
87

    
88
        $scope.generateUrlExportCsv = function (query) {
89
            var relativeUrl = '/devices/:id/:period/csv?'.replace(':id', query.id).replace(':period', query.period);
90
            delete query.id;
91
            delete query.period;
92

    
93
            var paramsUrl = jQuery.param(query);
94
            return config.API_URL + relativeUrl + paramsUrl;
95
        };
96

    
97
        $scope.changeRange = function () {
98
            if ($scope.range.fromDate >= $scope.range.toDate || ($scope.range.isTime && $scope.range.fromTime >= $scope.range.toTime)) {
99
                $rootScope.selectDevice.traffics = [];
100
                return;
101
            }
102

    
103
            if (!($scope.range.fromDate >= $scope.range.minDate && $scope.range.toDate <= $scope.range.maxDate
104
                && $scope.range.toDate >= $scope.range.minDate && $scope.range.fromDate <= $scope.range.maxDate)) {
105
                $rootScope.selectDevice.traffics = [];
106
                return;
107
            }
108

    
109

    
110
            var range = $scope.getRange();
111

    
112
            var params = $location.search();
113
            params.fromDate = range.fromDate.format('YYYY-MM-DD');
114
            params.toDate = range.toDate.format('YYYY-MM-DD');
115
            params.fromTime = range.isTime ? range.fromTime.format('HH:mm') : null;
116
            params.toTime = range.isTime ? range.toTime.format('HH:mm') : null;
117
            params.isTime = range.isTime ? null : 0;
118
            $location.search(params);
119

    
120
            if ($rootScope.selectDevice)
121
                $rootScope.$emit('infoLocation', {
122
                    id: $rootScope.selectDevice.id,
123
                    direction: $rootScope.selectDevice.direction
124
                });
125
        };
126

    
127
        $scope.changeDirection = function () {
128

    
129
            $rootScope.$emit('infoLocation', {
130
                id: $rootScope.selectDevice.id,
131
                direction: $rootScope.selectDevice.direction
132
            });
133
        };
134

    
135
        $scope.getRange = function () {
136
            return {
137
                fromDate: moment($scope.range.fromDate).isValid() ? moment($scope.range.fromDate) : moment().add(config.DEFAULT_RANGE_DATE_DAY.from, 'd'),
138
                toDate: moment($scope.range.toDate).isValid() ? moment($scope.range.toDate) : moment().add(config.DEFAULT_RANGE_DATE_DAY.to, 'd'),
139
                fromTime: moment($scope.range.fromTime).isValid() ? moment($scope.range.fromTime) : moment({hour: config.DEFAULT_RANGE_TIME_HOUR.from}),
140
                toTime: moment($scope.range.toTime).isValid() ? moment($scope.range.toTime) : moment({hour: config.DEFAULT_RANGE_TIME_HOUR.to}),
141
                isTime: $scope.range.isTime ? true : false
142
            };
143
        };
144

    
145
        $scope.renderGraph = function () {
146
            var color = ['rgba(158, 158, 158, #alpha)', 'rgba(213, 0, 0, #alpha)', 'rgba(0, 123, 255, #alpha)', 'rgba(170, 0, 255, #alpha)',
147
                'rgba(0, 200, 83, #alpha)', 'rgba(255, 214, 0, #alpha)', 'rgba(255, 109, 0, #alpha)',
148
                '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)'];
149

    
150
            var labels = jQuery.unique($rootScope.selectDevice.traffics.map(function (d) {
151
                return $scope.range.isTime ? d.timeFrom : moment(d.date, 'YYYY-MM-DD').format('D.M.YYYY');
152
            }));
153

    
154
            var useVehiclesIds = jQuery.unique($rootScope.selectDevice.traffics.map(function (d) {
155
                return d.typeVehicleId;
156
            }));
157

    
158
            var filterVehicles = jQuery.grep($scope.vehicles, function (n) {
159
                return useVehiclesIds.indexOf(n.id) >= 0;
160
            });
161

    
162
            var datasetsNumberVehicles = [];
163
            var datasetsAverageSpeed = [];
164

    
165
            for (var i = 0, vehicle; vehicle = filterVehicles[i]; i++) {
166
                var datasetNumberVehicles = {
167
                    label: vehicle.name,
168
                    backgroundColor: color[vehicle.id].replace("#alpha", "0.3"),
169
                    borderColor: color[vehicle.id].replace("#alpha", "1"),
170
                    borderWidth: 2,
171
                    data: []
172
                };
173

    
174
                var datasetAverageSpeed = {
175
                    data: [],
176
                    borderWidth: 2,
177
                    label: vehicle.name,
178
                    fill: false,
179
                    backgroundColor: color[vehicle.id].replace("#alpha", "0.3"),
180
                    borderColor: color[vehicle.id].replace("#alpha", "1"),
181
                    cubicInterpolationMode: 'monotone',
182
                    pointRadius: 0
183
                };
184

    
185
                var l = 0;
186
                for (var j = 0, traffic; traffic = $rootScope.selectDevice.traffics[j]; j++) {
187
                    if (($scope.range.isTime && labels[l] !== traffic.timeFrom) || (!$scope.range.isTime && labels[l] !== moment(traffic.date, 'YYYY-MM-DD').format('D.M.YYYY'))) {
188
                        l++;
189
                        if (datasetNumberVehicles.data.length < l) {
190
                            datasetNumberVehicles.data.push(0);
191
                            datasetAverageSpeed.data.push(0);
192
                        }
193
                    }
194
                    if (traffic.typeVehicleId === vehicle.id) {
195
                        datasetNumberVehicles.data.push($scope.range.isTime ? traffic.numberVehicleAverage : traffic.numberVehicle);
196
                        datasetAverageSpeed.data.push(traffic.speedAverage <= 0 ? 0 : traffic.speedAverage);
197
                    }
198
                }
199
                datasetsNumberVehicles.push(datasetNumberVehicles);
200
                datasetsAverageSpeed.push(datasetAverageSpeed);
201
            }
202

    
203
            $rootScope.$emit('renderGraphNumberVehicles', {
204
                data: {
205
                    labels: labels,
206
                    datasets: datasetsNumberVehicles
207
                }
208
            });
209

    
210
            $rootScope.$emit('renderGraphAverageSpeed', {
211
                data: {
212
                    labels: labels,
213
                    datasets: datasetsAverageSpeed
214
                }
215
            });
216
        };
217

    
218
        $scope.infoClose = function () {
219
            $rootScope.selectDevice = null;
220

    
221
            var params = $location.search();
222
            params.deviceId = null;
223
            params.direction = null;
224
            $location.search(params);
225

    
226
            $rootScope.$emit('setDefaultMap', null);
227
        };
228
    }]);
(1-1/4)