Proyectos de Subversion LeadersLinked - Backend

Rev

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