Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
1 www 1
<?php
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
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\CompanyMapper;
15
use LeadersLinked\Model\Company;
16
use LeadersLinked\Mapper\ServiceMapper;
17
use LeadersLinked\Mapper\CompanyServiceMapper;
18
use LeadersLinked\Mapper\RoleMapper;
19
use LeadersLinked\Mapper\CompanyRoleMapper;
20
use LeadersLinked\Mapper\CompanyUserMapper;
21
use LeadersLinked\Mapper\UserMapper;
22
use LeadersLinked\Model\CompanyService;
23
use LeadersLinked\Mapper\CompanyUserRoleMapper;
24
use LeadersLinked\Model\Role;
25
use LeadersLinked\Model\CompanyRole;
26
use LeadersLinked\Model\CompanyUserRole;
27
use LeadersLinked\Model\CompanyUser;
28
use Google\Service\Directory\UserMakeAdmin;
15338 efrain 29
use LeadersLinked\Mapper\NetworkMapper;
1 www 30
 
31
class CompanyController extends AbstractActionController
32
{
33
    /**
34
     *
35
     * @var AdapterInterface
36
     */
37
    private $adapter;
38
 
39
 
40
    /**
41
     *
42
     * @var AbstractAdapter
43
     */
44
    private $cache;
45
 
46
    /**
47
     *
48
     * @var  LoggerInterface
49
     */
50
    private $logger;
51
 
52
    /**
53
     *
54
     * @var array
55
     */
56
    private $config;
57
 
58
 
59
 
60
    /**
61
     *
62
     * @param AdapterInterface $adapter
63
     * @param AbstractAdapter $cache
64
     * @param LoggerInterface $logger
65
     * @param array $config
66
     */
67
    public function __construct($adapter, $cache , $logger, $config)
68
    {
69
        $this->adapter      = $adapter;
70
        $this->cache        = $cache;
71
        $this->logger       = $logger;
72
        $this->config       = $config;
73
 
74
 
75
    }
76
 
77
    public function indexAction()
78
    {
79
        $request = $this->getRequest();
80
        $currentUserPlugin = $this->plugin('currentUserPlugin');
81
        $currentUser    = $currentUserPlugin->getUser();
82
 
15351 efrain 83
 
84
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
85
        $network = $currentNetworkPlugin->getNetwork();
86
 
1 www 87
        if($request->isGet()) {
88
 
89
 
90
            $headers  = $request->getHeaders();
91
 
92
            $isJson = false;
93
            if($headers->has('Accept')) {
94
                $accept = $headers->get('Accept');
95
 
96
                $prioritized = $accept->getPrioritized();
97
 
98
                foreach($prioritized as $key => $value) {
99
                    $raw = trim($value->getRaw());
100
 
101
                    if(!$isJson) {
102
                        $isJson = strpos($raw, 'json');
103
                    }
104
 
105
                }
106
            }
107
 
108
            if($isJson) {
109
 
110
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
111
                $allowServices = $acl->isAllowed($currentUser->usertype_id, 'companies/services');
112
                $allowRoles = $acl->isAllowed($currentUser->usertype_id, 'companies/roles');
113
                $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'companies/edit');
114
 
115
 
116
                $serviceMapper = ServiceMapper::getInstance($this->adapter);
117
                $records = $serviceMapper->fetchAll();
118
 
119
                $services = [];
120
                foreach($records as $record)
121
                {
122
                    $services[ $record->id ] = $record->name;
123
                }
124
 
125
 
126
                $roleMapper = RoleMapper::getInstance($this->adapter);
127
                $records = $roleMapper->fetchAll();
128
 
129
                $roles = [];
130
                foreach($records as $record)
131
                {
132
                    $roles[ $record->id ] = $record->name;
133
                }
15338 efrain 134
 
135
                $networkMapper = NetworkMapper::getInstance($this->adapter);
136
                $records = $networkMapper->fetchAll();
137
 
138
                $networks = [];
139
                foreach($records as $record)
140
                {
15358 efrain 141
                    $networks[ $record->id ] = $network;
15338 efrain 142
                }
143
 
144
 
145
 
1 www 146
 
147
 
148
                $search = $this->params()->fromQuery('search', []);
149
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
150
 
151
                $page               = intval($this->params()->fromQuery('start', 1), 10);
152
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
153
                $order =  $this->params()->fromQuery('order', []);
154
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
155
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var( $order[0]['dir'], FILTER_SANITIZE_STRING));
156
 
157
                $fields =  ['name'];
158
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
159
 
160
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
161
                    $order_direction = 'ASC';
162
                }
163
 
15338 efrain 164
                $status = filter_var($this->params()->fromQuery('status'), FILTER_SANITIZE_STRING);
1 www 165
                if(!in_array($status, [
166
                    Company::STATUS_ACTIVE,
167
                    Company::STATUS_DELETED,
168
                    Company::STATUS_INACTIVE,
169
                    Company::STATUS_PENDING,
170
                    Company::STATUS_REJECTED
171
                ])) {
172
                    $status = '';
173
                }
174
 
15338 efrain 175
                $network_id = filter_var($this->params()->fromQuery('network_id'), FILTER_SANITIZE_STRING);
176
 
177
                $network = $networkMapper->fetchOneByUuid($network_id);
178
                if($network) {
179
                    $network_id = $network->id;
180
                } else {
181
                    $network_id = 0;
182
                }
183
 
1 www 184
 
185
                $companyMapper = CompanyMapper::getInstance($this->adapter);
15338 efrain 186
                $paginator = $companyMapper->fetchAllDataTable($search, $page, $status, $network_id, $records_x_page, $order_field, $order_direction);
1 www 187
 
188
                $companyServiceMapper = CompanyServiceMapper::getInstance($this->adapter);
189
                $companyRoleMapper = CompanyRoleMapper::getInstance($this->adapter);
190
                $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
191
                $userMapper = UserMapper::getInstance($this->adapter);
192
 
15351 efrain 193
 
1 www 194
 
195
                $items = [];
196
                $records = $paginator->getCurrentItems();
197
                foreach($records as $record)
198
                {
199
                    $security = [
200
                        'first_name' => '',
201
                        'last_name' => '',
202
                        'email' => '',
203
                    ];
204
 
205
                    $companyUser = $companyUserMapper->fetchCreatorByCompanyId($record->id);
206
                    if($companyUser) {
207
                        $user = $userMapper->fetchOne($companyUser->user_id);
208
                        if($user) {
209
                            $security['first_name'] = $user->first_name;
210
                            $security['last_name'] = $user->last_name;
211
                            $security['email'] = $user->email;
212
                        }
213
                    }
214
 
215
                    $companyServices = $companyServiceMapper->fetchAllByCompanyId($record->id);
216
                    $companyRoles = $companyRoleMapper->fetchAllByCompanyId($record->id);
217
 
218
 
219
                    $details['services'] = [] ;
220
 
221
                    foreach($companyServices as $companyService)
222
                    {
223
                        if($companyService->status == CompanyService::ACTIVE) {
224
 
225
 
226
                            array_push($details['services'], $services[$companyService->service_id]);
227
                        }
228
                    }
229
 
230
                    $details['roles'] = [] ;
231
 
232
                    foreach($companyRoles as $companyRole)
233
                    {
234
                        array_push($details['roles'], $roles[$companyRole->role_id]);
235
                    }
236
 
237
 
15358 efrain 238
 
1 www 239
 
15358 efrain 240
 
1 www 241
                    $details['internal'] = $record->internal == Company::INTERNAL_YES ? 'LABEL_YES' : 'LABEL_NO';
242
 
243
 
244
                    $link_profile = '';
245
                    switch($record->status)
246
                    {
247
                        case Company::STATUS_PENDING :
248
                            $details['status'] = 'LABEL_PENDING';
249
 
250
                            break;
251
 
252
                        case Company::STATUS_ACTIVE :
15358 efrain 253
                            $link_profile = 'https://'. $networks[$record->network_id]->main_hostname . '/company/view/' . $record->uuid;
1 www 254
                            $details['status'] = 'LABEL_ACTIVE';
255
                            break;
256
 
257
                        case Company::STATUS_INACTIVE :
258
                            $details['status'] = 'LABEL_INACTIVE';
259
                            break;
260
 
261
                        case Company::STATUS_REJECTED :
262
                            $details['status'] = 'LABEL_REJECTED';
263
                            break;
264
 
265
                        case Company::STATUS_DELETED :
266
                            $details['status'] = 'LABEL_DELETED';
267
                            break;
268
 
269
                        default :
270
                            $details['status'] = 'LABEL_UNKNOWN';
271
                            break;
272
                    }
273
 
274
 
275
                    $item = [
276
                        'id' => $record->id,
277
                        'name' => $record->name,
15358 efrain 278
                        'network' => $networks[$record->network_id]->name,
1 www 279
                        'link_profile' => $link_profile,
280
                        'details' => $details,
281
                        'security' => $security,
282
                        'actions' => [
283
                           'link_services' => $allowServices ? $this->url()->fromRoute('companies/services', ['id' => $record->uuid ]) : '',
284
                           'link_roles' => $allowRoles ? $this->url()->fromRoute('companies/roles', ['id' => $record->uuid ]) : '',
285
                           'link_edit' => $allowEdit ? $this->url()->fromRoute('companies/edit', ['id' => $record->uuid ]) : '',
286
                        ]
287
 
288
                    ];
289
 
290
                    array_push($items, $item);
291
                }
292
 
293
                return new JsonModel([
294
                    'success' => true,
295
                    'data' => [
296
                        'items' => $items,
297
                        'total' => $paginator->getTotalItemCount(),
298
                    ]
299
                ]);
300
            } else  {
301
 
15338 efrain 302
                $networkMapper = NetworkMapper::getInstance($this->adapter);
303
                $records = $networkMapper->fetchAll();
304
 
305
                $networks = [];
306
                foreach($records as $record)
307
                {
308
                    $networks[ $record->uuid ] = $record->name;
309
                }
310
 
311
 
312
 
1 www 313
                $this->layout()->setTemplate('layout/layout-backend');
314
                $viewModel = new ViewModel();
315
                $viewModel->setTemplate('leaders-linked/companies/index.phtml');
15338 efrain 316
                $viewModel->setVariables(['networks' => $networks ]);
1 www 317
                return $viewModel ;
318
            }
