Proyectos de Subversion LeadersLinked - Backend

Rev

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