Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 8367 | Rev 15087 | 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
5992 stevensc 2
 
1 www 3
/**
4
 *
5
 * Controlador: Mis Perfiles
6
 *
7
 */
5992 stevensc 8
 
1 www 9
declare(strict_types=1);
10
 
11
namespace LeadersLinked\Controller;
12
 
13
use Laminas\Db\Adapter\AdapterInterface;
14
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
15
use Laminas\Mvc\Controller\AbstractActionController;
16
use Laminas\Log\LoggerInterface;
17
use Laminas\View\Model\ViewModel;
18
use Laminas\View\Model\JsonModel;
19
 
20
use LeadersLinked\Library\Functions;
21
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
22
use LeadersLinked\Library\Image;
23
 
24
use LeadersLinked\Mapper\CompanyLocationMapper;
25
use LeadersLinked\Form\CompanyProfileSocialNetworkForm;
26
use LeadersLinked\Form\CompanyProfileLocationForm;
27
use LeadersLinked\Form\CompanyProfileExtendedForm;
28
use LeadersLinked\Form\CompanyProfileImageForm;
29
use LeadersLinked\Form\CompanyProfileCoverForm;
768 geraldo 30
use LeadersLinked\Form\CompanyProfileHeaderForm;
31
use LeadersLinked\Form\CompanyProfileFooterForm;
1 www 32
 
33
use LeadersLinked\Form\CompanyProfileIndustryForm;
34
use LeadersLinked\Form\CompanyProfileCompanySizeForm;
35
use LeadersLinked\Form\CompanyProfileFoundationYearForm;
36
use LeadersLinked\Form\CompanyProfileWebsiteForm;
37
use LeadersLinked\Model\Location;
38
use LeadersLinked\Model\CompanyLocation;
39
use LeadersLinked\Model\CompanyUser;
40
 
41
use LeadersLinked\Mapper\LocationMapper;
42
use LeadersLinked\Mapper\CompanyFollowerMapper;
43
use LeadersLinked\Mapper\CompanyUserMapper;
44
use LeadersLinked\Mapper\CompanyMapper;
45
use LeadersLinked\Mapper\IndustryMapper;
46
use LeadersLinked\Mapper\CompanySizeMapper;
47
 
