Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 3fef37e1

Přidáno uživatelem Cajova-Houba před téměř 7 roky(ů)

refs #6975: Pridan export do csv pro time-period a day-period.

Zobrazit rozdíly:

backend/app/Http/Controllers/DeviceController.php
74 74
     * @param $id
75 75
     * @return Zarizeni
76 76
     */
77
    public function getDeviceById($id) {
77
    public function getDeviceById($id)
78
    {
78 79
        return Zarizeni::findByIdJoinAddress($id);
79 80
    }
80 81

  
......
84 85
     * @param Request $request
85 86
     * @param $deviceId
86 87
     */
87
    public function findTrafficByDevice(Request $request, $deviceId) {
88
    public function findTrafficByDevice(Request $request, $deviceId)
89
    {
88 90
        // nacti parametry
89 91
        $params = $this->loadDateTimeDirectionConstraints($request);
90 92
        $dateFrom = $params[self::DATE_FROM_PARAM];
......
96 98
        return Zaznam::findByDevice($deviceId, $dateFrom, $dateTo, $timeFrom, $timeTo, $direction);
97 99
    }
98 100

  
101
    public function findDayAverageTrafficByDevice(Request $request, $deviceId) {
102
        // nacti parametry
103
        $params = $this->loadDateTimeDirectionConstraints($request);
104
        $dateFrom = $params[self::DATE_FROM_PARAM];
105
        $dateTo = $params[self::DATE_TO_PARAM];
106
        $direction = $params[self::DIRECTION_PARAM];
107

  
108
        return Zaznam::averageByDay($deviceId, $dateFrom, $dateTo, $direction);
109
    }
110

  
99 111
    /**
100 112
     * Nacte zarizeni spolecne se vsemi jeho zaznamy (podle url parametru) a vrati je jako stahnutelny csv soubor.
101 113
     * Csv bude obsahovat udaje o zarizeni na prvni radce, udaje o doprave na nasledujicich.
......
106 118
     * @param $id
107 119
     * @return Mixed_
108 120
     */
109
    public function getDeviceByIdAsCsv(Request $request, $id) {
110
        $device = $this->getDeviceById($id);
121
    public function getDeviceByIdAsCsv(Request $request, $id)
122
    {
123
        return $this->createCsvFileForDeviceData(
124
            $this->findDeviceByIdSetDates($request, $id),
125
            $this->findTrafficByDevice($request, $id),
126
            'doprava-export-'
127
        );
128
    }
111 129

  
130
    public function getTrafficAverageByDevice(Request $request, $id)
131
    {
132
        $device = $this->findDeviceByIdSetDates($request, $id);
112 133
        if ($device != null) {
113
            $devArray = json_decode(json_encode($device), true);
114
            // tmp file
115
            $tmpFileName = 'doprava-export-'.time().'.csv';
116
            $tmpFilePath = tempnam(sys_get_temp_dir(), $tmpFileName);
117
            $df = fopen($tmpFilePath, 'w');
118

  
119
            // hlavicka pro zarizeni
120
            fputcsv($df, array_keys($devArray));
121
            fputcsv($df, $devArray);
122 134

  
123
            // zaznamy o doprave
124
            $traffic = $this->findTrafficByDevice($request, $id);
125
            if ($traffic != null && count($traffic) > 0) {
126

  
127
                // hlavicka pro zaznamy
128
                $tr = $this->stdClassToArray($traffic[0]);
129
                fputcsv($df, array_keys($tr));
130

  
131
                // samotna data
132
                foreach ($traffic as $tr) {
133
                    $tr = $this->stdClassToArray($tr);
134
                    fputcsv($df, $tr);
135
                }
136
            }
137
            fclose($df);
138
            return response()->download($tmpFilePath, $tmpFileName, array())->deleteFileAfterSend(true);
135
            $device->traffics = $this->findTrafficAverageByDevice($request, $id);
136
            return json_encode($device);
139 137
        } else {
140 138
            return response('Not found.', 404);
141 139
        }
142 140
    }
143 141

  
144 142
    /**
145
     * Konvertuje objekt typu stdClass na pole pomoci funkci json_decode(), json_encode().
143
     * Vrati prumerna data o doprave pro dane zarizeni jako stahnutelny csv soubor.
146 144
     *
147
     * @param $object
148
     * @return Array_
145
     * @param Request $request
146
     * @param integer $id Id zarizeni.
147
     * @return Mixed_
149 148
     */
150
    private function stdClassToArray($object) {
151
        return json_decode(json_encode($object), true);
149
    public function getTrafficAverageByDeviceCsv(Request $request, $id) {
150
        return $this->createCsvFileForDeviceData(
151
            $this->findDeviceByIdSetDates($request, $id),
152
            $this->findDayAverageTrafficByDevice($request, $id),
153
            'doprava-prumery-export-'
154
            );
152 155
    }
153 156

  
154
    public function getTrafficAverageByDevice(Request $request, $id)
155
    {
157
    /**
158
     * Vrati prumerna data o doprave (pouze data o doprave) pro dane zarizeni.
159
     *
160
     * @param Request $request Request s parametry.
161
     * @param $deviceId Id zarizeni.
162
     * @return Mixed_
163
     */
164
    public function findTrafficAverageByDevice(Request $request, $deviceId) {
156 165
        // nacti parametry
157 166
        $params = $this->loadDateTimeDirectionConstraints($request);
158 167
        $dateFrom = $params[self::DATE_FROM_PARAM];
......
161 170
        $timeTo = $params[self::TIME_TO_PARAM];
162 171
        $direction = $params[self::DIRECTION_PARAM];
163 172

  
164
        $device = Zarizeni::findByIdJoinAddress($id);
165
        if ($device != null) {
166
            $device->dateFrom = $dateFrom;
167
            $device->dateTo = $dateTo;
168

  
169
            if ($direction != null) {
170
                $device->direction = intval($direction);
171
            }
172

  
173
            $device->traffics = Zaznam::averageByDevice($id, $dateFrom, $dateTo, $timeFrom, $timeTo, $direction);
174
            return json_encode($device);
175
        } else {
176
            return response('Not found.', 404);
177
        }
173
        return Zaznam::averageByDevice($deviceId, $dateFrom, $dateTo, $timeFrom, $timeTo, $direction);
178 174
    }
179 175

  
180 176
    /**
......
184 180
     * @param $id Id zarizeni.
185 181
     * @return Mixed_
186 182
     */
187
    public function getTrafficDayAverage(Request $request, $id) {
188
        // nacteni parametru
189
        $params = $this->loadDateTimeDirectionConstraints($request);
190
        $dateFrom = $params[self::DATE_FROM_PARAM];
191
        $dateTo = $params[self::DATE_TO_PARAM];
192
        $direction = $params[self::DIRECTION_PARAM];
183
    public function getTrafficDayAverage(Request $request, $id)
184
    {
185
        $device = $this->findDeviceByIdSetDates($request, $id);
193 186

  
194
        $device = Zarizeni::findByIdJoinAddress($id);
195 187
        if ($device != null) {
196
            $device->dateFrom = $dateFrom;
197
            $device->dateTo = $dateTo;
198

  
199
            if ($direction != null) {
200
                $device->direction = intval($direction);
201
            }
202

  
203
            $device->traffics = Zaznam::averageByDay($id, $dateFrom, $dateTo, $direction);
188
            $device->traffics = $this->findDayAverageTrafficByDevice($request, $id);
204 189
            return json_encode($device);
205 190
        } else {
206 191
            return response('Not found.', 404);
207 192
        }
208 193
    }
209 194

  
195

  
196
    /**
197
     * Vrati denni prumery pro jendotlive typy vozidel jako stahnutelny csv soubor.
198
     *
199
     * @param Request $request Request.
200
     * @param $id Id zarizeni.
201
     * @return Mixed_
202
     */
203
    public function getTrafficDayAverageCsv(Request $request, $id)
204
    {
205
        return $this->createCsvFileForDeviceData(
206
            $this->findDeviceByIdSetDates($request, $id),
207
            $this->findDayAverageTrafficByDevice($request, $id),
208
            'doprava-denni-prumery-export-'
209
        );
210
    }
211

  
210 212
    public function getAll()
211 213
    {
212 214
        return Zarizeni::getAllJoinAddress();
......
262 264

  
263 265
        return $params;
264 266
    }
267

  
268
    /**
269
     * Konvertuje objekt typu stdClass na pole pomoci funkci json_decode(), json_encode().
270
     *
271
     * @param $object
272
     * @return Array_
273
     */
274
    private function stdClassToArray($object)
275
    {
276
        return json_decode(json_encode($object), true);
277
    }
278

  
279
    /**
280
     * Prida hlavicku pole a data z pole do csv souboru.
281
     *
282
     * @param $df Ukazatel na soubor.
283
     * @param $array Pole.
284
     */
285
    private function addArrayToCsvFile($df, $array) {
286
        if ($array != null && count($array) > 0) {
287
            $row = $this->stdClassToArray($array[0]);
288
            fputcsv($df, array_keys($row));
289

  
290
            foreach ($array as $row) {
291
                fputcsv($df, $row);
292
            }
293
        }
294
    }
295

  
296
    /**
297
     * Funkce se pokusi nalezt zarizeni (s adresou) podle id a pokud najde, pokusi se z requestu dostat hodnoty parametru DATE_FROM,
298
     * DATE_TO a DIRECTION, ktere pak prida do nalezeneho zarizeni, ktere vrati. Pokud request uvedene parametry neobsahuje, budou
299
     * v zarizeni nastaveny na null.
300
     *
301
     * Pokud zarizeni nenajde, vrati null.
302
     *
303
     * @param Request $request Request s parametry.
304
     * @param integer $id id zarizeni.
305
     * @return Mixed_
306
     */
307
    private function findDeviceByIdSetDates(Request $request, $id) {
308
        // nacteni parametru
309
        $params = $this->loadDateTimeDirectionConstraints($request);
310
        $dateFrom = $params[self::DATE_FROM_PARAM];
311
        $dateTo = $params[self::DATE_TO_PARAM];
312
        $direction = $params[self::DIRECTION_PARAM];
313

  
314
        $device = Zarizeni::findByIdJoinAddress($id);
315
        if ($device != null) {
316
            $device->dateFrom = $dateFrom;
317
            $device->dateTo = $dateTo;
318

  
319
            if ($direction != null) {
320
                $device->direction = intval($direction);
321
            }
322
        }
323

  
324
        return $device;
325
    }
326

  
327
    /**
328
     * Vytvoří csv soubor pro zarizeni a souvisejici data o doprave a vynuti jeho stazeni.
329
     *
330
     * @param Mixed_ $device Metadata zarizeni (tj. zarizeni bez dat o doprave). Pokud null, je vracena response 404.
331
     * @param Mixed_ $traffic Data o doprave.
332
     * @param string $namePrefix Prefix jmena stahovaneho souboru.
333
     * @return Mixed_
334
     */
335
    private function createCsvFileForDeviceData($device, $traffic, $namePrefix) {
336

  
337
        if ($device != null) {
338
            $devArray = json_decode(json_encode($device), true);
339
            // tmp file
340
            $tmpFileName = $namePrefix . time() . '.csv';
341
            $tmpFilePath = tempnam(sys_get_temp_dir(), $tmpFileName);
342
            $df = fopen($tmpFilePath, 'w');
343

  
344
            // hlavicka pro zarizeni
345
            fputcsv($df, array_keys($devArray));
346
            fputcsv($df, $devArray);
347

  
348
            // zaznamy o doprave
349
            $traffic = $this->stdClassToArray($traffic);
350
            $this->addArrayToCsvFile($df, $traffic);
351
            fclose($df);
352
            return response()->download($tmpFilePath, $tmpFileName, array())->deleteFileAfterSend(true);
353
        } else {
354
            return response('Not found.', 404);
355
        }
356
    }
265 357
}

Také k dispozici: Unified diff