Proyectos de Subversion LeadersLinked - Backend

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
12737 nelberth 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Db\Adapter\AdapterInterface;
16768 efrain 7
 
12737 nelberth 8
use Laminas\Mvc\Controller\AbstractActionController;
9
use Laminas\Log\LoggerInterface;
10
use Laminas\View\Model\JsonModel;
11
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
12
use LeadersLinked\Library\Functions;
12748 nelberth 13
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsMapper;
14
use LeadersLinked\Mapper\HighPerformanceTeamsGroupsMembersMapper;
15
use LeadersLinked\Model\HighPerformanceTeamsGroupsMembers;
16
use LeadersLinked\Model\HighPerformanceTeamsGroups;
16768 efrain 17
 
12737 nelberth 18
class HighPerformanceTeamsGroupsViewGoalsController extends AbstractActionController
19
{
20
    /**
21
     *
22
     * @var AdapterInterface
23
     */
24
    private $adapter;
25
 
26
    /**
27
     *
28
     * @var  LoggerInterface
29
     */
30
    private $logger;
31
 
32
    /**
33
     *
34
     * @var array
35
     */
36
    private $config;
37
 
38
    /**
39
     *
40
     * @param AdapterInterface $adapter
41
     * @param LoggerInterface $logger
42
     * @param array $config
43
     */
16768 efrain 44
    public function __construct($adapter, $logger, $config)
12737 nelberth 45
    {
16768 efrain 46
        $this->adapter = $adapter;
47
        $this->logger = $logger;
48
        $this->config = $config;
12737 nelberth 49
    }
50
   /*
51
  public function idObjective($uuid){
52
        $currentUserPlugin = $this->plugin('currentUserPlugin');
53
        $currentCompany = $currentUserPlugin->getCompany();
54
        $planningObjectivesAndGoalsObjectivesMapper = PlanningObjectivesAndGoalsObjectivesMapper::getInstance($this->adapter);
55
        $objectives = $planningObjectivesAndGoalsObjectivesMapper->fetchOneByUuid($uuid);
56
 
57
        if (!$objectives) {
58
            return false;
59
 
60
        }else{
61
            if($objectives->company_id==$currentCompany->id){
62
                return $objectives;
63
            }else{
64
                return false;
65
            }
66
 
67
 
68
 
69
        }
70
 
71
 
72
   }*/
73
 
74
 
75
    public function indexAction()
76
    {
12741 nelberth 77
 
12737 nelberth 78
        $objective_uuid = $this->params()->fromRoute('objective_id');
79
        if(!$objective_uuid) {
80
            $data = [
81
                'success'   => false,
82
                'data'   => 'ERROR_INVALID_PARAMETER'
83
            ];
84
 
85
            return new JsonModel($data);
86
        }
87
 
88
        $request = $this->getRequest();
89
 
90
        if($request->isGet()) {
91
 
92
 
93
            $headers  = $request->getHeaders();
94
 
95
            $isJson = false;
96
            if($headers->has('Accept')) {
97
                $accept = $headers->get('Accept');
98
 
99
                $prioritized = $accept->getPrioritized();
100
 
101
                foreach($prioritized as $key => $value) {
102
                    $raw = trim($value->getRaw());
103
 
104
                    if(!$isJson) {
105
                        $isJson = strpos($raw, 'json');
106
                    }
107
 
108
                }
109
            }
110
 
111
            if($isJson) {
112
                $currentUserPlugin = $this->plugin('currentUserPlugin');
113
                $currentUser = $currentUserPlugin->getUser();
114
                $currentCompany = $currentUserPlugin->getCompany();
115
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
12746 nelberth 116
 
117
                $group_uuid = $this->params()->fromRoute('group_id');
118
                if(!$group_uuid) {
119
                    $data = [
120
                        'success'   => false,
121
                        'data'   => 'ERROR_INVALID_PARAMETER'
122
                    ];
123
 
124
                    return new JsonModel($data);
125
                }
126
 
127
                $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
128
                $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
129
 
130
                if (!$highPerformanceTeamsGroups) {
131
                    $data = [
132
                        'success' => false,
133
                        'data' => 'ERROR_RECORD_NOT_FOUND'
134
                    ];
135
 
136
                    return new JsonModel($data);
137
                }
138
                if($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
139
 
140
                    return new JsonModel([
141
                        'success' => false,
142
                        'data' => 'ERROR_UNAUTHORIZED'
143
                    ]);
144
 
145
                }
146
                $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
147
                $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
148
                if(!$highPerformanceTeamsGroupsMember) {
149
                    return new JsonModel([
150
                        'success' => false,
151
                        'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
152
                    ]);
153
                }
154
                if(!($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
155
                    return new JsonModel([
156
                        'success' => false,
157
                        'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
158
                    ]);
159
                }
160
 
161
 
12750 nelberth 162
                $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'high-performance-teams/groups/view/objectives/goals/edit');
163
                $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'high-performance-teams/groups/view/objectives/goals/delete');
164
                $allowGoals = $acl->isAllowed($currentUser->usertype_id, 'high-performance-teams/groups/view/objectives/goals/task');
12762 nelberth 165
                $allowAdd = $acl->isAllowed($currentUser->usertype_id, 'high-performance-teams/groups/view/objectives/goals/add');
12737 nelberth 166
 
167
                $search = $this->params()->fromQuery('search', []);
16766 efrain 168
                $search = empty($search['value']) ? '' :  Functions::sanitizeFilterString($search['value']);
12737 nelberth 169
 
170
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
171
                $page               = (intval($this->params()->fromQuery('start', 1), 10)/$records_x_page)+1;
172
                $order =  $this->params()->fromQuery('order', []);
173
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
16766 efrain 174
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(Functions::sanitizeFilterString($order[0]['dir']));
12737 nelberth 175
 
176
                $fields =  ['title'];
177
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'title';
178
 
179
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
180
                    $order_direction = 'ASC';
181
                }
182
 
183
                $planningObjectivesAndGoalsObjectivesMapper = PlanningObjectivesAndGoalsObjectivesMapper::getInstance($this->adapter);
184
                $objectives = $planningObjectivesAndGoalsObjectivesMapper->fetchOneByUuid($objective_uuid);
185
 
186
                if (!$objectives) {
187
                    $data = [
188
                        'success' => false,
189
                        'data' => 'ERROR_RECORD_NOT_FOUND'
190
                    ];
191
 
192
 
193
                        return new JsonModel($data);
194
                }
195
 
196
                if($objectives->company_id!=$currentCompany->id){
197
                        $data = [
198
                            'success' => false,
199
                            'data' => 'ERROR_UNAUTHORIZED',
200
                        ];
201
                        return new JsonModel($data);
202
                }
12750 nelberth 203
 
204
                if($objectives->high_performance_team_group_id !=$highPerformanceTeamsGroups->id){
205
                    $data = [
206
                        'success' => false,
207
                        'data' => 'ERROR_UNAUTHORIZED',
208
                    ];
209
                    return new JsonModel($data);
12923 nelberth 210
                }
12737 nelberth 211
 
212
 
213
                $planningObjectivesAndGoalsGoalsMapper = PlanningObjectivesAndGoalsGoalsMapper::getInstance($this->adapter);
214
                $paginator = $planningObjectivesAndGoalsGoalsMapper->fetchAllDataTable($search, $page, $records_x_page, $order_field, $order_direction, $objectives->id);
215
 
216
                $items = [];
217
 
218
                $records = $paginator->getCurrentItems();
219
                $planningObjectivesAndGoalsTaskMapper = PlanningObjectivesAndGoalsTaskMapper::getInstance($this->adapter);
220
                foreach($records as $record)
221
                {
222
 
223
                    $recordsTask = $planningObjectivesAndGoalsTaskMapper->fetchAll($record->id);
224
 
225
                    $costGoals=0;
226
                    $indicatorGoals=0;
227
                    foreach($recordsTask as $record2){
228
                        $indicatorGoals=$indicatorGoals+$record2->indicator;
229
                        $costGoals=$costGoals+$record2->cost;
230
                    }
231
                    $countRecordsTask = count($recordsTask);
232
                    if($countRecordsTask>0){
233
                        $indicatorGoals=round($indicatorGoals/$countRecordsTask, 2);
234
                    }else{
235
                        $indicatorGoals=-1;
236
                    }
237
 
238
                    $item = [
239
                        'title' => $record->title,
240
                        'description' => $record->description,
241
                        'progress'=>$indicatorGoals,
242
                        'cost' => $costGoals,
12762 nelberth 243
 
12737 nelberth 244
                        'status'=>$record->status,
245
                        'actions' => [
12750 nelberth 246
                            'link_edit' => $allowEdit ? $this->url()->fromRoute('high-performance-teams/groups/view/objectives/goals/edit', ['group_id'=>$highPerformanceTeamsGroups->uuid,'objective_id' => $objective_uuid,'id' => $record->uuid]) : '',
247
                            'link_delete' => $allowDelete ? $this->url()->fromRoute('high-performance-teams/groups/view/objectives/goals/delete', ['group_id'=>$highPerformanceTeamsGroups->uuid,'objective_id' => $objective_uuid,'id' => $record->uuid]) : '',
248
                            'link_goals' => $allowGoals ? $this->url()->fromRoute('high-performance-teams/groups/view/objectives/goals/task', ['group_id'=>$highPerformanceTeamsGroups->uuid,'objective_id' => $objective_uuid,'goal_id' => $record->uuid]) : ''
12737 nelberth 249
                        ]
250
 
251
                    ];
252
 
253
 
254
                    array_push($items, $item);
255
                }
256
 
257
                $recordsGoals = $planningObjectivesAndGoalsGoalsMapper->fetchAll($objectives->id);
258
 
259
                $costObjective=0;
260
                $indicatorObjective=0;
261
                $contador=0;
262
                $countRecordsGoals = count($recordsGoals);
263
                if($countRecordsGoals>0){
264
                    $planningObjectivesAndGoalsTaskMapper = PlanningObjectivesAndGoalsTaskMapper::getInstance($this->adapter);
265
 
266
                    foreach($recordsGoals as $record)
267
                    {
268
                        $recordsTask = $planningObjectivesAndGoalsTaskMapper->fetchAll($record->id);
269
 
270
                        $costGoals=0;
271
                        $indicatorGoals=0;
272
                        $countRecordsTask = count($recordsTask);
273
                        if($countRecordsTask>0){
274
                            foreach($recordsTask as $record2){
275
                                $indicatorGoals=$indicatorGoals+$record2->indicator;
276
                                $costGoals=$costGoals+$record2->cost;
277
                            }
278
                            $indicatorObjective=$indicatorObjective+($indicatorGoals/$countRecordsTask);
279
                            $costObjective=$costObjective+$costGoals;
280
                            $contador++;
281
                        }
282
                    }
283
                    if($indicatorObjective==0){
284
                        $indicatorObjective=(-1);
285
                    }else{
286
                        $indicatorObjective=round($indicatorObjective/$contador,2);
287
 
288
                    }
289
                }else{
290
                    $indicatorObjective=(-2);
291
                }
292
                $date='Sin fecha';
293
                if($objectives->date!=NULL){
294
                    $dt = \DateTime::createFromFormat('Y-m-d', $objectives->date);
295
                    $date =  $dt->format('d/m/Y');
296
                }
297
 
298
 
299
 
300
                return new JsonModel([
301
                    'success' => true,
302
                    'data' => [
303
                        'items' => $items,
304
                        'total' => $paginator->getTotalItemCount(),
305
                        'objective' => [
306
                            'titleObjective' =>$objectives->title,
307
                            'descriptionObjective' =>$objectives->description,
308
                            'dateObjective' =>$date,
309
                            'costObjective' =>'$'.$costObjective,
310
                            'indicatorObjective'=>$indicatorObjective,
12762 nelberth 311
                            'link_add'=>$allowAdd ? $this->url()->fromRoute('high-performance-teams/groups/view/objectives/goals/add', ['group_id'=>$highPerformanceTeamsGroups->uuid,'objective_id' => $objective_uuid]) : '',
12752 nelberth 312
                            'goBackObjective'=> $this->url()->fromRoute('high-performance-teams/groups/view/objectives', ['group_id'=>$highPerformanceTeamsGroups->uuid]),
12737 nelberth 313
                            'statusObjective'=>$objectives->status=='a'?'LABEL_ACTIVE':'LABEL_INACTIVE',
314
 
315
                        ]
316
                    ]
317
                ]);
12746 nelberth 318
            }
12737 nelberth 319
        } else {
320
            return new JsonModel([
321
                'success' => false,
322
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
323
            ]);
324
        }