48
class ProfileController extends AbstractActionController
49
{
50
    /**
51
     *
52
     * @var AdapterInterface
53
     */
54
    private $adapter;
5992 stevensc 55
 
56
 
1 www 57
    /**
58
     *
59
     * @var AbstractAdapter
60
     */
61
    private $cache;
5992 stevensc 62
 
1 www 63
    /**
64
     *
65
     * @var  LoggerInterface
66
     */
67
    private $logger;
68
 
5992 stevensc 69
 
1 www 70
    /**
71
     *
72
     * @var array
73
     */
74
    private $config;
5992 stevensc 75
 
1 www 76
    /**
77
     *
78
     * @param AdapterInterface $adapter
79
     * @param AbstractAdapter $cache
80
     * @param LoggerInterface $logger
81
     * @param array $config
82
     */
5992 stevensc 83
    public function __construct($adapter, $cache, $logger,  $config)
1 www 84
    {
85
        $this->adapter      = $adapter;
86
        $this->cache        = $cache;
87
        $this->logger       = $logger;
88
        $this->config       = $config;
89
    }
90
 
5992 stevensc 91
 
92
 
1 www 93
    /**
94
     * Presenta el perfil con las opciónes de edición de cada sección
95
     * @return \Laminas\Http\Response|\Laminas\View\Model\ViewModel|\Laminas\View\Model\JsonModel
96
     */
97
    public function indexAction()
98
    {
99
        $currentUserPlugin = $this->plugin('currentUserPlugin');
100
        $currentUser = $currentUserPlugin->getUser();
101
        $currentCompany = $currentUserPlugin->getCompany();
102
 
5992 stevensc 103
 
1 www 104
        $request = $this->getRequest();
5992 stevensc 105
        if ($request->isGet()) {
106
 
1 www 107
            $sandbox = $this->config['leaderslinked.runmode.sandbox'];
5992 stevensc 108
            if ($sandbox) {
1 www 109
                $google_map_key  = $this->config['leaderslinked.google_map.sandbox_api_key'];
110
            } else {
111
                $google_map_key  = $this->config['leaderslinked.google_map.production_api_key'];
112
            }
5992 stevensc 113
 
1 www 114
            $companyMapper = CompanyMapper::getInstance($this->adapter);
115
            $company = $companyMapper->fetchOne($currentCompany->id);
116
 
5992 stevensc 117
 
1 www 118
            $companyLocationMapper = CompanyLocationMapper::getInstance($this->adapter);
119
            $records = $companyLocationMapper->fetchAllLocationByCompanyId($company->id);
120
 
121
 
122
 
5992 stevensc 123
 
1 www 124
            $locations = [];
5992 stevensc 125
            foreach ($records as $record) {
1 www 126
                $location =  [
127
                    'formatted_address'  => $record['formatted_address'],
128
                    'country' => $record['country'],
129
                    'is_main' => $record['is_main'],
5992 stevensc 130
                    'link_edit' => $this->url()->fromRoute('profile/location', ['operation' => 'edit', 'id' =>  $record['company_location_uuid']]),
131
                    'link_delete' => $this->url()->fromRoute('profile/location', ['operation' => 'delete', 'id' => $record['company_location_uuid']])
132
 
1 www 133
                ];
5992 stevensc 134
 
1 www 135
                array_push($locations, $location);
136
            }
5992 stevensc 137
 
1 www 138
            $industryMapper = IndustryMapper::getInstance($this->adapter);
139
            $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
140
 
141
            $formSocialNetwork = new CompanyProfileSocialNetworkForm();
142
            $formLocation = new CompanyProfileLocationForm();
143
            $formExtended = new CompanyProfileExtendedForm();
144
            $formFoundationYear = new CompanyProfileFoundationYearForm();
145
            $formWebsite = new CompanyProfileWebsiteForm();
146
            $formImage = new CompanyProfileImageForm($this->config);
147
            $formCover = new CompanyProfileCoverForm($this->config);
768 geraldo 148
            $formHeader = new CompanyProfileHeaderForm($this->config);
149
            $formFooter = new CompanyProfileFooterForm($this->config);
150
 
151
 
152
 
1 www 153
            $formCompanySize = new CompanyProfileCompanySizeForm($this->adapter);
154
            $formIndustry = new CompanyProfileIndustryForm($this->adapter);
5992 stevensc 155
 
1 www 156
            $companyFollowerMapper = CompanyFollowerMapper::getInstance($this->adapter);
157
            $follower = $companyFollowerMapper->getCountFollowers($currentCompany->id);
158
 
159
            $image_size_cover = $this->config['leaderslinked.image_sizes.company_cover_upload'];
160
            $image_size_profile = $this->config['leaderslinked.image_sizes.company_image_upload'];
1101 geraldo 161
            $image_size_header = $this->config['leaderslinked.image_sizes.company_header_pdf_upload'];
5992 stevensc 162
            $image_size_footer = $this->config['leaderslinked.image_sizes.company_footer_pdf_upload'];
163
 
164
 
1 www 165
            $industry = $industryMapper->fetchOne($company->industry_id);
166
            $companySize = $companySizeMapper->fetchOne($company->company_size_id);
5992 stevensc 167
 
168
 
1 www 169
            $this->layout()->setTemplate('layout/layout-backend');
170
            $viewModel = new ViewModel();
171
            $viewModel->setTemplate('leaders-linked/profile/index.phtml');
172
            $viewModel->setVariables([
173
                'google_map_key'        => $google_map_key,
174
                'follower'              => $follower,
175
                'company_id'            => $currentCompany->id,
176
                'company_name'          => $company->name,
177
                'company_uuid'          => $company->uuid,
178
                'name'                  => trim($company->name),
179
                'image'                 => $company->image,
180
                'cover'                 => $company->cover,
782 geraldo 181
                'header'                 => $company->header,
182
                'footer'                 => $company->footer,
5992 stevensc 183
                'overview'              => strip_tags($company->description, 'p'),
1 www 184
                'website'               => $company->website,
185
                'foundation_year'       => $company->foundation_year,
186
                'facebook'              => $company->facebook,
187
                'instagram'             => $company->instagram,
188
                'twitter'               => $company->twitter,
189
                'locations'             => $locations,
190
                'industry'              => $industry->name,
5992 stevensc 191
                'company_size'          => $companySize->name . ' (' . $companySize->minimum_no_of_employee . '-' . $companySize->maximum_no_of_employee . ')',
1 www 192
                'formLocation'          => $formLocation,
193
                'formSocialNetwork'     => $formSocialNetwork,
194
                'formExtended'          => $formExtended,
195
                'formImage'             => $formImage,
196
                'formCover'             => $formCover,
768 geraldo 197
                'formHeader'             => $formHeader,
198
                'formFooter'             => $formFooter,
1 www 199
                'formFoundationYear'    => $formFoundationYear,
200
                'formWebsite'           => $formWebsite,
201
                'formIndustry'          => $formIndustry,
202
                'formCompanySize'       => $formCompanySize,
203
                'image_size_cover'      => $image_size_cover,
204
                'image_size_profile'    => $image_size_profile,
781 geraldo 205
                'image_size_header'    => $image_size_header,
206
                'image_size_footer'    => $image_size_footer,
1 www 207
            ]);
5992 stevensc 208
            return $viewModel;
1 www 209
        } else {
210
            $data = [
211
                'success' => false,
212
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
213
            ];
5992 stevensc 214
 
1 www 215
            return new JsonModel($data);
216
        }
5992 stevensc 217
 
1 www 218
        return new JsonModel($data);
219
    }
5992 stevensc 220
 
221
 
1 www 222
    /**
223
     *
224
     * Borrar un perfil excepto el público
225
     * @return \Laminas\View\Model\JsonModel
226
     */
227
    public function deleteAction()
228
    {
229
 
230
        $currentUserPlugin = $this->plugin('currentUserPlugin');
231
        $currentUser = $currentUserPlugin->getUser();
232
        $currentCompany = $currentUserPlugin->getCompany();
5992 stevensc 233
 
1 www 234
        $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
235
        $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($currentCompany->id, $currentUser->id);
5992 stevensc 236
 
237
        if (!$companyUser || $companyUser->type != CompanyUser::CREATOR_YES) {
1 www 238
            $response = [
239
                'success' => false,
240
                'data' => 'ERROR_UNAUTHORIZED'
241
            ];
5992 stevensc 242
 
1 www 243
            return new JsonModel($response);
244
        }
5992 stevensc 245
 
246
 
247
        if ($request->isPost()) {
1 www 248
            $companyMapper = CompanyMapper::getInstance($this->adapter);
249
            $result = $companyMapper->delete($companyUser->id);
5992 stevensc 250
            if ($result) {
1 www 251
                $this->logger->info('Se borro la empresa : ' .  $currentCompany->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
5992 stevensc 252
 
1 www 253
                $data = [
254
                    'success' => true,
255
                    'data' => 'LABEL_RECORD_DELETED'
256
                ];
257
            } else {
5992 stevensc 258
 
1 www 259
                $data = [
260
                    'success'   => false,
261
                    'data'      => $companyUserMapper->getError()
262
                ];
5992 stevensc 263
 
1 www 264
                return new JsonModel($data);
265
            }
266
        } else {
267
            $data = [
268
                'success' => false,
269
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
270
            ];
5992 stevensc 271
 
1 www 272
            return new JsonModel($data);
273
        }
5992 stevensc 274
 
1 www 275
        return new JsonModel($data);
276
    }
5992 stevensc 277
 
278
 
279
 
1 www 280
    /**
281
     * Actualización de la descripción y cualquier otro campo extendido del perfil a futuro
282
     * @return \Laminas\View\Model\JsonModel
283
     */
284
    public function extendedAction()
285
    {
286
 
287
        $currentUserPlugin = $this->plugin('currentUserPlugin');
288
        $currentUser = $currentUserPlugin->getUser();
289
        $currentCompany = $currentUserPlugin->getCompany();
290
 
291
        $request = $this->getRequest();
5992 stevensc 292
        if ($request->isGet()) {
1 www 293
            $companyMapper = CompanyMapper::getInstance($this->adapter);
294
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 295
 
1 www 296
            $data = [
297
                'success' => true,
298
                'data' => [
299
                    'description' => $company->description,
300
                ]
301
            ];
5992 stevensc 302
 
1 www 303
            return new JsonModel($data);
5992 stevensc 304
        } else if ($request->isPost()) {
1 www 305
            $form = new CompanyProfileExtendedForm();
306
            $dataPost = $request->getPost()->toArray();
5992 stevensc 307
 
1 www 308
            $form->setData($dataPost);
5992 stevensc 309
 
310
            if ($form->isValid()) {
1 www 311
                $companyMapper = CompanyMapper::getInstance($this->adapter);
312
                $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 313
 
1 www 314
                $dataPost = (array) $form->getData();
5992 stevensc 315
 
1 www 316
                $hydrator = new ObjectPropertyHydrator();
317
                $hydrator->hydrate($dataPost, $company);
5992 stevensc 318
 
1 www 319
                $companyMapper->updateExtended($company);
5992 stevensc 320
 
1 www 321
                $this->logger->info('Se actualizo las descripción de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
5992 stevensc 322
 
1 www 323
                return new JsonModel([
324
                    'success'   => true,
325
                    'data' => [
6602 stevensc 326
                        'description' => strip_tags($company->description, 'p')
1 www 327
                    ]
328
                ]);
329
            } else {
330
                $messages = [];
331
                $form_messages = (array) $form->getMessages();
5992 stevensc 332
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 333
                    $messages[$fieldname] = array_values($field_messages);
334
                }
5992 stevensc 335
 
1 www 336
                return new JsonModel([
337
                    'success'   => false,
338
                    'data'   => $messages
339
                ]);
340
            }
341
        }
5992 stevensc 342
 
343
 
1 www 344
        $data = [
345
            'success' => false,
346
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
347
        ];
5992 stevensc 348
 
349
 
1 www 350
        return new JsonModel($data);
351
    }
5992 stevensc 352
 
1 www 353
    /**
354
     * Actualización de la descripción y cualquier otro campo extendido del perfil a futuro
355
     * @return \Laminas\View\Model\JsonModel
356
     */
357
    public function websiteAction()
358
    {
359
        $currentUserPlugin = $this->plugin('currentUserPlugin');
360
        $currentUser = $currentUserPlugin->getUser();
361
        $currentCompany = $currentUserPlugin->getCompany();
362
 
363
        $request = $this->getRequest();
5992 stevensc 364
        if ($request->isGet()) {
1 www 365
            $companyMapper = CompanyMapper::getInstance($this->adapter);
366
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 367
 
1 www 368
            $data = [
369
                'success' => true,
370
                'data' => [
371
                    'website' => $company->website,
372
                ]
373
            ];
5992 stevensc 374
 
1 www 375
            return new JsonModel($data);
5992 stevensc 376
        } else if ($request->isPost()) {
377
 
378
 
1 www 379
            $form = new CompanyProfileWebsiteForm();
380
            $dataPost = $request->getPost()->toArray();
5992 stevensc 381
 
1 www 382
            $form->setData($dataPost);
5992 stevensc 383
 
384
            if ($form->isValid()) {
1 www 385
                $companyMapper = CompanyMapper::getInstance($this->adapter);
386
                $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 387
 
1 www 388
                $dataPost = (array) $form->getData();
5992 stevensc 389
 
1 www 390
                $hydrator = new ObjectPropertyHydrator();
391
                $hydrator->hydrate($dataPost, $company);
5992 stevensc 392
 
1 www 393
                $companyMapper->updateWebsite($company);
5992 stevensc 394
 
1 www 395
                $this->logger->info('Se actualizo el website de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
5992 stevensc 396
 
1 www 397
                return new JsonModel([
398
                    'success'   => true,
399
                    'data' => [
400
                        'website' => $company->website,
401
                    ]
402
                ]);
403
            } else {
404
                $messages = [];
405
                $form_messages = (array) $form->getMessages();
5992 stevensc 406
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 407
                    $messages[$fieldname] = array_values($field_messages);
408
                }
5992 stevensc 409
 
1 www 410
                return new JsonModel([
411
                    'success'   => false,
412
                    'data'   => $messages
413
                ]);
414
            }
415
        }
5992 stevensc 416
 
417
 
1 www 418
        $data = [
419
            'success' => false,
420
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
421
        ];
5992 stevensc 422
 
423
 
1 www 424
        return new JsonModel($data);
425
    }
5992 stevensc 426
 
1 www 427
    /**
428
     * Actualización de la descripción y cualquier otro campo extendido del perfil a futuro
429
     * @return \Laminas\View\Model\JsonModel
430
     */
431
    public function foundationYearAction()
432
    {
5992 stevensc 433
 
1 www 434
        $currentUserPlugin = $this->plugin('currentUserPlugin');
435
        $currentUser = $currentUserPlugin->getUser();
436
        $currentCompany = $currentUserPlugin->getCompany();
437
 
5992 stevensc 438
 
439
 
1 www 440
        $request = $this->getRequest();
5992 stevensc 441
        if ($request->isGet()) {
1 www 442
            $companyMapper = CompanyMapper::getInstance($this->adapter);
443
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 444
 
1 www 445
            $data = [
446
                'success' => true,
447
                'data' => [
448
                    'foundation_year' => $company->foundation_year,
449
                ]
5992 stevensc 450
 
1 www 451
            ];
5992 stevensc 452
 
1 www 453
            return new JsonModel($data);
5992 stevensc 454
        } else if ($request->isPost()) {
455
 
456
 
1 www 457
            $form = new CompanyProfileFoundationYearForm();
458
            $dataPost = $request->getPost()->toArray();
5992 stevensc 459
 
1 www 460
            $form->setData($dataPost);
5992 stevensc 461
 
462
            if ($form->isValid()) {
1 www 463
                $companyMapper = CompanyMapper::getInstance($this->adapter);
464
                $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 465
 
1 www 466
                $dataPost = (array) $form->getData();
5992 stevensc 467
 
1 www 468
                $hydrator = new ObjectPropertyHydrator();
469
                $hydrator->hydrate($dataPost, $company);
5992 stevensc 470
 
1 www 471
                $companyMapper->updateFoundationYear($company);
5992 stevensc 472
 
1 www 473
                $this->logger->info('Se actualizo el año de fundación de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
5992 stevensc 474
 
1 www 475
                return new JsonModel([
476
                    'success'   => true,
477
                    'data' => $company->foundation_year,
478
                ]);
479
            } else {
480
                $messages = [];
481
                $form_messages = (array) $form->getMessages();
5992 stevensc 482
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 483
                    $messages[$fieldname] = array_values($field_messages);
484
                }
5992 stevensc 485
 
1 www 486
                return new JsonModel([
487
                    'success'   => false,
488
                    'data'   => $messages
489
                ]);
490
            }
491
        }
5992 stevensc 492
 
493
 
1 www 494
        $data = [
495
            'success' => false,
496
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
497
        ];
5992 stevensc 498
 
499
 
1 www 500
        return new JsonModel($data);
501
    }
5992 stevensc 502
 
503
 
1 www 504
    /**
505
     * Actualización de la ubucación
506
     * @return \Laminas\View\Model\JsonModel
507
     */
508
    public function locationAction()
509
    {
510
        $currentUserPlugin = $this->plugin('currentUserPlugin');
511
        $currentUser = $currentUserPlugin->getUser();
512
        $currentCompany = $currentUserPlugin->getCompany();
5992 stevensc 513
 
1 www 514
        $operation = $this->params()->fromRoute('operation');
5992 stevensc 515
        if ($operation == 'edit' || $operation == 'delete') {
1 www 516
            $id = $this->params()->fromRoute('id');
5992 stevensc 517
            if (!$id) {
1 www 518
                $response = [
519
                    'success' => false,
520
                    'data' => 'ERROR_INVALID_PARAMETER'
521
                ];
5992 stevensc 522
 
1 www 523
                return new JsonModel($response);
524
            }
525
        } else {
526
            $id = '';
527
        }
528
 
529
        $request = $this->getRequest();
5992 stevensc 530
        if ($request->isPost()) {
1 www 531
            $companyMapper = CompanyMapper::getInstance($this->adapter);
532
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 533
 
1 www 534
            $companyLocationMapper = CompanyLocationMapper::getInstance($this->adapter);
5992 stevensc 535
 
536
 
1 www 537
            $companyLocation = null;
5992 stevensc 538
            if ($id) {
1 www 539
                $companyLocation = $companyLocationMapper->fetchOneByUuid($id);
5992 stevensc 540
                if (!$companyLocation) {
1 www 541
                    $response = [
542
                        'success' => false,
543
                        'data' => 'ERROR_RECORD_NOT_FOUND'
544
                    ];
5992 stevensc 545
 
1 www 546
                    return new JsonModel($response);
547
                }
5992 stevensc 548
 
549
                if ($companyLocation->company_id != $company->id) {
1 www 550
                    $response = [
551
                        'success' => false,
552
                        'data' => 'ERROR_UNAUTHORIZED'
553
                    ];
554
                    return new JsonModel($response);
555
                }
556
            }
5992 stevensc 557
 
1 www 558
            $locationMapper = LocationMapper::getInstance($this->adapter);
559
            $response = [];
560
 
561
 
5992 stevensc 562
 
563
            if ($operation == 'delete' && $companyLocation) {
564
 
565
                if ($companyLocationMapper->delete($companyLocation->id)) {
1 www 566
                    $this->logger->info('Se borrar una ubicación de la empresa: ' . $company->name, ['user_id' => $currentUser->id,  'ip' => Functions::getUserIP()]);
567
                    $locationMapper->delete($companyLocation->location_id);
568
                } else {
569
                    $response = [
570
                        'success'   => false,
571
                        'data' => 'ERROR_THERE_WAS_AN_ERROR'
572
                    ];
573
                }
574
            } else {
575
                $form = new CompanyProfileLocationForm();
576
                $dataPost = $request->getPost()->toArray();
5992 stevensc 577
 
578
 
1 www 579
                $dataPost['is_main'] = isset($dataPost['is_main']) ? $dataPost['is_main'] : CompanyLocation::IS_MAIN_NO;
580
 
5992 stevensc 581
 
1 www 582
                $form->setData($dataPost);
5992 stevensc 583
 
584
                if ($form->isValid()) {
585
 
586
                    if ($operation == 'edit') {
1 www 587
                        $location = $locationMapper->fetchOne($companyLocation->location_id);
588
                    } else {
589
                        $location = new Location();
590
                    }
5992 stevensc 591
 
1 www 592
                    $dataPost = (array) $form->getData();
593
                    $hydrator = new ObjectPropertyHydrator();
594
                    $hydrator->hydrate($dataPost, $location);
5992 stevensc 595
 
596
                    if ($operation == 'edit') {
597
 
598
 
1 www 599
                        $companyLocation->is_main = $dataPost['is_main'];
600
                        $companyLocationMapper->update($companyLocation);
5992 stevensc 601
 
602
 
1 www 603
                        $location = $locationMapper->update($location);
5992 stevensc 604
                        $this->logger->info('Se actualizo una ubicación de la empresa: ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1 www 605
                    } else {
5992 stevensc 606
 
1 www 607
                        $result = $locationMapper->insert($location);
5992 stevensc 608
 
609
                        if ($result) {
1 www 610
                            $companyLocation = new CompanyLocation();
611
                            $companyLocation->company_id = $currentCompany->id;
612
                            $companyLocation->location_id = $location->id;
613
                            $companyLocation->is_main = $dataPost['is_main'];
5992 stevensc 614
 
1 www 615
                            $companyLocationMapper->insert($companyLocation);
5992 stevensc 616
                            $this->logger->info('Se agrego una ubicación a la empresa: ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1 www 617
                        } else {
618
                            $response = [
619
                                'success'   => false,
620
                                'data' => 'ERROR_THERE_WAS_AN_ERROR'
621
                            ];
622
                        }
623
                    }
624
                } else {
625
                    return new JsonModel([
626
                        'success'   => false,
627
                        'data'   =>   'ERROR_PLACED_AUTOCOMPLETE_DOES_NOT_CONTAIN_GEOMETRY'
628
                    ]);
629
                }
630
            }
5992 stevensc 631
 
632
            if (!$response) {
1 www 633
                $records = $companyLocationMapper->fetchAllLocationByCompanyId($currentCompany->id);
5992 stevensc 634
 
635
 
1 www 636
                $locations = [];
5992 stevensc 637
                foreach ($records as $record) {
1 www 638
                    $location =  [
639
                        'formatted_address'  => $record['formatted_address'],
640
                        'country' => $record['country'],
641
                        'is_main' => $record['is_main'],
5992 stevensc 642
                        'link_edit' => $this->url()->fromRoute('profile/location', ['id' => $record['company_location_uuid'], 'operation' => 'edit']),
4278 efrain 643
                        'link_delete' => $this->url()->fromRoute('profile/location', ['id' => $record['company_location_uuid'], 'operation' => 'delete'])
5992 stevensc 644
 
1 www 645
                    ];
5992 stevensc 646
 
1 www 647
                    array_push($locations, $location);
648
                }
5992 stevensc 649
 
1 www 650
                $response = [
651
                    'success' => true,
652
                    'data' => $locations
653
                ];
654
            }
5992 stevensc 655
 
1 www 656
            return new JsonModel($response);
5992 stevensc 657
        } else if ($request->isGet() && $operation == 'edit') {
1 www 658
 
5992 stevensc 659
 
660
 
1 www 661
            $companyLocationMapper = CompanyLocationMapper::getInstance($this->adapter);
662
            $companyLocation = $companyLocationMapper->fetchOneByUuid($id);
663
 
5992 stevensc 664
 
665
 
666
            if (!$companyLocation) {
1 www 667
                $response = [
668
                    'success' => false,
669
                    'data' => 'ERROR_RECORD_NOT_FOUND'
670
                ];
5992 stevensc 671
 
1 www 672
                return new JsonModel($response);
673
            }
5992 stevensc 674
 
675
            if ($companyLocation->company_id != $currentCompany->id) {
1 www 676
                $response = [
677
                    'success' => false,
678
                    'data' => 'ERROR_UNAUTHORIZED'
679
                ];
680
                return new JsonModel($response);
681
            }
5992 stevensc 682
 
1 www 683
            $locationMapper = LocationMapper::getInstance($this->adapter);
684
            $location = $locationMapper->fetchOne($companyLocation->location_id);
685
 
686
            $hydrator = new ObjectPropertyHydrator();
687
            $data = $hydrator->extract($location);
5992 stevensc 688
 
1 www 689
            $data['is_main'] = $companyLocation->is_main;
5992 stevensc 690
 
1 www 691
            $response = [
692
                'success' => true,
693
                'data' =>  $data
694
            ];
5992 stevensc 695
 
1 www 696
            return new JsonModel($response);
697
        }
5992 stevensc 698
 
1 www 699
        $response = [
700
            'success' => false,
701
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
702
        ];
5992 stevensc 703
 
704
 
1 www 705
        return new JsonModel($response);
706
    }
5992 stevensc 707
 
1 www 708
    /**
709
     * Actualización de las redes sociales
710
     * @return \Laminas\View\Model\JsonModel
711
     */
712
    public function socialNetworkAction()
713
    {
5992 stevensc 714
 
715
 
1 www 716
        $currentUserPlugin = $this->plugin('currentUserPlugin');
717
        $currentUser = $currentUserPlugin->getUser();
718
        $currentCompany = $currentUserPlugin->getCompany();
719
 
5992 stevensc 720
 
721
 
1 www 722
        $request = $this->getRequest();
5992 stevensc 723
        if ($request->isGet()) {
1 www 724
            $companyMapper = CompanyMapper::getInstance($this->adapter);
725
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 726
 
1 www 727
            $data = [
728
                'success' => true,
729
                'data' => [
730
                    'facebook' => $company->facebook,
731
                    'instagram' => $company->instagram,
732
                    'twitter' => $company->twitter
733
                ]
734
            ];
5992 stevensc 735
 
1 www 736
            return new JsonModel($data);
5992 stevensc 737
        } else if ($request->isPost()) {
738
 
1 www 739
            $form = new CompanyProfileSocialNetworkForm();
740
            $dataPost = $request->getPost()->toArray();
5992 stevensc 741
 
1 www 742
            $form->setData($dataPost);
5992 stevensc 743
 
744
            if ($form->isValid()) {
1 www 745
                $companyMapper = CompanyMapper::getInstance($this->adapter);
746
                $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 747
 
748
                $this->logger->info('Se actualizaron las redes sociales de la empresa: ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
749
 
1 www 750
                $dataPost = (array) $form->getData();
5992 stevensc 751
 
1 www 752
                $hydrator = new ObjectPropertyHydrator();
753
                $hydrator->hydrate($dataPost, $company);
5992 stevensc 754
 
1 www 755
                $companyMapper->updateSocialNetwork($company);
756
                return new JsonModel([
757
                    'success'   => true,
758
                    'data' => [
759
                        'facebook' => $company->facebook,
760
                        'instagram' => $company->instagram,
761
                        'twitter' => $company->twitter
762
                    ]
763
                ]);
764
            } else {
765
                $messages = [];
766
                $form_messages = (array) $form->getMessages();
5992 stevensc 767
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 768
                    $messages[$fieldname] = array_values($field_messages);
769
                }
5992 stevensc 770
 
1 www 771
                return new JsonModel([
772
                    'success'   => false,
773
                    'data'   => $messages
774
                ]);
775
            }
776
        }
5992 stevensc 777
 
778
 
1 www 779
        $data = [
780
            'success' => false,
781
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
782
        ];
5992 stevensc 783
 
784
 
1 www 785
        return new JsonModel($data);
786
    }
5992 stevensc 787
 
788
 
789
 
1 www 790
    /**
791
     * Cambio de la imagen del image del perfil
792
     * @return \Laminas\View\Model\JsonModel
793
     */
794
    public function imageAction()
795
    {
796
        $currentUserPlugin = $this->plugin('currentUserPlugin');
797
        $currentUser = $currentUserPlugin->getUser();
798
        $currentCompany = $currentUserPlugin->getCompany();
5992 stevensc 799
 
1 www 800
        $operation  = $this->params()->fromRoute('operation');
801
 
802
 
5992 stevensc 803
 
804
 
805
 
1 www 806
        $request = $this->getRequest();
5992 stevensc 807
        if ($request->isPost()) {
1 www 808
            $companyMapper = CompanyMapper::getInstance($this->adapter);
809
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 810
 
1 www 811
            $target_path = $this->config['leaderslinked.fullpath.company'] . DIRECTORY_SEPARATOR . $company->uuid;
5992 stevensc 812
 
813
            if ($operation == 'delete') {
814
                $this->logger->info('Se borro la imagen de la empresa: ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
815
 
816
                if ($company->image) {
817
 
818
                    if (!Image::delete($target_path, $company->image)) {
1 www 819
                        return new JsonModel([
820
                            'success'   => false,
821
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
822
                        ]);
823
                    }
824
                }
5992 stevensc 825
 
1 www 826
                $company->image = '';
5992 stevensc 827
                if (!$companyMapper->updateImage($company)) {
1 www 828
                    return new JsonModel([
829
                        'success'   => false,
830
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
831
                    ]);
832
                }
833
            } else {
834
                $form = new CompanyProfileImageForm($this->config);
5992 stevensc 835
                $data     = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
1 www 836
 
837
                $form->setData($data);
5992 stevensc 838
 
839
                if ($form->isValid()) {
840
 
1 www 841
                    $files = $request->getFiles()->toArray();
5992 stevensc 842
                    if (!empty($files['image']['error'])) {
843
 
1 www 844
                        return new JsonModel([
845
                            'success'   => false,
846
                            'data'   =>  'ERROR_UPLOAD_FILE'
847
                        ]);
848
                    }
5992 stevensc 849
 
850
 
851
                    if ($company->image) {
852
 
853
                        if (!Image::delete($target_path, $company->image)) {
1 www 854
                            return new JsonModel([
855
                                'success'   => false,
856
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
857
                            ]);
858
                        }
5992 stevensc 859
                    }
1 www 860
 
5992 stevensc 861
                    list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.company_image_size']);
1 www 862
                    $source             = $files['image']['tmp_name'];
863
                    $target_filename    = 'company-image-' . uniqid() . '.png';
864
                    $crop_to_dimensions = true;
865
 
5992 stevensc 866
                    if (!Image::uploadImage($source, $target_path, $target_filename, $target_width, $target_height, $crop_to_dimensions)) {
1 www 867
                        return new JsonModel([
868
                            'success'   => false,
869
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
870
                        ]);
871
                    }
5992 stevensc 872
 
873
 
1 www 874
                    $company->image = $target_filename;
5992 stevensc 875
                    if (!$companyMapper->updateImage($company)) {
1 www 876
                        return new JsonModel([
877
                            'success'   => false,
878
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
879
                        ]);
880
                    }
5992 stevensc 881
 
882
                    $this->logger->info('Se actualizo la imagen de la empresa: ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1 www 883
                } else {
884
                    $messages = [];
885
                    $form_messages = (array) $form->getMessages();
5992 stevensc 886
                    foreach ($form_messages  as $fieldname => $field_messages) {
1 www 887
                        $messages[$fieldname] = array_values($field_messages);
888
                    }
5992 stevensc 889
 
1 www 890
                    return new JsonModel([
891
                        'success'   => false,
892
                        'data'   => $messages
893
                    ]);
894
                }
895
            }
896
            return new JsonModel([
897
                'success'   => true,
898
                'data' => $this->url()->fromRoute('storage', ['type' => 'company', 'code' => $company->uuid, 'filename' => $company->image])
5992 stevensc 899
 
1 www 900
            ]);
901
        }
902
 
5992 stevensc 903
 
1 www 904
        $data = [
905
            'success' => false,
906
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
907
        ];
5992 stevensc 908
 
909
 
1 www 910
        return new JsonModel($data);
911
    }
5992 stevensc 912
 
1 www 913
    /**
914
     * Cambio de la imagen de fondo superior (cover) del perfil
915
     * @return \Laminas\View\Model\JsonModel
916
     */
917
    public function coverAction()
918
    {
919
        $operation          = $this->params()->fromRoute('operation');
920
 
5992 stevensc 921
 
1 www 922
        $currentUserPlugin = $this->plugin('currentUserPlugin');
923
        $currentUser = $currentUserPlugin->getUser();
924
        $currentCompany = $currentUserPlugin->getCompany();
925
 
5992 stevensc 926
 
927
 
928
 
1 www 929
        $request = $this->getRequest();
5992 stevensc 930
        if ($request->isPost()) {
931
 
1 www 932
            $companyMapper = CompanyMapper::getInstance($this->adapter);
933
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 934
 
1 www 935
            $target_path = $this->config['leaderslinked.fullpath.company'] . DIRECTORY_SEPARATOR . $company->uuid;
936
 
5992 stevensc 937
 
938
 
939
            if ($operation == 'delete') {
940
                if ($company->cover) {
941
 
942
                    if (!Image::delete($target_path, $company->cover)) {
1 www 943
                        return new JsonModel([
944
                            'success'   => false,
945
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
946
                        ]);
947
                    }
948
                }
5992 stevensc 949
 
1 www 950
                $this->logger->info('Se borro el cover de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
951
                $company->cover = '';
5992 stevensc 952
                if (!$companyMapper->updateCover($company)) {
1 www 953
                    return new JsonModel([
954
                        'success'   => false,
955
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
956
                    ]);
957
                }
958
            } else {
959
                $form = new CompanyProfileCoverForm($this->config);
5992 stevensc 960
                $data     = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
961
 
1 www 962
                $form->setData($data);
963
 
5992 stevensc 964
                if ($form->isValid()) {
965
 
966
 
1 www 967
                    $files = $request->getFiles()->toArray();
5992 stevensc 968
                    if (!empty($files['cover']['error'])) {
969
 
1 www 970
                        return new JsonModel([
971
                            'success'   => false,
972
                            'data'   =>  'ERROR_UPLOAD_FILE'
973
                        ]);
974
                    }
5992 stevensc 975
 
976
                    if ($company->cover) {
977
 
978
                        if (!Image::delete($target_path, $company->cover)) {
1 www 979
                            return new JsonModel([
980
                                'success'   => false,
981
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
982
                            ]);
983
                        }
984
                    }
5992 stevensc 985
 
986
                    list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.company_cover_size']);
1 www 987
                    $source             = $files['cover']['tmp_name'];
988
                    $target_filename    = 'company-cover-' . uniqid() . '.png';
989
                    $crop_to_dimensions = false;
5992 stevensc 990
 
991
                    if (!Image::uploadImage($source, $target_path, $target_filename, $target_width, $target_height, $crop_to_dimensions)) {
1 www 992
                        return new JsonModel([
993
                            'success'   => false,
994
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
995
                        ]);
996
                    }
5992 stevensc 997
 
998
 
1 www 999
                    $company->cover = $target_filename;
5992 stevensc 1000
                    if (!$companyMapper->updateCover($company)) {
1 www 1001
                        return new JsonModel([
1002
                            'success'   => false,
1003
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1004
                        ]);
1005
                    }
1006
 
1007
 
5992 stevensc 1008
 
1009
 
1 www 1010
                    $this->logger->info('Se actualizo el cover  de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1011
                } else {
1012
                    $messages = [];
1013
                    $form_messages = (array) $form->getMessages();
5992 stevensc 1014
                    foreach ($form_messages  as $fieldname => $field_messages) {
1 www 1015
                        $messages[$fieldname] = array_values($field_messages);
1016
                    }
5992 stevensc 1017
 
1 www 1018
                    return new JsonModel([
1019
                        'success'   => false,
1020
                        'data'   => $messages
1021
                    ]);
1022
                }
1023
            }
1024
            return new JsonModel([
1025
                'success'   => true,
1026
                'data' => $this->url()->fromRoute('storage', ['type' => 'company-cover', 'code' => $company->uuid, 'filename' => $company->cover])
5992 stevensc 1027
 
1 www 1028
            ]);
1029
        }
5992 stevensc 1030
 
1031
 
1 www 1032
        $data = [
1033
            'success' => false,
1034
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1035
        ];
5992 stevensc 1036
 
1037
 
1 www 1038
        return new JsonModel($data);
1039
    }
768 geraldo 1040
 
1041
 
1042
 
5992 stevensc 1043
    /**
768 geraldo 1044
     * Cambio de la imagen de de la cabecera de los reportes
1045
     * @return \Laminas\View\Model\JsonModel
1046
     */
1047
    public function headerAction()
1048
    {
1049
        $operation = $this->params()->fromRoute('operation');
1050
 
5992 stevensc 1051
 
768 geraldo 1052
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1053
        $currentUser = $currentUserPlugin->getUser();
1054
        $currentCompany = $currentUserPlugin->getCompany();
1055
 
5992 stevensc 1056
 
1057
 
1058
 
768 geraldo 1059
        $request = $this->getRequest();
5992 stevensc 1060
        if ($request->isPost()) {
1061
 
768 geraldo 1062
            $companyMapper = CompanyMapper::getInstance($this->adapter);
1063
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 1064
 
768 geraldo 1065
            $target_path = $this->config['leaderslinked.fullpath.company'] . DIRECTORY_SEPARATOR . $company->uuid;
1066
 
5992 stevensc 1067
 
1068
 
1069
            if ($operation == 'delete') {
1070
                if ($company->header) {
1071
 
1072
                    if (!Image::delete($target_path, $company->header)) {
768 geraldo 1073
                        return new JsonModel([
1074
                            'success'   => false,
1075
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1076
                        ]);
1077
                    }
1078
                }
5992 stevensc 1079
 
768 geraldo 1080
                $this->logger->info('Se borro el header  de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1081
                $company->header = '';
5992 stevensc 1082
                if (!$companyMapper->updateHeader($company)) {
768 geraldo 1083
                    return new JsonModel([
1084
                        'success'   => false,
1085
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1086
                    ]);
1087
                }
1088
            } else {
1089
                $form = new CompanyProfileHeaderForm($this->config);
1090
                $data   = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
5992 stevensc 1091
 
768 geraldo 1092
                $form->setData($data);
1093
 
5992 stevensc 1094
                if ($form->isValid()) {
1095
 
1096
 
768 geraldo 1097
                    $files = $request->getFiles()->toArray();
5992 stevensc 1098
                    if (!empty($files['header']['error'])) {
1099
 
768 geraldo 1100
                        return new JsonModel([
1101
                            'success'   => false,
1102
                            'data'   =>  'ERROR_UPLOAD_FILE'
1103
                        ]);
1104
                    }
5992 stevensc 1105
 
1106
                    if ($company->header) {
1107
 
1108
                        if (!Image::delete($target_path, $company->header)) {
768 geraldo 1109
                            return new JsonModel([
1110
                                'success'   => false,
1111
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1112
                            ]);
1113
                        }
1114
                    }
5992 stevensc 1115
 
1116
                    list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.company_header_pdf_size']);
768 geraldo 1117
                    $source             = $files['header']['tmp_name'];
1118
                    $target_filename    = 'company-header-' . uniqid() . '.png';
1119
                    $crop_to_dimensions = false;
5992 stevensc 1120
 
1121
                    if (!Image::uploadImage($source, $target_path, $target_filename, $target_width, $target_height, $crop_to_dimensions)) {
768 geraldo 1122
                        return new JsonModel([
1123
                            'success'   => false,
1124
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1125
                        ]);
1126
                    }
5992 stevensc 1127
 
1128
 
768 geraldo 1129
                    $company->header = $target_filename;
5992 stevensc 1130
                    if (!$companyMapper->updateHeader($company)) {
768 geraldo 1131
                        return new JsonModel([
1132
                            'success'   => false,
1133
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1134
                        ]);
1135
                    }
5992 stevensc 1136
 
1137
 
768 geraldo 1138
                    $this->logger->info('Se actualizo el header  de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1139
                } else {
1140
                    $messages = [];
1141
                    $form_messages = (array) $form->getMessages();
5992 stevensc 1142
                    foreach ($form_messages  as $fieldname => $field_messages) {
768 geraldo 1143
                        $messages[$fieldname] = array_values($field_messages);
1144
                    }
5992 stevensc 1145
 
768 geraldo 1146
                    return new JsonModel([
1147
                        'success'   => false,
1148
                        'data'   => $messages
1149
                    ]);
1150
                }
1151
            }
1152
            return new JsonModel([
1153
                'success'   => true,
810 geraldo 1154
                'data' => $this->url()->fromRoute('storage', ['type' => 'company', 'code' => $company->uuid, 'filename' => $company->header])
5992 stevensc 1155
 
768 geraldo 1156
            ]);
1157
        }
5992 stevensc 1158
 
1159
 
768 geraldo 1160
        $data = [
1161
            'success' => false,
1162
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1163
        ];
5992 stevensc 1164
 
1165
 
768 geraldo 1166
        return new JsonModel($data);
1167
    }
1168
 
1169
 
5992 stevensc 1170
    /**
768 geraldo 1171
     * Cambio de la imagen de de la cabecera de los reportes
1172
     * @return \Laminas\View\Model\JsonModel
1173
     */
1174
    public function footerAction()
1175
    {
1176
        $operation          = $this->params()->fromRoute('operation');
1177
 
5992 stevensc 1178
 
768 geraldo 1179
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1180
        $currentUser = $currentUserPlugin->getUser();
1181
        $currentCompany = $currentUserPlugin->getCompany();
1182
 
5992 stevensc 1183
 
1184
 
1185
 
768 geraldo 1186
        $request = $this->getRequest();
5992 stevensc 1187
        if ($request->isPost()) {
1188
 
768 geraldo 1189
            $companyMapper = CompanyMapper::getInstance($this->adapter);
1190
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 1191
 
768 geraldo 1192
            $target_path = $this->config['leaderslinked.fullpath.company'] . DIRECTORY_SEPARATOR . $company->uuid;
1193
 
5992 stevensc 1194
 
1195
 
1196
            if ($operation == 'delete') {
1197
                if ($company->footer) {
1198
 
1199
                    if (!Image::delete($target_path, $company->footer)) {
768 geraldo 1200
                        return new JsonModel([
1201
                            'success'   => false,
1202
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1203
                        ]);
1204
                    }
1205
                }
5992 stevensc 1206
 
768 geraldo 1207
                $this->logger->info('Se borro el footer  de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1208
                $company->footer = '';
5992 stevensc 1209
                if (!$companyMapper->updateFooter($company)) {
768 geraldo 1210
                    return new JsonModel([
1211
                        'success'   => false,
1212
                        'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1213
                    ]);
1214
                }
1215
            } else {
1216
                $form = new CompanyProfileFooterForm($this->config);
1217
                $data   = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
5992 stevensc 1218
 
768 geraldo 1219
                $form->setData($data);
1220
 
5992 stevensc 1221
                if ($form->isValid()) {
1222
 
1223
 
768 geraldo 1224
                    $files = $request->getFiles()->toArray();
5992 stevensc 1225
                    if (!empty($files['footer']['error'])) {
1226
 
768 geraldo 1227
                        return new JsonModel([
1228
                            'success'   => false,
1229
                            'data'   =>  'ERROR_UPLOAD_FILE'
1230
                        ]);
1231
                    }
5992 stevensc 1232
 
1233
                    if ($company->footer) {
1234
 
1235
                        if (!Image::delete($target_path, $company->footer)) {
768 geraldo 1236
                            return new JsonModel([
1237
                                'success'   => false,
1238
                                'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1239
                            ]);
1240
                        }
1241
                    }
5992 stevensc 1242
 
1243
                    list($target_width, $target_height) = explode('x', $this->config['leaderslinked.image_sizes.company_footer_pdf_size']);
768 geraldo 1244
                    $source             = $files['footer']['tmp_name'];
1245
                    $target_filename    = 'company-footer-' . uniqid() . '.png';
1246
                    $crop_to_dimensions = false;
5992 stevensc 1247
 
1248
                    if (!Image::uploadImage($source, $target_path, $target_filename, $target_width, $target_height, $crop_to_dimensions)) {
768 geraldo 1249
                        return new JsonModel([
1250
                            'success'   => false,
1251
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1252
                        ]);
1253
                    }
5992 stevensc 1254
 
1255
 
768 geraldo 1256
                    $company->footer = $target_filename;
5992 stevensc 1257
                    if (!$companyMapper->updateFooter($company)) {
768 geraldo 1258
                        return new JsonModel([
1259
                            'success'   => false,
1260
                            'data'   =>  'ERROR_THERE_WAS_AN_ERROR'
1261
                        ]);
1262
                    }
1263
 
1264
 
5992 stevensc 1265
 
1266
 
768 geraldo 1267
                    $this->logger->info('Se actualizo el footer  de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1268
                } else {
1269
                    $messages = [];
1270
                    $form_messages = (array) $form->getMessages();
5992 stevensc 1271
                    foreach ($form_messages  as $fieldname => $field_messages) {
768 geraldo 1272
                        $messages[$fieldname] = array_values($field_messages);
1273
                    }
5992 stevensc 1274
 
768 geraldo 1275
                    return new JsonModel([
1276
                        'success'   => false,
1277
                        'data'   => $messages
1278
                    ]);
1279
                }
1280
            }
1281
            return new JsonModel([
1282
                'success'   => true,
810 geraldo 1283
                'data' => $this->url()->fromRoute('storage', ['type' => 'company', 'code' => $company->uuid, 'filename' => $company->footer])
5992 stevensc 1284
 
768 geraldo 1285
            ]);
1286
        }
5992 stevensc 1287
 
1288
 
768 geraldo 1289
        $data = [
1290
            'success' => false,
1291
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1292
        ];
5992 stevensc 1293
 
1294
 
768 geraldo 1295
        return new JsonModel($data);
1296
    }
5992 stevensc 1297
 
1 www 1298
    /**
1299
     * Actualización de la descripción y cualquier otro campo extendido del perfil a futuro
1300
     * @return \Laminas\View\Model\JsonModel
1301
     */
1302
    public function industryAction()
1303
    {
5992 stevensc 1304
 
1 www 1305
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1306
        $currentUser = $currentUserPlugin->getUser();
1307
        $currentCompany = $currentUserPlugin->getCompany();
1308
 
5992 stevensc 1309
 
1310
 
1311
 
1312
 
1313
 
1 www 1314
        $request = $this->getRequest();
5992 stevensc 1315
        if ($request->isGet()) {
1 www 1316
            $companyMapper = CompanyMapper::getInstance($this->adapter);
1317
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 1318
 
8367 efrain 1319
            $industries = [];
1 www 1320
            $industryMapper = IndustryMapper::getInstance($this->adapter);
8367 efrain 1321
            $records = $industryMapper->fetchAllActives();
1322
 
1323
            foreach ($records as $record)
1324
            {
1325
                $industries[$record->uuid] = $record->name;
1326
            }
1327
 
1 www 1328
            $industry = $industryMapper->fetchOne($company->industry_id);
8367 efrain 1329
 
1330
 
1331
 
5992 stevensc 1332
 
1 www 1333
            $data = [
1334
                'success' => true,
1335
                'data' => [
1336
                    'industry_id' => $industry->uuid,
8367 efrain 1337
                    'industries' => $industries
1 www 1338
                ]
1339
            ];
5992 stevensc 1340
 
1 www 1341
            return new JsonModel($data);
5992 stevensc 1342
        } else if ($request->isPost()) {
1343
 
1344
 
14816 efrain 1345
 
1 www 1346
            $form = new CompanyProfileIndustryForm($this->adapter);
1347
            $dataPost = $request->getPost()->toArray();
5992 stevensc 1348
 
1 www 1349
            $form->setData($dataPost);
5992 stevensc 1350
 
1351
            if ($form->isValid()) {
1 www 1352
                $companyMapper = CompanyMapper::getInstance($this->adapter);
1353
                $company = $companyMapper->fetchOne($currentCompany->id);
1354
 
1355
                $dataPost = (array) $form->getData();
5992 stevensc 1356
 
1 www 1357
                $industryMapper = IndustryMapper::getInstance($this->adapter);
1358
                $industry = $industryMapper->fetchOneByUuid($dataPost['industry_id']);
5992 stevensc 1359
 
1 www 1360
                $company->industry_id = $industry->id;
1361
                $companyMapper->updateIndustry($company);
5992 stevensc 1362
 
1 www 1363
                $this->logger->info('Se actualizo la industria de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
5992 stevensc 1364
 
1 www 1365
                $industryMapper = IndustryMapper::getInstance($this->adapter);
1366
                $industry = $industryMapper->fetchOne($company->industry_id);
5992 stevensc 1367
 
1 www 1368
                return new JsonModel([
1369
                    'success'   => true,
1370
                    'data' =>  $industry->name,
5992 stevensc 1371
 
1 www 1372
                ]);
1373
            } else {
14816 efrain 1374
 
1 www 1375
                $messages = [];
1376
                $form_messages = (array) $form->getMessages();
5992 stevensc 1377
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 1378
                    $messages[$fieldname] = array_values($field_messages);
1379
                }
5992 stevensc 1380
 
1 www 1381
                return new JsonModel([
1382
                    'success'   => false,
1383
                    'data'   => $messages
1384
                ]);
1385
            }
1386
        }
5992 stevensc 1387
 
1388
 
1 www 1389
        $data = [
1390
            'success' => false,
1391
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1392
        ];
5992 stevensc 1393
 
1394
 
1 www 1395
        return new JsonModel($data);
1396
    }
5992 stevensc 1397
 
1 www 1398
    /**
1399
     * Actualización de la descripción y cualquier otro campo extendido del perfil a futuro
1400
     * @return \Laminas\View\Model\JsonModel
1401
     */
1402
    public function companySizeAction()
1403
    {
1404
 
1405
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1406
        $currentUser = $currentUserPlugin->getUser();
1407
        $currentCompany = $currentUserPlugin->getCompany();
1408
 
1409
 
5992 stevensc 1410
 
1411
 
1 www 1412
        $request = $this->getRequest();
5992 stevensc 1413
        if ($request->isGet()) {
1 www 1414
            $companyMapper = CompanyMapper::getInstance($this->adapter);
1415
            $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 1416
 
8367 efrain 1417
            $companySizes = [];
1418
 
1 www 1419
            $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
8367 efrain 1420
            $records = $companySizeMapper->fetchAllActives();
1421
 
1422
            foreach($records as $record)
1423
            {
1424
                $companySizes[$record->uuid] = $record->name . ' (' . $record->minimum_no_of_employee . '-' . $record->maximum_no_of_employee . ')';
1425
            }
1426
 
1427
 
1 www 1428
            $companySize = $companySizeMapper->fetchOne($company->company_size_id);
5992 stevensc 1429
 
1 www 1430
            $data = [
1431
                'success' => true,
1432
                'data' => [
8367 efrain 1433
                    'company_size_id' => $companySize->uuid,
1434
                    'company_sizes' => $companySizes
1 www 1435
                ]
1436
            ];
5992 stevensc 1437
 
1 www 1438
            return new JsonModel($data);
5992 stevensc 1439
        } else if ($request->isPost()) {
1440
 
1441
 
1 www 1442
            $form = new CompanyProfileCompanySizeForm($this->adapter);
1443
            $dataPost = $request->getPost()->toArray();
5992 stevensc 1444
 
1 www 1445
            $form->setData($dataPost);
5992 stevensc 1446
 
1447
            if ($form->isValid()) {
1 www 1448
                $companyMapper = CompanyMapper::getInstance($this->adapter);
1449
                $company = $companyMapper->fetchOne($currentCompany->id);
5992 stevensc 1450
 
1 www 1451
                $dataPost = (array) $form->getData();
5992 stevensc 1452
 
1 www 1453
                $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
1454
                $companySize = $companySizeMapper->fetchOneByUuid($dataPost['company_size_id']);
5992 stevensc 1455
 
1 www 1456
                $company->company_size_id = $companySize->id;
14816 efrain 1457
                $companyMapper->updateCompanySize($company);
5992 stevensc 1458
 
1 www 1459
                $this->logger->info('Se actualizo la industria de la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
5992 stevensc 1460
 
1 www 1461
                $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
1462
                $companySize = $companySizeMapper->fetchOne($company->company_size_id);
5992 stevensc 1463
 
1 www 1464
                return new JsonModel([
1465
                    'success'   => true,
5992 stevensc 1466
                    'data' => $companySize->name . ' (' . $companySize->minimum_no_of_employee . '-' . $companySize->maximum_no_of_employee . ')',
1467
 
1 www 1468
                ]);
1469
            } else {
1470
                $messages = [];
1471
                $form_messages = (array) $form->getMessages();
5992 stevensc 1472
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 1473
                    $messages[$fieldname] = array_values($field_messages);
1474
                }
5992 stevensc 1475
 
1 www 1476
                return new JsonModel([
1477
                    'success'   => false,
1478
                    'data'   => $messages
1479
                ]);
1480
            }
1481
        }
5992 stevensc 1482
 
1483
 
1 www 1484
        $data = [
1485
            'success' => false,
1486
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1487
        ];
5992 stevensc 1488
 
1489
 
1 www 1490
        return new JsonModel($data);
1491
    }
1492
}