Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
977 geraldo 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
8
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
9
use Laminas\Mvc\Controller\AbstractActionController;
10
use Laminas\Log\LoggerInterface;
11
use Laminas\View\Model\ViewModel;
12
use Laminas\View\Model\JsonModel;
13
use LeadersLinked\Library\Functions;
14
use LeadersLinked\Mapper\CompanyPerformanceEvaluationFormMapper;
15
use LeadersLinked\Form\CompanyPerformanceEvaluationFormForm;
16
use LeadersLinked\Model\CompanyPerformanceEvaluationForm;
17
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
1052 geraldo 18
use LeadersLinked\Mapper\JobDescriptionMapper;
1271 geraldo 19
use LeadersLinked\Mapper\JobDescriptionCompetencyMapper;
1272 geraldo 20
use LeadersLinked\Mapper\CompetencyMapper;
1337 efrain 21
use LeadersLinked\Library\PerformanceEvaluationPdf;
1273 geraldo 22
use LeadersLinked\Mapper\CompetencyTypeMapper;
15030 efrain 23
use LeadersLinked\Mapper\CompetencyBehaviorMapper;
1320 efrain 24
use LeadersLinked\Mapper\BehaviorMapper;
1275 geraldo 25
use LeadersLinked\Mapper\JobDescriptionBehaviorCompetencyMapper;
1281 geraldo 26
use LeadersLinked\Mapper\CompanyMapper;
15253 stevensc 27
use LeadersLinked\Mapper\JobDescriptionSubordinateMapper;
1336 efrain 28
use LeadersLinked\Model\Company;
977 geraldo 29
 
15253 stevensc 30
class PerformanceEvaluationFormController extends AbstractActionController
31
{
977 geraldo 32
 
33
    /**
34
     *
35
     * @var AdapterInterface
36
     */
37
    private $adapter;
38
 
39
    /**
40
     *
41
     * @var AbstractAdapter
42
     */
43
    private $cache;
44
 
45
    /**
46
     *
47
     * @var  LoggerInterface
48
     */
49
    private $logger;
50
 
51
    /**
52
     *
53
     * @var array
54
     */
55
    private $config;
56
 
57
    /**
58
     *
59
     * @param AdapterInterface $adapter
60
     * @param AbstractAdapter $cache
61
     * @param LoggerInterface $logger
62
     * @param array $config
63
     */
15253 stevensc 64
    public function __construct($adapter, $cache, $logger, $config)
65
    {
977 geraldo 66
        $this->adapter = $adapter;
67
        $this->cache = $cache;
68
        $this->logger = $logger;
69
        $this->config = $config;
70
    }
71
 
15253 stevensc 72
    public function indexAction()
73
    {
977 geraldo 74
        $request = $this->getRequest();
75
        $currentUserPlugin = $this->plugin('currentUserPlugin');
76
        $currentCompany = $currentUserPlugin->getCompany();
77
        $currentUser = $currentUserPlugin->getUser();
78
 
79
 
80
        $request = $this->getRequest();
81
        if ($request->isGet()) {
82
 
83
            $headers = $request->getHeaders();
84
 
85
            $isJson = false;
86
            if ($headers->has('Accept')) {
87
                $accept = $headers->get('Accept');
88
 
89
                $prioritized = $accept->getPrioritized();
90
 
91
                foreach ($prioritized as $key => $value) {
92
                    $raw = trim($value->getRaw());
93
 
94
                    if (!$isJson) {
95
                        $isJson = strpos($raw, 'json');
96
                    }
97
                }
98
            }
99
 
1336 efrain 100
            //$isJson = true;
977 geraldo 101
            if ($isJson) {
15253 stevensc 102
                $search = $this->params()->fromQuery('search');
103
                $search = empty($search) ? '' : filter_var($search, FILTER_SANITIZE_STRING);
977 geraldo 104
 
105
                $page = intval($this->params()->fromQuery('start', 1), 10);
106
                $records_x_page = intval($this->params()->fromQuery('length', 10), 10);
107
                $order = $this->params()->fromQuery('order', []);
108
                $order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);
109
                $order_direction = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var($order[0]['dir'], FILTER_SANITIZE_STRING));
110
 
111
                $fields = ['name'];
112
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
113
 
114
                if (!in_array($order_direction, ['ASC', 'DESC'])) {
115
                    $order_direction = 'ASC';
116
                }
117
 
118
                $companyPerformanceEvaluationMapper = CompanyPerformanceEvaluationFormMapper::getInstance($this->adapter);
119
                $paginator = $companyPerformanceEvaluationMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);
120
 
1078 geraldo 121
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
122
 
977 geraldo 123
                $items = [];
124
                $records = $paginator->getCurrentItems();
125
                foreach ($records as $record) {
126
 
1078 geraldo 127
 
128
 
1098 geraldo 129
                    $jobDescription = $jobDescriptionMapper->fetchOne($record->job_description_id);
130
                    if ($jobDescription) {
977 geraldo 131
 
1098 geraldo 132
                        $item = [
133
                            'id' => $record->id,
134
                            'name' => $record->name,
135
                            'job_description' => $jobDescription->name,
136
                            'status' => $record->status,
137
                            'actions' => [
1263 geraldo 138
                                'link_report' => $this->url()->fromRoute('performance-evaluation/forms/report', ['id' => $record->uuid]),
1098 geraldo 139
                                'link_edit' => $this->url()->fromRoute('performance-evaluation/forms/edit', ['id' => $record->uuid]),
140
                                'link_delete' => $this->url()->fromRoute('performance-evaluation/forms/delete', ['id' => $record->uuid])
141
                            ]
142
                        ];
143
                    }
144
 
977 geraldo 145
                    array_push($items, $item);
146
                }
147
 
148
                return new JsonModel([
149
                    'success' => true,
150
                    'data' => [
151
                        'items' => $items,
152
                        'total' => $paginator->getTotalItemCount(),
153
                    ]
154
                ]);
155
            } else {
156
 
1064 geraldo 157
                $form = new CompanyPerformanceEvaluationFormForm($this->adapter, $currentCompany->id);
977 geraldo 158
 
1051 geraldo 159
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
160
                $jobsDescription = $jobDescriptionMapper->fetchAllByCompanyId($currentCompany->id);
161
 
977 geraldo 162
                $this->layout()->setTemplate('layout/layout-backend');
163
                $viewModel = new ViewModel();
164
                $viewModel->setTemplate('leaders-linked/performance-evaluation-forms/index.phtml');
165
                $viewModel->setVariable('form', $form);
1051 geraldo 166
                $viewModel->setVariable('jobsDescription', $jobsDescription);
977 geraldo 167
                return $viewModel;
168
            }
