Proyectos de Subversion LeadersLinked - Backend

Rev

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