325
    }
326
    public function addAction()
327
    {
328
      $currentUserPlugin = $this->plugin('currentUserPlugin');
329
        $currentUser = $currentUserPlugin->getUser();
330
        $currentCompany = $currentUserPlugin->getCompany();
331
        $objective_uuid = $this->params()->fromRoute('objective_id');
12933 nelberth 332
 
12737 nelberth 333
        if(!$objective_uuid) {
334
            $data = [
335
                'success'   => false,
336
                'data'   => 'ERROR_INVALID_PARAMETER'
337
            ];
338
 
339
            return new JsonModel($data);
340
        }
341
 
12746 nelberth 342
        $group_uuid = $this->params()->fromRoute('group_id');
343
        if(!$group_uuid) {
344
            $data = [
345
                'success'   => false,
346
                'data'   => 'ERROR_INVALID_PARAMETER'
347
            ];
348
 
349
            return new JsonModel($data);
350
        }
351
 
352
        $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
353
        $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
354
 
355
        if (!$highPerformanceTeamsGroups) {
356
            $data = [
357
                'success' => false,
358
                'data' => 'ERROR_RECORD_NOT_FOUND'
359
            ];
360
 
361
            return new JsonModel($data);
362
        }
363
        if($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
364
 
365
            return new JsonModel([
366
                'success' => false,
367
                'data' => 'ERROR_UNAUTHORIZED'
368
            ]);
369
 
370
        }
371
        $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
372
        $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
373
        if(!$highPerformanceTeamsGroupsMember) {
374
            return new JsonModel([
375
                'success' => false,
376
                'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
377
            ]);
378
        }
379
        if(!($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
380
            return new JsonModel([
381
                'success' => false,
382
                'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
383
            ]);
384
        }
385
 
12737 nelberth 386
        $request = $this->getRequest();
387
        if($request->isPost()) {
388
            $form = new  PlanningObjectivesAndGoalsGoalsForm();
389
            $dataPost = $request->getPost()->toArray();
390
            $form->setData($dataPost);
391
 
392
            if($form->isValid()) {
393
                $planningObjectivesAndGoalsObjectivesMapper = PlanningObjectivesAndGoalsObjectivesMapper::getInstance($this->adapter);
394
                $objectives = $planningObjectivesAndGoalsObjectivesMapper->fetchOneByUuid($objective_uuid);
395
 
396
                if (!$objectives) {
397
                    $data = [
398
                        'success' => false,
399
                        'data' => 'ERROR_RECORD_NOT_FOUND'
400
                    ];
401
 
402
 
403
                        return new JsonModel($data);
404
                }
405
 
406
                if($objectives->company_id!=$currentCompany->id){
407
                        $data = [
408
                            'success' => false,
409
                            'data' => 'ERROR_UNAUTHORIZED',
410
                        ];
411
                        return new JsonModel($data);
412
                }
12762 nelberth 413
                if($objectives->high_performance_team_group_id !=$highPerformanceTeamsGroups->id){
414
                    $data = [
415
                        'success' => false,
416
                        'data' => 'ERROR_UNAUTHORIZED',
417
                    ];
418
                    return new JsonModel($data);
419
            }
12737 nelberth 420
                $dataPost = (array) $form->getData();
421
                $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : PlanningObjectivesAndGoalsGoals::STATUS_INACTIVE;
422
                $dataPost['objective_id']=$objectives->id;
423
 
424
                $hydrator = new ObjectPropertyHydrator();
425
                $planningObjectivesAndGoalsGoals = new PlanningObjectivesAndGoalsGoals();
426
                $hydrator->hydrate($dataPost, $planningObjectivesAndGoalsGoals);
427
 
428
                $planningObjectivesAndGoalsGoalsMapper = PlanningObjectivesAndGoalsGoalsMapper::getInstance($this->adapter);
429
                $result = $planningObjectivesAndGoalsGoalsMapper->insert($planningObjectivesAndGoalsGoals);
430
 
431
                if($result) {
432
                    $this->logger->info('Se agrego la meta ' . $planningObjectivesAndGoalsGoals->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
433
 
434
                    $data = [
435
                        'success'   => true,
436
                        'data'   => 'LABEL_RECORD_ADDED'
437
                    ];
438
                } else {
439
                    $data = [
440
                        'success'   => false,
441
                        'data'      => $planningObjectivesAndGoalsGoalsMapper->getError()
442
                    ];
443
 
444
                }
445
 
446
                return new JsonModel($data);
447
 
448
            } else {
449
                $messages = [];
450
                $form_messages = (array) $form->getMessages();
451
                foreach($form_messages  as $fieldname => $field_messages)
452
                {
453
 
454
                    $messages[$fieldname] = array_values($field_messages);
455
                }
456
 
457
                return new JsonModel([
458
                    'success'   => false,
459
                    'data'   => $messages
460
                ]);
461
            }
462
 
463
        } else {
464
            $data = [
465
                'success' => false,
466
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
467
            ];
468
 
469
            return new JsonModel($data);
470
        }
471
 
472
        return new JsonModel($data);
473
 
474
 
475
    }
476
 
477
 
478
 
479
     public function editAction(){
480
 
481
        $currentUserPlugin = $this->plugin('currentUserPlugin');
482
        $currentUser = $currentUserPlugin->getUser();
483
        $currentCompany = $currentUserPlugin->getCompany();
484
        $request = $this->getRequest();
485
        $uuid = $this->params()->fromRoute('id');
486
 
487
 
488
        if(!$uuid) {
489
            $data = [
490
                'success'   => false,
491
                'data'   => 'ERROR_INVALID_PARAMETER'
492
            ];
493
 
494
            return new JsonModel($data);
495
        }
496
 
497
        $objective_uuid = $this->params()->fromRoute('objective_id');
498
        if(!$objective_uuid) {
499
            $data = [
500
                'success'   => false,
501
                'data'   => 'ERROR_INVALID_PARAMETER'
502
            ];
503
 
504
            return new JsonModel($data);
505
        }
12746 nelberth 506
 
507
 
12737 nelberth 508
        $planningObjectivesAndGoalsObjectivesMapper = PlanningObjectivesAndGoalsObjectivesMapper::getInstance($this->adapter);
509
        $objectives = $planningObjectivesAndGoalsObjectivesMapper->fetchOneByUuid($objective_uuid);
510
 
511
        if (!$objectives) {
512
            $data = [
513
                'success' => false,
514
                'data' => 'ERROR_RECORD_NOT_FOUND'
515
            ];
516
 
517
 
518
                return new JsonModel($data);
519
        }
520
 
521
        if($objectives->company_id!=$currentCompany->id){
522
                $data = [
523
                    'success' => false,
524
                    'data' => 'ERROR_UNAUTHORIZED',
525
                ];
526
                return new JsonModel($data);
527
        }
528
 
529
        $planningObjectivesAndGoalsGoalsMapper = PlanningObjectivesAndGoalsGoalsMapper::getInstance($this->adapter);
530
        $goals = $planningObjectivesAndGoalsGoalsMapper->fetchOneByUuid($uuid);
531
 
532
        if (!$goals) {
533
            $data = [
534
                'success' => false,
535
                'data' => 'ERROR_RECORD_NOT_FOUND'
536
            ];
537
 
538
            return new JsonModel($data);
539
        }
12746 nelberth 540
        $group_uuid = $this->params()->fromRoute('group_id');
541
        if(!$group_uuid) {
542
            $data = [
543
                'success'   => false,
544
                'data'   => 'ERROR_INVALID_PARAMETER'
545
            ];
546
 
547
            return new JsonModel($data);
548
        }
12737 nelberth 549
 
12746 nelberth 550
        $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
551
        $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
552
 
553
        if (!$highPerformanceTeamsGroups) {
554
            $data = [
555
                'success' => false,
556
                'data' => 'ERROR_RECORD_NOT_FOUND'
557
            ];
12737 nelberth 558
 
12746 nelberth 559
            return new JsonModel($data);
560
        }
561
        if($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
562
 
563
            return new JsonModel([
564
                'success' => false,
565
                'data' => 'ERROR_UNAUTHORIZED'
566
            ]);
567
 
568
        }
569
        $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
570
        $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
571
        if(!$highPerformanceTeamsGroupsMember) {
572
            return new JsonModel([
573
                'success' => false,
574
                'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
575
            ]);
576
        }
577
        if(!($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
578
            return new JsonModel([
579
                'success' => false,
580
                'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
581
            ]);
582
        }
583
 
12737 nelberth 584
        if($request->isPost()) {
585
            $form = new  PlanningObjectivesAndGoalsGoalsForm();
586
            $dataPost = $request->getPost()->toArray();
587
            $dataPost['status'] =  isset($dataPost['status']) ? $dataPost['status'] : PlanningObjectivesAndGoalsGoals::STATUS_INACTIVE;
588
            $form->setData($dataPost);
589
 
590
            if($form->isValid()) {
591
                $dataPost = (array) $form->getData();
592
 
593
                $hydrator = new ObjectPropertyHydrator();
594
                $hydrator->hydrate($dataPost, $goals);
595
                $result = $planningObjectivesAndGoalsGoalsMapper->update($goals);
596
 
597
                if($result) {
598
                    $this->logger->info('Se actualizo la meta ' . $goals->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
599
 
600
                    $data = [
601
                        'success' => true,
602
                        'data' => 'LABEL_RECORD_UPDATED'
603
                    ];
604
                } else {
605
                    $data = [
606
                        'success'   => false,
607
                        'data'      => $planningObjectivesAndGoalsGoalsMapper->getError()
608
                    ];
609
                }
610
 
611
                return new JsonModel($data);
612
 
613
            } else {
614
                $messages = [];
615
                $form_messages = (array) $form->getMessages();
616
                foreach($form_messages  as $fieldname => $field_messages)
617
                {
618
                    $messages[$fieldname] = array_values($field_messages);
619
                }
620
 
621
                return new JsonModel([
622
                    'success'   => false,
623
                    'data'   => $messages
624
                ]);
625
            }
626
        }else if ($request->isGet()) {
627
            $hydrator = new ObjectPropertyHydrator();
628
 
629
            $data = [
630
                'success' => true,
631
                'data' => $hydrator->extract($goals)
632
            ];
633
 
634
            return new JsonModel($data);
635
        } else {
636
            $data = [
637
                'success' => false,
638
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
639
            ];
640
 
641
            return new JsonModel($data);
642
        }
643
 
644
        return new JsonModel($data);
645
 
646
    }
647
 
648
 
649
 
650
 
651
    public function deleteAction(){
652
        $currentUserPlugin = $this->plugin('currentUserPlugin');
653
        $currentCompany = $currentUserPlugin->getCompany();
654
        $currentUser = $currentUserPlugin->getUser();
655
 
656
        $request = $this->getRequest();
657
        $uuid = $this->params()->fromRoute('id');
658
 
659
 
660
        if (!$uuid) {
661
            $data = [
662
                'success' => false,
663
                'data' => 'ERROR_INVALID_PARAMETER'
664
            ];
665
 
666
            return new JsonModel($data);
667
        }
668
 
669
        $objective_uuid = $this->params()->fromRoute('objective_id');
670
        if(!$objective_uuid) {
671
            $data = [
672
                'success'   => false,
673
                'data'   => 'ERROR_INVALID_PARAMETER'
674
            ];
675
 
676
            return new JsonModel($data);
677
        }
678
        $planningObjectivesAndGoalsObjectivesMapper = PlanningObjectivesAndGoalsObjectivesMapper::getInstance($this->adapter);
679
        $objectives = $planningObjectivesAndGoalsObjectivesMapper->fetchOneByUuid($objective_uuid);
680
 
681
        if (!$objectives) {
682
            $data = [
683
                'success' => false,
684
                'data' => 'ERROR_RECORD_NOT_FOUND'
685
            ];
686
 
687
 
688
                return new JsonModel($data);
689
        }
690
 
691
        if($objectives->company_id!=$currentCompany->id){
692
                $data = [
693
                    'success' => false,
694
                    'data' => 'ERROR_UNAUTHORIZED',
695
                ];
696
                return new JsonModel($data);
697
        }
698
 
699
 
700
        $planningObjectivesAndGoalsGoalsMapper = PlanningObjectivesAndGoalsGoalsMapper::getInstance($this->adapter);
701
        $goals = $planningObjectivesAndGoalsGoalsMapper->fetchOneByUuid($uuid);
702
 
703
        if (!$goals) {
704
            $data = [
705
                'success' => false,
706
                'data' => 'ERROR_RECORD_NOT_FOUND'
707
            ];
708
 
709
            return new JsonModel($data);
710
        }
12746 nelberth 711
        $group_uuid = $this->params()->fromRoute('group_id');
712
        if(!$group_uuid) {
713
            $data = [
714
                'success'   => false,
715
                'data'   => 'ERROR_INVALID_PARAMETER'
716
            ];
717
 
718
            return new JsonModel($data);
719
        }
12737 nelberth 720
 
12746 nelberth 721
        $highPerformanceTeamsGroupsMapper = HighPerformanceTeamsGroupsMapper::getInstance($this->adapter);
722
        $highPerformanceTeamsGroups = $highPerformanceTeamsGroupsMapper->fetchOneByUuid($group_uuid);
723
 
724
        if (!$highPerformanceTeamsGroups) {
725
            $data = [
726
                'success' => false,
727
                'data' => 'ERROR_RECORD_NOT_FOUND'
728
            ];
729
 
730
            return new JsonModel($data);
731
        }
732
        if($highPerformanceTeamsGroups->status != HighPerformanceTeamsGroups::STATUS_ACTIVE) {
733
 
734
            return new JsonModel([
735
                'success' => false,
736
                'data' => 'ERROR_UNAUTHORIZED'
737
            ]);
738
 
739
        }
740
        $highPerformanceTeamsGroupsMembersMapper = HighPerformanceTeamsGroupsMembersMapper::getInstance($this->adapter);
741
        $highPerformanceTeamsGroupsMember = $highPerformanceTeamsGroupsMembersMapper->fetchOneByGroupIdAndUserId($highPerformanceTeamsGroups->id, $currentUser->id);
742
        if(!$highPerformanceTeamsGroupsMember) {
743
            return new JsonModel([
744
                'success' => false,
745
                'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
746
            ]);
747
        }
748
        if(!($highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ACCEPTED || $highPerformanceTeamsGroupsMember->status == HighPerformanceTeamsGroupsMembers::STATUS_ADDED_BY_ADMIN) ){
749
            return new JsonModel([
750
                'success' => false,
751
                'data' => 'ERROR_YOU_DO_NOT_HAVE_ACCESS'
752
            ]);
753
        }
12737 nelberth 754
 
755
        if ($request->isPost()) {
756
 
757
 
758
            $result = $planningObjectivesAndGoalsGoalsMapper->delete($goals->id);
759
            if ($result) {
760
                $this->logger->info('Se borro la meta con el titulo ' . $goals->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
761
 
762
                $data = [
763
                    'success' => true,
764
                    'data' => 'LABEL_RECORD_DELETED'
765
                ];
766
            } else {
767
 
768
                $data = [
769
                    'success' => false,
770
                    'data' => $planningObjectivesAndGoalsGoalsMapper->getError()
771
                ];
772
 
773
                return new JsonModel($data);
774
            }
775
        } else {
776
            $data = [
777
                'success' => false,
778
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
779
            ];
780
 
781
            return new JsonModel($data);
782
        }
783
 
784
        return new JsonModel($data);
785
    }
786
 
787
 
788
 
789
 
790
}