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