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;
22
use LeadersLinked\Form\PerformanceEvaluationEvaluationForm;
23
use LeadersLinked\Mapper\CompanyPerformanceEvaluationTestMapper;
24
use LeadersLinked\Model\CompanyPerformanceEvaluationTest;
25
use LeadersLinked\Model\CompanyPerformanceEvaluationForm;
26
 
27
class PerformanceEvaluationEvaluationController extends AbstractActionController {
28
 
29
    /**
30
     *
31
     * @var AdapterInterface
32
     */
33
    private $adapter;
34
 
35
    /**
36
     *
37
     * @var AbstractAdapter
38
     */
39
    private $cache;
40
 
41
    /**
42
     *
43
     * @var  LoggerInterface
44
     */
45
    private $logger;
46
 
47
    /**
48
     *
49
     * @var array
50
     */
51
    private $config;
52
 
53
    /**
54
     *
55
     * @param AdapterInterface $adapter
56
     * @param AbstractAdapter $cache
57
     * @param LoggerInterface $logger
58
     * @param array $config
59
     */
60
    public function __construct($adapter, $cache, $logger, $config) {
61
        $this->adapter = $adapter;
62
        $this->cache = $cache;
63
        $this->logger = $logger;
64
        $this->config = $config;
65
    }
66
 
67
    public function indexAction() {
68
        $currentUserPlugin = $this->plugin('currentUserPlugin');
69
        $currentUser = $currentUserPlugin->getUser();
70
        $currentCompany = $currentUserPlugin->getCompany();
71
 
7897 eleazar 72
        try{
1384 efrain 73
        $request = $this->getRequest();
74
 
75
        if ($request->isGet()) {
76
 
77
            $headers = $request->getHeaders();
78
 
79
            $isJson = false;
80
            if ($headers->has('Accept')) {
81
                $accept = $headers->get('Accept');
82
 
83
                $prioritized = $accept->getPrioritized();
84
 
85
                foreach ($prioritized as $key => $value) {
86
                    $raw = trim($value->getRaw());
87
 
88
                    if (!$isJson) {
89
                        $isJson = strpos($raw, 'json');
90
                    }
91
                }
92
            }
93
 
94
            //$isJson = true;
95
            if ($isJson) {
96
 
97
 
98
                $data = [
99
                    'items' => [],
100
                    'total' => 0,
101
                ];
102
 
103
 
104
                $search = $this->params()->fromQuery('search', []);
105
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
106
 
107
                $page = intval($this->params()->fromQuery('start', 1), 10);
108
                $records_x_page = intval($this->params()->fromQuery('length', 10), 10);
109
                $order = $this->params()->fromQuery('order', []);
110
                $order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);
111
                $order_direction = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var($order[0]['dir'], FILTER_SANITIZE_STRING));
112
 
113
                $fields = ['max_date'];
114
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'first_name';
115
 
116
                if (!in_array($order_direction, ['ASC', 'DESC'])) {
117
                    $order_direction = 'ASC';
118
                }
119
 
120
 
121
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
122
                $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'performance-evaluation/evaluations/delete');
7913 eleazar 123
 
1384 efrain 124
 
7906 eleazar 125
 
1384 efrain 126
                $queryMapper = QueryMapper::getInstance($this->adapter);
127
                $sql = $queryMapper->getSql();
128
                $select = $sql->select();
7942 eleazar 129
                $select->columns(['uuid', 'last_date', 'form_id']);
1384 efrain 130
                $select->from(['tb1' => CompanyPerformanceEvaluationTestMapper::_TABLE]);
131
                $select->join(['tb2' => CompanyPerformanceEvaluationFormMapper::_TABLE], 'tb1.form_id = tb2.id ', ['form' =>'name']);
132
                $select->join(['tb3' => UserMapper::_TABLE], 'tb1.supervisor_id = tb3.id ', ['first_name', 'last_name', 'email']);
133
                $select->where->equalTo('tb1.company_id', $currentCompany->id);
134
 
135
                if ($search) {
136
                    $select->where->nest()
137
                            ->like('tb1.last_date', '%' . $search . '%')
138
                            ->like('tb2.name', '%' . $search . '%')
139
                            ->like('tb3.first_name', '%' . $search . '%')
140
                            ->or->like('tb3.last_name', '%' . $search . '%')
141
                            ->or->like('tb3.email', '%' . $search . '%')
142
                            ->unnest();
143
                }
144
 
145
 
146
                $select->order($order_field . ' ' . $order_direction);
147
 
148
                $hydrator = new ArraySerializableHydrator();
149
                $resultset = new HydratingResultSet($hydrator);
150
 
151
                $adapter = new DbSelect($select, $sql, $resultset);
152
                $paginator = new Paginator($adapter);
153
                $paginator->setItemCountPerPage($records_x_page);
154
                $paginator->setCurrentPageNumber($page);
155
 
156
                $items = [];
157
                $records = $paginator->getCurrentItems();
158
                foreach ($records as $record)
159
                {
160
 
161
                    $dt = \DateTime::createFromFormat('Y-m-d', $record['last_date']);
162
                    $last_date = $dt->format('d/m/Y');
163
 
7913 eleazar 164
                    $link_self =
165
                    $link_superviser =
166
                    $link_both =
7778 eleazar 167
                    $link_delete = $this->url()->fromRoute('performance-evaluation/evaluations/delete', ['id' => $record['uuid'] ]);
7945 eleazar 168
 
7897 eleazar 169
                    $item = [
1384 efrain 170
                        'last_date' => $last_date,
171
                        'form' => $record['form'],
172
                        'supervisor' => trim(trim($record['first_name']) . ' ' . trim($record['last_name'])) . ' (' . trim($record['email']) . ')',
173
                        'actions' => [
174
 
175
                            'link_delete' => $allowDelete ? $link_delete : '',
7946 eleazar 176
                            'link_self' => $this->url()->fromRoute('performance-evaluation/evaluations/self', ['id' => $record['uuid'] ]),
7913 eleazar 177
                            'link_superviser' => $this->url()->fromRoute('performance-evaluation/evaluations/superviser', ['id' => $record['uuid'] ]),
178
                            'link_both' => $this->url()->fromRoute('performance-evaluation/evaluations/both', ['id' => $record['uuid'] ]),
1384 efrain 179
                        ]
180
                    ];
7892 eleazar 181
 
1384 efrain 182
 
183
                    array_push($items, $item);
184
                }
185
 
186
                $data['items'] = $items;
187
                $data['total'] = $paginator->getTotalItemCount();
188
 
189
 
190
                return new JsonModel([
7890 eleazar 191
                    'success' => true,
1384 efrain 192
                    'data' => $data
193
                ]);
194
            } else {
195
 
196
 
197
                $form = new PerformanceEvaluationEvaluationForm($this->adapter, $currentCompany->id);
198
 
199
 
200
 
201
                $this->layout()->setTemplate('layout/layout-backend');
202
                $viewModel = new ViewModel();
203
                $viewModel->setTemplate('leaders-linked/performance-evaluation-evaluations/index.phtml');
204
                $viewModel->setVariables([
205
                    'form' => $form,
206
                ]);
207
 
208
                return $viewModel;
209
            }
210
        } else {
211
            return new JsonModel([
212
                'success' => false,
213
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
214
            ]);
7897 eleazar 215
 
1384 efrain 216
        }
