Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
15444 efrain 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Db\Adapter\AdapterInterface;
16766 efrain 7
use LeadersLinked\Cache\CacheInterface;
15444 efrain 8
use Laminas\Mvc\Controller\AbstractActionController;
9
use Laminas\Log\LoggerInterface;
10
use Laminas\View\Model\JsonModel;
11
use Laminas\View\Model\ViewModel;
12
use LeadersLinked\Library\Functions;
13
use LeadersLinked\Mapper\PerformanceEvaluationTestMapper;
14
use LeadersLinked\Mapper\PerformanceEvaluationFormMapper;
15
use LeadersLinked\Mapper\QueryMapper;
16
use LeadersLinked\Mapper\UserMapper;
17
use LeadersLinked\Model\PerformanceEvaluationTest;
18
use Laminas\Hydrator\ArraySerializableHydrator;
19
use Laminas\Db\ResultSet\HydratingResultSet;
20
use Laminas\Paginator\Adapter\DbSelect;
21
use Laminas\Paginator\Paginator;
22
use LeadersLinked\Form\PerformanceEvaluation\PerformanceEvaluationTakeAnTestForm;
23
use Laminas\Mvc\I18n\Translator;
24
use LeadersLinked\Library\PerformanceEvaluationInterviewPDF;
25
 
