Proyectos de Subversion LeadersLinked - Backend

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1384 efrain 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;
7778 eleazar 13
use LeadersLinked\Library\Functions;
1384 efrain 14
use LeadersLinked\Mapper\QueryMapper;
15
use LeadersLinked\Mapper\UserMapper;
16
use Laminas\Hydrator\ArraySerializableHydrator;
17
use Laminas\Db\ResultSet\HydratingResultSet;
18
use Laminas\Paginator\Adapter\DbSelect;
19
use Laminas\Paginator\Paginator;
20
use LeadersLinked\Mapper\CompanyPerformanceEvaluationFormMapper;
21
use LeadersLinked\Mapper\CompanyUserMapper;
8100 eleazar 22
use LeadersLinked\Mapper\JobDescriptionMapper;
8101 eleazar 23
use LeadersLinked\Mapper\CompetencyTypeMapper;
24
use LeadersLinked\Model\JobDescription;
25
use LeadersLinked\Mapper\CompetencyMapper;
26
use LeadersLinked\Mapper\BehaviorCompetencyMapper;
27
use LeadersLinked\Model\BehaviorCompetency;
28
use LeadersLinked\Library\JobPdf;
29
use LeadersLinked\Mapper\JobDescriptionCompetencyMapper;
30
use LeadersLinked\Mapper\JobDescriptionSubordinateMapper;
31
use LeadersLinked\Model\JobDescriptionCompetency;
32
use LeadersLinked\Model\JobDescriptionBehaviorCompetency;
33
use LeadersLinked\Mapper\JobDescriptionBehaviorCompetencyMapper;
34
use LeadersLinked\Model\JobDescriptionSubordinate;
35
use LeadersLinked\Mapper\BehaviorMapper;
36
use LeadersLinked\Model\Behavior;
1384 efrain 37
use LeadersLinked\Form\PerformanceEvaluationEvaluationForm;
8087 eleazar 38
use LeadersLinked\Form\PerformanceEvaluationEvaluationSelfForm;
1384 efrain 39
use LeadersLinked\Mapper\CompanyPerformanceEvaluationTestMapper;
40
use LeadersLinked\Model\CompanyPerformanceEvaluationTest;
41
use LeadersLinked\Model\CompanyPerformanceEvaluationForm;
8087 eleazar 42
use LeadersLinked\Model\CompanyPerformanceEvaluationTestSelf;
1384 efrain 43
 