319
 
320
        } else {
321
            return new JsonModel([
322
                'success' => false,
323
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
324
            ]);
325
        }
326
    }
327
 
328
    public function servicesAction()
329
    {
330
        $currentUserPlugin = $this->plugin('currentUserPlugin');
331
        $currentUser = $currentUserPlugin->getUser();
332
 
333
        $request = $this->getRequest();
334
        $uuid = $this->params()->fromRoute('id');
335
 
336
 
337
        if(!$uuid) {
338
            $data = [
339
                'success'   => false,
340
                'data'   => 'ERROR_INVALID_PARAMETER'
341
            ];
342
 
343
            return new JsonModel($data);
344
        }
345
 
346
        $companyMapper = CompanyMapper::getInstance($this->adapter);
347
        $company = $companyMapper->fetchOneByUuid($uuid);
348
        if(!$company) {
349
            $data = [
350
                'success'   => false,
351
                'data'   => 'ERROR_COMPANY_NOT_FOUND'
352
            ];
353
 
354
            return new JsonModel($data);
355
        }
356
 
357
        if($request->isPost()) {
358
 
359
            $companyServiceMapper = CompanyServiceMapper::getInstance($this->adapter);
360
 
361
            $serviceMapper = ServiceMapper::getInstance($this->adapter);
362
            $services = $serviceMapper->fetchAll();
363
 
364
            foreach($services as $service)
365
            {
366
                $status     = filter_var( $this->params()->fromPost('status' . $service->id), FILTER_SANITIZE_STRING);
367
                $paid_from  = filter_var( $this->params()->fromPost('paid_from' . $service->id), FILTER_SANITIZE_STRING);
368
                $paid_to    = filter_var( $this->params()->fromPost('paid_to' . $service->id), FILTER_SANITIZE_STRING);
369
 
370
                $ok = true;
371
                switch ($status) {
372
 
373
                    case CompanyService::ACTIVE :
374
                    case CompanyService::CANCELLED :
375
                    case CompanyService::SUSPENDED :
376
 
377
                        $dt_paid_from = \DateTime::createFromFormat('d/m/Y', $paid_from);
378
                        $dt_paid_to = \DateTime::createFromFormat('d/m/Y', $paid_to);
379
 
380
                        if(!$dt_paid_from || !$dt_paid_to) {
381
                            $ok = false;
382
                        }  else {
383
                            if($dt_paid_from->getTimestamp() > $dt_paid_to->getTimestamp()) {
384
                                $ok = false;
385
                            } else {
386
                                $dt_paid_from->setTime(0, 0, 0);
387
                                $paid_from = $dt_paid_from->format('Y-m-d');
388
 
389
 
390
                                $dt_paid_to->setTime(23, 59, 59);
391
                                $paid_to = $dt_paid_to->format('Y-m-d');
392
                            }
393
                        }
394
 
395
                        break;
396
 
397
                    case CompanyService::INACTIVE :
398
                        $paid_from = null;
399
                        $paid_to = null;
400
                        break;
401
 
402
                    default :
403
                        $ok = false;
404
                        break;
405
 
406
 
407
                }
408
 
409
                if(!$ok) {
410
                    return new JsonModel([
411
                        'success' => false,
412
                        'data' => 'ERROR_PARAMETERS_ARE_INVALID'
413
                    ]);
414
                }
415
 
416
 
417
                $companyService = $companyServiceMapper->fetchOneByCompanyIdAndServiceId($company->id, $service->id);
418
                if($companyService) {
419
 
420
                    $companyService->status = $status;
421
                    $companyService->paid_from = $paid_from;
422
                    $companyService->paid_to = $paid_to;
423
 
424
                    if(!$companyServiceMapper->update($companyService)) {
425
                        return new JsonModel([
426
                            'success' => false,
427
                            'data' => $companyServiceMapper->getError()
428
                        ]);
429
                    }
430
 
431
 
432
                } else {
433
                    $companyService = new CompanyService();
434
                    $companyService->service_id = $service->id;
435
                    $companyService->company_id = $company->id;
436
                    $companyService->status = $status;
437
                    $companyService->paid_from = $paid_from;
438
                    $companyService->paid_to = $paid_to;
439
 
440
 
441
                    if(!$companyServiceMapper->insert($companyService)) {
442
                        return new JsonModel([
443
                            'success' => false,
444
                            'data' => $companyServiceMapper->getError()
445
                        ]);
446
                    }
447
                }
448
 
449
 
450
            }
451
 
452
            $this->logger->info('Se actualizo los servicios de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
453
 
454
            return new JsonModel([
455
                'success' => true,
456
                'data' => 'LABEL_RECORD_UPDATED'
457
            ]);
458
 
459
 
460
        } else if ($request->isGet()) {
461
            $serviceMapper = ServiceMapper::getInstance($this->adapter);
462
            $records = $serviceMapper->fetchAll();
463
 
464
            $services = [];
465
            foreach($records as $record)
466
            {
467
                $services[ $record->id ] = [
468
                    'id'        => $record->id,
469
                    'name'      => $record->name,
470
                    'status'    => '',
471
                    'paid_from' => '',
472
                    'paid_to'   => '',
473
                ];
474
            }
475
 
476
 
477
 
478
            $companyServiceMapper = CompanyServiceMapper::getInstance($this->adapter);
479
            $records = $companyServiceMapper->fetchAllByCompanyId($company->id);
480
 
481
 
482
            foreach($records as $record)
483
            {
484
                $paid_from = '';
485
                if($record->paid_from) {
486
                    $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->paid_from);
487
                    if($dt) {
488
                        $paid_from = $dt->format('d/m/Y');
489
                    }
490
 
491
                }
492
 
493
                $paid_to = '';
494
                if($record->paid_to) {
495
                    $dt = \DateTime::createFromFormat('Y-m-d H:i:s', $record->paid_to);
496
                    if($dt) {
497
                        $paid_to = $dt->format('d/m/Y');
498
                    }
499
 
500
                }
501
 
502
 
503
                $services[ $record->service_id ] ['status']  = $record->status;
504
                $services[ $record->service_id ] ['paid_from']  = $paid_from;
505
                $services[ $record->service_id ] ['paid_to']  = $paid_to;
506
 
507
            }
508
 
509
            $data = [
510
                'success' => true,
511
                'data' => $services,
512
            ];
513
 
514
 
515
 
516
            return new JsonModel($data);
517
        } else {
518
            $data = [
519
                'success' => false,
520
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
521
            ];
522
 
523
            return new JsonModel($data);
524
        }
525
 
526
        return new JsonModel($data);
527
    }
