Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16766 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
16701 efrain 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
16768 efrain 8
 
16701 efrain 9
use Laminas\Mvc\Controller\AbstractActionController;
10
use Laminas\Log\LoggerInterface;
11
use Laminas\View\Model\ViewModel;
12
use Laminas\View\Model\JsonModel;
13
use LeadersLinked\Library\Functions;
14
use LeadersLinked\Mapper\FastSurveyMapper;
15
use LeadersLinked\Form\FastSurvey\FastSurveyForm;
16
use LeadersLinked\Model\FastSurvey;
17
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
18
use LeadersLinked\Model\Feed;
19
use LeadersLinked\Mapper\CompanyUserMapper;
20
use LeadersLinked\Mapper\FeedMapper;
16747 efrain 21
use LeadersLinked\Mapper\QueryMapper;
22
use LeadersLinked\Mapper\UserMapper;
23
use PhpOffice\PhpSpreadsheet\IOFactory;
24
use PhpOffice\PhpSpreadsheet\Spreadsheet;
25
use LeadersLinked\Mapper\FastSurveyVoteMapper;
16701 efrain 26
 
27
class FastSurveyController extends AbstractActionController {
28
 
29
    /**
30
     *
31
     * @var AdapterInterface
32
     */
33
    private $adapter;
16768 efrain 34
 
16701 efrain 35
    /**
36
     *
37
     * @var  LoggerInterface
38
     */
39
    private $logger;
16768 efrain 40
 
16701 efrain 41
    /**
42
     *
43
     * @var array
44
     */
45
    private $config;
16768 efrain 46
 
16701 efrain 47
    /**
48
     *
49
     * @param AdapterInterface $adapter
50
     * @param LoggerInterface $logger
51
     * @param array $config
52
     */
16768 efrain 53
    public function __construct($adapter, $logger, $config)
54
    {
16701 efrain 55
        $this->adapter = $adapter;
56
        $this->logger = $logger;
57
        $this->config = $config;
58
    }
59
 
60
    public function indexAction()
61
    {
62
        $currentUserPlugin = $this->plugin('currentUserPlugin');
63
        $currentUser = $currentUserPlugin->getUser();
64
        $currentCompany = $currentUserPlugin->getCompany();
65
 
66
        $request = $this->getRequest();
67
 
68
        $request = $this->getRequest();
69
        if($request->isGet()) {
70
 
71
 
72
            $headers  = $request->getHeaders();
73
 
74
            $isJson = false;
75
            if($headers->has('Accept')) {
76
                $accept = $headers->get('Accept');
77
 
78
                $prioritized = $accept->getPrioritized();
79
 
80
                foreach($prioritized as $key => $value) {
81
                    $raw = trim($value->getRaw());
82
 
83
                    if(!$isJson) {
84
                        $isJson = strpos($raw, 'json');
85
                    }
86
 
87
                }
88
            }
89
 
90
 
91
            if($isJson) {
92
 
93
 
94
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
95
                $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'fast-survey/edit');
96
                $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'fast-survey/delete');
16747 efrain 97
                $allowChart = $acl->isAllowed($currentUser->usertype_id, 'fast-survey/chart');
16701 efrain 98
                $allowDownload = $acl->isAllowed($currentUser->usertype_id, 'fast-survey/download');
99
 
100
 
101
 
102
                $search = $this->params()->fromQuery('search');
16766 efrain 103
                $search = empty($search['value']) ? '' :  Functions::sanitizeFilterString($search['value']);
16701 efrain 104
 
105
                $page               = intval($this->params()->fromQuery('start', 1), 10);
106
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
107
                $order =  $this->params()->fromQuery('order', []);
108
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
16766 efrain 109
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(Functions::sanitizeFilterString($order[0]['dir']));
16701 efrain 110
 
111
                $fields =  ['added_on'];
112
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'added_on';
113
 
114
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
115
                    $order_direction = 'DESC';
116
                }
117
 
118
                $fastSurveyMapper = FastSurveyMapper::getInstance($this->adapter);
119
 
120
                $paginator = $fastSurveyMapper->fetchAllDataTable($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);
121
 
122
 
123
                $items = [];
124
                $records = $paginator->getCurrentItems();
125
                foreach($records as $record)
126
                {
127
                    $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->added_on);
128
                    $added_on = $dt->format('d/m/Y h:i a');
129
 
130
                    $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->expire_on);