44
class PerformanceEvaluationEvaluationController extends AbstractActionController {
45
 
46
    /**
47
     *
48
     * @var AdapterInterface
49
     */
50
    private $adapter;
51
 
52
    /**
53
     *
54
     * @var AbstractAdapter
55
     */
56
    private $cache;
57
 
58
    /**
59
     *
60
     * @var  LoggerInterface
61
     */
62
    private $logger;
63
 
64
    /**
65
     *
66
     * @var array
67
     */
68
    private $config;
69
 
70
    /**
71
     *
72
     * @param AdapterInterface $adapter
73
     * @param AbstractAdapter $cache
74
     * @param LoggerInterface $logger
75
     * @param array $config
76
     */
77
    public function __construct($adapter, $cache, $logger, $config) {
78
        $this->adapter = $adapter;
79
        $this->cache = $cache;
80
        $this->logger = $logger;
81
        $this->config = $config;
82
    }
83
 
84
    public function indexAction() {
85
        $currentUserPlugin = $this->plugin('currentUserPlugin');
86
        $currentUser = $currentUserPlugin->getUser();
87
        $currentCompany = $currentUserPlugin->getCompany();
88
 
7897 eleazar 89
        try{
1384 efrain 90
        $request = $this->getRequest();
91
 
92
        if ($request->isGet()) {
93
 
94
            $headers = $request->getHeaders();
95
 
96
            $isJson = false;
97
            if ($headers->has('Accept')) {
98
                $accept = $headers->get('Accept');
99
 
100
                $prioritized = $accept->getPrioritized();
101
 
102
                foreach ($prioritized as $key => $value) {
103
                    $raw = trim($value->getRaw());
104
 
105
                    if (!$isJson) {
106
                        $isJson = strpos($raw, 'json');
107
                    }
108
                }
109
            }
110
 
111
            //$isJson = true;
112
            if ($isJson) {
113
 
114
 
115
                $data = [
116
                    'items' => [],
117
                    'total' => 0,
118
                ];
119
 
120
 
121
                $search = $this->params()->fromQuery('search', []);
122
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
123
 
124
                $page = intval($this->params()->fromQuery('start', 1), 10);
125
                $records_x_page = intval($this->params()->fromQuery('length', 10), 10);
126
                $order = $this->params()->fromQuery('order', []);
127
                $order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);
128
                $order_direction = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var($order[0]['dir'], FILTER_SANITIZE_STRING));
129
 
130
                $fields = ['max_date'];
131
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'first_name';
132
 
133
                if (!in_array($order_direction, ['ASC', 'DESC'])) {
134
                    $order_direction = 'ASC';
135
                }
136
 
137
 
138
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
139
                $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'performance-evaluation/evaluations/delete');
7913 eleazar 140
 
1384 efrain 141
 
7906 eleazar 142
 
1384 efrain 143
                $queryMapper = QueryMapper::getInstance($this->adapter);
144
                $sql = $queryMapper->getSql();
145
                $select = $sql->select();
8082 eleazar 146
                $select->columns(['uuid', 'last_date', 'form_id']);
1384 efrain 147
                $select->from(['tb1' => CompanyPerformanceEvaluationTestMapper::_TABLE]);
148
                $select->join(['tb2' => CompanyPerformanceEvaluationFormMapper::_TABLE], 'tb1.form_id = tb2.id ', ['form' =>'name']);
149
                $select->join(['tb3' => UserMapper::_TABLE], 'tb1.supervisor_id = tb3.id ', ['first_name', 'last_name', 'email']);
150
                $select->where->equalTo('tb1.company_id', $currentCompany->id);
151
 
152
                if ($search) {
153
                    $select->where->nest()
154
                            ->like('tb1.last_date', '%' . $search . '%')
155
                            ->like('tb2.name', '%' . $search . '%')
156
                            ->like('tb3.first_name', '%' . $search . '%')
157
                            ->or->like('tb3.last_name', '%' . $search . '%')
158
                            ->or->like('tb3.email', '%' . $search . '%')
159
                            ->unnest();
160
                }
161
 
162
 
163
                $select->order($order_field . ' ' . $order_direction);
164
 
165
                $hydrator = new ArraySerializableHydrator();
166
                $resultset = new HydratingResultSet($hydrator);
167
 
168
                $adapter = new DbSelect($select, $sql, $resultset);
169
                $paginator = new Paginator($adapter);
170
                $paginator->setItemCountPerPage($records_x_page);
171
                $paginator->setCurrentPageNumber($page);
172
 
173
                $items = [];
174
                $records = $paginator->getCurrentItems();
175
                foreach ($records as $record)
176
                {
8082 eleazar 177
                    $testMapper = CompanyPerformanceEvaluationTestMapper::getInstance($this->adapter);
178
                    $test =  $testMapper->fetchOneByUuid($record['uuid']);
8083 eleazar 179
 
1384 efrain 180
                    $dt = \DateTime::createFromFormat('Y-m-d', $record['last_date']);
181
                    $last_date = $dt->format('d/m/Y');
182
 
7913 eleazar 183
                    $link_self =
184
                    $link_superviser =
185
                    $link_both =
7778 eleazar 186
                    $link_delete = $this->url()->fromRoute('performance-evaluation/evaluations/delete', ['id' => $record['uuid'] ]);
7945 eleazar 187
 
7897 eleazar 188
                    $item = [
1384 efrain 189
                        'last_date' => $last_date,
190
                        'form' => $record['form'],
8083 eleazar 191
                        'first_name' => $test->first_name,
192
                        'last_name' => $test->last_name,
1384 efrain 193
                        'supervisor' => trim(trim($record['first_name']) . ' ' . trim($record['last_name'])) . ' (' . trim($record['email']) . ')',
194
                        'actions' => [
195
 
196
                            'link_delete' => $allowDelete ? $link_delete : '',
7946 eleazar 197
                            'link_self' => $this->url()->fromRoute('performance-evaluation/evaluations/self', ['id' => $record['uuid'] ]),
7913 eleazar 198
                            'link_superviser' => $this->url()->fromRoute('performance-evaluation/evaluations/superviser', ['id' => $record['uuid'] ]),
199
                            'link_both' => $this->url()->fromRoute('performance-evaluation/evaluations/both', ['id' => $record['uuid'] ]),
1384 efrain 200
                        ]
201
                    ];
7892 eleazar 202
 
1384 efrain 203
 
204
                    array_push($items, $item);
205
                }
206
 
207
                $data['items'] = $items;
208
                $data['total'] = $paginator->getTotalItemCount();
209
 
210
 
211
                return new JsonModel([
7890 eleazar 212
                    'success' => true,
1384 efrain 213
                    'data' => $data
214
                ]);
215
            } else {
216
 
217
 
218
                $form = new PerformanceEvaluationEvaluationForm($this->adapter, $currentCompany->id);
8088 eleazar 219
                $formSelf = new PerformanceEvaluationEvaluationSelfForm($this->adapter, $currentCompany->id);
1384 efrain 220
 
221
 
222
                $this->layout()->setTemplate('layout/layout-backend');
223
                $viewModel = new ViewModel();
224
                $viewModel->setTemplate('leaders-linked/performance-evaluation-evaluations/index.phtml');
225
                $viewModel->setVariables([
226
                    'form' => $form,
8088 eleazar 227
                    'formSelf' => $formSelf,
1384 efrain 228
                ]);
229
 
230
                return $viewModel;
231
            }
232
        } else {
233
            return new JsonModel([
234
                'success' => false,
235
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
236
            ]);
7897 eleazar 237
 
1384 efrain 238
        }
