Proyectos de Subversion LeadersLinked - Backend

Rev

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