Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16785 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
16785 efrain 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
8
 
9
use Laminas\Mvc\Controller\AbstractActionController;
10
use Laminas\Log\LoggerInterface;
11
use Laminas\View\Model\JsonModel;
12
use Laminas\View\Model\ViewModel;
13
use LeadersLinked\Library\Functions;
14
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
15
use LeadersLinked\Mapper\PlanningObjectiveMapper;
16
use LeadersLinked\Model\PlanningObjective;
17
use LeadersLinked\Form\Planning\PlanningObjectiveForm;
18
use LeadersLinked\Form\Planning\PlanningObjectiveHeaderForm;
19
use LeadersLinked\Mapper\PlanningPeriodMapper;
20
use LeadersLinked\Mapper\PlanningGoalMapper;
21
use LeadersLinked\Mapper\PlanningTaskMapper;
22
use LeadersLinked\Mapper\UserMapper;
23
use LeadersLinked\Mapper\PlanningTaskUserMapper;
24
use PhpOffice\PhpSpreadsheet\Spreadsheet;
25
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
26
use PhpOffice\PhpSpreadsheet\IOFactory;
27
use LeadersLinked\Model\PlanningPeriod;
28
use LeadersLinked\Model\PlanningGoal;
29
use LeadersLinked\Model\PlanningTask;
30
use LeadersLinked\Form\Planning\PlanningObjectiveReportForm;
31
 
32
 
33
class PlanningObjectiveController extends AbstractActionController {
34
 
35
    const REPORT_ANALYSIS = 1;
36
    const REPORT_MATRIX = 2;
37
    const REPORT_FULL = 3;
38
 
39
    /**
40
     *
41
     * @var \Laminas\Db\Adapter\AdapterInterface
42
     */
43
    private $adapter;
44
 
45
    /**
46
     *
47
     * @var \LeadersLinked\Cache\CacheInterface
48
     */
49
    private $cache;
50
 
51
 
52
    /**
53
     *
54
     * @var \Laminas\Log\LoggerInterface
55
     */
56
    private $logger;
57
 
58
    /**
59
     *
60
     * @var array
61
     */
62
    private $config;
63
 
64
 
65
    /**
66
     *
67
     * @var \Laminas\Mvc\I18n\Translator
68
     */
69
    private $translator;
70
 
71
 
72
    /**
73
     *
74
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
75
     * @param \LeadersLinked\Cache\CacheInterface $cache
76
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
77
     * @param array $config
78
     * @param \Laminas\Mvc\I18n\Translator $translator
79
     */
80
    public function __construct($adapter, $cache, $logger, $config, $translator)
81
    {
82
        $this->adapter      = $adapter;
83
        $this->cache        = $cache;
84
        $this->logger       = $logger;
85
        $this->config       = $config;
86
        $this->translator   = $translator;
87
    }
88
 
89
    public function indexAction() {
90
 
91
 
92
        $currentUserPlugin = $this->plugin('currentUserPlugin');
93
        $currentUser = $currentUserPlugin->getUser();
94
        $currentCompany = $currentUserPlugin->getCompany();
95
 
96
 
97
        $request = $this->getRequest();
98
        if($request->isGet()) {
99
 
100
 
101
            $headers  = $request->getHeaders();
102
 
103
            $isJson = false;
104
            if($headers->has('Accept')) {
105
                $accept = $headers->get('Accept');
106
 
107
                $prioritized = $accept->getPrioritized();
108
 
109
                foreach($prioritized as $key => $value) {
110
                    $raw = trim($value->getRaw());
111
 
112
                    if(!$isJson) {
113
                        $isJson = strpos($raw, 'json');
114
                    }
115
 
116
                }
117
            }
118
 
119
            if($isJson) {
120
                $link_add = '';
121
 
122
                $period_id = Functions::sanitizeFilterString($this->params()->fromQuery('period_id'));
123
                if(empty($period_id)) {
124
 
125
                    return new JsonModel([
126
                        'success' => true,
127
                        'data' => [
128
                            'items' => [],
129
                            'total' => 0,
130
                            'link_add' => '',
131
                        ]
132
                    ]);
133
 
134
                }
135
 
136
                $planningPeriodMapper = PlanningPeriodMapper::getInstance($this->adapter);
137
                $planningPeriod = $planningPeriodMapper->fetchOneByUuid($period_id);
138
 
139
                if (!$planningPeriod) {
140
                    $data = [
141
                        'success' => false,
142
                        'data' => 'ERROR_RECORD_NOT_FOUND'
143
                    ];
144
 
145
                    return new JsonModel($data);
146
                }
147
 
148
                if ($planningPeriod->company_id != $currentCompany->id) {
149
                    return new JsonModel([
150
                        'success' => false,
151
                        'data' => 'ERROR_UNAUTHORIZED'
152
                    ]);
153
                }
154
 
155
                $link_add = $this->url()->fromRoute('planning/objectives/add', ['period_id' => $planningPeriod->uuid]);
156
 
157
 
158
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
159
                $allowAdd = $acl->isAllowed($currentUser->usertype_id, 'planning/objectives/add');
160
                $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'planning/objectives/edit');
161
                $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'planning/objectives/delete');
162
                $allowMatrix = $acl->isAllowed($currentUser->usertype_id, 'planning/objectives/matrix');
163
                $allowAnalysis = $acl->isAllowed($currentUser->usertype_id, 'planning/objectives/analysis');
164
                $allowFull = $acl->isAllowed($currentUser->usertype_id, 'planning/objectives/full');
165
 
166
                $search = $this->params()->fromQuery('search', []);
167
                $search = empty($search['value']) ? '' :  Functions::sanitizeFilterString($search['value']);
168
 
169
 
170
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
171
                $page               = (intval($this->params()->fromQuery('start', 1), 10)/$records_x_page)+1;
172
                $order =  $this->params()->fromQuery('order', []);
173
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
174
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(Functions::sanitizeFilterString($order[0]['dir']));
175
 
176
                $fields =  ['title', 'start', 'end', 'progress'];
177
 
178
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'title';
179
 
180
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
181
                    $order_direction = 'ASC';
182
                }
183
 
184
                $planningObjectiveMapper = PlanningObjectiveMapper::getInstance($this->adapter);
185
                $paginator = $planningObjectiveMapper->fetchAllDataTableByCompanyIdAndPeriodId($planningPeriod->company_id, $planningPeriod->id, $search, $page, $records_x_page, $order_field, $order_direction);
186
 
187
 
188
                $items = [];
189
                $records = $paginator->getCurrentItems();
190
 
191
                foreach($records as $record)
192
                {
193
                    $dtStart = \DateTime::createFromFormat('Y-m-d', $record->start);
194
                    $dtEnd = \DateTime::createFromFormat('Y-m-d', $record->end);
195
 
196
                    $item = [
197
                        'title'         => $record->title,
198
                        'description'   => $record->description,
199
                        'status'        => $record->status,
200
                        'start'         => $dtStart->format('d/m/Y'),
201
                        'end'           => $dtEnd->format('d/m/Y'),
202
                        'progress'      => $record->progress ? $record->progress : 0,
203
                        'actions' => [
204
                            'link_edit' => $allowEdit ? $this->url()->fromRoute('planning/objectives/edit', ['id' => $record->uuid]) : '',
205
                            'link_delete' => $allowDelete ? $this->url()->fromRoute('planning/objectives/delete', ['id' => $record->uuid]) : '',
206
                            'link_analysis' => $allowAnalysis ? $this->url()->fromRoute('planning/objectives/analysis', ['id' => $record->uuid]) : '',
207
                            'link_matrix' => $allowMatrix ? $this->url()->fromRoute('planning/objectives/matrix', ['id' => $record->uuid]) : '',
208
                            'link_full' => $allowFull ? $this->url()->fromRoute('planning/objectives/full', ['id' => $record->uuid]) : '',
209
                        ]
210
                    ];
211
                    array_push($items, $item);
212
                }
213
 
214
                return new JsonModel([
215
                    'success' => true,
216
                    'data' => [
217
                        'items' => $items,
218
                        'total' => $paginator->getTotalItemCount(),
219
                        'link_add' => $allowAdd ? $link_add : '',
220
                    ]
221
                ]);
222
 
223
            } else  {
224
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
225
                $allowMatrix = $acl->isAllowed($currentUser->usertype_id, 'planning/objectives/matrix');
226
                $allowAnalysis = $acl->isAllowed($currentUser->usertype_id, 'planning/objectives/analysis');
227
                $allowFull = $acl->isAllowed($currentUser->usertype_id, 'planning/objectives/full');
228
 
229
 
230
 
231
                $form = new PlanningObjectiveForm();
232
                $formFilter = new PlanningObjectiveHeaderForm($this->adapter, $currentCompany->id);
233
 
234
                $options = [];
235
                if($allowAnalysis) {
236
                    $options[ self::REPORT_ANALYSIS ] = 'LABEL_PLANNING_REPORT_ANALISYS_OPTION';
237
                }
238
                if($allowMatrix) {
239
                    $options[ self::REPORT_MATRIX ] = 'LABEL_PLANNING_REPORT_MATRIX_OPTION';
240
                }
241
 
242
                if($allowFull) {
243
                    $options[ self::REPORT_FULL ] = 'LABEL_PLANNING_REPORT_FULL_OPTION';
244
                }
245
 
246
 
247
 
248
                $formReport = new PlanningObjectiveReportForm($options);
249
 
250
                $this->layout()->setTemplate('layout/layout-backend');
251
                $viewModel = new ViewModel();
252
                $viewModel->setTemplate('leaders-linked/planning/objectives');
253
                $viewModel->setVariables([
254
                    'form' => $form,
255
                    'formFilter' => $formFilter,
256
                    'formReport' => $formReport,
257
                ]);
258
                return $viewModel ;
259
            }
