Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 1336 | Rev 12167 | 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;
1274 geraldo 23
use LeadersLinked\Mapper\BehaviorCompetencyMapper;
1320 efrain 24
use LeadersLinked\Mapper\BehaviorMapper;
1275 geraldo 25
use LeadersLinked\Mapper\JobDescriptionBehaviorCompetencyMapper;
977 geraldo 26
use LeadersLinked\Mapper\CompanyPerformanceEvaluationFormUserMapper;
1281 geraldo 27
use LeadersLinked\Mapper\CompanyMapper;
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
            //Falta borrar los test  primeramente
438
            $companyPerformanceEvaluationFormUserMapper = CompanyPerformanceEvaluationFormUserMapper::getInstance($this->adapter);
439
            $companyPerformanceEvaluationFormUserMapper->deleteAllByFormId($companyPerformanceEvaluation->id);
440
 
441
 
442
            $result = $companyPerformanceEvaluationMapper->delete($companyPerformanceEvaluation->id);
443
            if ($result) {
444
                $this->logger->info('Se borro el formulario de evaluación de desempeño ' . $companyPerformanceEvaluation->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
445
 
446
                $data = [
447
                    'success' => true,
448
                    'data' => 'LABEL_RECORD_DELETED'
449
                ];
450
            } else {
451
 
452
                $data = [
453
                    'success' => false,
454
                    'data' => $companyPerformanceEvaluationMapper->getError()
455
                ];
456
 
457
                return new JsonModel($data);
458
            }
459
        } else {
460
            $data = [
461
                'success' => false,
462
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
463
            ];
464
 
465
            return new JsonModel($data);
466
        }
467
 
468
        return new JsonModel($data);
469
    }
470
 
