Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16766 | Rev 16769 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
16766 efrain 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Db\Adapter\AdapterInterface;
16768 efrain 7
 
16766 efrain 8
use Laminas\Mvc\Controller\AbstractActionController;
9
use Laminas\Log\LoggerInterface;
10
use Laminas\View\Model\ViewModel;
11
use Laminas\View\Model\JsonModel;
12
use LeadersLinked\Model\PlanningTask;
13
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
14
use LeadersLinked\Form\Planning\PlanningTaskForm;
15
use LeadersLinked\Library\Functions;
16
use LeadersLinked\Mapper\PlanningTaskMapper;
17
use LeadersLinked\Model\PlanningTaskMembers;
18
use LeadersLinked\Mapper\PlanningTaskMembersMapper;
19
use LeadersLinked\Mapper\PlanningGoalsMapper;
20
use LeadersLinked\Mapper\PlanningObjectivesMapper;
21
use LeadersLinked\Mapper\CompanyUserMapper;
22
use LeadersLinked\Mapper\UserMapper;
23
 
24
class PlanningTaskController extends AbstractActionController
25
{
26
    /**
27
     *
28
     * @var AdapterInterface
29
     */
30
    private $adapter;
31
 
32
    /**
33
     *
34
     * @var  LoggerInterface
35
     */
36
    private $logger;
37
 
38
    /**
39
     *
40
     * @var array
41
     */
42
    private $config;
43
 
44
    /**
45
     *
46
     * @param AdapterInterface $adapter
47
     * @param LoggerInterface $logger
48
     * @param array $config
49
     */
16768 efrain 50
    public function __construct($adapter, $logger, $config)
16766 efrain 51
    {
16768 efrain 52
        $this->adapter = $adapter;
53
        $this->logger = $logger;
54
        $this->config = $config;
16766 efrain 55
    }
56
 
57
 
58
 
59
    public function indexAction()
60
    {
61
        $currentUserPlugin = $this->plugin('currentUserPlugin');
62
        $currentUser = $currentUserPlugin->getUser();
63
        $currentCompany = $currentUserPlugin->getCompany();
64
 
65
 
66
        $objective_uuid = $this->params()->fromRoute('objective_id');
67
        $goal_uuid= $this->params()->fromRoute('goal_id');
68
        $request = $this->getRequest();
69
 
70
        if($request->isGet()) {
71
 
72
 
73
            $headers  = $request->getHeaders();
74
 
75
            $isJson = false;
76
            if($headers->has('Accept')) {
77
                $accept = $headers->get('Accept');
78
 
79
                $prioritized = $accept->getPrioritized();
80
 
81
                foreach($prioritized as $key => $value) {
82
                    $raw = trim($value->getRaw());
83
 
84
                    if(!$isJson) {
85
                        $isJson = strpos($raw, 'json');
86
                    }
87
 
88
                }
89
            }
90
 
91
            if($isJson) {
92
 
93
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
94
                $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'planning/objectives/goals/task/edit');
95
                $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'planning/objectives/goals/task/delete');
96
                $allowView = $acl->isAllowed($currentUser->usertype_id, 'planning/objectives/goals/task/view');
97
 
98
                $search = $this->params()->fromQuery('search', []);
99
                $search = empty($search['value']) ? '' :  Functions::sanitizeFilterString($search['value']);
100
 
101
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
102
                $page               = (intval($this->params()->fromQuery('start', 1), 10)/$records_x_page)+1;
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(Functions::sanitizeFilterString($order[0]['dir']));
106
 
107
                $fields =  ['title'];
108
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'title';
109
 
110
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
111
                    $order_direction = 'ASC';
112
                }
113
 
114
                $planningObjectivesMapper = PlanningObjectivesMapper::getInstance($this->adapter);
115
                $objective = $planningObjectivesMapper->fetchOneByUuid($objective_uuid);
116
 
117
                if (!$objective) {
118
                    $data = [
119
                        'success' => false,
120
                        'data' => 'ERROR_RECORD_NOT_FOUND'
121
                    ];
122
 
123
 
124
                        return new JsonModel($data);
125
 
126
                }else{
127
                    if($objective->company_id==$currentCompany->id){
128
                        $planningGoalsMapper = PlanningGoalsMapper::getInstance($this->adapter);
129
                        $goals = $planningGoalsMapper->fetchOneByUuid($goal_uuid);
130
 
131
                        if(!$goals){
132
                            $data = [
133
                                'success' => false,
134
                                'data' => 'ERROR_RECORD_NOT_FOUND'
135
                            ];
136
 
137
 
138
                                return new JsonModel($data);
139
                        }
140
                    }else{
141
                        $data = [
142
                            'success' => false,
143
                            'data' => 'ERROR_UNAUTHORIZED',
144
                        ];
145
 
146
                            return new JsonModel($data);
147
                    }
148
 
149
 
150
 
151
                }
152
 
153
 
154
                $planningTaskMapper = PlanningTaskMapper::getInstance($this->adapter);
155
                $paginator = $planningTaskMapper->fetchAllDataTable($search, $page, $records_x_page, $order_field, $order_direction, $goals->id);
156
 
157
                $items = [];
158
 
159
                $records = $paginator->getCurrentItems();
160
 
161
 
162
                foreach($records as $record)
163
                {
164
 
165
                    $item = [
166
                        'title' => $record->title,
167
                        'description' => $record->description,
168
                        'progress'=> $record->indicator,
169
                        'cost'=> $record->cost,
170
                        'status' => $record->status,
171
                        'actions' => [
172
                            'link_edit' => $allowEdit ? $this->url()->fromRoute('planning/objectives/goals/task/edit', ['objective_id' => $objective_uuid,'goal_id' => $goal_uuid,'id' => $record->uuid]) : '',
173
                            'link_delete' => $allowDelete ? $this->url()->fromRoute('planning/objectives/goals/task/delete', ['objective_id' => $objective_uuid,'goal_id' => $goal_uuid,'id' => $record->uuid]) : ''
174
                            ]
175
 
176
                    ];
177
                    array_push($items, $item);
178
                }
179
 
180
                $recordsTask = $planningTaskMapper->fetchAll($goals->id);
181
 
182
 
183
                $costGoals=0;
184
                $indicatorGoals=0;
185
 
186
                foreach($recordsTask as $record)
187
                {
188
                    $indicatorGoals=$indicatorGoals+$record->indicator;
189
                    $costGoals=$costGoals+$record->cost;
190
                }
191
                $countRecordsTask = count($recordsTask);
192
                if($countRecordsTask >0){
193
 
194
                    $indicatorGoals=round($indicatorGoals/$countRecordsTask, 2);
195
                }else{
196
                    $indicatorGoals=-1;
197
                }
198
 
199
 
200
 
201
                return new JsonModel([
202
                    'success' => true,
203
                    'data' => [
204
                        'items' => $items,
205
                        'total' => $paginator->getTotalItemCount(),
206
                        'goals' => [
207
                            'titleGoals' =>$goals->title,
208
                            'descriptionGoals' =>$goals->description,
209
                            'costGoals'=>'$'.$costGoals,
210
                            'indicatorGoals'=> $indicatorGoals,
211
                            'statusGoals'=> $goals->status=='a'?'LABEL_ACTIVE':'LABEL_INACTIVE',
212
 
213
                        ]
214
                    ]
215
                ]);
216
            } else  {
217
                $formAdd = new PlanningTaskForm($this->adapter, $currentCompany->id);
218
                $this->layout()->setTemplate('layout/layout-backend');
219
                $viewModel = new ViewModel();
220
                $viewModel->setTemplate('leaders-linked/planning-tasks/index.phtml');
221
                $viewModel->setVariables([
222
                    'formAdd' => $formAdd,
223
                    'objective_uuid'=> $objective_uuid,
224
                    'goal_uuid'=> $goal_uuid,
225
 
226
 
227
                ]);
228
                return $viewModel ;
229
            }
