Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 1320 | Rev 1337 | 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;
1270 geraldo 19
use LeadersLinked\Mapper\CompanyPerformanceEvaluationTestMapper;
1271 geraldo 20
use LeadersLinked\Mapper\JobDescriptionCompetencyMapper;
1272 geraldo 21
use LeadersLinked\Mapper\CompetencyMapper;
1280 geraldo 22
use LeadersLinked\Library\PerformanceEvaluationPDF;
1273 geraldo 23
use LeadersLinked\Mapper\CompetencyTypeMapper;
1274 geraldo 24
use LeadersLinked\Mapper\BehaviorCompetencyMapper;
1320 efrain 25
use LeadersLinked\Mapper\BehaviorMapper;
1275 geraldo 26
use LeadersLinked\Mapper\JobDescriptionBehaviorCompetencyMapper;
977 geraldo 27
use LeadersLinked\Mapper\CompanyPerformanceEvaluationFormUserMapper;
1281 geraldo 28
use LeadersLinked\Mapper\CompanyMapper;
1336 efrain 29
use LeadersLinked\Model\Company;
977 geraldo 30
 
31
class PerformanceEvaluationFormController extends AbstractActionController {
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
     */
64
    public function __construct($adapter, $cache, $logger, $config) {
65
        $this->adapter = $adapter;
66
        $this->cache = $cache;
67
        $this->logger = $logger;
68
        $this->config = $config;
69
    }
70
 
71
    public function indexAction() {
72
        $request = $this->getRequest();
73
        $currentUserPlugin = $this->plugin('currentUserPlugin');
74
        $currentCompany = $currentUserPlugin->getCompany();
75
        $currentUser = $currentUserPlugin->getUser();
76
 
77
 
78
        $request = $this->getRequest();
79
        if ($request->isGet()) {
80
 
81
            $headers = $request->getHeaders();
82
 
83
            $isJson = false;
84
            if ($headers->has('Accept')) {
85
                $accept = $headers->get('Accept');
86
 
87
                $prioritized = $accept->getPrioritized();
88
 
89
                foreach ($prioritized as $key => $value) {
90
                    $raw = trim($value->getRaw());
91
 
92
                    if (!$isJson) {
93
                        $isJson = strpos($raw, 'json');
94
                    }
95
                }
96
            }
97
 
1336 efrain 98
            //$isJson = true;
977 geraldo 99
            if ($isJson) {
100
                $search = $this->params()->fromQuery('search', []);
101
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
102
 
103
                $page = intval($this->params()->fromQuery('start', 1), 10);
104
                $records_x_page = intval($this->params()->fromQuery('length', 10), 10);
105
                $order = $this->params()->fromQuery('order', []);
106
                $order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);
107
                $order_direction = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var($order[0]['dir'], FILTER_SANITIZE_STRING));
108
 
109
                $fields = ['name'];
110
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
111
 
112
                if (!in_array($order_direction, ['ASC', 'DESC'])) {
113
                    $order_direction = 'ASC';
114
                }
115
 
116
                $companyPerformanceEvaluationMapper = CompanyPerformanceEvaluationFormMapper::getInstance($this->adapter);
117
                $paginator = $companyPerformanceEvaluationMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);
118
 
1078 geraldo 119
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
120
 
977 geraldo 121
                $items = [];
122
                $records = $paginator->getCurrentItems();
123
                foreach ($records as $record) {
124
 
1078 geraldo 125
 
126
 
1098 geraldo 127
                    $jobDescription = $jobDescriptionMapper->fetchOne($record->job_description_id);
128
                    if ($jobDescription) {
977 geraldo 129
 
1098 geraldo 130
                        $item = [
131
                            'id' => $record->id,
132
                            'name' => $record->name,
133
                            'job_description' => $jobDescription->name,
134
                            'status' => $record->status,
135
                            'actions' => [
1263 geraldo 136
                                'link_report' => $this->url()->fromRoute('performance-evaluation/forms/report', ['id' => $record->uuid]),
1098 geraldo 137
                                'link_edit' => $this->url()->fromRoute('performance-evaluation/forms/edit', ['id' => $record->uuid]),
138
                                'link_delete' => $this->url()->fromRoute('performance-evaluation/forms/delete', ['id' => $record->uuid])
139
                            ]
140
                        ];
141
                    }
142
 
977 geraldo 143
                    array_push($items, $item);
144
                }
145
 
146
                return new JsonModel([
147
                    'success' => true,
148
                    'data' => [
149
                        'items' => $items,
150
                        'total' => $paginator->getTotalItemCount(),
151
                    ]
152
                ]);
153
            } else {
154
 
1064 geraldo 155
                $form = new CompanyPerformanceEvaluationFormForm($this->adapter, $currentCompany->id);
977 geraldo 156
 
1051 geraldo 157
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
158
                $jobsDescription = $jobDescriptionMapper->fetchAllByCompanyId($currentCompany->id);
159
 
977 geraldo 160
                $this->layout()->setTemplate('layout/layout-backend');
161
                $viewModel = new ViewModel();
162
                $viewModel->setTemplate('leaders-linked/performance-evaluation-forms/index.phtml');
163
                $viewModel->setVariable('form', $form);
1051 geraldo 164
                $viewModel->setVariable('jobsDescription', $jobsDescription);
977 geraldo 165
                return $viewModel;
166
            }