1269 geraldo 471
    public function reportAction() {
1263 geraldo 472
        $currentUserPlugin = $this->plugin('currentUserPlugin');
473
        $currentUser = $currentUserPlugin->getUser();
1277 geraldo 474
        $currentCompany = $currentUserPlugin->getCompany();
1263 geraldo 475
 
476
        $uuid = $this->params()->fromRoute('id');
477
 
478
        $companyPerformanceEvaluationFormMapper = CompanyPerformanceEvaluationFormMapper::getInstance($this->adapter);
479
        $companyPerformanceEvaluationForm = $companyPerformanceEvaluationFormMapper->fetchOneByUuid($uuid);
480
 
481
        if (!$companyPerformanceEvaluationForm) {
482
            return new JsonModel([
483
                'success' => false,
484
                'data' => 'ERROR_FORM_EVALUATION_NOT_FOUND'
485
            ]);
486
        }
487
 
1336 efrain 488
        /*
1263 geraldo 489
        if ($companyPerformanceEvaluationForm->status == CompanyPerformanceEvaluationForm::STATUS_INACTIVE) {
490
            return new JsonModel([
491
                'success' => false,
492
                'data' => 'ERROR_FORM_EVALUATION_IS_INACTIVE'
493
            ]);
494
        }
495
 
1336 efrain 496
/*
1263 geraldo 497
        $companyPerformanceEvaluationFormUserMapper = CompanyPerformanceEvaluationFormUserMapper::getInstance($this->adapter);
498
        $companyPerformanceEvaluationFormUser = $companyPerformanceEvaluationFormUserMapper->fetchOneByFormIdAndUserId($companyPerformanceEvaluationForm->id, $currentUser->id);
499
        if (!$companyPerformanceEvaluationFormUser) {
500
            return new JsonModel([
501
                'success' => false,
502
                'data' => 'ERROR_FORM_EVALUATION_YOU_CAN_NOT_TAKE'
503
            ]);
504
        }
505
 
506
 
507
        $companyPerformanceEvaluationTestMapper = CompanyPerformanceEvaluationTestMapper::getInstance($this->adapter);
508
        $companyPerformanceEvaluationTest = $companyPerformanceEvaluationTestMapper->fetchOneBy($companyPerformanceEvaluationForm->id, $currentUser->id);
509
 
510
        if ($companyPerformanceEvaluationTest && $companyPerformanceEvaluationTest->status != CompanyPerformanceEvaluationTest::STATUS_DRAFT) {
511
            return new JsonModel([
512
                'success' => false,
513
                'data' => 'ERROR_FORM_EVALUATION_ALREADY_YOUR_APPLICATION_IN_THIS_TEST'
514
            ]);
515
        }
1336 efrain 516
        */
1263 geraldo 517
 
518
        $request = $this->getRequest();
519
        if ($request->isGet()) {
520
 
521
 
522
 
523
            // set content
524
 
1336 efrain 525
            $content = json_decode($companyPerformanceEvaluationForm->content, true);
1263 geraldo 526
 
1277 geraldo 527
 
1263 geraldo 528
            //Competencies
529
 
530
            $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
531
            $competencyMapper = CompetencyMapper::getInstance($this->adapter);
532
            $competenceTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
533
            $behaviorCompetencyMapper = BehaviorCompetencyMapper::getInstance($this->adapter);
534
            $jobDescriptionBehaviorCompetencyMapper = JobDescriptionBehaviorCompetencyMapper::getInstance($this->adapter);
1320 efrain 535
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
1263 geraldo 536
 
537
            $competencies = [];
538
 
539
            $jobDescriptionCompetency = $jobDescriptionCompetencyMapper->fetchByJobDescriptionId($companyPerformanceEvaluationForm->job_description_id);
540
 
541
            foreach ($jobDescriptionCompetency as $record) {
542
 
543
                $competency = $competencyMapper->fetchOne($record->competency_id);
544
                $competenceType = $competenceTypeMapper->fetchOne($competency->competency_type_id);
545
 
1277 geraldo 546
                if ($competency && $competenceType) {
1263 geraldo 547
 
548
                    $behaviorCompetencies = $behaviorCompetencyMapper->fetchByCompetencyId($competency->id);
549
                    $behaviors = [];
1277 geraldo 550
 
1263 geraldo 551
                    foreach ($behaviorCompetencies as $rows) {
1277 geraldo 552
 
1263 geraldo 553
                        $behavior = $behaviorMapper->fetchOne($rows->behavior_id);
554
                        $jobDescriptionBehaviorCompetency = $jobDescriptionBehaviorCompetencyMapper->fetchOneByBehavior($companyPerformanceEvaluationForm->job_description_id, $record->competency_id, $rows->behavior_id);
1277 geraldo 555
 
1263 geraldo 556
                        if ($behavior && $jobDescriptionBehaviorCompetency) {
1277 geraldo 557
 
1263 geraldo 558
                            array_push($behaviors, [
1292 geraldo 559
                                'description' => $behavior->description,
1263 geraldo 560
                                'level' => $jobDescriptionBehaviorCompetency->level,
561
                            ]);
562
                        }
563
                    }
1277 geraldo 564
 
1263 geraldo 565
                    array_push($competencies, [
1305 geraldo 566
                        'name' => $competency->name,
1297 geraldo 567
                        'description' => $competency->description,
1292 geraldo 568
                        'type' => $competenceType->name,
569
                        'behaviors' => $behaviors
1263 geraldo 570
                    ]);
571
                }
572
            }
1292 geraldo 573
 
1279 geraldo 574
            return $this->renderPDF($currentCompany, $companyPerformanceEvaluationForm, $competencies);
1263 geraldo 575
        }
576
 
577
 
578
        return new JsonModel([
579
            'success' => false,
580
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
581
        ]);
582
    }
1292 geraldo 583
 
1277 geraldo 584
    /**
585
     * Render PDF
1336 efrain 586
     * @param Company $currentCompany
587
     * @param CompanyPerformanceEvaluationForm $performanceEvaluation
588
     * @param array $competencies
589
     * @return mixed
1277 geraldo 590
     */