230
        } else {
231
            return new JsonModel([
232
                'success' => false,
233
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
234
            ]);
235
        }
236
    }
237
    public function addAction()
238
    {
239
      $currentUserPlugin = $this->plugin('currentUserPlugin');
240
        $currentUser = $currentUserPlugin->getUser();
241
        $currentCompany = $currentUserPlugin->getCompany();
242
        $objective_uuid = $this->params()->fromRoute('objective_id');
243
        $goal_uuid = $this->params()->fromRoute('goal_id');
244
        $request = $this->getRequest();
245
        $planningObjectivesMapper = PlanningObjectivesMapper::getInstance($this->adapter);
246
        $objective = $planningObjectivesMapper->fetchOneByUuid($objective_uuid);
247
 
248
        if (!$objective) {
249
            $data = [
250
                'success' => false,
251
                'data' => 'ERROR_RECORD_NOT_FOUND'
252
            ];
253
 
254
 
255
                return new JsonModel($data);
256
 
257
        }else{
258
            if($objective->company_id==$currentCompany->id){
259
                $planningGoalsMapper = PlanningGoalsMapper::getInstance($this->adapter);
260
                $goals = $planningGoalsMapper->fetchOneByUuid($goal_uuid);
261
 
262
                if(!$goals){
263
                    $data = [
264
                        'success' => false,
265
                        'data' => 'ERROR_RECORD_NOT_FOUND'
266
                    ];
267
 
268
 
269
                        return new JsonModel($data);
270
                }
271
            }else{
272
                $data = [
273
                    'success' => false,
274
                    'data' => 'ERROR_UNAUTHORIZED',
275
                ];
276
 
277
                    return new JsonModel($data);
278
            }
279
 
280
        }
281
        if($request->isPost()) {
282
 
283
            $form = new  PlanningTaskForm($this->adapter, $currentCompany->id);
284
            $dataPost = $request->getPost()->toArray();
285
            $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : PlanningTask::STATUS_INACTIVE;
286
            if($dataPost['indicator']!=100){
287
                $dataPost['evaluation']='';
288
                $dataPost['detour']='';
289
            }
290
            $form->setData($dataPost);
291
 
292
            if($form->isValid()) {
293
 
294
 
295
 
296
                $dataPost = (array) $form->getData();
297
                $dataPost['goal_id']=$goals->id;
298
 
299
                $hydrator = new ObjectPropertyHydrator();
300
                $planningTask = new PlanningTask();
301
                $hydrator->hydrate($dataPost, $planningTask);
302
 
303
                $planningTaskMapper = PlanningTaskMapper::getInstance($this->adapter);
304
                $result = $planningTaskMapper->insert($planningTask);
305
 
306
 
307
                if($result) {
308
                    $userMapper = UserMapper::getInstance($this->adapter);
309
 
310
                    foreach( $dataPost['who'] as $record2){
311
                        $PlanningTaskMember = new PlanningTaskMembers();
312
                        $datosUser = $userMapper->fetchOneByUuid($record2);
313
                        $PlanningTaskMember->task_id = $planningTask->id;
314
                        $PlanningTaskMember->user_id = $datosUser->id;
315
                        $PlanningTaskMember->status = PlanningTaskMembers::STATUS_ACTIVE;
316
                        $PlanningTaskMemberMapper = PlanningTaskMembersMapper::getInstance($this->adapter);
317
                        $PlanningTaskMemberMapper->insert($PlanningTaskMember);
318
                    }
319
 
320
 
321
                    $this->logger->info('Se agrego la tarea ' . $planningTask->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
322
 
323
                    $data = [
324
                        'success'   => true,
325
                        'data'   => 'LABEL_RECORD_ADDED'
326
                    ];
327
                } else {
328
                    $data = [
329
                        'success'   => false,
330
                        'data'      => $planningTaskMapper->getError()
331
                    ];
332
 
333
                }
334
 
335
                return new JsonModel($data);
336
 
337
            } else {
338
                $messages = [];
339
                $form_messages = (array) $form->getMessages();
340
                foreach($form_messages  as $fieldname => $field_messages)
341
                {
342
 
343
                    $messages[$fieldname] = array_values($field_messages);
344
                }
345
 
346
                return new JsonModel([
347
                    'success'   => false,
348
                    'data'   => $messages
349
                ]);
350
            }
351
 
352
        }else if ($request->isGet()) {
353
            $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
354
            $userMapper = UserMapper::getInstance($this->adapter);
355
            $datosCompanyUser = $companyUserMapper->fetchAllByCompanyId($currentCompany->id);
356
 
357
            $users=[];
358
 
359
            foreach($datosCompanyUser as $record){
360
                $datosUser = $userMapper->fetchOne($record->user_id);
361
 
362
                    $user=[
363
                        'uuid'=>$datosUser->uuid,
364
                        'email'=>$datosUser->email,
365
                        'first_name'=>$datosUser->first_name,
366
                        'last_name'=>$datosUser->last_name,
367
 
368
                    ];
369
                    array_push($users, $user);
370
 
371
            }
372
 
373
            return new JsonModel([
374
                'success' => true,
375
                'data' => $users
376
 
377
            ]);
378
        } else {
379
            $data = [
380
                'success' => false,
381
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
382
            ];
383
 
384
            return new JsonModel($data);
385
        }
386
 
387
        return new JsonModel($data);
388
 
389
    }
390
 
391
 
392
 
393
     public function editAction(){
394
 
395
 
396
        $currentUserPlugin = $this->plugin('currentUserPlugin');
397
        $currentUser = $currentUserPlugin->getUser();
398
        $currentCompany = $currentUserPlugin->getCompany();
399
        $request = $this->getRequest();
400
        $uuid = $this->params()->fromRoute('id');
401
 
402
 
403
        if(!$uuid) {
404
            $data = [
405
                'success'   => false,
406
                'data'   => 'ERROR_INVALID_PARAMETER'
407
            ];
408
 
409
            return new JsonModel($data);
410
        }
411
 
412
        $objective_uuid = $this->params()->fromRoute('objective_id');
413
        $goal_uuid = $this->params()->fromRoute('goal_id');
414
        $currentUserPlugin = $this->plugin('currentUserPlugin');
415
        $currentCompany = $currentUserPlugin->getCompany();
416
        $planningObjectivesMapper = PlanningObjectivesMapper::getInstance($this->adapter);
417
        $objective = $planningObjectivesMapper->fetchOneByUuid($objective_uuid);
418
 
419
        if (!$objective) {
420
            $data = [
421
                'success' => false,
422
                'data' => 'ERROR_RECORD_NOT_FOUND'
423
            ];
424
 
425
 
426
                return new JsonModel($data);
427
 
428
        }else{
429
            if($objective->company_id==$currentCompany->id){
430
                $planningGoalsMapper = PlanningGoalsMapper::getInstance($this->adapter);
431
                $goals = $planningGoalsMapper->fetchOneByUuid($goal_uuid);
432
 
433
                if(!$goals){
434
                    $data = [
435
                        'success' => false,
436
                        'data' => 'ERROR_RECORD_NOT_FOUND'
437
                    ];
438
 
439
 
440
                        return new JsonModel($data);
441
                }
442
            }else{
443
                $data = [
444
                    'success' => false,
445
                    'data' => 'ERROR_UNAUTHORIZED',
446
                ];
447
 
448
                    return new JsonModel($data);
449
            }
450
 
451
 
452
 
453
        }
454
        $planningTaskMapper = PlanningTaskMapper::getInstance($this->adapter);
455
        $task = $planningTaskMapper->fetchOneByUuid($uuid);
456
 
457
        if (!$task) {
458
            $data = [
459
                'success' => false,
460
                'data' => 'ERROR_RECORD_NOT_FOUND'
461
            ];
462
 
463
            return new JsonModel($data);
464
        }
465
 
466
 
467
        if($request->isPost()) {
468
            $form = new  PlanningTaskForm($this->adapter, $currentCompany->id);
469
            $dataPost = $request->getPost()->toArray();
470
            $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : PlanningTask::STATUS_INACTIVE;
471
            $form->setData($dataPost);
472
 
473
            if($form->isValid()) {
474
                $dataPost = (array) $form->getData();
475
 
476
                $hydrator = new ObjectPropertyHydrator();
477
                $hydrator->hydrate($dataPost, $task);
478
                $result = $planningTaskMapper->update($task);
479
 
480
                if($result) {
481
 
482
                    $userMapper = UserMapper::getInstance($this->adapter);
483
                    $PlanningTaskMemberMapper = PlanningTaskMembersMapper::getInstance($this->adapter);
484
                    $PlanningTaskMemberMapper->dissableMembersTask($task->id);
485
 
486
                    foreach( $dataPost['who'] as $record2){
487
                        $PlanningTaskMember = new PlanningTaskMembers();
488
                        $datosUser = $userMapper->fetchOneByUuid($record2);
489
                        $PlanningTaskMember->task_id = $task->id;
490
                        $PlanningTaskMember->user_id = $datosUser->id;
491
                        $PlanningTaskMember->status = PlanningTaskMembers::STATUS_ACTIVE;
492
                        $PlanningTaskMemberMapper->insert($PlanningTaskMember);
493
                    }
494
 
495
 
496
 
497
                    $this->logger->info('Se actualizo la tarea ' . $task->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
498
 
499
                    $data = [
500
                        'success' => true,
501
                        'data' => 'LABEL_RECORD_UPDATED'
502
                    ];
503
                } else {
504
                    $data = [
505
                        'success'   => false,
506
                        'data'      => $planningTaskMapper->getError()
507
                    ];
508
                }
509
 
510
                return new JsonModel($data);
511
 
512
            } else {
513
                $messages = [];
514
                $form_messages = (array) $form->getMessages();
515
                foreach($form_messages  as $fieldname => $field_messages)
516
                {
517
                    $messages[$fieldname] = array_values($field_messages);
518
                }
519
 
520
                return new JsonModel([
521
                    'success'   => false,
522
                    'data'   => $messages
523
                ]);
524
            }
525
        }else if ($request->isGet()) {
526
            $hydrator = new ObjectPropertyHydrator();
527
            $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
528
            $userMapper = UserMapper::getInstance($this->adapter);
529
            $datosCompanyUser = $companyUserMapper->fetchAllByCompanyId($currentCompany->id);
530
 
531
            $allUsers=[];
532
 
533
            foreach($datosCompanyUser as $record){
534
                $datosUser = $userMapper->fetchOne($record->user_id);
535
 
536
                    $allUser=[
537
                        'uuid'=>$datosUser->uuid,
538
                        'email'=>$datosUser->email,
539
                        'first_name'=>$datosUser->first_name,
540
                        'last_name'=>$datosUser->last_name,
541
 
542
                    ];
543
                    array_push($allUsers, $allUser);
544
 
545
            }
546
            $PlanningTaskMemberMapper = PlanningTaskMembersMapper::getInstance($this->adapter);
547
            $datosUsuarios = $PlanningTaskMemberMapper->fetchAll($task->id);
548
            $users=[];
549
            foreach($datosUsuarios as $record){
550
                $datosUser = $userMapper->fetchOne($record->user_id);
551
 
552
                    $user=[
553
                        'uuid'=>$datosUser->uuid,
554
                    ];
555
                    array_push($users, $user);
556
            }
557
 
558
            $data = [
559
                'success' => true,
560
                'data' => $hydrator->extract($task),
561
                'all_users'=> $allUsers,
562
                'users'=> $users
563
            ];
564
 
565
            return new JsonModel($data);
566
        } else {
567
            $data = [
568
                'success' => false,
569
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
570
            ];
571
 
572
            return new JsonModel($data);
573
        }
574
 
575
        return new JsonModel($data);
576
 
577
    }
578
 
579
 
580
 
581
 
582
    public function deleteAction(){
583
        $currentUserPlugin = $this->plugin('currentUserPlugin');
584
        $currentCompany = $currentUserPlugin->getCompany();
585
        $currentUser = $currentUserPlugin->getUser();
586
 
587
        $request = $this->getRequest();
588
        $uuid = $this->params()->fromRoute('id');
589
 
590
 
591
        if (!$uuid) {
592
            $data = [
593
                'success' => false,
594
                'data' => 'ERROR_INVALID_PARAMETER'
595
            ];
596
 
597
            return new JsonModel($data);
598
        }
599
        $objective_uuid = $this->params()->fromRoute('objective_id');
600
        $goal_uuid = $this->params()->fromRoute('goal_id');
601
        $currentUserPlugin = $this->plugin('currentUserPlugin');
602
        $currentCompany = $currentUserPlugin->getCompany();
603
        $planningObjectivesMapper = PlanningObjectivesMapper::getInstance($this->adapter);
604
        $objective = $planningObjectivesMapper->fetchOneByUuid($objective_uuid);
605
 
606
        if (!$objective) {
607
            $data = [
608
                'success' => false,
609
                'data' => 'ERROR_RECORD_NOT_FOUND'
610
            ];
611
                return new JsonModel($data);
612
 
613
        }else{
614
            if($objective->company_id==$currentCompany->id){
615
                $planningGoalsMapper = PlanningGoalsMapper::getInstance($this->adapter);
616
                $goals = $planningGoalsMapper->fetchOneByUuid($goal_uuid);
617
 
618
                if(!$goals){
619
                    $data = [
620
                        'success' => false,
621
                        'data' => 'ERROR_RECORD_NOT_FOUND'
622
                    ];
623
 
624
 
625
                        return new JsonModel($data);
626
                }
627
            }else{
628
                $data = [
629
                    'success' => false,
630
                    'data' => 'ERROR_UNAUTHORIZED',
631
                ];
632
 
633
                    return new JsonModel($data);
634
            }
635
 
636
        }
637
        $planningTaskMapper = PlanningTaskMapper::getInstance($this->adapter);
638
        $task = $planningTaskMapper->fetchOneByUuid($uuid);
639
 
640
        if (!$task) {
641
            $data = [
642
                'success' => false,
643
                'data' => 'ERROR_RECORD_NOT_FOUND'
644
            ];
645
 
646
            return new JsonModel($data);
647
        }
648
 
649
 
650
        if ($request->isPost()) {
651
 
652
 
653
            $result = $planningTaskMapper->delete($task->id);
654
            if ($result) {
655
                $this->logger->info('Se borro la tarea con el titulo ' . $task->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
656
 
657
                $data = [
658
                    'success' => true,
659
                    'data' => 'LABEL_RECORD_DELETED'
660
                ];
661
            } else {
662
 
663
                $data = [
664
                    'success' => false,
665
                    'data' => $planningTaskMapper->getError()
666
                ];
667
 
668
                return new JsonModel($data);
669
            }
670
        } else {
671
            $data = [
672
                'success' => false,
673
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
674
            ];
675
 
676
            return new JsonModel($data);
677
        }
678
 
679
        return new JsonModel($data);
680
    }
681
 
682
 
683
 
684
 
685
}