528
 
529
 
530
    public function rolesAction()
531
    {
532
        $currentUserPlugin = $this->plugin('currentUserPlugin');
533
        $currentUser = $currentUserPlugin->getUser();
534
 
535
        $request = $this->getRequest();
536
        $uuid = $this->params()->fromRoute('id');
537
 
538
 
539
        if(!$uuid) {
540
            $data = [
541
                'success'   => false,
542
                'data'   => 'ERROR_INVALID_PARAMETER'
543
            ];
544
 
545
            return new JsonModel($data);
546
        }
547
 
548
        $companyMapper = CompanyMapper::getInstance($this->adapter);
549
        $company = $companyMapper->fetchOneByUuid($uuid);
550
        if(!$company) {
551
            $data = [
552
                'success'   => false,
553
                'data'   => 'ERROR_COMPANY_NOT_FOUND'
554
            ];
555
 
556
            return new JsonModel($data);
557
        }
558
 
559
        if($request->isPost()) {
560
 
561
            $companyRoleMapper = CompanyRoleMapper::getInstance($this->adapter);
562
            $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
563
            $companyUserRoleMapper = CompanyUserRoleMapper::getInstance($this->adapter);
564
 
565
            $roleMapper = RoleMapper::getInstance($this->adapter);
566
            $roles = $roleMapper->fetchAll();
567
 
568
 
569
            foreach($roles as $role)
570
            {
571
                $companyRole = $companyRoleMapper->fetchOneByCompanyIdAndRoleId($company->id, $role->id);
572
                $checked     = filter_var( $this->params()->fromPost('checked' . $role->id), FILTER_SANITIZE_NUMBER_INT);
573
 
574
                if($checked) {
575
 
576
                    if(!$companyRole) {
577
                        $companyRole = new CompanyRole();
578
                        $companyRole->company_id = $company->id;
579
                        $companyRole->role_id = $role->id;
580
 
581
                        if(!$companyRoleMapper->insert($companyRole)) {
582
                            return new JsonModel([
583
                                'success' => false,
584
                                'data' => $companyRoleMapper->getError()
585
                            ]);
586
                        }
587
 
588
                    }
589
 
590
                } else {
591
                    if($companyRole) {
592
                        $companyUserRoleMapper->deleteByCompanyIdAndRoleId($company->id, $role->id);
593
                        $companyRoleMapper->deleteByCompanyIdAndRoleId($company->id, $role->id);
594
                    }
595
 
596
                }
597
            }
598
 
599
            $this->logger->info('Se actualizo los roles de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
600
 
601
            return new JsonModel([
602
                'success' => true,
603
                'data' => 'LABEL_RECORD_UPDATED'
604
            ]);
605
 
606
 
607
        } else if ($request->isGet()) {
608
            $companyServiceMapper = CompanyServiceMapper::getInstance($this->adapter);
609
 
610
            $roleMapper = RoleMapper::getInstance($this->adapter);
611
            $records = $roleMapper->fetchAll();
612
 
613
 
614
 
615
            $roles = [];
616
            foreach($records as $record)
617
            {
618
                if($record->service_id) {
619
                    $companyService = $companyServiceMapper->fetchOneByCompanyIdAndServiceId($company->id, $record->service_id);
620
 
621
                    if(!$companyService || $companyService->status == CompanyService::INACTIVE) {
622
                        continue;
623
                    }
624
 
625
                }
626
 
627
 
628
 
629
                $roles[ $record->id ] = [
630
                   'id' => $record->id,
631
                   'name' => $record->name,
632
                   'fixed' => $record->creator == Role::CREATOR_YES ? true : false,
633
                   'checked' => $record->creator == Role::CREATOR_YES ? true : false,
634
                ];
635
            }
636
 
637
 
638
            $companyRoleMapper = CompanyRoleMapper::getInstance($this->adapter);
639
            $records = $companyRoleMapper->fetchAllByCompanyId($company->id);
640
 
641
            foreach($records as $record)
642
            {
643
                $roles[ $record->role_id ]['checked'] = true;
644
 
645
            }
646
 
647
            $data = [
648
                'success' => true,
649
                'data' => $roles,
650
            ];
651
 
652
 
653
 
654
            return new JsonModel($data);
655
        } else {
656
            $data = [
657
                'success' => false,
658
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
659
            ];
660
 
661
            return new JsonModel($data);
662
        }
663
 
664
        return new JsonModel($data);
665
    }
666
 
667
    public function editAction()
668
    {
669
        $currentUserPlugin = $this->plugin('currentUserPlugin');
670
        $currentUser = $currentUserPlugin->getUser();
671
 
672
        $request = $this->getRequest();
673
        $uuid = $this->params()->fromRoute('id');
674
 
675
 
676
        if(!$uuid) {
677
            $data = [
678
                'success'   => false,
679
                'data'   => 'ERROR_INVALID_PARAMETER'
680
            ];
681
 
682
            return new JsonModel($data);
683
        }
684
 
685
        $companyMapper = CompanyMapper::getInstance($this->adapter);
686
        $company = $companyMapper->fetchOneByUuid($uuid);
687
        if(!$company) {
688
            $data = [
689
                'success'   => false,
690
                'data'   => 'ERROR_COMPANY_NOT_FOUND'
691
            ];
692
 
693
            return new JsonModel($data);
694
        }
695
 
696
        if($request->isPost()) {
697
 
698
 
699
            $status = filter_var( $this->params()->fromPost('status', FILTER_SANITIZE_STRING));
700
            $user_uuid = filter_var( $this->params()->fromPost('user_uuid', FILTER_SANITIZE_STRING));
701
 
702
 
703
            if(!in_array($status, [
704
                Company::STATUS_ACTIVE,
705
                Company::STATUS_INACTIVE,
706
                Company::STATUS_DELETED,
707
                Company::STATUS_PENDING,
708
                Company::STATUS_REJECTED,
709
 
710
            ])) {
711
                return new JsonModel([
712
                    'success'   => false,
713
                    'data'   => 'ERROR_PARAMETERS_ARE_INVALID'
714
                ]);
715
            }
716
 
717
            $userMapper = UserMapper::getInstance($this->adapter);
718
            $user = $userMapper->fetchOneByUuid($user_uuid);
719
 
720
            if(!$user) {
721
                return new JsonModel([
722
                    'success'   => false,
723
                    'data'   => 'ERROR_USER_NOT_FOUND'
724
                ]);
725
            }
726
 
727
            $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
728
            $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $user->id);
729
 
730
            if(!$companyUser) {
731
                return new JsonModel([
732
                    'success'   => false,
733
                    'data'   => 'ERROR_COMPANY_USER_NOT_FOUND'
734
                ]);
735
            }
736
 
737
 
738
            if($companyUser->status != CompanyUser::STATUS_ACCEPTED && $companyUser->status != CompanyUser::STATUS_ADMIN_WILL_ADD) {
739
                return new JsonModel([
740
                    'success'   => false,
741
                    'data'   => 'ERROR_COMPANY_USER_IS_NOT_ACTIVE'
742
                ]);
743
            }
744
 
745
            $creator = $companyUserMapper->fetchCreatorByCompanyId($company->id);
746
            if($creator->user_id != $user->id) {
747
 
748
                $creator->creator = CompanyUser::CREATOR_NO;
749
                $creator->backend = CompanyUser::BACKEND_NO;
750
                $companyUserMapper->update($creator);
751
 
752
                $companyUser->creator = CompanyUser::CREATOR_YES;
753
                $companyUser->backend = CompanyUser::BACKEND_YES;
754
                $companyUserMapper->update($companyUser);
755
 
756
            }
757
 
758
            $company->status = $status;
759
            if($companyMapper->update($company)) {
760
 
761
                $this->logger->info('Se edito la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
762
 
763
                return new JsonModel([
764
                    'success' => true,
765
                    'data' => 'LABEL_RECORD_UPDATED'
766
                ]);
767
            }  else {
768
                return new JsonModel([
769
                    'success' => false,
770
                    'data' => $companyMapper->getError(),
771
                ]);
772
            }
773
 
774
 
775
 
776
 
777
 
778
 
779
        } else if ($request->isGet()) {
780
            $userMapper = UserMapper::getInstance($this->adapter);
781
            $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
782
            $records = $companyUserMapper->fetchAllByCompanyId($company->id);
783
 
784
            $users = [] ;
785
            foreach($records as $record)
786
            {
787
                if($record->owner == CompanyUser::OWNER_YES) {
788
                    continue;
789
                }
790
 
791
 
792
                if($record->status != CompanyUser::STATUS_ACCEPTED && $record->status != CompanyUser::STATUS_ADMIN_WILL_ADD) {
793
                    continue;
794
                }
795
 
796
                $user = $userMapper->fetchOne($record->user_id);
797
 
798
                array_push($users, [
799
                    'uuid' => $user->uuid,
800
                    'name' => trim($user->first_name . ' ' . $user->last_name) . ' (' . $user->email . ')',
801
 
802
                ] );
803
 
804
 
805
 
806
 
807
 
808
 
809
            }
810
 
811
            usort($users, function($a, $b) {
812
                return $a['name'] <=> $b['name'];
813
            });
814
 
815
 
816
            $creator = $companyUserMapper->fetchCreatorByCompanyId($company->id);
817
            if($creator) {
818
                $userMapper = UserMapper::getInstance($this->adapter);
819
                $user = $userMapper->fetchOne($creator->user_id);
820
                if($user) {
821
                    $creator = $user->uuid;
822
                } else {
823
                    $creator = '';
824
                }
825
            } else {
826
                $creator = '';
827
            }
828
 
829
            $data = [
830
                'success' => true,
831
                'data' => [
832
                    'status' => $company->status,
833
                    'users' => $users,
834
                    'creator' => $creator,
835
                ],
836
            ];
837
 
838
 
839
 
840
            return new JsonModel($data);
841
        } else {
842
            $data = [
843
                'success' => false,
844
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
845
            ];
846
 
847
            return new JsonModel($data);
848
        }
849
 
850
        return new JsonModel($data);
851
    }
852
 
853
}
854