169
        } else {
170
            return new JsonModel([
171
                'success' => false,
172
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
15253 stevensc 173
            ]);;
977 geraldo 174
        }
175
    }
176
 
15253 stevensc 177
    public function addAction()
178
    {
977 geraldo 179
        $request = $this->getRequest();
180
        $currentUserPlugin = $this->plugin('currentUserPlugin');
181
        $currentCompany = $currentUserPlugin->getCompany();
182
        $currentUser = $currentUserPlugin->getUser();
183
 
184
        $request = $this->getRequest();
185
 
186
 
187
        if ($request->isPost()) {
1064 geraldo 188
            $form = new CompanyPerformanceEvaluationFormForm($this->adapter, $currentCompany->id);
977 geraldo 189
            $dataPost = $request->getPost()->toArray();
1059 geraldo 190
 
191
 
977 geraldo 192
            $dataPost['status'] = isset($dataPost['status']) ? $dataPost['status'] : CompanyPerformanceEvaluationForm::STATUS_INACTIVE;
193
 
194
            $form->setData($dataPost);
195
 
196
            if ($form->isValid()) {
1058 geraldo 197
 
198
 
977 geraldo 199
                $dataPost = (array) $form->getData();
200
 
201
                $hydrator = new ObjectPropertyHydrator();
202
                $companyPerformanceEvaluation = new CompanyPerformanceEvaluationForm();
203
                $hydrator->hydrate($dataPost, $companyPerformanceEvaluation);
204
 
205
                if (!$companyPerformanceEvaluation->status) {
206
                    $companyPerformanceEvaluation->status = CompanyPerformanceEvaluationForm::STATUS_INACTIVE;
207
                }
208
                $companyPerformanceEvaluation->company_id = $currentCompany->id;
1075 geraldo 209
 
210
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
211
                $jobDescription = $jobDescriptionMapper->fetchOneByUuid($dataPost['job_description_id']);
212
                $companyPerformanceEvaluation->job_description_id = $jobDescription->id;
213
 
977 geraldo 214
                $companyPerformanceEvaluationMapper = CompanyPerformanceEvaluationFormMapper::getInstance($this->adapter);
1076 geraldo 215
 
977 geraldo 216
                $result = $companyPerformanceEvaluationMapper->insert($companyPerformanceEvaluation);
217
 
1098 geraldo 218
 
977 geraldo 219
                if ($result) {
220
                    $this->logger->info('Se agrego el tamaño de empresa ' . $companyPerformanceEvaluation->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
221
 
222
                    // Get record by id
223
                    $record = $companyPerformanceEvaluationMapper->fetchOne($companyPerformanceEvaluation->id);
224
 
225
                    if ($record) {
1098 geraldo 226
 
977 geraldo 227
                        $data = [
228
                            'success' => true,
229
                            'id' => $record->id,
230
                            'action_edit' => $this->url()->fromRoute('performance-evaluation/forms/edit', ['id' => $record->uuid]),
231
                            'data' => 'LABEL_RECORD_ADDED'
232
                        ];
233
                    } else {
1098 geraldo 234
 
977 geraldo 235
                        $data = [
236
                            'success' => false,
237
                            'data' => 'ERROR_RECORD_NOT_FOUND'
238
                        ];
239
                    }
240
                } else {
241
                    $data = [
242
                        'success' => false,
243
                        'data' => $companyPerformanceEvaluationMapper->getError()
244
                    ];
245
                }
246
 
247
                return new JsonModel($data);
248
            } else {
249
                $messages = [];
250
                $form_messages = (array) $form->getMessages();
251
                foreach ($form_messages as $fieldname => $field_messages) {
252
 
253
                    $messages[$fieldname] = array_values($field_messages);
254
                }
255
 
256
                return new JsonModel([
257
                    'success' => false,
258
                    'data' => $messages
259
                ]);
260
            }
261
        } else {
262
            $data = [
263
                'success' => false,
264
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
265
            ];
266
 
267
            return new JsonModel($data);
268
        }
269
 
270
        return new JsonModel($data);
271
    }
272
 
15253 stevensc 273
    public function editAction()
274
    {
977 geraldo 275
        $request = $this->getRequest();
276
        $currentUserPlugin = $this->plugin('currentUserPlugin');
277
        $currentCompany = $currentUserPlugin->getCompany();
278
        $currentUser = $currentUserPlugin->getUser();
279
 
280
        $request = $this->getRequest();
281
        $uuid = $this->params()->fromRoute('id');
282
 
283
 
284
        if (!$uuid) {
285
            $data = [
286
                'success' => false,
287
                'data' => 'ERROR_INVALID_PARAMETER'
288
            ];
289
 
290
            return new JsonModel($data);
291
        }
292
 
293
        $companyPerformanceEvaluationMapper = CompanyPerformanceEvaluationFormMapper::getInstance($this->adapter);
294
        $companyPerformanceEvaluation = $companyPerformanceEvaluationMapper->fetchOneByUuid($uuid);
295
        if (!$companyPerformanceEvaluation) {
296
            $data = [
297
                'success' => false,
298
                'data' => 'ERROR_RECORD_NOT_FOUND'
299
            ];
300
 
301
            return new JsonModel($data);
302
        }
303
 
304
        if ($companyPerformanceEvaluation->company_id != $currentCompany->id) {
305
            return new JsonModel([
306
                'success' => false,
307
                'data' => 'ERROR_UNAUTHORIZED'
308
            ]);
309
        }
310
 
311
 
312
        if ($request->isPost()) {
1064 geraldo 313
            $form = new CompanyPerformanceEvaluationFormForm($this->adapter, $currentCompany->id);
977 geraldo 314
            $dataPost = $request->getPost()->toArray();
315
            $dataPost['status'] = isset($dataPost['status']) ? $dataPost['status'] : CompanyPerformanceEvaluationForm::STATUS_INACTIVE;
316
 
317
            $form->setData($dataPost);
318
 
319
            if ($form->isValid()) {
320
                $dataPost = (array) $form->getData();
321
 
322
                $hydrator = new ObjectPropertyHydrator();
323
                $hydrator->hydrate($dataPost, $companyPerformanceEvaluation);
324
 
325
                if (!$companyPerformanceEvaluation->status) {
326
                    $companyPerformanceEvaluation->status = CompanyPerformanceEvaluationForm::STATUS_INACTIVE;
327
                }
328
 
1080 geraldo 329
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
330
                $jobDescription = $jobDescriptionMapper->fetchOneByUuid($dataPost['job_description_id']);
331
                $companyPerformanceEvaluation->job_description_id = $jobDescription->id;
332
 
977 geraldo 333
                $result = $companyPerformanceEvaluationMapper->update($companyPerformanceEvaluation);
334
 
335
                if ($result) {
336
                    $this->logger->info('Se actualizo el tamaño de empresa ' . $companyPerformanceEvaluation->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
337
                    $data = [
338
                        'success' => true,
339
                        'id' => $companyPerformanceEvaluation->id,
340
                        'action_edit' => $this->url()->fromRoute('performance-evaluation/forms/edit', ['id' => $companyPerformanceEvaluation->uuid]),
341
                        'data' => 'LABEL_RECORD_UPDATED'
342
                    ];
343
                } else {
344
                    $data = [
345
                        'success' => false,
346
                        'data' => $companyPerformanceEvaluationMapper->getError()
347
                    ];
348
                }
349
 
350
                return new JsonModel($data);
351
            } else {
352
                $messages = [];
353
                $form_messages = (array) $form->getMessages();
354
                foreach ($form_messages as $fieldname => $field_messages) {
355
                    $messages[$fieldname] = array_values($field_messages);
356
                }
357
 
358
                return new JsonModel([
359
                    'success' => false,
360
                    'data' => $messages
361
                ]);
362
            }
363
        } else if ($request->isGet()) {
364
            $hydrator = new ObjectPropertyHydrator();
365
 
1080 geraldo 366
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
367
            $jobDescription = $jobDescriptionMapper->fetchOne($companyPerformanceEvaluation->job_description_id);
1098 geraldo 368
            if (!$jobDescription) {
1080 geraldo 369
                $data = [
370
                    'success' => false,
371
                    'data' => 'ERROR_METHOD_NOT_ALLOWED'
372
                ];
1098 geraldo 373
 
1080 geraldo 374
                return new JsonModel($data);
375
            }
376
 
977 geraldo 377
            $data = [
378
                'success' => true,
379
                'data' => [
380
                    'id' => $companyPerformanceEvaluation->uuid,
381
                    'name' => $companyPerformanceEvaluation->name,
1080 geraldo 382
                    'job_description_id' => $jobDescription->uuid,
977 geraldo 383
                    'status' => $companyPerformanceEvaluation->status,
1089 geraldo 384
                    'description' => $companyPerformanceEvaluation->description,
1336 efrain 385
                    //'text' => $companyPerformanceEvaluation->text,
977 geraldo 386
                    'content' => $companyPerformanceEvaluation->content ? json_decode($companyPerformanceEvaluation->content) : [],
387
                ]
388
            ];
389
 
390
            return new JsonModel($data);
391
        } else {
392
            $data = [
393
                'success' => false,
394
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
395
            ];
396
 
397
            return new JsonModel($data);
398
        }
399
 
400
        return new JsonModel($data);
401
    }
402
 
15253 stevensc 403
    public function deleteAction()
404
    {
977 geraldo 405
        $request = $this->getRequest();
406
        $currentUserPlugin = $this->plugin('currentUserPlugin');
407
        $currentCompany = $currentUserPlugin->getCompany();
408
        $currentUser = $currentUserPlugin->getUser();
409
 
410
        $request = $this->getRequest();
411
        $uuid = $this->params()->fromRoute('id');
412
 
413
        if (!$uuid) {
414
            $data = [
415
                'success' => false,
416
                'data' => 'ERROR_INVALID_PARAMETER'
417
            ];
418
 
419
            return new JsonModel($data);
420
        }
421
 
422
        $companyPerformanceEvaluationMapper = CompanyPerformanceEvaluationFormMapper::getInstance($this->adapter);
423
        $companyPerformanceEvaluation = $companyPerformanceEvaluationMapper->fetchOneByUuid($uuid);
424
        if (!$companyPerformanceEvaluation) {
425
            $data = [
426
                'success' => false,
427
                'data' => 'ERROR_RECORD_NOT_FOUND'
428
            ];
429
 
430
            return new JsonModel($data);
431
        }
432
 
433
        if ($companyPerformanceEvaluation->company_id != $currentCompany->id) {
434
            return new JsonModel([
435
                'success' => false,
436
                'data' => 'ERROR_UNAUTHORIZED'
437
            ]);
438
        }
439
 
440
        if ($request->isPost()) {
441
 
442
 
443
            $result = $companyPerformanceEvaluationMapper->delete($companyPerformanceEvaluation->id);
444
            if ($result) {
445
                $this->logger->info('Se borro el formulario de evaluación de desempeño ' . $companyPerformanceEvaluation->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
446
 
447
                $data = [
448
                    'success' => true,
449
                    'data' => 'LABEL_RECORD_DELETED'
450
                ];
451
            } else {
452
 
453
                $data = [
454
                    'success' => false,
455
                    'data' => $companyPerformanceEvaluationMapper->getError()
456
                ];
457
 
458
                return new JsonModel($data);
459
            }
460
        } else {
461
            $data = [
462
                'success' => false,
463
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
464
            ];
465
 
466
            return new JsonModel($data);
467
        }
468
 
469
        return new JsonModel($data);
470
    }
471
 
15253 stevensc 472
    public function reportAction()
473
    {
1263 geraldo 474
        $currentUserPlugin = $this->plugin('currentUserPlugin');
475
        $currentUser = $currentUserPlugin->getUser();
1277 geraldo 476
        $currentCompany = $currentUserPlugin->getCompany();
1263 geraldo 477
 
478
        $uuid = $this->params()->fromRoute('id');
479
 
480
        $companyPerformanceEvaluationFormMapper = CompanyPerformanceEvaluationFormMapper::getInstance($this->adapter);
481
        $companyPerformanceEvaluationForm = $companyPerformanceEvaluationFormMapper->fetchOneByUuid($uuid);
482
 
483
        if (!$companyPerformanceEvaluationForm) {
484
            return new JsonModel([
485
                'success' => false,
486
                'data' => 'ERROR_FORM_EVALUATION_NOT_FOUND'
487
            ]);
488
        }
489
 
1336 efrain 490
        /*
1263 geraldo 491
        if ($companyPerformanceEvaluationForm->status == CompanyPerformanceEvaluationForm::STATUS_INACTIVE) {
492
            return new JsonModel([
493
                'success' => false,
494
                'data' => 'ERROR_FORM_EVALUATION_IS_INACTIVE'
495
            ]);
496
        }
497
 
1336 efrain 498
/*
1263 geraldo 499
        $companyPerformanceEvaluationFormUserMapper = CompanyPerformanceEvaluationFormUserMapper::getInstance($this->adapter);
500
        $companyPerformanceEvaluationFormUser = $companyPerformanceEvaluationFormUserMapper->fetchOneByFormIdAndUserId($companyPerformanceEvaluationForm->id, $currentUser->id);
501
        if (!$companyPerformanceEvaluationFormUser) {
502
            return new JsonModel([
503
                'success' => false,
504
                'data' => 'ERROR_FORM_EVALUATION_YOU_CAN_NOT_TAKE'
505
            ]);
506
        }
507
 
508
 
509
        $companyPerformanceEvaluationTestMapper = CompanyPerformanceEvaluationTestMapper::getInstance($this->adapter);
510
        $companyPerformanceEvaluationTest = $companyPerformanceEvaluationTestMapper->fetchOneBy($companyPerformanceEvaluationForm->id, $currentUser->id);
511
 
512
        if ($companyPerformanceEvaluationTest && $companyPerformanceEvaluationTest->status != CompanyPerformanceEvaluationTest::STATUS_DRAFT) {
513
            return new JsonModel([
514
                'success' => false,
515
                'data' => 'ERROR_FORM_EVALUATION_ALREADY_YOUR_APPLICATION_IN_THIS_TEST'
516
            ]);
517
        }
1336 efrain 518
        */
1263 geraldo 519
 
520
        $request = $this->getRequest();
521
        if ($request->isGet()) {
522
 
523
 
524
 
525
            // set content
526
 
1336 efrain 527
            $content = json_decode($companyPerformanceEvaluationForm->content, true);
1263 geraldo 528
 
1277 geraldo 529
 
1263 geraldo 530
            //Competencies
531
 
532
            $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
533
            $competencyMapper = CompetencyMapper::getInstance($this->adapter);
534
            $competenceTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
15030 efrain 535
            $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
1263 geraldo 536
            $jobDescriptionBehaviorCompetencyMapper = JobDescriptionBehaviorCompetencyMapper::getInstance($this->adapter);
1320 efrain 537
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
1263 geraldo 538
 
539
            $competencies = [];
540
 
541
            $jobDescriptionCompetency = $jobDescriptionCompetencyMapper->fetchByJobDescriptionId($companyPerformanceEvaluationForm->job_description_id);
542
 
543
            foreach ($jobDescriptionCompetency as $record) {
544
 
545
                $competency = $competencyMapper->fetchOne($record->competency_id);
546
                $competenceType = $competenceTypeMapper->fetchOne($competency->competency_type_id);
547
 
1277 geraldo 548
                if ($competency && $competenceType) {
1263 geraldo 549
 
15030 efrain 550
                    $behaviorCompetencies = $competencyBehaviorMapper->fetchAllByCompetencyId($competency->id);
1263 geraldo 551
                    $behaviors = [];
1277 geraldo 552
 
1263 geraldo 553
                    foreach ($behaviorCompetencies as $rows) {
1277 geraldo 554
 
1263 geraldo 555
                        $behavior = $behaviorMapper->fetchOne($rows->behavior_id);
556
                        $jobDescriptionBehaviorCompetency = $jobDescriptionBehaviorCompetencyMapper->fetchOneByBehavior($companyPerformanceEvaluationForm->job_description_id, $record->competency_id, $rows->behavior_id);
1277 geraldo 557
 
1263 geraldo 558
                        if ($behavior && $jobDescriptionBehaviorCompetency) {
1277 geraldo 559
 
1263 geraldo 560
                            array_push($behaviors, [
1292 geraldo 561
                                'description' => $behavior->description,
1263 geraldo 562
                                'level' => $jobDescriptionBehaviorCompetency->level,
563
                            ]);
564
                        }
565
                    }
1277 geraldo 566
 
1263 geraldo 567
                    array_push($competencies, [
1305 geraldo 568
                        'name' => $competency->name,
1297 geraldo 569
                        'description' => $competency->description,
1292 geraldo 570
                        'type' => $competenceType->name,
571
                        'behaviors' => $behaviors
1263 geraldo 572
                    ]);
573
                }
574
            }
1292 geraldo 575
 
1279 geraldo 576
            return $this->renderPDF($currentCompany, $companyPerformanceEvaluationForm, $competencies);
1263 geraldo 577
        }
578
 
579
 
580
        return new JsonModel([
581
            'success' => false,
582
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
583
        ]);
584
    }
1292 geraldo 585
 
1277 geraldo 586
    /**
587
     * Render PDF
1336 efrain 588
     * @param Company $currentCompany
589
     * @param CompanyPerformanceEvaluationForm $performanceEvaluation
590
     * @param array $competencies
591
     * @return mixed
1277 geraldo 592
     */
15253 stevensc 593
    public function renderPDF($company, $performanceEvaluation, $competencies)
594
    {
1263 geraldo 595
 
1277 geraldo 596
        //Generate New PDF
597
        $pdf = new PerformanceEvaluationPdf();
598
 
15079 efrain 599
        $target_path = $this->config['leaderslinked.fullpath.company'] . DIRECTORY_SEPARATOR . $company->uuid;
600
        $header = $company->header ? $target_path . DIRECTORY_SEPARATOR . $company->header : '';
15253 stevensc 601
        if (empty($header) || !file_exists($header)) {
15079 efrain 602
            $header = $this->config['leaderslinked.images_default.company_pdf_header'];
1277 geraldo 603
        }
15253 stevensc 604
 
15079 efrain 605
        $footer = $company->footer ? $target_path . DIRECTORY_SEPARATOR . $company->footer : '';
15253 stevensc 606
        if (empty($footer) || !file_exists($footer)) {
15079 efrain 607
            $footer = $this->config['leaderslinked.images_default.company_pdf_footer'];
608
        }
15253 stevensc 609
 
15079 efrain 610
        $pdf->header = $header;
611
        $pdf->footer = $footer;
1277 geraldo 612
 
613
        $pdf->SetMargins(10, 0, 10);
614
 
615
        $pdf->AliasNbPages();
616
        $pdf->AddPage();
617
 
1294 geraldo 618
        $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
1293 geraldo 619
        $jobDescription = $jobDescriptionMapper->fetchOne($performanceEvaluation->job_description_id);
1277 geraldo 620
 
621
        $rows = [
622
            array(
623
                'title' => 'Nombre Evaluado: ',
624
                'content' => ''
625
            ),
626
            array(
627
                'title' => 'Cargo: ',
1293 geraldo 628
                'content' => $jobDescription ? ' ' . $jobDescription->name : ' No aplica'
1277 geraldo 629
            ),
630
            array(
631
                'title' => 'Firma Evaluado: ',
632
                'content' => ''
633
            ),
634
            array(
635
                'title' => 'Firma Evaluador: ',
636
                'content' => ''
637
            ),
638
            array(
639
                'title' => 'Firma Gerente: ',
640
                'content' => ''
641
            ),
642
            array(
643
                'title' => 'Fecha: ',
644
                'content' => date("d/m/Y")
645
            )
646
        ];
647
 
648
        $pdf->borderTable('EVALUACIÓN DE DESEMPEÑO', $rows);
1292 geraldo 649
 
650
        //Sections
1282 geraldo 651
        $sections = json_decode($performanceEvaluation->content, true);
1277 geraldo 652
 
1309 geraldo 653
        for ($s = 0; $s < count($sections); $s++) {
1277 geraldo 654
 
1317 geraldo 655
            $pdf->singleTable($sections[$s]['title'], [
656
                array(
657
                    'content' => $sections[$s]['type'] != 'multiple' ? $sections[$s]['text'] : ''
15253 stevensc 658
                )
659
            ]);
1277 geraldo 660
 
1310 geraldo 661
            if ($sections[$s]['type'] == 'multiple') {
15253 stevensc 662
 
1318 geraldo 663
                $pdf->titleOptionTable($sections[$s]['text']);
1288 geraldo 664
 
1309 geraldo 665
                for ($o = 0; $o < count($sections[$s]['options']); $o++) {
1292 geraldo 666
 
1309 geraldo 667
                    $pdf->optionTable($sections[$s]['options'][$o]['title']);
1292 geraldo 668
                }
1307 geraldo 669
                $pdf->Ln();
1292 geraldo 670
            }
1312 geraldo 671
            if ($s % 2 == 0 && $s > 1) {
1317 geraldo 672
                $pdf->AddPage();
1308 geraldo 673
            }
1292 geraldo 674
        }
675
        // Competencies
676
        if (count($competencies) != 0) {
677
 
678
            // add new page
679
 
680
            $pdf->AddPage();
681
 
682
            $competencies_header[] = array('content' => 'Indique el nivel de desempeño del evaluado en relación a sus conductas y actitudes frente a cada valor, según la clasificación siguiente:');
683
 
684
            $pdf->singleTable('Anexo de valores:', $competencies_header);
685
 
686
 
687
            // Add scale section
688
            $pdf->sectionScale();
689
 
690
            $i = 0;
691
 
692
            foreach ($competencies as $record) {
1305 geraldo 693
 
1292 geraldo 694
                $i = $i + 1;
695
 
696
                $pdf->competencyTable($i, $record);
1317 geraldo 697
 
1305 geraldo 698
                $pdf->singleTable('Comentarios Finales :', [array('content' => '')]);
1292 geraldo 699
 
1308 geraldo 700
                if ($i % 3 == 0 && $i < count($competencies)) {
1292 geraldo 701
                    $pdf->AddPage();
702
                }
703
            }
704
        }
705
 
1277 geraldo 706
        return $pdf->Output();
707
    }
15253 stevensc 708
 
15079 efrain 709
    public function jobDescriptionAction()
710
    {
15253 stevensc 711
 
712
 
15079 efrain 713
        $request = $this->getRequest();
714
        if ($request->isGet()) {
15253 stevensc 715
 
15079 efrain 716
            $currentUserPlugin = $this->plugin('currentUserPlugin');
717
            $currentUser = $currentUserPlugin->getUser();
718
            $currentCompany = $currentUserPlugin->getCompany();
15253 stevensc 719
 
720
 
15079 efrain 721
            $uuid = $this->params()->fromQuery('id');
15253 stevensc 722
 
15079 efrain 723
            if (!$uuid) {
724
                $data = [
725
                    'success' => false,
726
                    'data' => 'ERROR_INVALID_PARAMETER'
727
                ];
15253 stevensc 728
 
15079 efrain 729
                return new JsonModel($data);
730
            }
15253 stevensc 731
 
15079 efrain 732
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
733
            $jobDescription = $jobDescriptionMapper->fetchOneByUuid($uuid);
734
            if (!$jobDescription) {
735
                $data = [
736
                    'success' => false,
737
                    'data' => 'ERROR_RECORD_NOT_FOUND'
738
                ];
15253 stevensc 739
 
15079 efrain 740
                return new JsonModel($data);
741
            }
15253 stevensc 742
 
15079 efrain 743
            if ($currentCompany && $jobDescription->company_id != $currentCompany->id) {
744
                $data = [
745
                    'success' => false,
746
                    'data' => 'ERROR_UNAUTHORIZED'
747
                ];
15253 stevensc 748
 
15079 efrain 749
                return new JsonModel($data);
750
            }
15253 stevensc 751
 
15079 efrain 752
            $hydrator = new ObjectPropertyHydrator();
15253 stevensc 753
 
15079 efrain 754
            $data = $hydrator->extract($jobDescription);
15253 stevensc 755
 
15079 efrain 756
            if (!empty($data['job_description_id_boss'])) {
15253 stevensc 757
 
15079 efrain 758
                $jobDescriptionBoss = $jobDescriptionMapper->fetchOne($data['job_description_id_boss']);
759
                if ($jobDescriptionBoss) {
760
                    $data['job_description_id_boss'] = $jobDescriptionBoss->uuid;
761
                } else {
762
                    $data['job_description_id_boss'] = '';
763
                }
764
            } else {
765
                $data['job_description_id_boss'] = '';
766
            }
15253 stevensc 767
 
768
 
15079 efrain 769
            $data['competency_types'] = [];
15253 stevensc 770
 
15079 efrain 771
            $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
15253 stevensc 772
 
15079 efrain 773
            $data['supervisers'] = $currentCompany ?
15253 stevensc 774
                $jobDescriptionMapper->fetchAllByCompanyId($currentCompany->id) :
775
                $jobDescriptionMapper->fetchAllActiveByDefault();
776
 
15079 efrain 777
            $records = $currentCompany ?
15253 stevensc 778
                $competencyTypeMapper->fetchAllByCompanyId($currentCompany->id) :
779
                $competencyTypeMapper->fetchAllActiveByDefault();
780
 
15079 efrain 781
            $competencyTypesUUID = [];
782
            foreach ($records as $record) {
783
                array_push($data['competency_types'], [
784
                    'competency_type_id' => $record->uuid,
785
                    'name' => $record->name
786
                ]);
15253 stevensc 787
 
15079 efrain 788
                $competencyTypesUUID[$record->id] = $record->uuid;
789
            }
15253 stevensc 790
 
15079 efrain 791
            $data['competencies'] = [];
792
            $data['competencies_selected'] = [];
15253 stevensc 793
 
15079 efrain 794
            $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
795
            $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
796
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
797
            $jobDescriptionBehaviorCompetencyMapper = JobDescriptionBehaviorCompetencyMapper::getInstance($this->adapter);
798
            $competencyMapper = CompetencyMapper::getInstance($this->adapter);
15253 stevensc 799
 
15079 efrain 800
            $records = $currentCompany ?
15253 stevensc 801
                $competencyMapper->fetchAllActiveByCompanyId($currentCompany->id) :
802
                $competencyMapper->fetchAllByDefault();
803
 
15079 efrain 804
            foreach ($records as $record) {
805
                if (isset($competencyTypesUUID[$record->competency_type_id])) {
15253 stevensc 806
 
807
 
15079 efrain 808
                    $behaviorCompetencies = $competencyBehaviorMapper->fetchAllByCompetencyId($record->id);
809
                    $behaviors = [];
810
                    $behaviors_selected = [];
15253 stevensc 811
 
15079 efrain 812
                    foreach ($behaviorCompetencies as $rows) {
15253 stevensc 813
 
15079 efrain 814
                        $behavior = $behaviorMapper->fetchOne($rows->behavior_id);
815
                        if ($behavior) {
816
                            array_push($behaviors, [
817
                                'behavior_id' => $behavior->id,
818
                                'competency_id' => $record->uuid,
819
                                'description' => $behavior->description,
820
                                'level' => 0
821
                            ]);
822
                        }
823
                    }
15253 stevensc 824
 
15079 efrain 825
                    $jobDescriptionCompetency = $jobDescriptionCompetencyMapper->fetchOneByJobDescriptionIdAndCompetencyId($jobDescription->id, $record->id);
826
                    if ($jobDescriptionCompetency) {
15253 stevensc 827
 
15079 efrain 828
                        foreach ($behaviorCompetencies as $rows) {
15253 stevensc 829
 
15079 efrain 830
                            $behavior = $behaviorMapper->fetchOne($rows->behavior_id);
831
                            $jobDescriptionBehaviorCompetency = $jobDescriptionBehaviorCompetencyMapper->fetchOneByBehavior($jobDescription->id, $record->id, $rows->behavior_id);
15253 stevensc 832
 
15079 efrain 833
                            if ($behavior && $jobDescriptionBehaviorCompetency) {
15253 stevensc 834
 
15079 efrain 835
                                array_push($behaviors_selected, [
836
                                    'behavior_id' => $behavior->id,
837
                                    'competency_id' => $record->uuid,
838
                                    'description' => $behavior->description,
839
                                    'level' => $jobDescriptionBehaviorCompetency->level
840
                                ]);
841
                            }
842
                        }
843
                        array_push($data['competencies_selected'], [
844
                            'competency_type_id' => $competencyTypesUUID[$record->competency_type_id],
845
                            'competency_id' => $record->uuid,
846
                            'name' => $record->name,
847
                            'behaviors' => $behaviors_selected
848
                        ]);
849
                    }
15253 stevensc 850
 
15079 efrain 851
                    array_push($data['competencies'], [
852
                        'competency_type_id' => $competencyTypesUUID[$record->competency_type_id],
853
                        'competency_id' => $record->uuid,
854
                        'name' => $record->name,
855
                        'behaviors' => $behaviors
856
                    ]);
857
                }
858
            }
15253 stevensc 859
 
15079 efrain 860
            $data['jobs_description'] = [];
15253 stevensc 861
 
15079 efrain 862
            $jobsDescriptionUUID = [];
863
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
15253 stevensc 864
 
15079 efrain 865
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
866
            $records = $currentCompany ?
15253 stevensc 867
                $jobDescriptionMapper->fetchAllActiveByCompanyId($currentCompany->id) :
868
                $jobDescriptionMapper->fetchAllByDefault();
869
 
15079 efrain 870
            foreach ($records as $record) {
15253 stevensc 871
 
15079 efrain 872
                $jobsDescriptionUUID[$record->id] = $record->uuid;
873
                if ($record->id != $jobDescription->id) {
874
                    array_push($data['jobs_description'], [
875
                        'job_description_id' => $record->uuid,
876
                        'name' => $record->name
877
                    ]);
878
                }
879
            }
15253 stevensc 880
 
15079 efrain 881
            $data['subordinates_selected'] = [];
882
            $jobDescriptionSubordinateMapper = JobDescriptionSubordinateMapper::getInstance($this->adapter);
883
            $records = $jobDescriptionSubordinateMapper->fetchAllByJobDescriptionIdTopLevel($jobDescription->id);
15253 stevensc 884
 
15079 efrain 885
            foreach ($records as $record) {
15253 stevensc 886
 
15079 efrain 887
                if (isset($jobsDescriptionUUID[$record->job_description_id_low_level])) {
15253 stevensc 888
 
15079 efrain 889
                    $jobDescriptionSub = $jobDescriptionMapper->fetchOne($record->job_description_id_low_level);
890
                    if ($jobDescriptionSub) {
15253 stevensc 891
 
15079 efrain 892
                        array_push($data['subordinates_selected'], [
893
                            'job_description_id' => $jobDescriptionSub->uuid,
894
                            'name' => $jobDescriptionSub->name
895
                        ]);
896
                    }
897
                }
898
            }
15253 stevensc 899
 
15079 efrain 900
            $response = [
901
                'success' => true,
902
                'data' => $data
903
            ];
15253 stevensc 904
 
15079 efrain 905
            return new JsonModel($response);
906
        } else {
907
            $data = [
908
                'success' => false,
909
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
910
            ];
15253 stevensc 911
 
15079 efrain 912
            return new JsonModel($data);
913
        }
914
    }
977 geraldo 915
}