Proyectos de Subversion LeadersLinked - Backend

Rev

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