7897 eleazar 217
        } catch (\Throwable $e) {
218
            $e->getMessage();
219
            return new JsonModel([
220
                'success' => false,
221
                'data' => $e
222
            ]);
223
        }
1384 efrain 224
    }
225
 
226
    public function addAction() {
227
        $request = $this->getRequest();
228
 
229
        $currentUserPlugin = $this->plugin('currentUserPlugin');
230
        $currentUser = $currentUserPlugin->getUser();
231
        $currentCompany = $currentUserPlugin->getCompany();
232
 
233
        $request = $this->getRequest();
234
 
235
 
236
        if ($request->isPost()) {
237
            $dataPost = $request->getPost()->toArray();
238
            $form = new  PerformanceEvaluationEvaluationForm($this->adapter, $currentCompany->id);
239
            $form->setData($dataPost);
240
 
241
            if($form->isValid()) {
242
                $dataPost = (array) $form->getData();
243
 
244
                $form_id = $dataPost['form_id'];
245
                $user_id = $dataPost['supervisor_id'];
246
                $dt = \DateTime::createFromFormat('d/m/Y', $dataPost['last_date']);
247
                $last_date = $dt->format('Y-m-d');
248
 
249
                $formMapper = CompanyPerformanceEvaluationFormMapper::getInstance($this->adapter);
250
                $form = $formMapper->fetchOneByUuid($form_id);
251
                if (!$form) {
252
                    return new JsonModel([
253
                        'success' => true,
254
                        'data' => 'ERROR_FORM_NOT_FOUND'
255
                    ]);
256
                }
257
 
258
                if ($form->company_id != $currentCompany->id) {
259
                    return new JsonModel([
260
                        'success' => true,
261
                        'data' => 'ERROR_UNAUTHORIZED'
262
                    ]);
263
                }
264
 
265
 
266
                $userMapper = UserMapper::getInstance($this->adapter);
267
                $user = $userMapper->fetchOneByUuid($user_id);
268
 
269
                if (!$user) {
270
                    return new JsonModel([
271
                        'success' => false,
272
                        'data' => 'ERROR_USER_NOT_FOUND'
273
                    ]);
274
                }
275
 
276
 
277
 
278
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
279
                $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($form->company_id, $user->id);
280
                if (!$companyUser) {
281
                    return new JsonModel([
282
                        'success' => false,
283
                        'data' => 'ERROR_UNAUTHORIZED'
284
                    ]);
285
                }
286
 
287
 
288
                $test = new CompanyPerformanceEvaluationTest();
289
                $test->company_id = $form->company_id;
290
                $test->form_id = $form->id;
291
                $test->supervisor_id = $user->id;
292
                $test->last_date = $last_date;
293
 
294
 
295
                $testMapper = CompanyPerformanceEvaluationTestMapper::getInstance($this->adapter);
296
                $result = $testMapper->insert($test);
297
 
298
                if($result) {
299
                    $this->logger->info('Se agrego el Test de Performance ' . $form->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
300
 
301
                    $data = [
302
                        'success'   => true,
303
                        'data'   => 'LABEL_RECORD_ADDED'
304
                    ];
305
                } else {
306
                    $data = [
307
                        'success'   => false,
308
                        'data'      => $testMapper->getError()
309
                    ];
310
 
311
                }
312
 
313
                return new JsonModel($data);
314
 
315
            } else {
316
                $messages = [];
317
                $form_messages = (array) $form->getMessages();
318
                foreach($form_messages  as $fieldname => $field_messages)
319
                {
320
 
321
                    $messages[$fieldname] = array_values($field_messages);
322
                }
323
 
324
                return new JsonModel([
325
                    'success'   => false,
326
                    'data'   => $messages
327
                ]);
328
            }
329
 
330
 
331
 
332
        }
333
 
334
        return new JsonModel([
335
            'success' => false,
336
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
337
        ]);
338
    }
339
 
340
    public function editAction() {
341
        $request = $this->getRequest();
342
 
343
        $currentUserPlugin = $this->plugin('currentUserPlugin');
344
        $currentUser = $currentUserPlugin->getUser();
345
        $currentCompany = $currentUserPlugin->getCompany();
346
 
347
        $request = $this->getRequest();
348
        $id = $this->params()->fromRoute('id');
349
 
350
        $formTestMapper = CompanyPerformanceEvaluationTestMapper::getInstance($this->adapter);
351
        $formTest =  $formTestMapper->fetchOneByUuid($id);
7785 eleazar 352
 
1384 efrain 353
        if (!$formTest) {
354
            return new JsonModel([
355
                'success' => true,
356
                'data' => 'ERROR_RECORD_NOT_FOUND'
357
            ]);
358
        }
359
 
360
        if ($formTest->company_id != $currentCompany->id) {
361
            return new JsonModel([
362
                'success' => true,
363
                'data' => 'ERROR_UNAUTHORIZED'
364
            ]);
365
        }
366
 
367
 
368
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
369
        $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($formTest->company_id, $currentUser->id);
370
        if (!$companyUser) {
371
            return new JsonModel([
372
                'success' => false,
373
                'data' => 'ERROR_UNAUTHORIZED'
374
            ]);
375
        }
376
 
377
        if ($request->isGet()) {
378
 
379
            $dt = \DateTime::createFromFormat('Y-m-d', $formTest->last_date);
380
 
381
            $formMapper = CompanyPerformanceEvaluationFormMapper::getInstance($this->adapter);
382
            $form = $formMapper->fetchOne($formTest->form_id);
383
 
384
            $userMapper = UserMapper::getInstance($this->adapter);
7785 eleazar 385
            $user = $userMapper->fetchOne($formTest->supervisor_id);
1384 efrain 386
 
387
            $data = [
388
                'success'   => true,
389
                'data'   => [
390
                    'last_date' => $dt->format('d/m/Y'),
391
                    'form' => $form->uuid,
392
                    'supervisor' => $user->uuid,
393
                ]
394
            ];
395
 
396
            return new JsonModel($data);
397
 
398
 
399
 
400
        } else if ($request->isPost()) {
401
 
402
 
403
            $dataPost = $request->getPost()->toArray();
404
            $form = new  PerformanceEvaluationEvaluationForm($this->adapter, $currentCompany->id);
405
            $form->setData($dataPost);
406
 
407
            if($form->isValid()) {
408
                $dataPost = (array) $form->getData();
409
 
410
                $form_id = $dataPost['form_id'];
411
                $user_id = $dataPost['supervisor_id'];
412
                $dt = \DateTime::createFromFormat('d/m/Y', $dataPost['last_date']);
413
                $last_date = $dt->format('Y-m-d');
414
 
415
                $formMapper = CompanyPerformanceEvaluationFormMapper::getInstance($this->adapter);
416
                $form = $formMapper->fetchOneByUuid($form_id);
417
                if (!$form) {
418
                    return new JsonModel([
419
                        'success' => true,
420
                        'data' => 'ERROR_FORM_NOT_FOUND'
421
                    ]);
422
                }
423
 
424
                if ($form->company_id != $currentCompany->id) {
425
                    return new JsonModel([
426
                        'success' => true,
427
                        'data' => 'ERROR_UNAUTHORIZED'
428
                    ]);
429
                }
430
 
431
 
432
                $userMapper = UserMapper::getInstance($this->adapter);
433
                $user = $userMapper->fetchOneByUuid($user_id);
434
 
435
                if (!$user) {
436
                    return new JsonModel([
437
                        'success' => false,
438
                        'data' => 'ERROR_USER_NOT_FOUND'
439
                    ]);
440
                }
441
 
442
 
443
 
444
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
445
                $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($form->company_id, $user->id);
446
                if (!$companyUser) {
447
                    return new JsonModel([
448
                        'success' => false,
449
                        'data' => 'ERROR_UNAUTHORIZED'
450
                    ]);
451
                }
452
 
453
                $formTest->supervisor_id = $user->id;
454
                $formTest->last_date = $last_date;
455
 
456
                $testMapper = CompanyPerformanceEvaluationTestMapper::getInstance($this->adapter);
457
                $result = $testMapper->update($formTest);
458
 
459
                if($result) {
460
                    $this->logger->info('Se actualizo el Test de Performance ' . $form->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
461
 
462
                    $data = [
463
                        'success'   => true,
464
                        'data'   => 'LABEL_RECORD_UPDATED'
465
                    ];
466
                } else {
467
                    $data = [
468
                        'success'   => false,
469
                        'data'      => $testMapper->getError()
470
                    ];
471
 
472
                }
473
 
474
                return new JsonModel($data);
475
 
476
            } else {
477
                $messages = [];
478
                $form_messages = (array) $form->getMessages();
479
                foreach($form_messages  as $fieldname => $field_messages)
480
                {
481
 
482
                    $messages[$fieldname] = array_values($field_messages);
483
                }
484
 
485
                return new JsonModel([
486
                    'success'   => false,
487
                    'data'   => $messages
488
                ]);
489
            }
490
        }
491
 
492
        return new JsonModel([
493
            'success' => false,
494
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
495
        ]);
496
    }
497
 
498
    public function deleteAction() {
499
        $request = $this->getRequest();
500
 
501
        $currentUserPlugin = $this->plugin('currentUserPlugin');
502
        $currentUser = $currentUserPlugin->getUser();
503
        $currentCompany = $currentUserPlugin->getCompany();
504
 
505
        $request = $this->getRequest();
506
        $id = $this->params()->fromRoute('id');
507
 
508
        $formTestMapper = CompanyPerformanceEvaluationTestMapper::getInstance($this->adapter);
509
        $formTest =  $formTestMapper->fetchOneByUuid($id);
510
        if (!$formTest) {
511
            return new JsonModel([
512
                'success' => true,
513
                'data' => 'ERROR_RECORD_NOT_FOUND'
514
            ]);
515
        }
516
 
517
        if ($formTest->company_id != $currentCompany->id) {
518
            return new JsonModel([
519
                'success' => true,
520
                'data' => 'ERROR_UNAUTHORIZED'
521
            ]);
522
        }
523
 
524
 
525
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
526
        $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($formTest->company_id, $currentUser->id);
527
        if (!$companyUser) {
528
            return new JsonModel([
529
                'success' => false,
530
                'data' => 'ERROR_UNAUTHORIZED'
531
            ]);
532
        }
533
 
534
        if ($request->isPost()) {
535
 
536
 
537
            $result = $formTestMapper->delete($formTest);
538
 
539
            if ($result) {
540
 
541
                return new JsonModel([
542
                    'success' => true,
543
                    'data' => 'LABEL_PERFORMANCE_TEST_DELETED',
544
                ]);
545
            } else {
546
 
547
                return new JsonModel([
548
                    'success' => false,
549
                    'data' => $formTestMapper->getError()
550
                ]);
551
            }
552
        }
553
 
554
        return new JsonModel([
555
            'success' => false,
556
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
557
        ]);
558
    }
559
 
560
}