Proyectos de Subversion LeadersLinked - Backend

Rev

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