131
                    $expire_on = $dt->format('d/m/Y h:i a');
132
 
133
                    $votes = $record->votes1
134
                        + $record->votes2
135
                        + $record->votes3
136
                        + $record->votes4
137
                        + $record->votes5;
138
 
139
                    switch($record->status)
140
                    {
141
                        case FastSurvey::STATUS_ACTIVE :
142
                            $status = 'LABEL_ACTIVE';
143
                            break;
144
 
145
                        default :
146
                            $status = 'LABEL_INACTIVE';
147
                            break;
148
 
149
                    }
150
 
151
 
152
                    $item = [
153
                        'question' => $record->question,
154
                        'details' => [
155
                            'added_on' => $added_on,
156
                            'expire_on' => $expire_on,
157
                        ],
158
                        'votes' => $votes,
159
                        'actions' => [
160
                            'link_edit' => $allowEdit && !$votes ?   $this->url()->fromRoute('fast-survey/edit', ['id' => $record->uuid ]) : '',
161
                            'link_delete' => $allowDelete && !$votes ? $this->url()->fromRoute('fast-survey/delete', ['id' => $record->uuid ]) : '',
16747 efrain 162
                            'link_chart' => $allowChart ? $this->url()->fromRoute('fast-survey/chart', ['id' => $record->uuid ]) : '',
16701 efrain 163
                            'link_download' => $allowDownload ? $this->url()->fromRoute('fast-survey/download', ['id' => $record->uuid ]) : '',
164
                        ],
165
 
166
                    ];
167
 
168
                    array_push($items, $item);
169
                }
170
 
171
                return new JsonModel([
172
                    'success' => true,
173
                    'data' => [
174
                        'items' => $items,
175
                        'total' => $paginator->getTotalItemCount(),
176
                    ]
177
                ]);
178
            } else  {
179
                $form = new FastSurveyForm();
180
 
181
                $this->layout()->setTemplate('layout/layout-backend');
182
                $viewModel = new ViewModel();
183
                $viewModel->setTemplate('leaders-linked/fast-survey/index.phtml');
184
                $viewModel->setVariables([
185
                    'form' => $form
186
                ]);
187
                return $viewModel ;
188
            }
189
 
190
        } else {
191
            return new JsonModel([
192
                'success' => false,
193
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
194
            ]);;
195
        }
196
    }
197
 
198
    public function addAction()