26
class ActivityCenterPerformanceEvaluationController extends AbstractActionController
27
{
28
    /**
29
     *
30
     * @var AdapterInterface
31
     */
32
    private $adapter;
33
 
34
 
35
    /**
36
     *
16766 efrain 37
     * @var CacheInterface
15444 efrain 38
     */
39
    private $cache;
40
 
41
    /**
42
     *
43
     * @var  LoggerInterface
44
     */
45
    private $logger;
46
 
47
    /**
48
     *
49
     * @var array
50
     */
51
    private $config;
52
 
53
 
54
    /**
55
     *
56
     * @var Translator
57
     */
58
    private $translator;
59
 
60
 
61
 
62
    /**
63
     *
64
     * @param AdapterInterface $adapter
16766 efrain 65
     * @param CacheInterface $cache
15444 efrain 66
     * @param LoggerInterface $logger
67
     * @param array $config
68
     * @param Translator $traslator
69
     */
70
    public function __construct($adapter, $cache , $logger, $config, $translator)
71
    {
72
        $this->adapter      = $adapter;
73
        $this->cache        = $cache;
74
        $this->logger       = $logger;
75
        $this->config       = $config;
76
        $this->translator   = $translator;
77
    }
78
 
79
    public function indexAction()
80
    {
81
        $currentUserPlugin = $this->plugin('currentUserPlugin');
82
        $currentUser = $currentUserPlugin->getUser();
83
        $currentCompany = $currentUserPlugin->getCompany();
84
 
85
 
86
 
87
 
88
 
89
        $request = $this->getRequest();
90
 
91
        if ($request->isGet()) {
92
 
93
            $headers = $request->getHeaders();
94
 
95
            $isJson = false;
96
            if ($headers->has('Accept')) {
97
                $accept = $headers->get('Accept');
98
 
99
                $prioritized = $accept->getPrioritized();
100
 
101
                foreach ($prioritized as $key => $value) {
102
                    $raw = trim($value->getRaw());
103
 
104
                    if (!$isJson) {
105
                        $isJson = strpos($raw, 'json');
106
                    }
107
                }
108
            }
109
 
110
 
111
            if ($isJson) {
112
 
113
 
114
                $data = [
115
                    'items' => [],
116
                    'total' => 0,
117
                ];
118
 
119
 
120
                $search = $this->params()->fromQuery('search');
16766 efrain 121
                $search = empty($search['value']) ? '' :  Functions::sanitizeFilterString($search['value']);
15444 efrain 122
 
123
                $start = intval($this->params()->fromQuery('start', 0), 10);
124
                $records_x_page = intval($this->params()->fromQuery('length', 10), 10);
125
                $page =  intval($start / $records_x_page);
126
                $page++;
127
 
128
                $order = $this->params()->fromQuery('order', []);
129
                $order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);
16766 efrain 130
                $order_direction = empty($order[0]['dir']) ? 'ASC' : Functions::sanitizeFilterString(filter_var($order[0]['dir']));
15444 efrain 131
 
132
                $fields = ['max_date'];
133
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'first_name';
134
 
135
                if (!in_array($order_direction, ['ASC', 'DESC'])) {
136
                    $order_direction = 'ASC';
137
                }
138
 
139
 
140
 
141
 
142
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
143
                //$allowDelete = $acl->isAllowed($currentUser->usertype_id, 'performance-evaluation/evaluations/delete');
144
 
145
 
146
 
147
                $queryMapper = QueryMapper::getInstance($this->adapter);
148
                $sql = $queryMapper->getSql();
149
                $select = $sql->select();
150
                $select->columns([
151
                    'id',
152
                    'uuid',
153
                    'last_date',
154
                    'status',
155
                    'type',
156
                    'added_on',
157
                    'updated_on'
158
 
159
                ]);
160
 
161
 
162
 
163
                $select->from(['tb1' => PerformanceEvaluationTestMapper::_TABLE]);
164
                $select->join(['tb2' => PerformanceEvaluationFormMapper::_TABLE], 'tb1.form_id = tb2.id ', ['form' => 'name']);
165
                $select->join(['tb3' => UserMapper::_TABLE], 'tb1.supervisor_id = tb3.id ', ['supervisor_first_name' => 'first_name', 'supervisor_last_name' => 'last_name', 'supervisor_email' => 'email']);
166
                $select->join(['tb4' => UserMapper::_TABLE], 'tb1.employee_id = tb4.id ', ['employee_first_name' => 'first_name', 'employee_last_name' => 'last_name', 'employee_email' => 'email']);
167
                $select->where->equalTo('tb1.company_id', $currentCompany->id);
168
                $select->where->nest()
169
                    ->nest()
170
                        ->equalTo('tb1.supervisor_id', $currentUser->id)
171
                        ->and->equalTo('tb1.type', PerformanceEvaluationTest::TYPE_SUPERVISOR)
172
                    ->unnest()
173
                    ->or->nest()
174
                        ->equalTo('tb1.supervisor_id', $currentUser->id)
175
                        ->and->equalTo('tb1.type', PerformanceEvaluationTest::TYPE_BOTH)
176
                    ->unnest()
177
                    ->or->nest()
178
                    ->equalTo('tb1.employee_id', $currentUser->id)
179
                    ->and->equalTo('tb1.type', PerformanceEvaluationTest::TYPE_EMPLOYEE)
180
                    ->unnest()
181
                ->unnest();
182
 
183
                if ($search) {
184
                    $select->where->nest()
185
                        ->like('tb2.name', '%' . $search . '%')
186
                        ->or->like('tb1.uuid', '%' . $search . '%')
187
                        ->unnest();
188
                }
189
 
190
 
191
                $select->order('tb1.last_date DESC, tb2.name ASC');
192
 
193
 
194
 
195
                $hydrator = new ArraySerializableHydrator();
196
                $resultset = new HydratingResultSet($hydrator);
197
 
198
                $adapter = new DbSelect($select, $sql, $resultset);
199
                $paginator = new Paginator($adapter);
200
                $paginator->setItemCountPerPage($records_x_page);
201
                $paginator->setCurrentPageNumber($page);
202
 
203
 
204
 
205
                $items = [];
206
                $records = $paginator->getCurrentItems();
207
                foreach ($records as $record)
208
                {
209
 
210
                    $dt = \DateTime::createFromFormat('Y-m-d', $record['last_date']);
211
                    $last_date = $dt->format('d/m/Y');
212
 
213
                    switch($record['status'])
214
                    {
215
                        case PerformanceEvaluationTest::STATUS_PENDING :
216
                            $status = 'LABEL_PENDING';
217
                            break;
218
 
219
                        case PerformanceEvaluationTest::STATUS_COMPLETED :
220
                            $status = 'LABEL_COMPLETED';
221
                            break;
222
 
223
                        default :
224
                            $status = 'LABEL_UNKNOW';
225
                            break;
226
                    }
227
 
228
                    switch($record['type'])
229
                    {
230
                        case PerformanceEvaluationTest::TYPE_BOTH :
231
                            $type = 'LABEL_PERFORMANCE_EVALUATION_TYPE_BOTH';
232
                            break;
233
 
234
                        case PerformanceEvaluationTest::TYPE_SUPERVISOR :
235
                            $type = 'LABEL_PERFORMANCE_EVALUATION_TYPE_SUPERVISOR';
236
                            break;
237
 
238
                        case PerformanceEvaluationTest::TYPE_EMPLOYEE :
239
                            $type = 'LABEL_PERFORMANCE_EVALUATION_TYPE_EMPLOYEE';
240
                            break;
241
 
242
                        default :
243
                            $type = 'LABEL_UNKNOWN';
244
                            break;
245
                    }
246
 
247
 
248
 
249
                    if($record['status'] == PerformanceEvaluationTest::STATUS_COMPLETED) {
250
                        $link_pdf = $this->url()->fromRoute('activities-center/performance-evaluation/report', ['id' => $record['uuid']]);
251
                        $link_take_a_test = '';
252
 
253
 
254
                    } else {
255
                        $link_pdf = '';
256
                        $link_take_a_test = $this->url()->fromRoute('activities-center/performance-evaluation/take-a-test', ['id' => $record['uuid']]);
257
                    }
258
 
259
 
260
                    $item = [
261
                        'last_date' => $last_date,
262
                        'form' => $record['form'],
263
                        'type' => $type,
264
                        'supervisor_first_name' => $record['supervisor_first_name'],
265
                        'supervisor_last_name' => $record['supervisor_last_name'],
266
                        'supervisor_email' => $record['supervisor_email'],
267
                        'employee_first_name' => $record['employee_first_name'],
268
                        'employee_last_name' => $record['employee_last_name'],
269
                        'employee_email' => $record['employee_email'],
270
                        'status' => $status,
271
                        'actions' => [
272
                            'link_pdf' => $link_pdf,
273
                            'link_take_a_test' => $link_take_a_test,
274
                        ]
275
                    ];
276
                    /*
277
                     if($testSelf) {
278
                     $item['actions']['link_report_self'] = $this->url()->fromRoute('performance-evaluation/evaluations/report-self', ['id' => $record['uuid'] ]);
279
                     } else{
280
                     $item['actions']['link_self'] = $this->url()->fromRoute('performance-evaluation/evaluations/self', ['id' => $record['uuid'] ]);
281
                     }
282
                     if($testBoth) {
283
                     $item['actions']['link_report_both'] = $this->url()->fromRoute('performance-evaluation/evaluations/report-both', ['id' => $record['uuid'] ]);
284
                     } else{
285
                     $item['actions']['link_both'] = $this->url()->fromRoute('performance-evaluation/evaluations/both', ['id' => $record['uuid'] ]);
286
                     }
287
                     if($testSupervisor) {
288
                     $item['actions']['link_report_superviser'] = $this->url()->fromRoute('performance-evaluation/evaluations/report-superviser', ['id' => $record['uuid'] ]);
289
                     } else{
290
                     $item['actions']['link_superviser'] = $this->url()->fromRoute('performance-evaluation/evaluations/superviser', ['id' => $record['uuid'] ]);
291
                     }*/
292
 
293
                    array_push($items, $item);
294
                }
295
 
296
                $data['items'] = $items;
297
                $data['total'] = $paginator->getTotalItemCount();
298
 
299
 
300
                return new JsonModel([
301
                    'success' => true,
302
                    'data' => $data
303
                ]);
304
            } else {
305
                if($this->cache->hasItem('ACTIVITY_CENTER_RELATIONAL')) {
306
                    $search =  $this->cache->getItem('ACTIVITY_CENTER_RELATIONAL');
307
                    $this->cache->removeItem('ACTIVITY_CENTER_RELATIONAL');
308
                } else {
309
                    $search = '';
310
                }
311
 
312
 
313
 
314
 
315
                $form = new PerformanceEvaluationTakeAnTestForm();
316
 
317
                $this->layout()->setTemplate('layout/layout-backend');
318
                $viewModel = new ViewModel();
319
                $viewModel->setTemplate('leaders-linked/activity-center-performance-evaluation/index.phtml');
320
                $viewModel->setVariables([
321
                    'search' => $search,
322
                    'form' => $form
323
                ]);
324
                return $viewModel;
325
            }
326
        } else {
327
            return new JsonModel([
328
                'success' => false,
329
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
330
            ]);
331
 
332
        }
333
    }
