Proyectos de Subversion LeadersLinked - Backend

Rev

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