1278 geraldo 591
    public function renderPDF($currentCompany, $performanceEvaluation, $competencies) {
1263 geraldo 592
 
1277 geraldo 593
        //Generate New PDF
594
        $pdf = new PerformanceEvaluationPdf();
595
 
596
        $pdf->header = '';
597
        $pdf->footer = '';
598
 
599
        if ($currentCompany) {
600
            //get company Data
601
            $companyMapper = CompanyMapper::getInstance($this->adapter);
602
            $company = $companyMapper->fetchOne($currentCompany->id);
603
 
604
            $target_path = $this->config['leaderslinked.fullpath.company'] . DIRECTORY_SEPARATOR . $company->uuid;
605
 
606
            $pdf->header = $company->header ? $target_path . DIRECTORY_SEPARATOR . $company->header : '';
607
            $pdf->footer = $company->footer ? $target_path . DIRECTORY_SEPARATOR . $company->footer : '';
608
        }
609
 
610
        $pdf->SetMargins(10, 0, 10);
611
 
612
        $pdf->AliasNbPages();
613
        $pdf->AddPage();
614
 
1294 geraldo 615
        $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
1293 geraldo 616
        $jobDescription = $jobDescriptionMapper->fetchOne($performanceEvaluation->job_description_id);
1277 geraldo 617
 
618
        $rows = [
619
            array(
620
                'title' => 'Nombre Evaluado: ',
621
                'content' => ''
622
            ),
623
            array(
624
                'title' => 'Cargo: ',
1293 geraldo 625
                'content' => $jobDescription ? ' ' . $jobDescription->name : ' No aplica'
1277 geraldo 626
            ),
627
            array(
628
                'title' => 'Firma Evaluado: ',
629
                'content' => ''
630
            ),
631
            array(
632
                'title' => 'Firma Evaluador: ',
633
                'content' => ''
634
            ),
635
            array(
636
                'title' => 'Firma Gerente: ',
637
                'content' => ''
638
            ),
639
            array(
640
                'title' => 'Fecha: ',
641
                'content' => date("d/m/Y")
642
            )
643
        ];
644
 
645
        $pdf->borderTable('EVALUACIÓN DE DESEMPEÑO', $rows);
1292 geraldo 646
 
647
        //Sections
1282 geraldo 648
        $sections = json_decode($performanceEvaluation->content, true);
1277 geraldo 649
 
1309 geraldo 650
        for ($s = 0; $s < count($sections); $s++) {
1277 geraldo 651
 
1317 geraldo 652
            $pdf->singleTable($sections[$s]['title'], [
653
                array(
654
                    'content' => $sections[$s]['type'] != 'multiple' ? $sections[$s]['text'] : ''
655
            )]);
1277 geraldo 656
 
1310 geraldo 657
            if ($sections[$s]['type'] == 'multiple') {
1318 geraldo 658
 
659
                $pdf->titleOptionTable($sections[$s]['text']);
1288 geraldo 660
 
1309 geraldo 661
                for ($o = 0; $o < count($sections[$s]['options']); $o++) {
1292 geraldo 662
 
1309 geraldo 663
                    $pdf->optionTable($sections[$s]['options'][$o]['title']);
1292 geraldo 664
                }
1307 geraldo 665
                $pdf->Ln();
1292 geraldo 666
            }
1312 geraldo 667
            if ($s % 2 == 0 && $s > 1) {
1317 geraldo 668
                $pdf->AddPage();
1308 geraldo 669
            }
1292 geraldo 670
        }
671
        // Competencies
672
        if (count($competencies) != 0) {
673
 
674
            // add new page
675
 
676
            $pdf->AddPage();
677
 
678
            $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:');
679
 
680
            $pdf->singleTable('Anexo de valores:', $competencies_header);
681
 
682
 
683
            // Add scale section
684
            $pdf->sectionScale();
685
 
686
            $i = 0;
687
 
688
            foreach ($competencies as $record) {
1305 geraldo 689
 
1292 geraldo 690
                $i = $i + 1;
691
 
692
                $pdf->competencyTable($i, $record);
1317 geraldo 693
 
1305 geraldo 694
                $pdf->singleTable('Comentarios Finales :', [array('content' => '')]);
1292 geraldo 695
 
1308 geraldo 696
                if ($i % 3 == 0 && $i < count($competencies)) {
1292 geraldo 697
                    $pdf->AddPage();
698
                }
699
            }
700
        }
701
 
1277 geraldo 702
        return $pdf->Output();
703
    }
704
 
977 geraldo 705
}