334
 
335
 
336
    public function takeaTestAction()
337
    {
338
        $request = $this->getRequest();
339
        $currentUserPlugin = $this->plugin('currentUserPlugin');
340
        $currentCompany = $currentUserPlugin->getCompany();
341
        $currentUser = $currentUserPlugin->getUser();
342
 
343
        $request = $this->getRequest();
344
        $uuid = $this->params()->fromRoute('id');
345
 
346
 
347
        if (!$uuid) {
348
            $data = [
349
                'success' => false,
350
                'data' => 'ERROR_INVALID_PARAMETER'
351
            ];
352
 
353
            return new JsonModel($data);
354
        }
355
 
356
        $performanceEvaluationTestMapper = PerformanceEvaluationTestMapper::getInstance($this->adapter);
357
        $performanceEvaluationTest = $performanceEvaluationTestMapper->fetchOneByUuid($uuid);
358
 
359
 
360
 
361
 
362
 
363
        if (!$performanceEvaluationTest) {
364
            $data = [
365
                'success' => false,
366
                'data' => 'ERROR_RECORD_NOT_FOUND'
367
            ];
368
 
369
            return new JsonModel($data);
370
        }
371
 
372
        if ($performanceEvaluationTest->company_id == $currentCompany->id) {
373
            switch ($performanceEvaluationTest->type)
374
            {
375
                case PerformanceEvaluationTest::TYPE_BOTH :
376
                    $ok = $performanceEvaluationTest->supervisor_id == $currentUser->id
377
                    || $performanceEvaluationTest->employee_id == $currentUser->id;
378
                    break;
379
 
380
                case PerformanceEvaluationTest::TYPE_SUPERVISOR :
381
                    $ok = $performanceEvaluationTest->supervisor_id == $currentUser->id;
382
                    break;
383
 
384
                case PerformanceEvaluationTest::TYPE_EMPLOYEE :
385
                    $ok =  $performanceEvaluationTest->employee_id == $currentUser->id;
386
                    break;
387
 
388
                default :
389
                    $ok = false;
390
                    break;
391
 
392
            }
393
        } else {
394
            $ok = false;
395
        }
396
 
397
        if(!$ok) {
398
            return new JsonModel([
399
                'success' => false,
400
                'data' => 'ERROR_UNAUTHORIZED'
401
            ]);
402
        }
403
 
404
 
405
 
406
        if ($request->isPost()) {
407
 
408
 
409
 
410
            $dataPost = $request->getPost()->toArray();
411
 
412
            $form = new PerformanceEvaluationTakeAnTestForm($this->adapter, $currentCompany->id);
413
            $form->setData($dataPost);
414
 
415
            if ($form->isValid()) {
416
 
417
                switch( $performanceEvaluationTest->type)
418
                {
419
                    case PerformanceEvaluationTest::TYPE_BOTH :
420
                        $type = 'LABEL_PERFORMANCE_EVALUATION_TYPE_BOTH';
421
                        break;
422
 
423
                    case PerformanceEvaluationTest::TYPE_SUPERVISOR :
424
                        $type = 'LABEL_PERFORMANCE_EVALUATION_TYPE_SUPERVISOR';
425
                        break;
426
 
427
                    case PerformanceEvaluationTest::TYPE_EMPLOYEE :
428
                        $type = 'LABEL_PERFORMANCE_EVALUATION_TYPE_EMPLOYEE';
429
                        break;
430
 
431
                    default :
432
                        $type = 'LABEL_UNKNOWN';
433
                        break;
434
                }
435
 
436
 
437
                $type = $this->translator->translate($type);
438
 
439
 
440
                $performanceEvaluationFormMapper = PerformanceEvaluationFormMapper::getInstance($this->adapter);
441
                $performanceEvaluationForm = $performanceEvaluationFormMapper->fetchOne($performanceEvaluationTest->form_id);
442
 
443
                $dataPost = (array) $form->getData();
444
 
445
 
446
                $content = json_decode($performanceEvaluationTest->content);
447
                $content->points = $dataPost['points'];
448
                $content->comment = $dataPost['comment'];
449
                $content->evaluation = [];
450
 
451
                foreach($content->competencies_selected as $competency)
452
                {
453
                    foreach($competency->behaviors as $behavior)
454
                    {
455
                        $key_comment = $competency->uuid . '-' . $behavior->uuid . '-comment';
456
                        $key_points = $competency->uuid . '-' . $behavior->uuid . '-points';
457
 
458
 
459
                        if(!empty($_POST[$key_comment])) {
16766 efrain 460
                            $value_comment = Functions::sanitizeFilterString($_POST[$key_comment]);
15444 efrain 461
                        } else {
462
                            $value_comment = '';
463
 
464
                        }
465
 
466
                        if(!empty($_POST[$key_points])) {
467
                            $value_points = intval( filter_var($_POST[$key_points], FILTER_SANITIZE_NUMBER_INT), 10);
468
                        } else {
469
                            $value_points = 0;
470
 
471
                        }
472
 
473
                        array_push($content->evaluation, [
474
                            'competency' => $competency->uuid,
475
                            'behavior' => $behavior->uuid,
476
                            'comment' => $value_comment,
477
                            'points' => $value_points
478
                        ]);
479
 
480
 
481
 
482
 
483
                    }
484
                }
485
 
486
 
487
                $performanceEvaluationTest->status = PerformanceEvaluationTest::STATUS_COMPLETED;
488
                $performanceEvaluationTest->content = json_encode($content);
489
 
490
                $result = $performanceEvaluationTestMapper->update($performanceEvaluationTest);
491
 
492
                if ($result) {
493
                    $this->logger->info('Se agrego la prueba de tipo '  . $type . ' de la Evaluación de  Desempeño : ' . $performanceEvaluationTest->uuid, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
494
                    $data = [
495
                        'success' => true,
496
                        'data' => 'LABEL_RECORD_UPDATED'
497
                    ];
498
                } else {
499
                    $data = [
500
                        'success' => false,
501
                        'data' => $performanceEvaluationTestMapper->getError()
502
                    ];
503
                }
504
 
505
                return new JsonModel($data);
506
            } else {
507
                $messages = [];
508
                $form_messages = (array) $form->getMessages();
509
                foreach ($form_messages as $fieldname => $field_messages) {
510
                    $messages[$fieldname] = array_values($field_messages);
511
                }
512
 
513
                return new JsonModel([
514
                    'success' => false,
515
                    'data' => $messages
516
                ]);
517
            }
518
        } else if ($request->isGet()) {
519
            switch( $performanceEvaluationTest->type)
520
            {
521
                case PerformanceEvaluationTest::TYPE_BOTH :
522
                    $type = 'LABEL_PERFORMANCE_EVALUATION_TYPE_BOTH';
523
                    break;
524
 
525
                case PerformanceEvaluationTest::TYPE_SUPERVISOR :
526
                    $type = 'LABEL_PERFORMANCE_EVALUATION_TYPE_SUPERVISOR';
527
                    break;
528
 
529
                case PerformanceEvaluationTest::TYPE_EMPLOYEE :
530
                    $type = 'LABEL_PERFORMANCE_EVALUATION_TYPE_EMPLOYEE';
531
                    break;
532
 
533
                default :
534
                    $type = 'LABEL_UNKNOWN';
535
                    break;
536
            }
537
 
538
 
539
            $performanceEvaluationFormMapper = PerformanceEvaluationFormMapper::getInstance($this->adapter);
540
            $performanceEvaluationForm = $performanceEvaluationFormMapper->fetchOne($performanceEvaluationTest->form_id);
541
 
542
 
543
            $content = json_decode($performanceEvaluationTest->content);
544
            foreach($content->competencies_selected as &$competency)
545
            {
546
                foreach($competency->behaviors as &$behavior)
547
                {
548
                    $behavior->competency_uuid = $competency->uuid;
549
                }
550
            }
551
 
552
            $userMapper = UserMapper::getInstance($this->adapter);
553
 
554
            if($performanceEvaluationTest->supervisor_id) {
555
                $user = $userMapper->fetchOne($performanceEvaluationTest->supervisor_id);
556
                $supervisor = $user->first_name . ' ' . $user->last_name;
557
            } else {
558
                $supervisor = '';
559
            }
560
 
561
            if($performanceEvaluationTest->employee_id) {
562
                $user = $userMapper->fetchOne($performanceEvaluationTest->employee_id);
563
                $employee = $user->first_name . ' ' . $user->last_name;
564
            } else {
565
                $employee = '';
566
            }
567
 
568
            $dt = \DateTime::createFromFormat('Y-m-d', $performanceEvaluationTest->last_date);
569
            if($dt) {
570
                $last_date = $dt->format('d/m/Y');
571
            } else {
572
                $last_date = '';
573
            }
574
 
575
 
576
            $data = [
577
               // 'uuid' =>  $content->uuid,
578
                'name' =>  $content->name,
579
                'functions' =>  $content->functions,
580
                'objectives' =>  $content->objectives,
581
                'form' => $performanceEvaluationForm->name,
582
                'type' => $type,
583
                'supervisor' => $supervisor,
584
                'employee' => $employee,
585
                'last_date' => $last_date,
586
                //'job_description_id_boss' =>  $content->job_description_id_boss,
587
                'competency_types' => [],
588
                'competencies' => [],
589
                'behaviors' => [],
590
                'competencies_selected' => [],
591
                'subordinates_selected' => [],
592
            ];
593
 
594
            foreach($content->competency_types as $record)
595
            {
596
               array_push($data['competency_types'], $record);
597
            }
598
 
599
            foreach($content->competencies as $record)
600
            {
601
                array_push($data['competencies'], $record);
602
            }
603
 
604
            foreach($content->behaviors as $record)
605
            {
606
                array_push($data['behaviors'], $record);
607
            }
608
 
609
            foreach($content->competencies_selected as $record)
610
            {
611
                array_push($data['competencies_selected'], $record);
612
            }
613
 
614
            foreach($content->subordinates_selected as $record)
615
            {
616
                array_push($data['subordinates_selected'], $record);
617
            }
618
 
619
 
620
 
621
            $data = [
622
                'success' => true,
623
                'data' => $data
624
            ];
625
 
626
 
627
            return new JsonModel($data);
628
        } else {
629
            $data = [
630
                'success' => false,
631
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
632
            ];
633
 
634
            return new JsonModel($data);
635
        }
636
 
637
        return new JsonModel($data);
638
    }
639
 
640
    public function reportAction()
641
    {
642
        $request = $this->getRequest();
643
        $currentUserPlugin = $this->plugin('currentUserPlugin');
644
        $currentCompany = $currentUserPlugin->getCompany();
645
        $currentUser = $currentUserPlugin->getUser();
646
 
647
        $request = $this->getRequest();
648
        $uuid = $this->params()->fromRoute('id');
649
 
650
        if (!$uuid) {
651
            $data = [
652
                'success' => false,
653
                'data' => 'ERROR_INVALID_PARAMETER'
654
            ];
655
 
656
            return new JsonModel($data);
657
        }
658
 
659
        $performanceEvaluationTestMapper = PerformanceEvaluationTestMapper::getInstance($this->adapter);
660
        $performanceEvaluationTest = $performanceEvaluationTestMapper->fetchOneByUuid($uuid);
661
        if (!$performanceEvaluationTest) {
662
            $data = [
663
                'success' => false,
664
                'data' => 'ERROR_RECORD_NOT_FOUND'
665
            ];
666
 
667
            return new JsonModel($data);
668
        }
669
 
670
 
671
        if ($performanceEvaluationTest->company_id != $currentCompany->id) {
672
            return new JsonModel([
673
                'success' => false,
674
                'data' => 'ERROR_UNAUTHORIZED'
675
            ]);
676
        }
677
 
678
        if ($performanceEvaluationTest->employee_id != $currentUser->id
679
            && $performanceEvaluationTest->supervisor_id != $currentUser->id ) {
680
            return new JsonModel([
681
                'success' => false,
682
                'data' => 'ERROR_UNAUTHORIZED'
683
            ]);
684
        }
685
 
686
        if($performanceEvaluationTest->status ==PerformanceEvaluationTest::STATUS_PENDING) {
687
            return new JsonModel([
688
                'success' => false,
689
                'data' =>   'ERROR_RECORD_IS_PENDING'
690
            ]);
691
 
692
        }
693
 
694
 
695
 
696
        $request = $this->getRequest();
697
        if ($request->isGet()) {
698
 
699
            switch( $performanceEvaluationTest->type)
700
            {
701
                case PerformanceEvaluationTest::TYPE_BOTH :
702
                    $type = $this->translator->translate('LABEL_PERFORMANCE_EVALUATION_TYPE_BOTH');
703
                    break;
704
 
705
                case PerformanceEvaluationTest::TYPE_SUPERVISOR :
706
                    $type = $this->translator->translate('LABEL_PERFORMANCE_EVALUATION_TYPE_SUPERVISOR');
707
                    break;
708
 
709
                case PerformanceEvaluationTest::TYPE_EMPLOYEE :
710
                    $type = $this->translator->translate('LABEL_PERFORMANCE_EVALUATION_TYPE_EMPLOYEE');
711
                    break;
712
 
713
                default :
714
                    $type = $this->translator->translate('LABEL_UNKNOWN');
715
                    break;
716
            }
717
 
718
 
719
            $performanceEvaluationFormMapper = PerformanceEvaluationFormMapper::getInstance($this->adapter);
720
            $performanceEvaluationForm = $performanceEvaluationFormMapper->fetchOne($performanceEvaluationTest->form_id);
721
 
722
            $userMapper = UserMapper::getInstance($this->adapter);
723
            $employee = $userMapper->fetchOne($performanceEvaluationTest->employee_id);
724
 
725
            $filename = $performanceEvaluationForm->name . '-' . trim($employee->first_name) . '-' . trim($employee->last_name)  . '-' . $type . '-' . date('Y-m-d H:i a') . '.pdf';
726
 
727
            $filename = Functions::normalizeStringFilename( $filename );
728
 
729
 
730
 
731
 
732
            $content = base64_encode($this->renderPDF($performanceEvaluationTest));
733
            $data = [
734
                'success' => true,
735
                'data' => [
736
                    'basename' => $filename,
737
                    'content' => $content
738
                ]
739
            ];
740
 
741
            return new JsonModel($data);
742
 
743
            /*
744
 
745
            $content = $this->renderPdf($currentCompany, $jobDescription);
746
            $response = new Response();
747
            $response->setStatusCode(200);
748
            $response->setContent($content);
749
 
750
 
751
 
752
            $headers = $response->getHeaders();
753
            $headers->clearHeaders();
754
 
755
            $headers->addHeaderLine('Content-Description: File Transfer');
756
            $headers->addHeaderLine('Content-Type: application/pdf');
757
            //$headers->addHeaderLine('Content-Disposition: attachment; filename=' . $filename);
758
            $headers->addHeaderLine('Content-Transfer-Encoding: binary');
759
            $headers->addHeaderLine('Expires: 0');
760
            $headers->addHeaderLine('Cache-Control: must-revalidate');
761
            $headers->addHeaderLine('Pragma: public');
762
            return $response;
763
            */
764
 
765
 
766
 
767
 
768
            return ;
769
        } else {
770
 
771
 
772
            return new JsonModel([
773
                'success' => false,
774
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
775
            ]);
776
        }
777
    }
778
 
779
    /**
780
     * Render PDF
781
     * @param PerformanceEvaluationTest $performanceEvaluationTest
782
 
783
     * @return mixed
784
     */
785
    private function renderPDF($performanceEvaluationTest)
786
    {
787
        $request = $this->getRequest();
788
        $currentUserPlugin = $this->plugin('currentUserPlugin');
789
        $currentCompany = $currentUserPlugin->getCompany();
790
        $currentUser = $currentUserPlugin->getUser();
791
 
792
 
793
        //Generate New PDF
794
        $pdf = new PerformanceEvaluationInterviewPDF();
795
 
796
        $target_path = $this->config['leaderslinked.fullpath.company'] . DIRECTORY_SEPARATOR . $currentCompany->uuid;
797
        $header = $currentCompany->header ? $target_path . DIRECTORY_SEPARATOR . $currentCompany->header : '';
798
        if (empty($header) || !file_exists($header)) {
799
            $header = $this->config['leaderslinked.images_default.company_pdf_header'];
800
        }
801
 
802
        $footer = $currentCompany->footer ? $target_path . DIRECTORY_SEPARATOR . $currentCompany->footer : '';
803
        if (empty($footer) || !file_exists($footer)) {
804
            $footer = $this->config['leaderslinked.images_default.company_pdf_footer'];
805
        }
806
 
807
        $content = json_decode($performanceEvaluationTest->content);
808
 
809
        $pdf->header = $header;
810
        $pdf->footer = $footer;
811
        $pdf->translator = $this->translator;
812
 
813
        $pdf->SetMargins(10, 0, 10);
814
 
815
        $pdf->AliasNbPages();
816
        $pdf->AddPage();
817
 
818
        switch( $performanceEvaluationTest->type)
819
        {
820
            case PerformanceEvaluationTest::TYPE_BOTH :
821
                $type = $this->translator->translate('LABEL_PERFORMANCE_EVALUATION_TYPE_BOTH');
822
                break;
823
 
824
            case PerformanceEvaluationTest::TYPE_SUPERVISOR :
825
                $type = $this->translator->translate('LABEL_PERFORMANCE_EVALUATION_TYPE_SUPERVISOR');
826
                break;
827
 
828
            case PerformanceEvaluationTest::TYPE_EMPLOYEE :
829
                $type = $this->translator->translate('LABEL_PERFORMANCE_EVALUATION_TYPE_EMPLOYEE');
830
                break;
831
 
832
            default :
833
                $type = $this->translator->translate('LABEL_UNKNOWN');
834
                break;
835
        }
836
 
837
        $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $performanceEvaluationTest->updated_on);
838
 
839
        $evaluated = '';
840
        $evaluator = '';
841
 
842
        $userMapper = UserMapper::getInstance($this->adapter);
843
        if($performanceEvaluationTest->employee_id) {
844
            $user = $userMapper->fetchOne($performanceEvaluationTest->employee_id);
845
            if($user) {
846
                $evaluated = ucwords(strtolower(trim($user->first_name . ' ' . $user->last_name)));
847
            }
848
        }
849
        if($performanceEvaluationTest->supervisor_id) {
850
            $user = $userMapper->fetchOne($performanceEvaluationTest->supervisor_id);
851
            if($user) {
852
                $evaluator = ucwords(strtolower(trim($user->first_name . ' ' . $user->last_name)));
853
            }
854
        }
855
 
856
        $rows = [
857
            [
858
                'title' => $this->translator->translate('LABEL_TYPE') . ' : ',
859
                'content' => $type,
860
            ],
861
            [
862
                'title' => $this->translator->translate('LABEL_PDF_PERFORMANCE_EVALUATION_POSITION') . ' : ',
863
                'content' => $content->name,
864
            ],
865
            [
866
                'title' => $this->translator->translate('LABEL_PDF_PERFORMANCE_EVALUATION_EVALUATED')  . ' : ',
867
                'content' => utf8_decode($evaluated),
868
            ],
869
 
870
            [
871
                'title' => $this->translator->translate('LABEL_PDF_PERFORMANCE_EVALUATION_EVALUATE_SIGNATURE') . ' : ',
872
                'content' => ''
873
            ],
874
            [
875
                'title' => $this->translator->translate('LABEL_PDF_PERFORMANCE_EVALUATION_EVALUATOR') . ' : ',
876
                'content' => utf8_decode($evaluator),
877
            ],
878
            [
879
                'title' => $this->translator->translate('LABEL_PDF_PERFORMANCE_EVALUATION_EVALUATOR_SIGNATURE') . ' : ',
880
                'content' => ''
881
            ],
882
            [
883
                'title' => $this->translator->translate( 'LABEL_PDF_PERFORMANCE_EVALUATION_MANAGER_SIGNATURE') . ' : ',
884
                'content' => ''
885
            ],
886
            [
887
                'title' => $this->translator->translate('LABEL_DATE'),
888
                'content' => $dt->format('d/m/Y H:i a')
889
            ]
890
        ];
891
 
892
 
893
 
894
        $pdf->borderTable($this->translator->translate('LABEL_PDF_PERFORMANCE_EVALUATION_TITLE'), $rows);
895
 
896
        $pdf->evaluationTable($content->comment, $content->points);
897
 
898
 
899
 
900
        // Competencies
901
        if ($content->competencies_selected) {
902
            $pdf->AddPage();
903
 
904
            $i = 0;
905
 
906
            $max = count($content->competencies_selected);
907
            for($i = 0; $i < $max; $i++)
908
            {
909
                $competency_selected = $content->competencies_selected[$i];
910
 
911
                $j = $i + 1;
912
                $last = $j == $max;
913
                $pdf->competencyTable($i, $competency_selected, $content->competencies, $content->competency_types, $content->behaviors, $content->evaluation, $last);
914
            }
915
 
916
        }
917
 
918
        return $pdf->Output('S');
919
    }
920
}