7897 eleazar 239
        } catch (\Throwable $e) {
240
            $e->getMessage();
241
            return new JsonModel([
242
                'success' => false,
243
                'data' => $e
244
            ]);
245
        }
1384 efrain 246
    }
247
 
8068 eleazar 248
 
249
    public function emailAction() {
250
        $request = $this->getRequest();
251
        $currentUserPlugin = $this->plugin('currentUserPlugin');
252
        $currentCompany = $currentUserPlugin->getCompany();
253
        $currentUser = $currentUserPlugin->getUser();
254
 
255
        $email = $request->getQuery('email');
256
 
257
        if(!$email){
258
            $data = [
259
                'success' => false,
260
                'data' => 'ERROR_INVALID_PARAMETER'
261
            ];
262
 
263
            return new JsonModel($data);
264
        }
265
 
266
        $userMapper = UserMapper::getInstance($this->adapter);
267
        $user = $userMapper->fetchOneByEmail($email);
268
 
269
        if (!$user) {
270
            return new JsonModel([
271
                'success' => false,
272
                'data' => 'ERROR_USER_NOT_FOUND',
273
            ]);
274
        } else if($request->isGet()){
275
            $data = [
276
                'success' => true,
277
                'data' => [
278
                    'user_id' => $user->id,
279
                    'first_name' => $user->first_name,
280
                    'last_name' => $user->last_name,
281
 
282
                ]
283
            ];
284
            return new JsonModel($data);
285
 
286
        }else {
287
            $data = [
288
                'success' => false,
289
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
290
            ];
291
 
292
            return new JsonModel($data);
293
        }
294
    }
295
 