199
    {
200
        $currentUserPlugin = $this->plugin('currentUserPlugin');
201
        $currentUser = $currentUserPlugin->getUser();
202
 
203
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
204
        $currentNetwork = $currentNetworkPlugin->getNetwork();
205
 
206
        $currentCompany = $currentUserPlugin->getCompany();
207
 
208
        $request = $this->getRequest();
209
 
210
 
211
        if ($request->isPost()) {
212
 
213
 
214
            $form = new FastSurveyForm();
215
            $dataPost = $request->getPost()->toArray();
216
 
217
            $form->setData($dataPost);
218
            if ($form->isValid()) {
219
 
220
                $dataPost = (array) $form->getData();
221
 
222
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
223
                $companyUser = $companyUserMapper->fetchOwnerByCompanyId($currentCompany->id);
224
 
225
 
226
 
227
 
228
                $hydrator = new ObjectPropertyHydrator();
229
                $fastSurvey = new FastSurvey();
230
                $hydrator->hydrate($dataPost, $fastSurvey);
231
 
232
                $fastSurvey->network_id = $currentNetwork->id;
233
                $fastSurvey->company_id = $currentCompany->id;
234
                $fastSurvey->user_id = $companyUser->id;
235
                $fastSurvey->status = FastSurvey::STATUS_ACTIVE;
236
 
237
                $fastSurveyMapper = FastSurveyMapper::getInstance($this->adapter);
238
                $result = $fastSurveyMapper->insert($fastSurvey);
239
                if ($result) {
240
                    $feed = new Feed();
241
                    $feed->company_id = $currentCompany->id;
242
                    $feed->network_id = $currentNetwork->id;
243
                    $feed->user_id = $companyUser->id;
244
                    $feed->fast_survey_id = $fastSurvey->id;
245
                    $feed->type = Feed::TYPE_COMPANY;
246
                    $feed->file_type = Feed::FILE_TYPE_FAST_SURVEY;
247
                    $feed->posted_or_shared = Feed::POSTED;
248
                    $feed->status = Feed::STATUS_PUBLISHED;
249
                    $feed->title = '';
250
                    $feed->description = '';
251
                    $feed->total_comments   = 0;
252
                    $feed->total_shared     = 0;
253
 
254
                    $feed->shared_with      = Feed::SHARE_WITH_CONNECTIONS;
255
 
256
                    $feedMapper = FeedMapper::getInstance($this->adapter);
257
                    $feedMapper->insert($feed);
258
 
259
                    $response = [
260
                        'success' => true,
261
                        'data' => 'LABEL_RECORD_ADDED',
262
                    ];
263
 
264
                    $this->logger->info('Se agrego la encuesta rápida : ' . $fastSurvey->question, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
265
 
266
                } else {
267
                    $response = [
268
                        'success' => false,
269
                        'data' => $fastSurveyMapper->getError()
270
                    ];
271
                }
272
 
273
                return new JsonModel($response);
274
            } else {
275
                $messages = [];
276
                $form_messages = (array) $form->getMessages();
277
                foreach ($form_messages as $fieldname => $field_messages) {
278
 
279
                    $messages[$fieldname] = array_values($field_messages);
280
                }
281
 
282
                return new JsonModel([
283
                    'success' => false,
284
                    'data' => $messages
285
                ]);
286
            }
287
        } else {
288
            $data = [
289
                'success' => false,
290
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
291
            ];
292
 
293
            return new JsonModel($data);
294
        }
295
 
296
        return new JsonModel($data);
297
    }
298
 
299
    public function editAction()
300
    {
301
        $currentUserPlugin = $this->plugin('currentUserPlugin');
302
        $currentUser = $currentUserPlugin->getUser();
303
        $currentCompany = $currentUserPlugin->getCompany();
304
 
305
        $request = $this->getRequest();
306
        $id = $this->params()->fromRoute('id');
307
 
308
 
309
        if (!$id) {
310
            $data = [
311
                'success' => false,
312
                'data' => 'ERROR_INVALID_PARAMETER'
313
            ];
314
 
315
            return new JsonModel($data);
316
        }
317
 
318
        $fastSurveyMapper = FastSurveyMapper::getInstance($this->adapter);
319
        $fastSurvey = $fastSurveyMapper->fetchOneByUuid($id);
320
        if (!$fastSurvey) {
321
            $data = [
322
                'success' => false,
323
                'data' => 'ERROR_RECORD_NOT_FOUND'
324
            ];
325
 
326
            return new JsonModel($data);
327
        }
328
 
329
        if($fastSurvey->company_id != $currentCompany->id) {
330
            $response = [
331
                'success' => false,
332
                'data' =>  'ERROR_UNAUTHORIZED'
333
            ];
334
 
335
            return new JsonModel($response);
336
        }
337
 
338
        if($fastSurvey->votes1 > 0 || $fastSurvey->votes2 > 0|| $fastSurvey->votes3 > 0|| $fastSurvey->votes4 > 0|| $fastSurvey->votes5 > 0) {
339
            $response = [
340
                'success' => false,
341
                'data' =>  'ERROR_FAST_SURVEY_THERE_ARE_VOTES'
342
            ];
343
 
344
            return new JsonModel($response);
345
        }
346
 
347
        if ($request->isPost()) {
348
            $form = new FastSurveyForm();
349
            $dataPost = $request->getPost()->toArray();
350
 
351
            $form->setData($dataPost);
352
 
353
            if ($form->isValid()) {
354
                $dataPost = (array) $form->getData();
355
 
356
                $hydrator = new ObjectPropertyHydrator();
357
                $hydrator->hydrate($dataPost, $fastSurvey);
358
 
359
                $result = $fastSurveyMapper->update($fastSurvey);
360
                if ($result) {
361
                    $this->logger->info('Se actualizo la encuesta : ' . $fastSurvey->question, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
362
 
363
                    $data = [
364
                        'success' => true,
365
                        'data' => 'LABEL_RECORD_UPDATED'
366
                    ];
367
                } else {
368
                    $data = [
369
                        'success' => false,
370
                        'data' => $fastSurveyMapper->getError()
371
                    ];
372
                }
373
 
374
                return new JsonModel($data);
375
            } else {
376
                $messages = [];
377
                $form_messages = (array) $form->getMessages();
378
                foreach ($form_messages as $fieldname => $field_messages) {
379
                    $messages[$fieldname] = array_values($field_messages);
380
                }
381
 
382
                return new JsonModel([
383
                    'success' => false,
384
                    'data' => $messages
385
                ]);
386
            }
387
        } else if ($request->isGet()) {
388
            $hydrator = new ObjectPropertyHydrator();
389
 
390
            $data = [
391
                'success' => true,
392
                'data' => [
393
                    'question' => $fastSurvey->question,
394
                    'number_of_answers' => $fastSurvey->number_of_answers,
395
                    'answer1' => $fastSurvey->answer1,
396
                    'answer2' => $fastSurvey->answer2,
397
                    'answer3' => $fastSurvey->answer3,
398
                    'answer4' => $fastSurvey->answer4,
399
                    'answer5' => $fastSurvey->answer5,
400
                    'duration_days' => $fastSurvey->duration_days,
401
                    'duration_hours' => $fastSurvey->duration_hours,
402
                    'duration_minutes' => $fastSurvey->duration_minutes,
403
                    'status' => $fastSurvey->status,
404
                    'privacy' => $fastSurvey->privacy,
405
                    'result_type' => $fastSurvey->result_type,
406
                ]
407
            ];
408
 
409
            return new JsonModel($data);
410
        } else {
411
            $data = [
412
                'success' => false,
413
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
414
            ];
415
 
416
            return new JsonModel($data);
417
        }
418
 
419
        return new JsonModel($data);
420
    }
421
 
422
    public function deleteAction()
423
    {
424
        $currentUserPlugin = $this->plugin('currentUserPlugin');
425
        $currentUser = $currentUserPlugin->getUser();
426
        $currentCompany = $currentUserPlugin->getCompany();
427
 
428
        $request = $this->getRequest();
429
        if ($request->isPost()) {
430
 
431
            $id = $this->params()->fromRoute('id');
432
            if (!$id) {
433
                $response = [
434
                    'success' => false,
435
                    'data' => 'ERROR_INVALID_PARAMETER'
436
                ];
437
 
438
                return new JsonModel($response);
439
            }
440
 
441
 
442
 
443
            $fastSurveyMapper = FastSurveyMapper::getInstance($this->adapter);
444
            $fastSurvey = $fastSurveyMapper->fetchOneByUuid($id);
445
            if (!$fastSurvey) {
446
                $data = [
447
                    'success' => false,
448
                    'data' => 'ERROR_RECORD_NOT_FOUND'
449
                ];
450
 
451
                return new JsonModel($data);
452
            }
453
 
454
            if($fastSurvey->company_id != $currentCompany->id) {
455
                $response = [
456
                    'success' => false,
457
                    'data' =>  'ERROR_UNAUTHORIZED'
458
                ];
459
 
460
                return new JsonModel($response);
461
            }
462
 
463
            if($fastSurvey->votes1 > 0 || $fastSurvey->votes2 > 0|| $fastSurvey->votes3 > 0|| $fastSurvey->votes4 > 0|| $fastSurvey->votes5 > 0) {
464
                $response = [
465
                    'success' => false,
466
                    'data' =>  'ERROR_FAST_SURVEY_THERE_ARE_VOTES'
467
                ];
468
 
469
                return new JsonModel($response);
470
            }
471
 
472
 
473
            $feedMapper = FeedMapper::getInstance($this->adapter);
474
            $feedMapper->deleteByFastSurvey($fastSurvey);
475
 
476
            $result = $fastSurveyMapper->delete($fastSurvey);
477
            if ($result) {
478
 
479
 
480
 
481
                $this->logger->info('Se borro la encuesta : ' . $fastSurvey->question, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
482
 
483
                $response = [
484
                    'success' => true,
485
                    'data' => 'LABEL_RECORD_DELETED'
486
                ];
487
            } else {
488
 
489
                $response = [
490
                    'success' => false,
491
                    'data' => $fastSurveyMapper->getError()
492
                ];
493
 
494
            }
495
        } else {
496
            $response = [
497
                'success' => false,
498
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
499
            ];
500
 
501
        }
502
 
503
        return new JsonModel($response);
504
    }
505
 
506
 
16747 efrain 507
    public function chartAction()
508
    {
509
        $currentUserPlugin = $this->plugin('currentUserPlugin');
510
        $currentUser = $currentUserPlugin->getUser();
511
        $currentCompany = $currentUserPlugin->getCompany();
512
 
513
 
514
        $id = $this->params()->fromRoute('id');
515
 
516
 
517
        if (!$id) {
518
            $data = [
519
                'success' => false,
520
                'data' => 'ERROR_INVALID_PARAMETER'
521
            ];
522
 
523
            return new JsonModel($data);
524
        }
525
 
526
        $fastSurveyMapper = FastSurveyMapper::getInstance($this->adapter);
527
        $fastSurvey = $fastSurveyMapper->fetchOneByUuid($id);
528
        if (!$fastSurvey) {
529
            $data = [
530
                'success' => false,
531
                'data' => 'ERROR_RECORD_NOT_FOUND'
532
            ];
533
 
534
            return new JsonModel($data);
535
        }
536
 
537
        if($fastSurvey->company_id != $currentCompany->id) {
538
            $response = [
539
                'success' => false,
540
                'data' =>  'ERROR_UNAUTHORIZED'
541
            ];
542
 
543
            return new JsonModel($response);
544
        }
545
 
546
 
547
        $request = $this->getRequest();
548
        if ($request->isGet()) {
549
            $data = [
550
                'question'  => $fastSurvey->question,
551
                'labels'    => [$fastSurvey->answer1, $fastSurvey->answer2],
552
                'values'    => [$fastSurvey->votes1, $fastSurvey->votes2],
553
            ];
554
 
16749 efrain 555
 
16747 efrain 556
            if($fastSurvey->number_of_answers >= 3) {
557
                array_push($data['labels'], $fastSurvey->answer3);
558
                array_push($data['values'], $fastSurvey->votes3);
16749 efrain 559
            }
560
            if($fastSurvey->number_of_answers >= 4) {
16747 efrain 561
                array_push($data['labels'], $fastSurvey->answer4);
562
                array_push($data['values'], $fastSurvey->votes4);
16749 efrain 563
            }
564
            if($fastSurvey->number_of_answers == 5) {
16747 efrain 565
                array_push($data['labels'], $fastSurvey->answer5);
566
                array_push($data['values'], $fastSurvey->votes5);
567
            }
16749 efrain 568
 
569
 
16747 efrain 570
 
571
            return new JsonModel([
572
                'success' => true,
573
                'data' => $data,
574
            ]);
575
 
576
        } else {
577
            return new JsonModel([
578
                'success' => false,
579
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
580
            ]);
581
        }
582
    }
16701 efrain 583
 
16747 efrain 584
    public function downloadAction()
585
    {
586
        $currentUserPlugin = $this->plugin('currentUserPlugin');
587
        $currentUser = $currentUserPlugin->getUser();
588
        $currentCompany = $currentUserPlugin->getCompany();
589
 
590
 
591
        $id = $this->params()->fromRoute('id');
592
 
593
 
594
        if (!$id) {
595
            $data = [
596
                'success' => false,
597
                'data' => 'ERROR_INVALID_PARAMETER'
598
            ];
599
 
600
            return new JsonModel($data);
601
        }
602
 
603
        $fastSurveyMapper = FastSurveyMapper::getInstance($this->adapter);
604
        $fastSurvey = $fastSurveyMapper->fetchOneByUuid($id);
605
        if (!$fastSurvey) {
606
            $data = [
607
                'success' => false,
608
                'data' => 'ERROR_RECORD_NOT_FOUND'
609
            ];
610
 
611
            return new JsonModel($data);
612
        }
613
 
614
        if($fastSurvey->company_id != $currentCompany->id) {
615
            $response = [
616
                'success' => false,
617
                'data' =>  'ERROR_UNAUTHORIZED'
618
            ];
619
 
620
            return new JsonModel($response);
621
        }
622
 
623
 
624
        $request = $this->getRequest();
625
        if ($request->isGet()) {
626
 
627
 
628
 
629
 
630
            $spreadsheet = new Spreadsheet();
631
            $spreadsheet->getProperties()->setTitle($fastSurvey->question);
632
 
633
 
16749 efrain 634
 
635
 
16747 efrain 636
            $spreadsheet->setActiveSheetIndex(0);
16749 efrain 637
            $spreadsheet->getActiveSheet()->SetCellValue('A1', strtoupper($fastSurvey->question));
638
            $spreadsheet->getActiveSheet()->getCell('A1')->getStyle()->getAlignment()->setHorizontal( 'center');
639
            $spreadsheet->getActiveSheet()->getCell('A1')->getStyle()->getFont()->setBold(true);
16747 efrain 640
 
16749 efrain 641
 
642
            if($fastSurvey->number_of_answers == 5) {
643
                $spreadsheet->getActiveSheet()->mergeCells('A1:I1');
644
            } else if($fastSurvey->number_of_answers == 4) {
645
                $spreadsheet->getActiveSheet()->mergeCells('A1:H1');
646
            } else if($fastSurvey->number_of_answers == 3) {
16747 efrain 647
                $spreadsheet->getActiveSheet()->mergeCells('A1:G1');
16749 efrain 648
            } else {
649
                $spreadsheet->getActiveSheet()->mergeCells('A1:F1');
16747 efrain 650
            }
651
 
16749 efrain 652
            $spreadsheet->getActiveSheet()->SetCellValue('A3', 'TOTAL DE VOTOS');
653
            $spreadsheet->getActiveSheet()->getCell('A3')->getStyle()->getAlignment()->setHorizontal( 'center');
654
            $spreadsheet->getActiveSheet()->getCell('A3')->getStyle()->getFont()->setBold(true);
16747 efrain 655
 
656
 
16749 efrain 657
            if($fastSurvey->number_of_answers == 5) {
658
                $spreadsheet->getActiveSheet()->mergeCells('A3:I3');
659
            } else if($fastSurvey->number_of_answers == 4) {
660
                $spreadsheet->getActiveSheet()->mergeCells('A3:H3');
661
            } else if($fastSurvey->number_of_answers == 3) {
662
                $spreadsheet->getActiveSheet()->mergeCells('A3:G3');
663
            } else {
664
                $spreadsheet->getActiveSheet()->mergeCells('A3:F3');
665
            }
16747 efrain 666
 
16749 efrain 667
            $spreadsheet->getActiveSheet()->SetCellValue('A4', $fastSurvey->answer1);
668
            $spreadsheet->getActiveSheet()->SetCellValue('A5', $fastSurvey->votes1);
669
 
670
 
671
            $spreadsheet->getActiveSheet()->SetCellValue('B4', $fastSurvey->answer2);
672
            $spreadsheet->getActiveSheet()->SetCellValue('B5', $fastSurvey->votes2);
673
 
16747 efrain 674
            if($fastSurvey->number_of_answers >= 3) {
16749 efrain 675
                $spreadsheet->getActiveSheet()->SetCellValue('C4', $fastSurvey->answer3);
676
                $spreadsheet->getActiveSheet()->SetCellValue('C5', $fastSurvey->votes3);
16747 efrain 677
 
678
 
16749 efrain 679
            }
680
            if($fastSurvey->number_of_answers >= 4) {
16747 efrain 681
 
16749 efrain 682
                $spreadsheet->getActiveSheet()->SetCellValue('D4', $fastSurvey->answer4);
683
                $spreadsheet->getActiveSheet()->SetCellValue('D5', $fastSurvey->votes4);
16747 efrain 684
 
16749 efrain 685
            }
686
            if($fastSurvey->number_of_answers == 5) {
16747 efrain 687
 
16749 efrain 688
                $spreadsheet->getActiveSheet()->SetCellValue('E4', $fastSurvey->answer5);
689
                $spreadsheet->getActiveSheet()->SetCellValue('E5', $fastSurvey->votes5);
16747 efrain 690
            }
691
 
16749 efrain 692
            $spreadsheet->getActiveSheet()->SetCellValue('A7', 'DETALLE DE LOS USUARIOS');
693
            $spreadsheet->getActiveSheet()->getCell('A7')->getStyle()->getAlignment()->setHorizontal( 'center');
694
            $spreadsheet->getActiveSheet()->getCell('A7')->getStyle()->getFont()->setBold(true);
16747 efrain 695
 
16749 efrain 696
            if($fastSurvey->number_of_answers == 5) {
697
                $spreadsheet->getActiveSheet()->mergeCells('A7:I7');
698
            } else if($fastSurvey->number_of_answers == 4) {
699
                $spreadsheet->getActiveSheet()->mergeCells('A7:H7');
700
            } else if($fastSurvey->number_of_answers == 3) {
701
                $spreadsheet->getActiveSheet()->mergeCells('A7:G7');
702
            } else {
703
                $spreadsheet->getActiveSheet()->mergeCells('A7:F7');
16747 efrain 704
            }
705
 
706
 
16749 efrain 707
            $spreadsheet->getActiveSheet()->SetCellValue('A8', 'Fecha');
708
            $spreadsheet->getActiveSheet()->SetCellValue('B8', 'Nombre');
709
            $spreadsheet->getActiveSheet()->SetCellValue('C8', 'Apellido');
710
            $spreadsheet->getActiveSheet()->SetCellValue('D8', 'Correo electrónico');
711
            $spreadsheet->getActiveSheet()->SetCellValue('E8', $fastSurvey->answer1);
712
            $spreadsheet->getActiveSheet()->SetCellValue('F8', $fastSurvey->answer2);
16747 efrain 713
            if($fastSurvey->number_of_answers >= 3) {
16749 efrain 714
                $spreadsheet->getActiveSheet()->SetCellValue('G8', $fastSurvey->answer3);
715
            }
716
            if($fastSurvey->number_of_answers >= 4) {
717
                $spreadsheet->getActiveSheet()->SetCellValue('H8', $fastSurvey->answer4);
718
            }
719
            if($fastSurvey->number_of_answers == 5) {
720
                $spreadsheet->getActiveSheet()->SetCellValue('I8', $fastSurvey->answer5);
16747 efrain 721
            }
722
 
723
 
724
            $queryMapper = QueryMapper::getInstance($this->adapter);
725
            $select = $queryMapper->getSql()->select();
726
            $select->columns(['vote', 'added_on']);
727
            $select->from(['v' => FastSurveyVoteMapper::_TABLE]);
728
            $select->join(['u' => UserMapper::_TABLE], 'v.user_id = u.id', ['first_name', 'last_name', 'email']);
729
            $select->where->equalTo('v.fast_survey_id', $fastSurvey->id);
730
            $select->order('added_on');
731
 
732
 
16749 efrain 733
            $i = 9;
16747 efrain 734
            $records = $queryMapper->fetchAll($select);
735
            foreach($records as $record)
736
            {
737
                $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record['added_on']);
738
 
739
                $spreadsheet->getActiveSheet()->SetCellValue('A' . $i, $dt->format('d/m/Y H:i a'));
740
                $spreadsheet->getActiveSheet()->SetCellValue('B' . $i, $record['first_name']);
741
                $spreadsheet->getActiveSheet()->SetCellValue('C' . $i, $record['last_name']);
742
                $spreadsheet->getActiveSheet()->SetCellValue('D' . $i, $record['email']);
743
 
744
                switch($record['vote'])
745
                {
746
                    case 1 :
747
                        $spreadsheet->getActiveSheet()->SetCellValue('E' . $i, 'X');
748
                        break;
749
 
750
                    case 2 :
751
                        $spreadsheet->getActiveSheet()->SetCellValue('F' . $i, 'X');
752
                        break;
753
 
754
                    case 3 :
755
                        $spreadsheet->getActiveSheet()->SetCellValue('G' . $i, 'X');
756
                        break;
757
 
758
                    case 4 :
759
                        $spreadsheet->getActiveSheet()->SetCellValue('H' . $i, 'X');
760
                        break;
761
 
762
                    case 5 :
763
                        $spreadsheet->getActiveSheet()->SetCellValue('I' . $i, 'X');
764
                        break;
765
 
766
                }
767
 
768
                $i++;
769
            }
770
 
771
            $fileName = Functions::normalizeString($fastSurvey->question) . '_'  . date('d-m-Y-h-i-a', time()) . '.xls';
772
            $tempFilename = tempnam(sys_get_temp_dir(), 'reporte_pulso_diario_' . time());
773
 
774
            $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
775
            $writer->save($tempFilename);
776
 
777
            $content = file_get_contents($tempFilename);
778
            @unlink($tempFilename);
779
 
780
            return new JsonModel([
781
                'success' => true,
782
                'data' => [
783
                    'content' => base64_encode($content),
784
                    'basename' => $fileName
785
 
786
                ]
787
            ]);
788
        } else {
789
            return new JsonModel([
790
                'success' => false,
791
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
792
            ]);
793
        }
794
    }
16701 efrain 795
 
796
 
797
 
798
}