Proyectos de Subversion LeadersLinked - Backend

Rev

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