167
        } else {
168
            return new JsonModel([
169
                'success' => false,
170
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
171
            ]);
172
            ;
173
        }
174
    }
175
 
176
    public function addAction() {
177
        $request = $this->getRequest();
178
        $currentUserPlugin = $this->plugin('currentUserPlugin');
179
        $currentCompany = $currentUserPlugin->getCompany();
180
        $currentUser = $currentUserPlugin->getUser();
181
 
182
        $request = $this->getRequest();
183
 
184
 
185
        if ($request->isPost()) {
1064 geraldo 186
            $form = new CompanyPerformanceEvaluationFormForm($this->adapter, $currentCompany->id);
977 geraldo 187
            $dataPost = $request->getPost()->toArray();
1059 geraldo 188
 
189
 
977 geraldo 190
            $dataPost['status'] = isset($dataPost['status']) ? $dataPost['status'] : CompanyPerformanceEvaluationForm::STATUS_INACTIVE;
191
 
192
            $form->setData($dataPost);
193
 
194
            if ($form->isValid()) {
1058 geraldo 195
 
196
 
977 geraldo 197
                $dataPost = (array) $form->getData();
198
 
199
                $hydrator = new ObjectPropertyHydrator();
200
                $companyPerformanceEvaluation = new CompanyPerformanceEvaluationForm();
201
                $hydrator->hydrate($dataPost, $companyPerformanceEvaluation);
202
 
203
                if (!$companyPerformanceEvaluation->status) {
204
                    $companyPerformanceEvaluation->status = CompanyPerformanceEvaluationForm::STATUS_INACTIVE;
205
                }
206
                $companyPerformanceEvaluation->company_id = $currentCompany->id;
1075 geraldo 207
 
208
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
209
                $jobDescription = $jobDescriptionMapper->fetchOneByUuid($dataPost['job_description_id']);
210
                $companyPerformanceEvaluation->job_description_id = $jobDescription->id;
211
 
977 geraldo 212
                $companyPerformanceEvaluationMapper = CompanyPerformanceEvaluationFormMapper::getInstance($this->adapter);
1076 geraldo 213
 
977 geraldo 214
                $result = $companyPerformanceEvaluationMapper->insert($companyPerformanceEvaluation);
215
 
1098 geraldo 216
 
977 geraldo 217
                if ($result) {
218
                    $this->logger->info('Se agrego el tamaño de empresa ' . $companyPerformanceEvaluation->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
219
 
220
                    // Get record by id
221
                    $record = $companyPerformanceEvaluationMapper->fetchOne($companyPerformanceEvaluation->id);
222
 
223
                    if ($record) {
1098 geraldo 224
 
977 geraldo 225
                        $data = [
226
                            'success' => true,
227
                            'id' => $record->id,
228
                            'action_edit' => $this->url()->fromRoute('performance-evaluation/forms/edit', ['id' => $record->uuid]),
229
                            'data' => 'LABEL_RECORD_ADDED'
230
                        ];
231
                    } else {
1098 geraldo 232
 
977 geraldo 233
                        $data = [
234
                            'success' => false,
235
                            'data' => 'ERROR_RECORD_NOT_FOUND'
236
                        ];
237
                    }
238
                } else {
239
                    $data = [
240
                        'success' => false,
241
                        'data' => $companyPerformanceEvaluationMapper->getError()
242
                    ];
243
                }
244
 
245
                return new JsonModel($data);
246
            } else {
247
                $messages = [];
248
                $form_messages = (array) $form->getMessages();
249
                foreach ($form_messages as $fieldname => $field_messages) {
250
 
251
                    $messages[$fieldname] = array_values($field_messages);
252
                }
253
 
254
                return new JsonModel([
255
                    'success' => false,
256
                    'data' => $messages
257
                ]);
258
            }
259
        } else {
260
            $data = [
261
                'success' => false,
262
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
263
            ];
264
 
265
            return new JsonModel($data);
266
        }
267
 
268
        return new JsonModel($data);
269
    }
270
 
271
    public function editAction() {
272
        $request = $this->getRequest();
273
        $currentUserPlugin = $this->plugin('currentUserPlugin');
274
        $currentCompany = $currentUserPlugin->getCompany();
275
        $currentUser = $currentUserPlugin->getUser();
276
 
277
        $request = $this->getRequest();
278
        $uuid = $this->params()->fromRoute('id');
279
 
280
 
281
        if (!$uuid) {
282
            $data = [
283
                'success' => false,
284
                'data' => 'ERROR_INVALID_PARAMETER'
285
            ];
286
 
287
            return new JsonModel($data);
288
        }
289
 
290
        $companyPerformanceEvaluationMapper = CompanyPerformanceEvaluationFormMapper::getInstance($this->adapter);
291
        $companyPerformanceEvaluation = $companyPerformanceEvaluationMapper->fetchOneByUuid($uuid);
292
        if (!$companyPerformanceEvaluation) {
293
            $data = [
294
                'success' => false,
295
                'data' => 'ERROR_RECORD_NOT_FOUND'
296
            ];
297
 
298
            return new JsonModel($data);
299
        }
300
 
301
        if ($companyPerformanceEvaluation->company_id != $currentCompany->id) {
302
            return new JsonModel([
303
                'success' => false,
304
                'data' => 'ERROR_UNAUTHORIZED'
305
            ]);
306
        }
307
 
308
 
309
        if ($request->isPost()) {
1064 geraldo 310
            $form = new CompanyPerformanceEvaluationFormForm($this->adapter, $currentCompany->id);
977 geraldo 311
            $dataPost = $request->getPost()->toArray();
312
            $dataPost['status'] = isset($dataPost['status']) ? $dataPost['status'] : CompanyPerformanceEvaluationForm::STATUS_INACTIVE;
313
 
314
            $form->setData($dataPost);
315
 
316
            if ($form->isValid()) {
317
                $dataPost = (array) $form->getData();
318
 
319
                $hydrator = new ObjectPropertyHydrator();
320
                $hydrator->hydrate($dataPost, $companyPerformanceEvaluation);
321
 
322
                if (!$companyPerformanceEvaluation->status) {
323
                    $companyPerformanceEvaluation->status = CompanyPerformanceEvaluationForm::STATUS_INACTIVE;
324
                }
325
 
1080 geraldo 326
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
327
                $jobDescription = $jobDescriptionMapper->fetchOneByUuid($dataPost['job_description_id']);
328
                $companyPerformanceEvaluation->job_description_id = $jobDescription->id;
329
 
977 geraldo 330
                $result = $companyPerformanceEvaluationMapper->update($companyPerformanceEvaluation);
331
 
332
                if ($result) {
333
                    $this->logger->info('Se actualizo el tamaño de empresa ' . $companyPerformanceEvaluation->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
334
                    $data = [
335
                        'success' => true,
336
                        'id' => $companyPerformanceEvaluation->id,
337
                        'action_edit' => $this->url()->fromRoute('performance-evaluation/forms/edit', ['id' => $companyPerformanceEvaluation->uuid]),
338
                        'data' => 'LABEL_RECORD_UPDATED'
339
                    ];
340
                } else {
341
                    $data = [
342
                        'success' => false,
343
                        'data' => $companyPerformanceEvaluationMapper->getError()
344
                    ];
345
                }
346
 
347
                return new JsonModel($data);
348
            } else {
349
                $messages = [];
350
                $form_messages = (array) $form->getMessages();
351
                foreach ($form_messages as $fieldname => $field_messages) {
352
                    $messages[$fieldname] = array_values($field_messages);
353
                }
354
 
355
                return new JsonModel([
356
                    'success' => false,
357
                    'data' => $messages
358
                ]);
359
            }
360
        } else if ($request->isGet()) {
361
            $hydrator = new ObjectPropertyHydrator();
362
 
1080 geraldo 363
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
364
            $jobDescription = $jobDescriptionMapper->fetchOne($companyPerformanceEvaluation->job_description_id);
1098 geraldo 365
            if (!$jobDescription) {
1080 geraldo 366
                $data = [
367
                    'success' => false,
368
                    'data' => 'ERROR_METHOD_NOT_ALLOWED'
369
                ];
1098 geraldo 370
 
1080 geraldo 371
                return new JsonModel($data);
372
            }
373
 
977 geraldo 374
            $data = [
375
                'success' => true,
376
                'data' => [
377
                    'id' => $companyPerformanceEvaluation->uuid,
378
                    'name' => $companyPerformanceEvaluation->name,
1080 geraldo 379
                    'job_description_id' => $jobDescription->uuid,
977 geraldo 380
                    'status' => $companyPerformanceEvaluation->status,
1089 geraldo 381
                    'description' => $companyPerformanceEvaluation->description,
1336 efrain 382
                    //'text' => $companyPerformanceEvaluation->text,
977 geraldo 383
                    'content' => $companyPerformanceEvaluation->content ? json_decode($companyPerformanceEvaluation->content) : [],
384
                ]
385
            ];
386
 
387
            return new JsonModel($data);
388
        } else {
389
            $data = [
390
                'success' => false,
391
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
392
            ];
393
 
394
            return new JsonModel($data);
395
        }
396
 
397
        return new JsonModel($data);
398
    }
399
 
400
    public function deleteAction() {
401
        $request = $this->getRequest();
402
        $currentUserPlugin = $this->plugin('currentUserPlugin');
403
        $currentCompany = $currentUserPlugin->getCompany();
404
        $currentUser = $currentUserPlugin->getUser();
405
 
406
        $request = $this->getRequest();
407
        $uuid = $this->params()->fromRoute('id');
408
 
409
        if (!$uuid) {
410
            $data = [
411
                'success' => false,
412
                'data' => 'ERROR_INVALID_PARAMETER'
413
            ];
414
 
415
            return new JsonModel($data);
416
        }
417
 
418
        $companyPerformanceEvaluationMapper = CompanyPerformanceEvaluationFormMapper::getInstance($this->adapter);
419
        $companyPerformanceEvaluation = $companyPerformanceEvaluationMapper->fetchOneByUuid($uuid);
420
        if (!$companyPerformanceEvaluation) {
421
            $data = [
422
                'success' => false,
423
                'data' => 'ERROR_RECORD_NOT_FOUND'
424
            ];
425
 
426
            return new JsonModel($data);
427
        }
428
 
429
        if ($companyPerformanceEvaluation->company_id != $currentCompany->id) {
430
            return new JsonModel([
431
                'success' => false,
432
                'data' => 'ERROR_UNAUTHORIZED'
433
            ]);
434
        }
435
 
436
        if ($request->isPost()) {
437
 
438
            //Falta borrar los test  primeramente
439
            $companyPerformanceEvaluationFormUserMapper = CompanyPerformanceEvaluationFormUserMapper::getInstance($this->adapter);
440
            $companyPerformanceEvaluationFormUserMapper->deleteAllByFormId($companyPerformanceEvaluation->id);
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
 
1269 geraldo 472
    public function reportAction() {
1263 geraldo 473
        $currentUserPlugin = $this->plugin('currentUserPlugin');
474
        $currentUser = $currentUserPlugin->getUser();
1277 geraldo 475
        $currentCompany = $currentUserPlugin->getCompany();
1263 geraldo 476
 
477
        $uuid = $this->params()->fromRoute('id');
478
 
479
        $companyPerformanceEvaluationFormMapper = CompanyPerformanceEvaluationFormMapper::getInstance($this->adapter);
480
        $companyPerformanceEvaluationForm = $companyPerformanceEvaluationFormMapper->fetchOneByUuid($uuid);
481
 
482
        if (!$companyPerformanceEvaluationForm) {
483
            return new JsonModel([
484
                'success' => false,
485
                'data' => 'ERROR_FORM_EVALUATION_NOT_FOUND'
486
            ]);
487
        }
488
 
1336 efrain 489
        /*
1263 geraldo 490
        if ($companyPerformanceEvaluationForm->status == CompanyPerformanceEvaluationForm::STATUS_INACTIVE) {
491
            return new JsonModel([
492
                'success' => false,
493
                'data' => 'ERROR_FORM_EVALUATION_IS_INACTIVE'
494
            ]);
495
        }
496
 
1336 efrain 497
/*
1263 geraldo 498
        $companyPerformanceEvaluationFormUserMapper = CompanyPerformanceEvaluationFormUserMapper::getInstance($this->adapter);
499
        $companyPerformanceEvaluationFormUser = $companyPerformanceEvaluationFormUserMapper->fetchOneByFormIdAndUserId($companyPerformanceEvaluationForm->id, $currentUser->id);
500
        if (!$companyPerformanceEvaluationFormUser) {
501
            return new JsonModel([
502
                'success' => false,
503
                'data' => 'ERROR_FORM_EVALUATION_YOU_CAN_NOT_TAKE'
504
            ]);
505
        }
506
 
507
 
508
        $companyPerformanceEvaluationTestMapper = CompanyPerformanceEvaluationTestMapper::getInstance($this->adapter);
509
        $companyPerformanceEvaluationTest = $companyPerformanceEvaluationTestMapper->fetchOneBy($companyPerformanceEvaluationForm->id, $currentUser->id);
510
 
511
        if ($companyPerformanceEvaluationTest && $companyPerformanceEvaluationTest->status != CompanyPerformanceEvaluationTest::STATUS_DRAFT) {
512
            return new JsonModel([
513
                'success' => false,
514
                'data' => 'ERROR_FORM_EVALUATION_ALREADY_YOUR_APPLICATION_IN_THIS_TEST'
515
            ]);
516
        }
1336 efrain 517
        */
1263 geraldo 518
 
519
        $request = $this->getRequest();
520
        if ($request->isGet()) {
521
 
522
 
523
 
524
            // set content
525
 
1336 efrain 526
            $content = json_decode($companyPerformanceEvaluationForm->content, true);
1263 geraldo 527
 
1277 geraldo 528
 
1263 geraldo 529
            //Competencies
530
 
531
            $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
532
            $competencyMapper = CompetencyMapper::getInstance($this->adapter);
533
            $competenceTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
534
            $behaviorCompetencyMapper = BehaviorCompetencyMapper::getInstance($this->adapter);
535
            $jobDescriptionBehaviorCompetencyMapper = JobDescriptionBehaviorCompetencyMapper::getInstance($this->adapter);
1320 efrain 536
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
1263 geraldo 537
 
538
            $competencies = [];
539
 
540
            $jobDescriptionCompetency = $jobDescriptionCompetencyMapper->fetchByJobDescriptionId($companyPerformanceEvaluationForm->job_description_id);
541
 
542
            foreach ($jobDescriptionCompetency as $record) {
543
 
544
                $competency = $competencyMapper->fetchOne($record->competency_id);
545
                $competenceType = $competenceTypeMapper->fetchOne($competency->competency_type_id);
546
 
1277 geraldo 547
                if ($competency && $competenceType) {
1263 geraldo 548
 
549
                    $behaviorCompetencies = $behaviorCompetencyMapper->fetchByCompetencyId($competency->id);
550
                    $behaviors = [];
1277 geraldo 551
 
1263 geraldo 552
                    foreach ($behaviorCompetencies as $rows) {
1277 geraldo 553
 
1263 geraldo 554
                        $behavior = $behaviorMapper->fetchOne($rows->behavior_id);
555
                        $jobDescriptionBehaviorCompetency = $jobDescriptionBehaviorCompetencyMapper->fetchOneByBehavior($companyPerformanceEvaluationForm->job_description_id, $record->competency_id, $rows->behavior_id);
1277 geraldo 556
 
1263 geraldo 557
                        if ($behavior && $jobDescriptionBehaviorCompetency) {
1277 geraldo 558
 
1263 geraldo 559
                            array_push($behaviors, [
1292 geraldo 560
                                'description' => $behavior->description,
1263 geraldo 561
                                'level' => $jobDescriptionBehaviorCompetency->level,
562
                            ]);
563
                        }
564
                    }
1277 geraldo 565
 
1263 geraldo 566
                    array_push($competencies, [
1305 geraldo 567
                        'name' => $competency->name,
1297 geraldo 568
                        'description' => $competency->description,
1292 geraldo 569
                        'type' => $competenceType->name,
570
                        'behaviors' => $behaviors
1263 geraldo 571
                    ]);
572
                }
573
            }
1292 geraldo 574
 
1279 geraldo 575
            return $this->renderPDF($currentCompany, $companyPerformanceEvaluationForm, $competencies);
1263 geraldo 576
        }
577
 
578
 
579
        return new JsonModel([
580
            'success' => false,
581
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
582
        ]);
583
    }
1292 geraldo 584
 
1277 geraldo 585
    /**
586
     * Render PDF
1336 efrain 587
     * @param Company $currentCompany
588
     * @param CompanyPerformanceEvaluationForm $performanceEvaluation
589
     * @param array $competencies
590
     * @return mixed
1277 geraldo 591
     */
1278 geraldo 592
    public function renderPDF($currentCompany, $performanceEvaluation, $competencies) {
1263 geraldo 593
 
1277 geraldo 594
        //Generate New PDF
595
        $pdf = new PerformanceEvaluationPdf();
596
 
597
        $pdf->header = '';
598
        $pdf->footer = '';
599
 
600
        if ($currentCompany) {
601
            //get company Data
602
            $companyMapper = CompanyMapper::getInstance($this->adapter);
603
            $company = $companyMapper->fetchOne($currentCompany->id);
604
 
605
            $target_path = $this->config['leaderslinked.fullpath.company'] . DIRECTORY_SEPARATOR . $company->uuid;
606
 
607
            $pdf->header = $company->header ? $target_path . DIRECTORY_SEPARATOR . $company->header : '';
608
            $pdf->footer = $company->footer ? $target_path . DIRECTORY_SEPARATOR . $company->footer : '';
609
        }
610
 
611
        $pdf->SetMargins(10, 0, 10);
612
 
613
        $pdf->AliasNbPages();
614
        $pdf->AddPage();
615
 
1294 geraldo 616
        $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
1293 geraldo 617
        $jobDescription = $jobDescriptionMapper->fetchOne($performanceEvaluation->job_description_id);
1277 geraldo 618
 
619
        $rows = [
620
            array(
621
                'title' => 'Nombre Evaluado: ',
622
                'content' => ''
623
            ),
624
            array(
625
                'title' => 'Cargo: ',
1293 geraldo 626
                'content' => $jobDescription ? ' ' . $jobDescription->name : ' No aplica'
1277 geraldo 627
            ),
628
            array(
629
                'title' => 'Firma Evaluado: ',
630
                'content' => ''
631
            ),
632
            array(
633
                'title' => 'Firma Evaluador: ',
634
                'content' => ''
635
            ),
636
            array(
637
                'title' => 'Firma Gerente: ',
638
                'content' => ''
639
            ),
640
            array(
641
                'title' => 'Fecha: ',
642
                'content' => date("d/m/Y")
643
            )
644
        ];
645
 
646
        $pdf->borderTable('EVALUACIÓN DE DESEMPEÑO', $rows);
1292 geraldo 647
 
648
        //Sections
1282 geraldo 649
        $sections = json_decode($performanceEvaluation->content, true);
1277 geraldo 650
 
1309 geraldo 651
        for ($s = 0; $s < count($sections); $s++) {
1277 geraldo 652
 
1317 geraldo 653
            $pdf->singleTable($sections[$s]['title'], [
654
                array(
655
                    'content' => $sections[$s]['type'] != 'multiple' ? $sections[$s]['text'] : ''
656
            )]);
1277 geraldo 657
 
1310 geraldo 658
            if ($sections[$s]['type'] == 'multiple') {
1318 geraldo 659
 
660
                $pdf->titleOptionTable($sections[$s]['text']);
1288 geraldo 661
 
1309 geraldo 662
                for ($o = 0; $o < count($sections[$s]['options']); $o++) {
1292 geraldo 663
 
1309 geraldo 664
                    $pdf->optionTable($sections[$s]['options'][$o]['title']);
1292 geraldo 665
                }
1307 geraldo 666
                $pdf->Ln();
1292 geraldo 667
            }
1312 geraldo 668
            if ($s % 2 == 0 && $s > 1) {
1317 geraldo 669
                $pdf->AddPage();
1308 geraldo 670
            }
1292 geraldo 671
        }
672
        // Competencies
673
        if (count($competencies) != 0) {
674
 
675
            // add new page
676
 
677
            $pdf->AddPage();
678
 
679
            $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:');
680
 
681
            $pdf->singleTable('Anexo de valores:', $competencies_header);
682
 
683
 
684
            // Add scale section
685
            $pdf->sectionScale();
686
 
687
            $i = 0;
688
 
689
            foreach ($competencies as $record) {
1305 geraldo 690
 
1292 geraldo 691
                $i = $i + 1;
692
 
693
                $pdf->competencyTable($i, $record);
1317 geraldo 694
 
1305 geraldo 695
                $pdf->singleTable('Comentarios Finales :', [array('content' => '')]);
1292 geraldo 696
 
1308 geraldo 697
                if ($i % 3 == 0 && $i < count($competencies)) {
1292 geraldo 698
                    $pdf->AddPage();
699
                }
700
            }
701
        }
702
 
1277 geraldo 703
        return $pdf->Output();
704
    }
705
 
977 geraldo 706
}