1384 efrain 296
    public function addAction() {
297
        $request = $this->getRequest();
298
 
299
        $currentUserPlugin = $this->plugin('currentUserPlugin');
300
        $currentUser = $currentUserPlugin->getUser();
301
        $currentCompany = $currentUserPlugin->getCompany();
302
 
303
        $request = $this->getRequest();
304
 
305
 
306
        if ($request->isPost()) {
307
            $dataPost = $request->getPost()->toArray();
308
            $form = new  PerformanceEvaluationEvaluationForm($this->adapter, $currentCompany->id);
309
            $form->setData($dataPost);
8077 eleazar 310
 
1384 efrain 311
            if($form->isValid()) {
312
                $dataPost = (array) $form->getData();
313
 
314
                $form_id = $dataPost['form_id'];
8072 eleazar 315
                $supervisor_id = $dataPost['supervisor_id'];
316
                $first_name= $dataPost['first_name'];
317
                $last_name= $dataPost['last_name'];
318
                $email= $dataPost['email'];
319
                $user_id= $dataPost['user_id'];
1384 efrain 320
                $dt = \DateTime::createFromFormat('d/m/Y', $dataPost['last_date']);
321
                $last_date = $dt->format('Y-m-d');
322
 
323
                $formMapper = CompanyPerformanceEvaluationFormMapper::getInstance($this->adapter);
324
                $form = $formMapper->fetchOneByUuid($form_id);
325
                if (!$form) {
326
                    return new JsonModel([
327
                        'success' => true,
328
                        'data' => 'ERROR_FORM_NOT_FOUND'
329
                    ]);
330
                }
331
 
332
                if ($form->company_id != $currentCompany->id) {
333
                    return new JsonModel([
334
                        'success' => true,
335
                        'data' => 'ERROR_UNAUTHORIZED'
336
                    ]);
337
                }
338
 
339
 
340
                $userMapper = UserMapper::getInstance($this->adapter);
8073 eleazar 341
                $supervisor = $userMapper->fetchOneByUuid($supervisor_id);
1384 efrain 342
 
8072 eleazar 343
                if (!$supervisor) {
1384 efrain 344
                    return new JsonModel([
345
                        'success' => false,
346
                        'data' => 'ERROR_USER_NOT_FOUND'
347
                    ]);
348
                }
349
 
350
 
351
 
352
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
8074 eleazar 353
                $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($form->company_id, $supervisor->id);
1384 efrain 354
                if (!$companyUser) {
355
                    return new JsonModel([
356
                        'success' => false,
357
                        'data' => 'ERROR_UNAUTHORIZED'
358
                    ]);
359
                }
360
 
361
 
362
                $test = new CompanyPerformanceEvaluationTest();
363
                $test->company_id = $form->company_id;
364
                $test->form_id = $form->id;
8072 eleazar 365
                $test->supervisor_id = $supervisor->id;
1384 efrain 366
                $test->last_date = $last_date;
8072 eleazar 367
                $test->first_name = $first_name;
368
                $test->last_name = $last_name;
369
                $test->email = $email;
8078 eleazar 370
                //$tst->user_id = $user_id;
1384 efrain 371
 
372
 
373
                $testMapper = CompanyPerformanceEvaluationTestMapper::getInstance($this->adapter);
374
                $result = $testMapper->insert($test);
375
 
376
                if($result) {
377
                    $this->logger->info('Se agrego el Test de Performance ' . $form->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
378
 
379
                    $data = [
380
                        'success'   => true,
381
                        'data'   => 'LABEL_RECORD_ADDED'
382
                    ];
383
                } else {
384
                    $data = [
385
                        'success'   => false,
386
                        'data'      => $testMapper->getError()
387
                    ];
388
 
389
                }
390
 
391
                return new JsonModel($data);
392
 
393
            } else {
394
                $messages = [];
395
                $form_messages = (array) $form->getMessages();
396
                foreach($form_messages  as $fieldname => $field_messages)
397
                {
398
 
399
                    $messages[$fieldname] = array_values($field_messages);
400
                }
401
 
402
                return new JsonModel([
403
                    'success'   => false,
404
                    'data'   => $messages
405
                ]);
406
            }
407
 
408
 
409
 
410
        }
411
 
412
        return new JsonModel([
413
            'success' => false,
414
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
415
        ]);
416
    }
8087 eleazar 417
 
418
    public function selfAction() {
419
        $currentUserPlugin = $this->plugin('currentUserPlugin');
420
        $currentUser = $currentUserPlugin->getUser();
421
        $currentCompany = $currentUserPlugin->getCompany();
422
 
423
        $request = $this->getRequest();
424
 
425
        $uuid = $this->params()->fromRoute('id');
426
 
427
        if ($request->isGet()) {
428
            $testMapper = CompanyPerformanceEvaluationTestMapper::getInstance($this->adapter);
429
            $test = $testMapper->fetchOneByUuid($uuid);
8094 eleazar 430
 
431
            $formMapper = CompanyPerformanceEvaluationFormMapper::getInstance($this->adapter);
8097 eleazar 432
            $form = $formMapper->fetchOne($test->form_id);
8099 eleazar 433
 
8087 eleazar 434
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
435
            $jobDescription = $jobDescriptionMapper->fetchOne($form->job_description_id);
8101 eleazar 436
 
437
            $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
438
            $jobDescriptionCompetencies = $jobDescriptionCompetencyMapper->fetchByJobDescriptionId($jobDescription->id);
8102 eleazar 439
            // return new JsonModel([
440
            //     'success' => false,
441
            //     'data' => $jobDescriptionCompetencies
442
            // ]);
8087 eleazar 443
            $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
444
            $competencyMapper = CompetencyMapper::getInstance($this->adapter);
445
            $behaviorCompetencyMapper = BehaviorCompetencyMapper::getInstance($this->adapter);
446
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
1384 efrain 447
 
8087 eleazar 448
            $data = [
449
                'job_description' => [
450
                    'uuid' => $jobDescription->uuid,
451
                    'name' => $jobDescription->name,
452
                    'functions' => $jobDescription->functions,
453
                    'objectives' => $jobDescription->objectives,
454
                    'competencies' => []
455
                ],
456
                'self' => [
457
                    'points' => 0,
458
                    'comment' => '',
459
                ],
460
                'test' => $test,
461
            ];
462
 
463
            foreach ($jobDescriptionCompetencies as $jobDescriptionCompetency) {
464
                $competency = $competencyMapper->fetchOne($jobDescriptionCompetency->competency_id);
465
                $competencyType = $competencyTypeMapper->fetchOne($competency->competency_type_id);
466
                $behaviorCompetencies = $behaviorCompetencyMapper->fetchByCompetencyId($competency->id);
467
 
468
                $behaviors = [];
469
 
470
                foreach ($behaviorCompetencies as $behaviorCompetency) {
471
                    $behavior = $behaviorMapper->fetchOne($behaviorCompetency->behavior_id);
472
 
473
                    $behaviors []= [
474
                        'uuid' => $behavior->uuid,
475
                        'description' => $behavior->description,
476
                        'points' => 0,
477
                        'comment' => '',
478
                        'competency_uuid' => $competency->uuid,
479
                    ];
480
                }
481
 
482
                array_push($data['job_description']['competencies'], [
483
                    'competency_uuid' => $competency->uuid,
484
                    'competency_name' => $competency->name,
485
                    'competency_type_uuid' => $competencyType->uuid,
486
                    'competency_type_name' => $competencyType->name,
487
                    'behaviors' => $behaviors,
488
                ]);
489
            }
490
 
491
            return new JsonModel([
492
                'success' => true,
493
                'data' => $data
494
            ]);
495
 
496
        } else if($request->isPost()){
497
            $dataPost = $request->getPost()->toArray();
498
            $dataPost['test'] = $test;
499
 
500
            $testMapper = CompanyPerformanceEvaluationTestMapper::getInstance($this->adapter);
501
            $test = $testMapper->fetchOneByUuid($test);
502
 
8088 eleazar 503
            $formSelf = new PerformanceEvaluationEvaluationSelfForm($this->adapter, $currentCompany->id);
8087 eleazar 504
 
8091 eleazar 505
            $formSelf->setData($dataPost);
8087 eleazar 506
 
8091 eleazar 507
            if ($formSelf->isValid()) {
508
                $dataPost = (array) $formSelf->getData();
8087 eleazar 509
 
510
                $hydrator = new ObjectPropertyHydrator();
511
                $performanceEvaluationTestSelf = new CompanyPerformanceEvaluationTestSelf();
512
                $hydrator->hydrate($dataPost, $performanceEvaluationTestSelf);
513
 
514
                $performanceEvaluationTestSelf->company_id = $currentCompany->id;
515
                $performanceEvaluationTestSelf->test_id = $test->id;
516
 
517
                $performanceEvaluationTestSelfMapper = CompanyPerformanceEvaluationTestSelfMapper::getInstance($this->adapter);
518
 
519
                $result = $performanceEvaluationTestSelfMapper->insert($performanceEvaluationTestSelf);
520
 
521
 
522
                if ($result) {
523
                    $this->logger->info('Se agrego la entrevista ' . $recruitmentSelectionInterview->id, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
524
 
525
                    // Get record by id
526
                    $performanceEvaluationTestSelfMapper = CompanyPerformanceEvaluationTestSelfMapper::getInstance($this->adapter);
527
                    $record = $performanceEvaluationTestSelfMapper->fetchOne($performanceEvaluationTestSelf->id);
528
 
529
 
530
                    if ($record) {
531
 
532
                        $data = [
533
                            'success' => true,
534
                            'id' => $record->id,
535
                            'data' => 'LABEL_RECORD_ADDED'
536
                        ];
537
                    } else {
538
 
539
                        $data = [
540
                            'success' => false,
541
                            'data' => 'ERROR_RECORD_NOT_FOUND'
542
                        ];
543
                    }
544
                } else {
545
                    $data = [
546
                        'success' => false,
547
                        'data' => $performanceEvaluationTestSelfMapper->getError()
548
                    ];
549
                }
550
 
551
                return new JsonModel($data);
552
            } else {
553
                $messages = [];
554
                $form_messages = (array) $form->getMessages();
555
                foreach ($form_messages as $fieldname => $field_messages) {
556
 
557
                    $messages[$fieldname] = array_values($field_messages);
558
                }
559
 
560
                return new JsonModel([
561
                    'success' => false,
562
                    'data' => $messages
563
                ]);
564
            }
565
        } else {
566
            $data = [
567
                'success' => false,
568
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
569
            ];
570
 
571
            return new JsonModel($data);
572
        }
573
 
574
        return new JsonModel($data);
575
    }
576
 
1384 efrain 577
    public function editAction() {
578
        $request = $this->getRequest();
579
 
580
        $currentUserPlugin = $this->plugin('currentUserPlugin');
581
        $currentUser = $currentUserPlugin->getUser();
582
        $currentCompany = $currentUserPlugin->getCompany();
583
 
584
        $request = $this->getRequest();
585
        $id = $this->params()->fromRoute('id');
586
 
587
        $formTestMapper = CompanyPerformanceEvaluationTestMapper::getInstance($this->adapter);
588
        $formTest =  $formTestMapper->fetchOneByUuid($id);
8080 eleazar 589
 
1384 efrain 590
        if (!$formTest) {
591
            return new JsonModel([
592
                'success' => true,
593
                'data' => 'ERROR_RECORD_NOT_FOUND'
594
            ]);
595
        }
596
 
597
        if ($formTest->company_id != $currentCompany->id) {
598
            return new JsonModel([
599
                'success' => true,
600
                'data' => 'ERROR_UNAUTHORIZED'
601
            ]);
602
        }
603
 
604
 
605
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
606
        $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($formTest->company_id, $currentUser->id);
607
        if (!$companyUser) {
608
            return new JsonModel([
609
                'success' => false,
610
                'data' => 'ERROR_UNAUTHORIZED'
611
            ]);
612
        }
613
 
614
        if ($request->isGet()) {
615
 
616
            $dt = \DateTime::createFromFormat('Y-m-d', $formTest->last_date);
617
 
618
            $formMapper = CompanyPerformanceEvaluationFormMapper::getInstance($this->adapter);
619
            $form = $formMapper->fetchOne($formTest->form_id);
620
 
621
            $userMapper = UserMapper::getInstance($this->adapter);
7785 eleazar 622
            $user = $userMapper->fetchOne($formTest->supervisor_id);
1384 efrain 623
 
624
            $data = [
625
                'success'   => true,
626
                'data'   => [
627
                    'last_date' => $dt->format('d/m/Y'),
628
                    'form' => $form->uuid,
629
                    'supervisor' => $user->uuid,
630
                ]
631
            ];
632
 
633
            return new JsonModel($data);
634
 
635
 
636
 
637
        } else if ($request->isPost()) {
638
 
639
 
640
            $dataPost = $request->getPost()->toArray();
641
            $form = new  PerformanceEvaluationEvaluationForm($this->adapter, $currentCompany->id);
642
            $form->setData($dataPost);
643
 
644
            if($form->isValid()) {
645
                $dataPost = (array) $form->getData();
646
 
647
                $form_id = $dataPost['form_id'];
648
                $user_id = $dataPost['supervisor_id'];
649
                $dt = \DateTime::createFromFormat('d/m/Y', $dataPost['last_date']);
650
                $last_date = $dt->format('Y-m-d');
651
 
652
                $formMapper = CompanyPerformanceEvaluationFormMapper::getInstance($this->adapter);
653
                $form = $formMapper->fetchOneByUuid($form_id);
654
                if (!$form) {
655
                    return new JsonModel([
656
                        'success' => true,
657
                        'data' => 'ERROR_FORM_NOT_FOUND'
658
                    ]);
659
                }
660
 
661
                if ($form->company_id != $currentCompany->id) {
662
                    return new JsonModel([
663
                        'success' => true,
664
                        'data' => 'ERROR_UNAUTHORIZED'
665
                    ]);
666
                }
667
 
668
 
669
                $userMapper = UserMapper::getInstance($this->adapter);
670
                $user = $userMapper->fetchOneByUuid($user_id);
671
 
672
                if (!$user) {
673
                    return new JsonModel([
674
                        'success' => false,
675
                        'data' => 'ERROR_USER_NOT_FOUND'
676
                    ]);
677
                }
678
 
679
 
680
 
681
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
682
                $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($form->company_id, $user->id);
683
                if (!$companyUser) {
684
                    return new JsonModel([
685
                        'success' => false,
686
                        'data' => 'ERROR_UNAUTHORIZED'
687
                    ]);
688
                }
689
 
690
                $formTest->supervisor_id = $user->id;
691
                $formTest->last_date = $last_date;
692
 
693
                $testMapper = CompanyPerformanceEvaluationTestMapper::getInstance($this->adapter);
694
                $result = $testMapper->update($formTest);
695
 
696
                if($result) {
697
                    $this->logger->info('Se actualizo el Test de Performance ' . $form->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
698
 
699
                    $data = [
700
                        'success'   => true,
701
                        'data'   => 'LABEL_RECORD_UPDATED'
702
                    ];
703
                } else {
704
                    $data = [
705
                        'success'   => false,
706
                        'data'      => $testMapper->getError()
707
                    ];
708
 
709
                }
710
 
711
                return new JsonModel($data);
712
 
713
            } else {
714
                $messages = [];
715
                $form_messages = (array) $form->getMessages();
716
                foreach($form_messages  as $fieldname => $field_messages)
717
                {
718
 
719
                    $messages[$fieldname] = array_values($field_messages);
720
                }
721
 
722
                return new JsonModel([
723
                    'success'   => false,
724
                    'data'   => $messages
725
                ]);
726
            }
727
        }
728
 
729
        return new JsonModel([
730
            'success' => false,
731
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
732
        ]);
733
    }
734
 
735
    public function deleteAction() {
736
        $request = $this->getRequest();
737
 
738
        $currentUserPlugin = $this->plugin('currentUserPlugin');
739
        $currentUser = $currentUserPlugin->getUser();
740
        $currentCompany = $currentUserPlugin->getCompany();
741
 
742
        $request = $this->getRequest();
743
        $id = $this->params()->fromRoute('id');
744
 
745
        $formTestMapper = CompanyPerformanceEvaluationTestMapper::getInstance($this->adapter);
746
        $formTest =  $formTestMapper->fetchOneByUuid($id);
747
        if (!$formTest) {
748
            return new JsonModel([
749
                'success' => true,
750
                'data' => 'ERROR_RECORD_NOT_FOUND'
751
            ]);
752
        }
753
 
754
        if ($formTest->company_id != $currentCompany->id) {
755
            return new JsonModel([
756
                'success' => true,
757
                'data' => 'ERROR_UNAUTHORIZED'
758
            ]);
759
        }
760
 
761
 
762
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
763
        $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($formTest->company_id, $currentUser->id);
764
        if (!$companyUser) {
765
            return new JsonModel([
766
                'success' => false,
767
                'data' => 'ERROR_UNAUTHORIZED'
768
            ]);
769
        }
770
 
771
        if ($request->isPost()) {
772
 
773
 
774
            $result = $formTestMapper->delete($formTest);
775
 
776
            if ($result) {
777
 
778
                return new JsonModel([
779
                    'success' => true,
780
                    'data' => 'LABEL_PERFORMANCE_TEST_DELETED',
781
                ]);
782
            } else {
783
 
784
                return new JsonModel([
785
                    'success' => false,
786
                    'data' => $formTestMapper->getError()
787
                ]);
788
            }
789
        }
790
 
791
        return new JsonModel([
792
            'success' => false,
793
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
794
        ]);
795
    }
796
 
797
}