260
        } else {
261
            return new JsonModel([
262
                'success' => false,
263
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
264
            ]);
265
        }
266
    }
267
 
268
 
269
 
270
    public function addAction()
271
    {
272
        $currentUserPlugin = $this->plugin('currentUserPlugin');
273
        $currentUser = $currentUserPlugin->getUser();
274
        $currentCompany = $currentUserPlugin->getCompany();
275
 
276
        $request = $this->getRequest();
277
        if($request->isPost()) {
278
            $period_id = Functions::sanitizeFilterString($this->params()->fromRoute('period_id'));
279
 
280
            $planningPeriodMapper = PlanningPeriodMapper::getInstance($this->adapter);
281
            $planningPeriod = $planningPeriodMapper->fetchOneByUuid($period_id);
282
 
283
            if (!$planningPeriod) {
284
                $data = [
285
                    'success' => false,
286
                    'data' => 'ERROR_RECORD_NOT_FOUND'
287
                ];
288
 
289
                return new JsonModel($data);
290
            }
291
 
292
            if ($planningPeriod->company_id != $currentCompany->id) {
293
                return new JsonModel([
294
                    'success' => false,
295
                    'data' => 'ERROR_UNAUTHORIZED'
296
                ]);
297
            }
298
 
299
 
300
 
301
            $form = new  PlanningObjectiveForm();
302
            $dataPost = $request->getPost()->toArray();
303
 
304
            if(!empty($dataPost['date_range'])) {
305
                $s = explode('-', $dataPost['date_range']);
306
                $start = trim($s[0]);
307
                $end = trim($s[1]);
308
 
309
                $dtStart = \DateTime::createFromFormat('d/m/Y', $start);
310
                $dtEnd  = \DateTime::createFromFormat('d/m/Y', $end);
311
                if(!$dtStart &&  !$dtEnd) {
312
                    $dataPost['date_range'] = '';
313
                }
314
            }
315
 
316
 
317
 
318
            $form->setData($dataPost);
319
 
320
            if($form->isValid()) {
321
                $dataPost = (array) $form->getData();
322
                $dataPost['status'] =  empty($dataPost['status']) ? PlanningObjective::STATUS_INACTIVE : $dataPost['status'];
323
 
324
 
325
                $hydrator = new ObjectPropertyHydrator();
326
                $planningObjective = new PlanningObjective();
327
                $planningObjective->company_id = $planningPeriod->company_id;
328
                $planningObjective->period_id = $planningPeriod->id;
329
 
330
                $hydrator->hydrate($dataPost, $planningObjective);
331
 
332
 
333
 
334
                $planningObjectiveMapper = PlanningObjectiveMapper::getInstance($this->adapter);
335
                $result = $planningObjectiveMapper->insert($planningObjective);
336
 
337
                if($result) {
338
                    $this->logger->info('Se agrego el objetivo la planificación : ' . $planningObjective->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
339
 
340
                    $data = [
341
                        'success'   => true,
342
                        'data'   => 'LABEL_RECORD_ADDED'
343
                    ];
344
                } else {
345
                    $data = [
346
                        'success'   => false,
347
                        'data'      => $planningObjectiveMapper->getError()
348
                    ];
349
 
350
                }
351
 
352
                return new JsonModel($data);
353
 
354
            } else {
355
                $messages = [];
356
                $form_messages = (array) $form->getMessages();
357
                foreach($form_messages  as $fieldname => $field_messages)
358
                {
359
 
360
                    $messages[$fieldname] = array_values($field_messages);
361
                }
362
 
363
                return new JsonModel([
364
                    'success'   => false,
365
                    'data'   => $messages
366
                ]);
367
            }
368
 
369
        } else {
370
            $data = [
371
                'success' => false,
372
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
373
            ];
374
 
375
            return new JsonModel($data);
376
        }
377
 
378
        return new JsonModel($data);
379
 
380
 
381
    }
382
 
383
 
384
 
385
    public function editAction(){
386
 
387
        $currentUserPlugin = $this->plugin('currentUserPlugin');
388
        $currentUser = $currentUserPlugin->getUser();
389
        $currentCompany = $currentUserPlugin->getCompany();
390
 
391
 
392
        $request = $this->getRequest();
393
        $uuid = $this->params()->fromRoute('id');
394
 
395
 
396
        if(!$uuid) {
397
            $data = [
398
                'success'   => false,
399
                'data'   => 'ERROR_INVALID_PARAMETER'
400
            ];
401
 
402
            return new JsonModel($data);
403
        }
404
 
405
        $planningObjectiveMapper = PlanningObjectiveMapper::getInstance($this->adapter);
406
        $planningObjective = $planningObjectiveMapper->fetchOneByUuid($uuid);
407
 
408
        if (!$planningObjective) {
409
            $data = [
410
                'success' => false,
411
                'data' => 'ERROR_RECORD_NOT_FOUND'
412
            ];
413
 
414
            return new JsonModel($data);
415
        }
416
 
417
        if ($planningObjective->company_id != $currentCompany->id) {
418
            return new JsonModel([
419
                'success' => false,
420
                'data' => 'ERROR_UNAUTHORIZED'
421
            ]);
422
        }
423
 
424
        if($request->isPost()) {
425
            $form = new  PlanningObjectiveForm();
426
            $dataPost = $request->getPost()->toArray();
427
            $dataPost['status'] =  empty($dataPost['status']) ? PlanningObjective::STATUS_INACTIVE : $dataPost['status'];
428
            if(empty($dataPost['date_range'])) {
429
                $dataPost['start'] = date('Y-m-d');
430
                $dataPost['end'] = date('Y-m-d');
431
            } else {
432
 
433
                $s = explode('-', $dataPost['date_range']);
434
                $start = trim($s[0]);
435
                $end = trim($s[1]);
436
 
437
                $dtStart = \DateTime::createFromFormat('d/m/Y', $start);
438
                $dtEnd  = \DateTime::createFromFormat('d/m/Y', $end);
439
                if($dtStart && $dtEnd) {
440
                    $dataPost['start'] = $dtStart->format('Y-m-d');
441
                    $dataPost['end'] = $dtEnd->format('Y-m-d');
442
 
443
                } else {
444
                    $dataPost['start'] = date('Y-m-d');
445
                    $dataPost['end'] = date('Y-m-d');
446
                }
447
            }
448
 
449
 
450
            $form->setData($dataPost);
451
 
452
            if($form->isValid()) {
453
                $dataPost = (array) $form->getData();
454
 
455
                $hydrator = new ObjectPropertyHydrator();
456
                $hydrator->hydrate($dataPost, $planningObjective);
457
                $result = $planningObjectiveMapper->update($planningObjective);
458
 
459
                if($result) {
460
                    $this->logger->info('Se actualizo el objetivo la planificación : ' . $planningObjective->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
461
 
462
                    $data = [
463
                        'success' => true,
464
                        'data' => 'LABEL_RECORD_UPDATED'
465
                    ];
466
                } else {
467
                    $data = [
468
                        'success'   => false,
469
                        'data'      => $planningObjectiveMapper->getError()
470
                    ];
471
                }
472
 
473
                return new JsonModel($data);
474
 
475
            } else {
476
                $messages = [];
477
                $form_messages = (array) $form->getMessages();
478
                foreach($form_messages  as $fieldname => $field_messages)
479
                {
480
                    $messages[$fieldname] = array_values($field_messages);
481
                }
482
 
483
                return new JsonModel([
484
                    'success'   => false,
485
                    'data'   => $messages
486
                ]);
487
            }
488
        }else if ($request->isGet()) {
489
 
490
            $data = [
491
                'success' => true,
492
                'data' => [
493
                    'title' => $planningObjective->title,
494
                    'description' => $planningObjective->description,
495
                    'start' => $planningObjective->start,
496
                    'end' => $planningObjective->end,
497
                    'status' => $planningObjective->status,
498
                    'progress' => $planningObjective->progress,
499
                    'budget' => $planningObjective->budget,
500
                    'cost' => $planningObjective->cost,
501
                ]
502
            ];
503
 
504
            return new JsonModel($data);
505
        } else {
506
            $data = [
507
                'success' => false,
508
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
509
            ];
510
 
511
            return new JsonModel($data);
512
        }
513
 
514
        return new JsonModel($data);
515
 
516
    }
517
 
518
 
519
 
520
 
521
    public function deleteAction()
522
    {
523
        $currentUserPlugin = $this->plugin('currentUserPlugin');
524
        $currentCompany = $currentUserPlugin->getCompany();
525
        $currentUser = $currentUserPlugin->getUser();
526
 
527
        $request = $this->getRequest();
528
        $uuid = $this->params()->fromRoute('id');
529
 
530
 
531
        if(!$uuid) {
532
            $data = [
533
                'success'   => false,
534
                'data'   => 'ERROR_INVALID_PARAMETER'
535
            ];
536
 
537
            return new JsonModel($data);
538
        }
539
 
540
        $planningObjectiveMapper = PlanningObjectiveMapper::getInstance($this->adapter);
541
        $planningObjective = $planningObjectiveMapper->fetchOneByUuid($uuid);
542
 
543
        if (!$planningObjective) {
544
            $data = [
545
                'success' => false,
546
                'data' => 'ERROR_RECORD_NOT_FOUND'
547
            ];
548
 
549
            return new JsonModel($data);
550
        }
551
 
552
        if ($planningObjective->company_id != $currentCompany->id) {
553
            return new JsonModel([
554
                'success' => false,
555
                'data' => 'ERROR_UNAUTHORIZED'
556
            ]);
557
        }
558
 
559
 
560
        if ($request->isPost()) {
561
 
562
 
563
            $result = $planningObjectiveMapper->delete($planningObjective);
564
            if ($result) {
565
                $this->logger->info('Se borro el objetivo de la planificación :' . $planningObjective->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
566
 
567
                $data = [
568
                    'success' => true,
569
                    'data' => 'LABEL_RECORD_DELETED'
570
                ];
571
            } else {
572
 
573
                $data = [
574
                    'success' => false,
575
                    'data' => $planningObjectiveMapper->getError()
576
                ];
577
 
578
                return new JsonModel($data);
579
            }
580
        } else {
581
            $data = [
582
                'success' => false,
583
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
584
            ];
585
 
586
            return new JsonModel($data);
587
        }
588
 
589
        return new JsonModel($data);
590
    }
591
 
592
    public function analysisAction()
593
    {
594
        $currentUserPlugin = $this->plugin('currentUserPlugin');
595
        $currentCompany = $currentUserPlugin->getCompany();
596
        $currentUser = $currentUserPlugin->getUser();
597
 
598
        $request = $this->getRequest();
599
        $uuid = $this->params()->fromRoute('id');
600
 
601
 
602
        if(!$uuid) {
603
            $data = [
604
                'success'   => false,
605
                'data'   => 'ERROR_INVALID_PARAMETER'
606
            ];
607
 
608
            return new JsonModel($data);
609
        }
610
 
611
        $planningObjectiveMapper = PlanningObjectiveMapper::getInstance($this->adapter);
612
        $planningObjective = $planningObjectiveMapper->fetchOneByUuid($uuid);
613
 
614
        if (!$planningObjective) {
615
            $data = [
616
                'success' => false,
617
                'data' => 'ERROR_RECORD_NOT_FOUND'
618
            ];
619
 
620
            return new JsonModel($data);
621
        }
622
 
623
        if ($planningObjective->company_id != $currentCompany->id) {
624
            return new JsonModel([
625
                'success' => false,
626
                'data' => 'ERROR_UNAUTHORIZED'
627
            ]);
628
        }
629
 
630
 
631
        if ($request->isGet()) {
632
            $planningPeriodMapper = PlanningPeriodMapper::getInstance($this->adapter);
633
            $planningPeriod = $planningPeriodMapper->fetchOne($planningObjective->period_id);
634
 
635
 
636
            $planningGoalMapper = PlanningGoalMapper::getInstance($this->adapter);
637
 
638
 
639
            $planningTaskMapper = PlanningTaskMapper::getInstance($this->adapter);
640
            $userMapper = UserMapper::getInstance($this->adapter);
641
            $planningTaskUserMapper = PlanningTaskUserMapper::getInstance($this->adapter);
642
 
643
            $spreadsheet = new Spreadsheet();
644
            $spreadsheet->getProperties()->setTitle($this->translator->translate('LABEL_PLANNING_REPORT_ANALISYS_TITLE'));
645
 
646
 
647
 
648
            $spreadsheet->setActiveSheetIndex(0);
649
            $sheet = $spreadsheet->getActiveSheet();
650
 
651
            $row = 1;
652
            $sheet->setCellValue('A' . $row, $this->translator->translate('LABEL_PLANNING_REPORT_ANALISYS_TITLE'));
653
            $sheet->mergeCells('A' . $row . ':R' . $row);
654
            $sheet->getCell('A' . $row)->getStyle()->getFont()->setBold(true);
655
            $sheet->getCell('A' . $row)->getStyle()->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
656
 
657
 
658
            /** PERIODO **/
659
 
660
            $row++;
661
            $sheet->setCellValue('A' . $row, $planningObjective->title);
662
            $sheet->getCell('A' . $row)->getStyle()->getBorders()->getLeft()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
663
            $sheet->getCell('A' . $row)->getStyle()->getBorders()->getRight()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
664
            $sheet->getCell('A' . $row)->getStyle()->getBorders()->getTop()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
665
 
666
            $row++;
667
            $sheet->setCellValue('A' . $row, '');
668
            $sheet->getCell('A' . $row)->getStyle()->getBorders()->getLeft()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
669
            $sheet->getCell('A' . $row)->getStyle()->getBorders()->getRight()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
670
            $sheet->getCell('A' . $row)->getStyle()->getBorders()->getBottom()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
671
 
672
 
673
            /** GOAL **/
674
 
675
            $goals = $planningGoalMapper->fetchAllActiveByObjectiveId($planningObjective->id);
676
            foreach($goals as $goal)
677
            {
678
                $sheet->setCellValue('B' . $row, $goal->title);
679
                $sheet->getCell('B' . $row)->getStyle()->getBorders()->getLeft()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
680
                $sheet->getCell('B' . $row)->getStyle()->getBorders()->getRight()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
681
                $sheet->getCell('B' . $row)->getStyle()->getBorders()->getTop()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
682
 
683
                $row++;
684
                $sheet->setCellValue('B' . $row, '');
685
                $sheet->getCell('B' . $row)->getStyle()->getBorders()->getLeft()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
686
                $sheet->getCell('B' . $row)->getStyle()->getBorders()->getRight()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
687
                $sheet->getCell('B' . $row)->getStyle()->getBorders()->getBottom()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
688
 
689
 
690
                $sheet->setCellValue('C' . $row, $this->translator->translate('LABEL_TASK'));
691
                $sheet->getCell('C' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
692
 
693
                $sheet->setCellValue('D' . $row, $this->translator->translate('LABEL_DESCRIPTION'));
694
                $sheet->getCell('D' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
695
                $sheet->getCell('D' . $row)->getStyle()->getFont()->setBold(true);
696
 
697
                $sheet->setCellValue('E' . $row, $this->translator->translate('LABEL_TASK_HOW'));
698
                $sheet->getCell('E' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
699
                $sheet->getCell('E' . $row)->getStyle()->getFont()->setBold(true);
700
 
701
                $sheet->setCellValue('F' . $row, $this->translator->translate('LABEL_TASK_PLACE'));
702
                $sheet->getCell('F' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
703
                $sheet->getCell('F' . $row)->getStyle()->getFont()->setBold(true);
704
 
705
                $sheet->setCellValue('G' . $row, $this->translator->translate('LABEL_DATE'));
706
                $sheet->getCell('G' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
707
                $sheet->getCell('G' . $row)->getStyle()->getFont()->setBold(true);
708
 
709
                $sheet->setCellValue('H' . $row, $this->translator->translate('LABEL_TASK_WHO'));
710
                $sheet->getCell('H' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
711
                $sheet->getCell('H' . $row)->getStyle()->getFont()->setBold(true);
712
 
713
                $sheet->setCellValue('I' . $row, $this->translator->translate('LABEL_HOURS'));
714
                $sheet->getCell('I' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
715
                $sheet->getCell('I' . $row)->getStyle()->getFont()->setBold(true);
716
 
717
                $sheet->setCellValue('J' . $row, $this->translator->translate('LABEL_PROGRESS'));
718
                $sheet->getCell('J' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
719
                $sheet->getCell('J' . $row)->getStyle()->getFont()->setBold(true);
720
 
721
                $sheet->setCellValue('K' . $row, $this->translator->translate('LABEL_COST'));
722
                $sheet->getCell('K' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
723
                $sheet->getCell('K' . $row)->getStyle()->getFont()->setBold(true);
724
 
725
                $sheet->setCellValue('L' . $row, $this->translator->translate('LABEL_TASK_DETOUR'));
726
                $sheet->getCell('L' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
727
                $sheet->getCell('L' . $row)->getStyle()->getFont()->setBold(true);
728
 
729
                $sheet->setCellValue('M' . $row, $this->translator->translate('LABEL_TASK_EVALUATION'));
730
                $sheet->getCell('M' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
731
                $sheet->getCell('M' . $row)->getStyle()->getFont()->setBold(true);
732
 
733
 
734
                $tasks = $planningTaskMapper->fetchAllByGoalId($goal->id);
735
                if($tasks) {
736
 
737
 
738
                    foreach($tasks as $task)
739
                    {
740
                        $row++;
741
 
742
                        $users =[];
743
                        $taskUsers =  $planningTaskUserMapper->fetchAllByTaskId($task->id);
744
 
745
                        foreach($taskUsers as $taskUser)
746
                        {
747
                            $user = $userMapper->fetchOne($taskUser->user_id);
748
                            if($user) {
749
                                array_push($users, trim($user->first_name.' '.$user->last_name));
750
                            }
751
                        }
752
 
753
                        $sheet->setCellValue('C' . $row, $task->title);
754
                        $sheet->getCell('C' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
755
 
756
                        $sheet->setCellValue('D' . $row, $task->description);
757
                        $sheet->getCell('D' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
758
 
759
                        $sheet->setCellValue('E' . $row, $task->how);
760
                        $sheet->getCell('E' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
761
 
762
                        $sheet->setCellValue('F' . $row, $task->place);
763
                        $sheet->getCell('F' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
764
 
765
                        $dtStart = \DateTime::createFromFormat('Y-m-d', $task->start);
766
                        $dtEnd = \DateTime::createFromFormat('Y-m-d', $task->end);
767
                        $date = $dtStart->format('d/m/Y') . ' - ' . $dtEnd->format('d/m/Y');
768
 
769
                        $sheet->setCellValue('G' . $row, $date);
770
                        $sheet->getCell('G' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
771
 
772
                        $sheet->setCellValue('H' . $row, implode(',', $users));
773
                        $sheet->getCell('H' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
774
 
775
                        $sheet->setCellValue('I' . $row, $task->hours);
776
                        $sheet->getCell('I' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
777
 
778
                        $sheet->setCellValue('J' . $row, $task->progress);
779
                        $sheet->getCell('J' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
780
 
781
                        $sheet->setCellValue('K' . $row, $task->cost);
782
                        $sheet->getCell('K' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
783
 
784
                        $sheet->setCellValue('L' . $row, $task->detour);
785
                        $sheet->getCell('L' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
786
 
787
                        $sheet->setCellValue('M' . $row, $task->evaluation);
788
                        $sheet->getCell('M' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
789
 
790
 
791
                    }
792
                }
793
 
794
                $row++;
795
            }
796
 
797
 
798
 
16786 efrain 799
            $fileName = Functions::normalizeString('analysis-'. $planningObjective->title . '-'  . date('d-m-Y-h-i-a', time()) . '.xls');
16785 efrain 800
            $tempFilename = tempnam(sys_get_temp_dir(), 'planning_objective_' . time());
801
 
802
            $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
803
            $writer->save($tempFilename);
804
 
805
            $content = file_get_contents($tempFilename);
806
            @unlink($tempFilename);
807
 
808
            return new JsonModel([
809
                'success' => true,
810
                'data' => [
811
                    'content' => base64_encode($content),
812
                    'basename' => $fileName
813
 
814
                ]
815
            ]);
816
 
817
        } else {
818
            $data = [
819
                'success' => false,
820
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
821
            ];
822
 
823
            return new JsonModel($data);
824
        }
825
 
826
        return new JsonModel($data);
827
    }
828
 
829
    public function fullAction()
830
    {
831
 
832
 
833
 
834
        $currentUserPlugin = $this->plugin('currentUserPlugin');
835
        $currentCompany = $currentUserPlugin->getCompany();
836
        $currentUser = $currentUserPlugin->getUser();
837
 
838
        $request = $this->getRequest();
839
        $uuid = $this->params()->fromRoute('id');
840
 
841
 
842
        if(!$uuid) {
843
            $data = [
844
                'success'   => false,
845
                'data'   => 'ERROR_INVALID_PARAMETER'
846
            ];
847
 
848
            return new JsonModel($data);
849
        }
850
 
851
        $planningObjectiveMapper = PlanningObjectiveMapper::getInstance($this->adapter);
852
        $planningObjective = $planningObjectiveMapper->fetchOneByUuid($uuid);
853
 
854
        if (!$planningObjective) {
855
            $data = [
856
                'success' => false,
857
                'data' => 'ERROR_RECORD_NOT_FOUND'
858
            ];
859
 
860
            return new JsonModel($data);
861
        }
862
 
863
        if ($planningObjective->company_id != $currentCompany->id) {
864
            return new JsonModel([
865
                'success' => false,
866
                'data' => 'ERROR_UNAUTHORIZED'
867
            ]);
868
        }
869
 
870
 
871
        if ($request->isGet()) {
872
            $planningPeriodMapper = PlanningPeriodMapper::getInstance($this->adapter);
873
            $planningPeriod = $planningPeriodMapper->fetchOne($planningObjective->period_id);
874
 
875
 
876
            $planningGoalMapper = PlanningGoalMapper::getInstance($this->adapter);
877
 
878
 
879
            $planningTaskMapper = PlanningTaskMapper::getInstance($this->adapter);
880
            $userMapper = UserMapper::getInstance($this->adapter);
881
            $planningTaskUserMapper = PlanningTaskUserMapper::getInstance($this->adapter);
882
 
883
            $spreadsheet = new Spreadsheet();
884
            $spreadsheet->getProperties()->setTitle($this->translator->translate('LABEL_PLANNING_REPORT_FULL_TITLE'));
885
 
886
 
887
 
888
            $spreadsheet->setActiveSheetIndex(0);
889
            $sheet = $spreadsheet->getActiveSheet();
890
 
891
            $row = 1;
892
            $sheet->setCellValue('A' . $row, $this->translator->translate('LABEL_PLANNING_REPORT_FULL_TITLE'));
893
            $sheet->mergeCells('A' . $row . ':R' . $row);
894
            $sheet->getCell('A' . $row)->getStyle()->getFont()->setBold(true);
895
            $sheet->getCell('A' . $row)->getStyle()->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
896
 
897
 
898
            /** PERIODO **/
899
 
900
            $row++;
901
            $sheet->setCellValue('A' . $row, $this->translator->translate('LABEL_PLANNING_PERIOD'));
902
            $sheet->getCell('A' . $row)->getStyle()->getFont()->setBold(true);
903
            $sheet->getCell('A' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
904
 
905
            $row++;
906
            $sheet->setCellValue('A' . $row, $this->translator->translate('LABEL_TITLE'));
907
            $sheet->getCell('A' . $row)->getStyle()->getFont()->setBold(true);
908
            $sheet->getCell('A' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
909
 
910
            $sheet->setCellValue('B' . $row, $this->translator->translate('LABEL_DESCRIPTION'));
911
            $sheet->getCell('B' . $row)->getStyle()->getFont()->setBold(true);
912
            $sheet->getCell('B' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
913
 
914
            $sheet->setCellValue('C' . $row, $this->translator->translate('LABEL_START'));
915
            $sheet->getCell('C' . $row)->getStyle()->getFont()->setBold(true);
916
            $sheet->getCell('C' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
917
 
918
            $sheet->setCellValue('D' . $row, $this->translator->translate('LABEL_END'));
919
            $sheet->getCell('D' . $row)->getStyle()->getFont()->setBold(true);
920
            $sheet->getCell('D' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
921
 
922
            $sheet->setCellValue('E' . $row, $this->translator->translate('LABEL_BUDGET'));
923
            $sheet->getCell('E' . $row)->getStyle()->getFont()->setBold(true);
924
            $sheet->getCell('E' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
925
 
926
            $sheet->setCellValue('F' . $row, $this->translator->translate('LABEL_COST'));
927
            $sheet->getCell('F' . $row)->getStyle()->getFont()->setBold(true);
928
            $sheet->getCell('F' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
929
 
930
            $sheet->setCellValue('G' . $row, $this->translator->translate('LABEL_HOURS'));
931
            $sheet->getCell('G' . $row)->getStyle()->getFont()->setBold(true);
932
            $sheet->getCell('G' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
933
 
934
            $sheet->setCellValue('H' . $row, $this->translator->translate('LABEL_PROGRESS'));
935
            $sheet->getCell('H' . $row)->getStyle()->getFont()->setBold(true);
936
            $sheet->getCell('H' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
937
 
938
            $sheet->setCellValue('I' . $row, $this->translator->translate('LABEL_STATUS'));
939
            $sheet->getCell('I' . $row)->getStyle()->getFont()->setBold(true);
940
            $sheet->getCell('I' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
941
 
942
            $sheet->setCellValue('A3', $planningPeriod->title);
943
            $sheet->getCell('A3')->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
944
 
945
            $row++;
946
            $sheet->setCellValue('B' . $row, $planningPeriod->description);
947
            $sheet->getCell('B' . $row)->getStyle()->getAlignment()->setWrapText(true);
948
            $sheet->getCell('B' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
949
 
950
            $dt = \DateTime::createFromFormat('Y-m-d', $planningPeriod->start);
951
            $sheet->setCellValue('C' . $row, $dt->format('d/m/Y'));
952
            $sheet->getCell('C' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
953
 
954
            $dt = \DateTime::createFromFormat('Y-m-d', $planningPeriod->end);
955
            $sheet->setCellValue('D' . $row, $dt->format('d/m/Y'));
956
            $sheet->getCell('D' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
957
 
958
            $sheet->setCellValue('E' . $row, $planningPeriod->budget);
959
            $sheet->getCell('E' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
960
 
961
            $sheet->setCellValue('F' . $row, $planningPeriod->cost);
962
            $sheet->getCell('F' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
963
 
964
            $sheet->setCellValue('G' . $row, $planningPeriod->hours);
965
            $sheet->getCell('G' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
966
 
967
            $sheet->setCellValue('H' . $row, $planningPeriod->progress);
968
            $sheet->getCell('H' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
969
 
970
            $sheet->setCellValue('I' . $row, $planningPeriod->status == PlanningPeriod::STATUS_ACTIVE ? $this->translator->translate('LABEL_ACTIVE') : $this->translator->translate('LABEL_INACTIVE'));
971
            $sheet->getCell('I' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
972
 
973
            /** OBJETIVOS **/
974
 
975
 
976
            $row = 4;
977
            $sheet->setCellValue('B' . $row, $this->translator->translate('LABEL_PLANNING_OBJECTIVE'));
978
            $sheet->getCell('B' . $row)->getStyle()->getFont()->setBold(true);
979
            $sheet->getCell('B' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
980
 
981
 
982
            $row++;
983
            $sheet->setCellValue('B' . $row, $this->translator->translate('LABEL_TITLE'));
984
            $sheet->getCell('B' . $row)->getStyle()->getFont()->setBold(true);
985
            $sheet->getCell('B' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
986
 
987
            $sheet->setCellValue('C' . $row, $this->translator->translate('LABEL_DESCRIPTION'));
988
            $sheet->getCell('C' . $row)->getStyle()->getFont()->setBold(true);
989
            $sheet->getCell('C' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
990
 
991
            $sheet->setCellValue('D' . $row, $this->translator->translate('LABEL_START'));
992
            $sheet->getCell('D' . $row)->getStyle()->getFont()->setBold(true);
993
            $sheet->getCell('D' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
994
 
995
            $sheet->setCellValue('E' . $row, $this->translator->translate('LABEL_END'));
996
            $sheet->getCell('E' . $row)->getStyle()->getFont()->setBold(true);
997
            $sheet->getCell('E' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
998
 
999
            $sheet->setCellValue('F' . $row, $this->translator->translate('LABEL_BUDGET'));
1000
            $sheet->getCell('F' . $row)->getStyle()->getFont()->setBold(true);
1001
            $sheet->getCell('F' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1002
 
1003
            $sheet->setCellValue('G' . $row, $this->translator->translate('LABEL_COST'));
1004
            $sheet->getCell('G' . $row)->getStyle()->getFont()->setBold(true);
1005
            $sheet->getCell('G' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1006
 
1007
            $sheet->setCellValue('H' . $row, $this->translator->translate('LABEL_HOURS'));
1008
            $sheet->getCell('H' . $row)->getStyle()->getFont()->setBold(true);
1009
            $sheet->getCell('H' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1010
 
1011
            $sheet->setCellValue('I' . $row, $this->translator->translate('LABEL_PROGRESS'));
1012
            $sheet->getCell('I' . $row)->getStyle()->getFont()->setBold(true);
1013
            $sheet->getCell('I' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1014
 
1015
            $sheet->setCellValue('J' . $row, $this->translator->translate('LABEL_STATUS'));
1016
            $sheet->getCell('J' . $row)->getStyle()->getFont()->setBold(true);
1017
            $sheet->getCell('J' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1018
 
1019
 
1020
            $row++;
1021
            $sheet->setCellValue('B' . $row, $planningObjective->title);
1022
            $sheet->getCell('B' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1023
 
1024
            $sheet->setCellValue('C' . $row, $planningObjective->description);
1025
            $sheet->getCell('C' . $row)->getStyle()->getAlignment()->setWrapText(true);
1026
            $sheet->getCell('C' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1027
 
1028
            $dt = \DateTime::createFromFormat('Y-m-d', $planningObjective->start);
1029
            $sheet->setCellValue('D' . $row, $dt->format('d/m/Y'));
1030
            $sheet->getCell('D' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1031
 
1032
            $dt = \DateTime::createFromFormat('Y-m-d', $planningObjective->end);
1033
            $sheet->setCellValue('E' . $row, $dt->format('d/m/Y'));
1034
            $sheet->getCell('E' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1035
 
1036
            $sheet->setCellValue('F' . $row, $planningObjective->budget);
1037
            $sheet->getCell('F' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1038
 
1039
            $sheet->setCellValue('G' . $row, $planningObjective->cost);
1040
            $sheet->getCell('G' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1041
 
1042
            $sheet->setCellValue('H' . $row, $planningObjective->hours);
1043
            $sheet->getCell('H' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1044
 
1045
            $sheet->setCellValue('I' . $row, $planningObjective->progress);
1046
            $sheet->getCell('I' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1047
 
1048
            $sheet->setCellValue('J' . $row, $planningObjective->status == PlanningObjective::STATUS_ACTIVE ? $this->translator->translate('LABEL_ACTIVE') : $this->translator->translate('LABEL_INACTIVE'));
1049
            $sheet->getCell('J' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1050
 
1051
 
1052
            /** GOAL **/
1053
 
1054
            $goals = $planningGoalMapper->fetchAllActiveByObjectiveId($planningObjective->id);
1055
            foreach($goals as $goal)
1056
            {
1057
                $row++;
1058
                $sheet->setCellValue('C' . $row, $this->translator->translate('LABEL_PLANNING_GOAL'));
1059
                $sheet->getCell('C' . $row)->getStyle()->getFont()->setBold(true);
1060
                $sheet->getCell('C' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1061
 
1062
 
1063
                $row++;
1064
                $sheet->setCellValue('C' . $row, $this->translator->translate('LABEL_TITLE'));
1065
                $sheet->getCell('C' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1066
 
1067
                $sheet->setCellValue('D' . $row, $this->translator->translate('LABEL_DESCRIPTION'));
1068
                $sheet->getCell('D' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1069
 
1070
                $sheet->setCellValue('E' . $row, $this->translator->translate('LABEL_START'));
1071
                $sheet->getCell('E' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1072
 
1073
                $sheet->setCellValue('F' . $row, $this->translator->translate('LABEL_END'));
1074
                $sheet->getCell('F' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1075
 
1076
                $sheet->setCellValue('G' . $row, $this->translator->translate('LABEL_BUDGET'));
1077
                $sheet->getCell('G' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1078
 
1079
                $sheet->setCellValue('H' . $row, $this->translator->translate('LABEL_COST'));
1080
                $sheet->getCell('H' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1081
 
1082
                $sheet->setCellValue('I' . $row, $this->translator->translate('LABEL_HOURS'));
1083
                $sheet->getCell('I' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1084
 
1085
                $sheet->setCellValue('J' . $row, $this->translator->translate('LABEL_PROGRESS'));
1086
                $sheet->getCell('J' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1087
 
1088
                $sheet->setCellValue('K' . $row, $this->translator->translate('LABEL_STATUS'));
1089
                $sheet->getCell('K' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1090
 
1091
                $row++;
1092
                $sheet->setCellValue('C' . $row, $goal->title);
1093
                $sheet->getCell('C' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1094
 
1095
                $sheet->setCellValue('D' . $row, $goal->description);
1096
                $sheet->getCell('D' . $row)->getStyle()->getAlignment()->setWrapText(true);
1097
                $sheet->getCell('D' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1098
 
1099
                $dt = \DateTime::createFromFormat('Y-m-d', $goal->start);
1100
                $sheet->setCellValue('E' . $row, $dt->format('d/m/Y'));
1101
                $sheet->getCell('E' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1102
 
1103
                $dt = \DateTime::createFromFormat('Y-m-d', $goal->end);
1104
                $sheet->setCellValue('F' . $row, $dt->format('d/m/Y'));
1105
                $sheet->getCell('F' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1106
 
1107
                $sheet->setCellValue('G' . $row, $goal->budget);
1108
                $sheet->getCell('G' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1109
 
1110
                $sheet->setCellValue('F' . $row, $goal->cost);
1111
                $sheet->getCell('F' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1112
 
1113
                $sheet->setCellValue('H' . $row, $goal->hours);
1114
                $sheet->getCell('H' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1115
 
1116
                $sheet->setCellValue('I' . $row, $goal->progress);
1117
                $sheet->getCell('I' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1118
 
1119
                $sheet->setCellValue('J' . $row, $goal->status == PlanningGoal::STATUS_ACTIVE ? $this->translator->translate('LABEL_ACTIVE') : $this->translator->translate('LABEL_INACTIVE'));
1120
                $sheet->getCell('J' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1121
 
1122
                $tasks = $planningTaskMapper->fetchAllByGoalId($goal->id);
1123
                if($tasks) {
1124
                    $row++;
1125
 
1126
                    $sheet->setCellValue('D' . $row, $this->translator->translate('LABEL_PLANNING_TASKS'));
1127
                    $sheet->getCell('D' . $row)->getStyle()->getFont()->setBold(true);
1128
                    $sheet->getCell('D' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1129
 
1130
 
1131
                    $row++;
1132
                    $sheet->setCellValue('D' . $row, $this->translator->translate('LABEL_TITLE'));
1133
                    $sheet->getCell('D' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1134
                    $sheet->getCell('D' . $row)->getStyle()->getFont()->setBold(true);
1135
 
1136
                    $sheet->setCellValue('E' . $row, $this->translator->translate('LABEL_DESCRIPTION'));
1137
                    $sheet->getCell('E' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1138
                    $sheet->getCell('E' . $row)->getStyle()->getFont()->setBold(true);
1139
 
1140
                    $sheet->setCellValue('F' . $row, $this->translator->translate('LABEL_START'));
1141
                    $sheet->getCell('F' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1142
                    $sheet->getCell('F' . $row)->getStyle()->getFont()->setBold(true);
1143
 
1144
                    $sheet->setCellValue('G' . $row, $this->translator->translate('LABEL_END'));
1145
                    $sheet->getCell('G' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1146
                    $sheet->getCell('G' . $row)->getStyle()->getFont()->setBold(true);
1147
 
1148
                    $sheet->setCellValue('H' . $row, $this->translator->translate('LABEL_COST'));
1149
                    $sheet->getCell('H' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1150
                    $sheet->getCell('H' . $row)->getStyle()->getFont()->setBold(true);
1151
 
1152
                    $sheet->setCellValue('I' . $row, $this->translator->translate('LABEL_HOURS'));
1153
                    $sheet->getCell('I' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1154
                    $sheet->getCell('I' . $row)->getStyle()->getFont()->setBold(true);
1155
 
1156
                    $sheet->setCellValue('J' . $row, $this->translator->translate('LABEL_PROGRESS'));
1157
                    $sheet->getCell('J' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1158
                    $sheet->getCell('J' . $row)->getStyle()->getFont()->setBold(true);
1159
 
1160
                    $sheet->setCellValue('K' . $row, $this->translator->translate('LABEL_STATUS'));
1161
                    $sheet->getCell('K' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1162
                    $sheet->getCell('K' . $row)->getStyle()->getFont()->setBold(true);
1163
 
1164
                    $sheet->setCellValue('L' . $row, $this->translator->translate('LABEL_TASK_HOW'));
1165
                    $sheet->getCell('L' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1166
                    $sheet->getCell('L' . $row)->getStyle()->getFont()->setBold(true);
1167
 
1168
                    $sheet->setCellValue('M' . $row, $this->translator->translate('LABEL_TASK_PLACE'));
1169
                    $sheet->getCell('M' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1170
                    $sheet->getCell('M' . $row)->getStyle()->getFont()->setBold(true);
1171
 
1172
                    $sheet->setCellValue('N' . $row, $this->translator->translate('LABEL_TASK_WHO'));
1173
                    $sheet->getCell('N' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1174
                    $sheet->getCell('N' . $row)->getStyle()->getFont()->setBold(true);
1175
 
1176
                    $sheet->setCellValue('O' . $row, $this->translator->translate('LABEL_TASK_EVALUATION'));
1177
                    $sheet->getCell('O' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1178
                    $sheet->getCell('O' . $row)->getStyle()->getFont()->setBold(true);
1179
 
1180
                    $sheet->setCellValue('P' . $row, $this->translator->translate('LABEL_TASK_DETOUR'));
1181
                    $sheet->getCell('P' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1182
                    $sheet->getCell('P' . $row)->getStyle()->getFont()->setBold(true);
1183
 
1184
                    $sheet->setCellValue('Q' . $row, $this->translator->translate('LABEL_IS_PRIORITY'));
1185
                    $sheet->getCell('Q' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1186
                    $sheet->getCell('Q' . $row)->getStyle()->getFont()->setBold(true);
1187
 
1188
                    $sheet->setCellValue('R' . $row, $this->translator->translate('LABEL_IS_URGENT'));
1189
                    $sheet->getCell('R' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1190
                    $sheet->getCell('R' . $row)->getStyle()->getFont()->setBold(true);
1191
 
1192
 
1193
                    foreach($tasks as $task)
1194
                    {
1195
                        $users =[];
1196
                        $taskUsers =  $planningTaskUserMapper->fetchAllByTaskId($task->id);
1197
 
1198
                        foreach($taskUsers as $taskUser)
1199
                        {
1200
                            $user = $userMapper->fetchOne($taskUser->user_id);
1201
                            if($user) {
1202
                                array_push($users, trim($user->first_name.' '.$user->last_name));
1203
                            }
1204
                        }
1205
 
1206
                        $row++;
1207
                        $sheet->setCellValue('D' . $row, $task->title);
1208
                        $sheet->getCell('D' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1209
 
1210
                        $sheet->setCellValue('E' . $row, $task->description);
1211
                        $sheet->getCell('E' . $row)->getStyle()->getAlignment()->setWrapText(true);
1212
                        $sheet->getCell('E' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1213
 
1214
                        $dt = \DateTime::createFromFormat('Y-m-d', $task->start);
1215
                        $sheet->setCellValue('F' . $row, $dt->format('d/m/Y'));
1216
                        $sheet->getCell('F' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1217
 
1218
                        $dt = \DateTime::createFromFormat('Y-m-d', $task->end);
1219
                        $sheet->setCellValue('G' . $row, $dt->format('d/m/Y'));
1220
                        $sheet->getCell('G' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1221
 
1222
                        $sheet->setCellValue('H' . $row, $task->cost);
1223
                        $sheet->getCell('H' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1224
 
1225
                        $sheet->setCellValue('I' . $row, $task->hours);
1226
                        $sheet->getCell('I' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1227
 
1228
                        $sheet->setCellValue('J' . $row, $task->progress);
1229
                        $sheet->getCell('J' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1230
 
1231
                        $sheet->setCellValue('K' . $row, $task->status == PlanningTask::STATUS_ACTIVE ? $this->translator->translate('LABEL_ACTIVE') : $this->translator->translate('LABEL_INACTIVE'));
1232
                        $sheet->getCell('K' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1233
 
1234
                        $sheet->setCellValue('L' . $row, $task->how);
1235
                        $sheet->getCell('L' . $row)->getStyle()->getAlignment()->setWrapText(true);
1236
                        $sheet->getCell('L' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1237
 
1238
                        $sheet->setCellValue('M' . $row, $task->place);
1239
                        $sheet->getCell('M' . $row)->getStyle()->getAlignment()->setWrapText(true);
1240
                        $sheet->getCell('M' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1241
 
1242
                        $sheet->setCellValue('N' . $row, implode(' , ', $users));
1243
                        $sheet->getCell('N' . $row)->getStyle()->getAlignment()->setWrapText(true);
1244
                        $sheet->getCell('N' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1245
 
1246
                        $sheet->setCellValue('O' . $row, $task->evaluation);
1247
                        $sheet->getCell('O' . $row)->getStyle()->getAlignment()->setWrapText(true);
1248
                        $sheet->getCell('O' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1249
 
1250
                        $sheet->setCellValue('P' . $row, $task->detour);
1251
                        $sheet->getCell('P' . $row)->getStyle()->getAlignment()->setWrapText(true);
1252
                        $sheet->getCell('P' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1253
 
1254
                        $sheet->setCellValue('Q' . $row, $task->priority == PlanningTask::YES ? $this->translator->translate('LABEL_YES') : $this->translator->translate('LABEL_NO'));
1255
                        $sheet->getCell('Q' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1256
 
1257
                        $sheet->setCellValue('R' . $row, $task->urgent == PlanningTask::YES ? $this->translator->translate('LABEL_YES') : $this->translator->translate('LABEL_NO'));
1258
                        $sheet->getCell('R' . $row)->getStyle()->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1259
                    }
1260
                }
1261
            }
1262
 
1263
 
1264
 
16786 efrain 1265
            $fileName = Functions::normalizeString('details-'.$planningObjective->title . '-'  . date('d-m-Y-h-i-a', time()) . '.xls');
16785 efrain 1266
            $tempFilename = tempnam(sys_get_temp_dir(), 'planning_objective_' . time());
1267
 
1268
            $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
1269
            $writer->save($tempFilename);
1270
 
1271
            $content = file_get_contents($tempFilename);
1272
            @unlink($tempFilename);
1273
 
1274
            return new JsonModel([
1275
                'success' => true,
1276
                'data' => [
1277
                    'content' => base64_encode($content),
1278
                    'basename' => $fileName
1279
 
1280
                ]
1281
            ]);
1282
 
1283
        } else {
1284
            $data = [
1285
                'success' => false,
1286
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1287
            ];
1288
 
1289
            return new JsonModel($data);
1290
        }
1291
 
1292
        return new JsonModel($data);
1293
    }
1294
 
1295
 
1296
    public function matrixAction()
1297
    {
1298
 
1299
 
1300
 
1301
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1302
        $currentCompany = $currentUserPlugin->getCompany();
1303
        $currentUser = $currentUserPlugin->getUser();
1304
 
1305
        $request = $this->getRequest();
1306
        $uuid = $this->params()->fromRoute('id');
1307
 
1308
 
1309
        if(!$uuid) {
1310
            $data = [
1311
                'success'   => false,
1312
                'data'   => 'ERROR_INVALID_PARAMETER'
1313
            ];
1314
 
1315
            return new JsonModel($data);
1316
        }
1317
 
1318
        $planningObjectiveMapper = PlanningObjectiveMapper::getInstance($this->adapter);
1319
        $planningObjective = $planningObjectiveMapper->fetchOneByUuid($uuid);
1320
 
1321
        if (!$planningObjective) {
1322
            $data = [
1323
                'success' => false,
1324
                'data' => 'ERROR_RECORD_NOT_FOUND'
1325
            ];
1326
 
1327
            return new JsonModel($data);
1328
        }
1329
 
1330
        if ($planningObjective->company_id != $currentCompany->id) {
1331
            return new JsonModel([
1332
                'success' => false,
1333
                'data' => 'ERROR_UNAUTHORIZED'
1334
            ]);
1335
        }
1336
 
1337
 
1338
        if ($request->isGet()) {
1339
 
1340
 
1341
 
1342
 
1343
            $taskImportantAndUrgent         = [];
1344
            $taskImportantAndNoUrgent       = [];
1345
            $taskNoImportantAndUrgent       = [];
1346
            $taskNoImportantAndNotUrgent    = [];
1347
 
1348
            $planningTaskMapper = PlanningTaskMapper::getInstance($this->adapter);
1349
            $tasks = $planningTaskMapper->fetchAllByObjectiveId($planningObjective->id);
1350
 
1351
            foreach($tasks as $task)
1352
            {
1353
                if($task->priority == PlanningTask::YES)
1354
                {
1355
                    if($task->urgent == PlanningTask::YES) {
1356
                        array_push($taskImportantAndUrgent, $task->title);
1357
                    } else {
1358
                        array_push($taskImportantAndNoUrgent, $task->title);
1359
                    }
1360
 
1361
 
1362
                } else {
1363
                    if($task->urgent == PlanningTask::YES) {
1364
                        array_push($taskNoImportantAndUrgent, $task->title);
1365
                    } else {
1366
                        array_push($taskNoImportantAndNotUrgent, $task->title);
1367
                    }
1368
                }
1369
 
1370
 
1371
            }
1372
 
1373
 
1374
 
1375
            $spreadsheet = new Spreadsheet();
1376
            $spreadsheet->getProperties()->setTitle($this->translator->translate('LABEL_PLANNING_REPORT_MATRIX_TITLE'));
1377
 
1378
 
1379
 
1380
            $spreadsheet->setActiveSheetIndex(0);
1381
            $sheet = $spreadsheet->getActiveSheet();
1382
 
1383
            $row = 1;
1384
            $sheet->setCellValue('A' . $row, $this->translator->translate('LABEL_PLANNING_REPORT_MATRIX_TITLE'));
1385
            $sheet->mergeCells('A' . $row . ':C' . $row);
1386
            $sheet->getCell('A' . $row)->getStyle()->getFont()->setBold(true);
1387
            $sheet->getCell('A' . $row)->getStyle()->getAlignment()->setHorizontal(\PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER);
1388
 
1389
 
1390
 
1391
            $row += 2;
1392
            $sheet->setCellValue('A' . $row, '');
1393
            $sheet->getCell('A' . $row)->getStyle()->getBorders()->getTop()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1394
            $sheet->getCell('A' . $row)->getStyle()->getFont()->setBold(true);
1395
            $sheet->getCell('A' . $row)->getStyle()->getBorders()->getBottom()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1396
 
1397
            $sheet->setCellValue('B' . $row, $this->translator->translate('LABEL_MATRIX_URGENT'));
1398
            $sheet->getCell('B' . $row)->getStyle()->getFont()->setBold(true);
1399
            $sheet->getCell('B' . $row)->getStyle()->getBorders()->getTop()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1400
            $sheet->getCell('B' . $row)->getStyle()->getBorders()->getBottom()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1401
 
1402
            $sheet->setCellValue('C' . $row, $this->translator->translate('LABEL_MATRIX_NOT_URGENT'));
1403
            $sheet->getCell('C' . $row)->getStyle()->getFont()->setBold(true);
1404
            $sheet->getCell('C' . $row)->getStyle()->getBorders()->getTop()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1405
            $sheet->getCell('C' . $row)->getStyle()->getBorders()->getBottom()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1406
 
1407
            /** IMPORTANTES **/
1408
            $i = $row;
1409
            foreach($taskImportantAndUrgent as $text)
1410
            {
1411
                $i++;
1412
                $sheet->setCellValue('B' . $i, $text);
1413
                $sheet->getCell('B' . $i)->getStyle()->getAlignment()->setWrapText(true);
1414
            }
1415
 
1416
            $i = $row;
1417
            foreach($taskImportantAndNoUrgent as $text)
1418
            {
1419
                $i++;
1420
                $sheet->setCellValue('C' . $i, $text);
1421
                $sheet->getCell('C' . $i)->getStyle()->getAlignment()->setWrapText(true);
1422
            }
1423
 
1424
            $max = max(count($taskImportantAndUrgent), count($taskImportantAndNoUrgent));
1425
            $max = $max ? $max : 1;
1426
 
1427
 
1428
 
1429
            for($i = 0; $i <= $max; $i++)
1430
            {
1431
                $y = $row + $i;
1432
                $sheet->getCell('B' . $y)->getStyle()->getBorders()->getRight()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1433
                $sheet->getCell('B' . $y)->getStyle()->getBorders()->getLeft()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1434
            }
1435
 
1436
 
1437
            if($max > 2) {
1438
                $y = $max / 2;
1439
 
1440
                $y = intval($y);
1441
                $y = $row + $y + 1;
1442
 
1443
                $sheet->setCellValue('A' . $y, $this->translator->translate('LABEL_MATRIX_IMPORTANT'));
1444
                $sheet->getCell('A' . $y)->getStyle()->getFont()->setBold(true);
1445
            } else {
1446
                $y = $row + 1;
1447
 
1448
                $sheet->setCellValue('A' . $y, $this->translator->translate('LABEL_MATRIX_IMPORTANT'));
1449
                $sheet->getCell('A' . $y)->getStyle()->getFont()->setBold(true);
1450
            }
1451
 
1452
 
1453
            $row += $max;
1454
 
1455
            $sheet->getCell('A' . $row)->getStyle()->getBorders()->getBottom()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1456
            $sheet->getCell('B' . $row)->getStyle()->getBorders()->getBottom()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1457
            $sheet->getCell('C' . $row)->getStyle()->getBorders()->getBottom()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1458
 
1459
            /***** NO IMPORTANTES ****/
1460
            $i = $row;
1461
            foreach($taskNoImportantAndUrgent  as $text)
1462
            {
1463
                $i++;
1464
                $sheet->setCellValue('B' . $i, $text);
1465
                $sheet->getCell('B' . $i)->getStyle()->getAlignment()->setWrapText(true);
1466
            }
1467
 
1468
            $i = $row;
1469
            foreach($taskNoImportantAndNotUrgent as $text)
1470
            {
1471
                $i++;
1472
                $sheet->setCellValue('C' . $i, $text);
1473
                $sheet->getCell('C' . $i)->getStyle()->getAlignment()->setWrapText(true);
1474
            }
1475
 
1476
            $max = max(count($taskNoImportantAndUrgent), count($taskNoImportantAndNotUrgent));
1477
            $max = $max ? $max : 1;
1478
 
1479
 
1480
 
1481
            for($i = 0; $i <= $max; $i++)
1482
            {
1483
                $y = $row + $i;
1484
                $sheet->getCell('B' . $y)->getStyle()->getBorders()->getRight()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1485
                $sheet->getCell('B' . $y)->getStyle()->getBorders()->getLeft()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
1486
            }
1487
 
1488
 
1489
            if($max > 2) {
1490
                $y = $max / 2;
1491
 
1492
                $y = intval($y);
1493
                $y = $row + $y + 1;
1494
 
1495
                $sheet->setCellValue('A' . $y, $this->translator->translate('LABEL_MATRIX_NOT_IMPORTANT'));
1496
                $sheet->getCell('A' . $y)->getStyle()->getFont()->setBold(true);
1497
            } else {
1498
                $y = $row + 1;
1499
 
1500
                $sheet->setCellValue('A' . $y, $this->translator->translate('LABEL_MATRIX_NOT_IMPORTANT'));
1501
                $sheet->getCell('A' . $y)->getStyle()->getFont()->setBold(true);
1502
            }
1503
 
1504
 
1505
 
1506
            $fileName = Functions::normalizeString('matrix-' . $planningObjective->title . '-'  . date('d-m-Y-h-i-a', time()) . '.xls');
1507
            $tempFilename = tempnam(sys_get_temp_dir(), 'planning_objective_' . time());
1508
 
1509
            $writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
1510
            $writer->save($tempFilename);
1511
 
1512
            $content = file_get_contents($tempFilename);
1513
            @unlink($tempFilename);
1514
 
1515
            return new JsonModel([
1516
                'success' => true,
1517
                'data' => [
1518
                    'content' => base64_encode($content),
1519
                    'basename' => $fileName
1520
 
1521
                ]
1522
            ]);
1523
 
1524
        } else {
1525
            $data = [
1526
                'success' => false,
1527
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1528
            ];
1529
 
1530
            return new JsonModel($data);
1531
        }
1532
 
1533
        return new JsonModel($data);
1534
    }
1535
 
1536
}