Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15351 | Rev 16768 | 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
11139 stevensc 2
 
1 www 3
/**
4
 *
5
 * Controlador: Mis Perfiles
6
 *
7
 */
11139 stevensc 8
 
1 www 9
declare(strict_types=1);
10
 
11
namespace LeadersLinked\Controller;
12
 
13
use Laminas\Db\Adapter\AdapterInterface;
16766 efrain 14
use LeadersLinked\Cache\CacheInterface;
1 www 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
 
22
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
23
use LeadersLinked\Mapper\CompanyUserMapper;
24
use LeadersLinked\Model\Job;
25
use LeadersLinked\Model\Location;
26
use LeadersLinked\Mapper\LocationMapper;
27
use LeadersLinked\Mapper\JobMapper;
28
use LeadersLinked\Mapper\CompanyMapper;
29
use LeadersLinked\Model\CompanyUser;
30
use LeadersLinked\Mapper\QueryMapper;
31
 
32
use LeadersLinked\Mapper\JobCategoryMapper;
33
use LeadersLinked\Form\CompanyJobExtendedForm;
34
use LeadersLinked\Form\CompanyJobLocationForm;
35
use LeadersLinked\Form\CompanyJobCreateForm;
36
use LeadersLinked\Form\CompanyJobCategoryForm;
37
use LeadersLinked\Form\CompanyJobEmploymentTypeForm;
38
use LeadersLinked\Form\CompanyJobExperienceForm;
39
use LeadersLinked\Form\CompanyJobSalaryForm;
40
use LeadersLinked\Form\CompanyJobDegreeForm;
41
use LeadersLinked\Form\CompanyJobLanguageForm;
42
use LeadersLinked\Form\CompanyJobSkillForm;
43
use LeadersLinked\Form\CompanyJobLastDateOfApplicationForm;
44
use LeadersLinked\Mapper\JobSkillMapper;
45
use LeadersLinked\Model\JobSkill;
46
use LeadersLinked\Model\JobDegree;
47
use LeadersLinked\Mapper\JobDegreeMapper;
48
use LeadersLinked\Model\JobLanguage;
49
use LeadersLinked\Mapper\JobLanguageMapper;
50
use LeadersLinked\Mapper\DegreeMapper;
51
use LeadersLinked\Mapper\LanguageMapper;
52
use LeadersLinked\Mapper\SkillMapper;
53
use LeadersLinked\Mapper\UserMapper;
54
use LeadersLinked\Model\User;
55
use Laminas\Paginator\Adapter\DbSelect;
56
use Laminas\Paginator\Paginator;
57
use LeadersLinked\Mapper\JobApplicationMapper;
58
use LeadersLinked\Mapper\UserProfileMapper;
59
use LeadersLinked\Mapper\IndustryMapper;
60
use LeadersLinked\Mapper\CurrencyMapper;
61
use LeadersLinked\Form\CompanyJobTitleForm;
62
use LeadersLinked\Form\CompanyJobStatusForm;
63
 
64
class JobController extends AbstractActionController
65
{
66
    /**
67
     *
68
     * @var AdapterInterface
69
     */
70
    private $adapter;
11139 stevensc 71
 
72
 
1 www 73
    /**
74
     *
16766 efrain 75
     * @var CacheInterface
1 www 76
     */
77
    private $cache;
11139 stevensc 78
 
1 www 79
    /**
80
     *
81
     * @var  LoggerInterface
82
     */
83
    private $logger;
84
 
11139 stevensc 85
 
1 www 86
    /**
87
     *
88
     * @var array
89
     */
90
    private $config;
11139 stevensc 91
 
1 www 92
    /**
93
     *
94
     * @param AdapterInterface $adapter
16766 efrain 95
     * @param CacheInterface $cache
1 www 96
     * @param LoggerInterface $logger
97
     * @param array $config
98
     */
11139 stevensc 99
    public function __construct($adapter, $cache, $logger,  $config)
1 www 100
    {
101
        $this->adapter      = $adapter;
102
        $this->cache        = $cache;
103
        $this->logger       = $logger;
104
        $this->config       = $config;
11139 stevensc 105
    }
1 www 106
 
107
    /**
108
     *
109
     * Generación del listado de perfiles
110
     * {@inheritDoc}
111
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
112
     */
113
    public function indexAction()
114
    {
115
        $currentUserPlugin = $this->plugin('currentUserPlugin');
116
        $currentUser = $currentUserPlugin->getUser();
117
        $currentCompany = $currentUserPlugin->getCompany();
118
 
11139 stevensc 119
 
120
 
121
 
1 www 122
        $request = $this->getRequest();
11139 stevensc 123
        if ($request->isGet()) {
1 www 124
            $sandbox = $this->config['leaderslinked.runmode.sandbox'];
11139 stevensc 125
            if ($sandbox) {
1 www 126
                $google_map_key  = $this->config['leaderslinked.google_map.sandbox_api_key'];
127
            } else {
128
                $google_map_key  = $this->config['leaderslinked.google_map.production_api_key'];
129
            }
11139 stevensc 130
 
1 www 131
            $headers  = $request->getHeaders();
11139 stevensc 132
 
1 www 133
            $isJson = false;
11139 stevensc 134
            if ($headers->has('Accept')) {
1 www 135
                $accept = $headers->get('Accept');
11139 stevensc 136
 
1 www 137
                $prioritized = $accept->getPrioritized();
11139 stevensc 138
 
139
                foreach ($prioritized as $key => $value) {
1 www 140
                    $raw = trim($value->getRaw());
11139 stevensc 141
 
142
                    if (!$isJson) {
1 www 143
                        $isJson = strpos($raw, 'json');
144
                    }
145
                }
146
            }
11139 stevensc 147
 
148
            if ($isJson) {
7135 stevensc 149
                $search = $this->params()->fromQuery('search');
16766 efrain 150
                $search = empty($search) ? '' : Functions::sanitizeFilterString($search);
11139 stevensc 151
 
1 www 152
                $page               = intval($this->params()->fromQuery('start', 1), 10);
153
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
154
                $order =  $this->params()->fromQuery('order', []);
155
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
16766 efrain 156
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : Functions::sanitizeFilterString(filter_var($order[0]['dir']));
11139 stevensc 157
 
14875 efrain 158
                $fields =  ['last_date_of_application', 'title'];
1 www 159
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'last_date_of_application';
11139 stevensc 160
 
161
                if (!in_array($order_direction, ['ASC', 'DESC'])) {
1 www 162
                    $order_direction = 'ASC';
163
                }
11139 stevensc 164
 
1 www 165
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
166
                $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'jobs/delete');
11139 stevensc 167
 
1 www 168
                $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'jobs/edit');
169
                $allowUsersWhoApplied = $acl->isAllowed($currentUser->usertype_id, 'jobs/users-who-applied');
11139 stevensc 170
 
171
 
172
 
1 www 173
                $jobMapper = JobMapper::getInstance($this->adapter);
174
                $jobApplicationMapper = JobApplicationMapper::getInstance($this->adapter);
175
                $paginator = $jobMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);
176
 
11139 stevensc 177
 
1 www 178
                $records = $paginator->getCurrentItems();
179
 
180
                $items = [];
11139 stevensc 181
                foreach ($records as $record) {
182
 
183
                    switch ($record->status) {
184
                        case  Job::STATUS_ACTIVE:
1 www 185
                            $status = 'LABEL_ACTIVE';
186
                            break;
11139 stevensc 187
 
188
                        case  Job::STATUS_INACTIVE:
1 www 189
                            $status = 'LABEL_INACTIVE';
190
                            break;
11139 stevensc 191
 
192
 
193
                        case  Job::STATUS_DELETED:
1 www 194
                            $status = 'LABEL_DELETED';
195
                            break;
11139 stevensc 196
 
197
                        default:
1 www 198
                            $status = '';
199
                            break;
200
                    }
11139 stevensc 201
 
202
                    switch ($record->employment_type) {
203
                        case Job::EMPLOYMENT_TYPE_FULL_TIME:
1 www 204
                            $employment_type = 'LABEL_EMPLOYMENT_TYPE_FULL_TIME';
205
                            break;
11139 stevensc 206
                        case Job::EMPLOYMENT_TYPE_PART_TIME:
1 www 207
                            $employment_type = 'LABEL_EMPLOYMENT_TYPE_PART_TIME';
208
                            break;
11139 stevensc 209
 
210
                        case Job::EMPLOYMENT_TYPE_CONTRACT:
1 www 211
                            $employment_type = 'LABEL_EMPLOYMENT_TYPE_CONTRACT';
212
                            break;
11139 stevensc 213
 
214
                        case Job::EMPLOYMENT_TYPE_TEMPORARY:
1 www 215
                            $employment_type = 'LABEL_EMPLOYMENT_TYPE_TEMPORARY';
216
                            break;
11139 stevensc 217
 
218
                        default:
1 www 219
                            $employment_type = '';
220
                            break;
221
                    }
11139 stevensc 222
 
1 www 223
                    $users_who_applied = $jobApplicationMapper->fetchTotalApplicationsByJobId($record->id);
224
 
11139 stevensc 225
 
226
                    $dt = \DateTime::createFromFormat('Y-m-d', $record->last_date_of_application);
227
 
228
 
1 www 229
                    $item = [
11139 stevensc 230
                        'last_date_of_application' => $dt->format('d/m/Y'),
231
                        'title' => $record->title,
232
 
233
 
1 www 234
                        'details' => [
235
                            'status' => $status,
11139 stevensc 236
                            'employment_type' => $employment_type,
1 www 237
                            'users_who_applied' => $users_who_applied,
238
                        ],
239
                        'actions' => [
11139 stevensc 240
                            'link_edit' => $allowEdit ? $this->url()->fromRoute('jobs/edit', ['id' => $record->uuid]) : '',
241
                            'link_delete' => $allowDelete ? $this->url()->fromRoute('jobs/delete', ['id' => $record->uuid]) : '',
242
                            'link_users_who_applied'  => $allowUsersWhoApplied && $users_who_applied  ? $this->url()->fromRoute('jobs/users-who-applied', ['id' => $record->uuid]) : '',
243
                        ]
1 www 244
                    ];
11139 stevensc 245
 
1 www 246
                    array_push($items, $item);
247
                }
248
 
11139 stevensc 249
 
250
 
251
 
1 www 252
                $response = [
253
                    'success' => true,
254
                    'data' => [
255
                        'items' => $items,
256
                        'total' => $paginator->getTotalItemCount(),
257
                    ]
258
                ];
11139 stevensc 259
 
1 www 260
                return new JsonModel($response);
261
            } else {
11139 stevensc 262
 
263
 
1 www 264
                $formAdd = new CompanyJobCreateForm($this->adapter);
265
                $formExtended = new CompanyJobExtendedForm();
266
                $formLocation = new CompanyJobLocationForm();
267
                $formEmploymentType = new CompanyJobEmploymentTypeForm();
268
                $formJobCategory = new CompanyJobCategoryForm($this->adapter);
269
                $formExperience = new CompanyJobExperienceForm();
270
                $formSalary = new CompanyJobSalaryForm($this->adapter);
271
                $fromLastDateOfApplication = new CompanyJobLastDateOfApplicationForm();
272
                $formDegree = new CompanyJobDegreeForm($this->adapter);
273
                $formLanguage = new CompanyJobLanguageForm($this->adapter);
274
                $formSkill = new CompanyJobSkillForm($this->adapter);
275
                $formStatus = new CompanyJobStatusForm();
276
                $formTitle = new CompanyJobTitleForm();
11139 stevensc 277
 
278
                $jobCategories = [];
279
                $jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);
15087 efrain 280
                $records = $jobCategoryMapper->fetchAllActive();
11139 stevensc 281
 
282
                foreach ($records as $record) {
283
                    $jobCategories[$record->uuid] = $record->name;
284
                }
285
 
14156 efrain 286
 
1 www 287
                $this->layout()->setTemplate('layout/layout-backend');
288
                $viewModel = new ViewModel();
289
                $viewModel->setTemplate('leaders-linked/jobs/index.phtml');
290
                $viewModel->setVariables([
291
                    'formAdd'                   => $formAdd,
292
                    'formLocation'              => $formLocation,
293
                    'formExtended'              => $formExtended,
294
                    'formEmploymentType'        => $formEmploymentType,
295
                    'formJobCategory'           => $formJobCategory,
296
                    'formExperience'            => $formExperience,
297
                    'formSalary'                => $formSalary,
298
                    'fromLastDateOfApplication' => $fromLastDateOfApplication,
299
                    'formDegree'                => $formDegree,
300
                    'formLanguage'              => $formLanguage,
301
                    'formSkill'                 => $formSkill,
302
                    'formStatus'                => $formStatus,
303
                    'formTitle'                 => $formTitle,
11139 stevensc 304
                    'job_categories'            => $jobCategories,
1 www 305
                    'google_map_key'    => $google_map_key,
306
 
307
                ]);
11139 stevensc 308
                return $viewModel;
1 www 309
            }
310
        } else {
311
            return new JsonModel([
312
                'success' => false,
313
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
314
            ]);
315
        }
316
    }
11139 stevensc 317
 
1 www 318
    /**
319
     *
320
     * Agregar un nuevo perfil
321
     * @return \Laminas\View\Model\JsonModel
322
     */
323
    public function addAction()
324
    {
325
        $request = $this->getRequest();
11139 stevensc 326
 
327
 
1 www 328
        $currentUserPlugin = $this->plugin('currentUserPlugin');
329
        $currentUser = $currentUserPlugin->getUser();
330
        $currentCompany = $currentUserPlugin->getCompany();
331
 
11139 stevensc 332
 
333
 
334
        if ($request->isPost()) {
1 www 335
            $form = new  CompanyJobCreateForm($this->adapter);
336
            $dataPost = $request->getPost()->toArray();
11139 stevensc 337
 
1 www 338
            $form->setData($dataPost);
11139 stevensc 339
 
340
            if ($form->isValid()) {
1 www 341
                $companyMapper = CompanyMapper::getInstance($this->adapter);
342
                $company = $companyMapper->fetchOne($currentCompany->id);
11139 stevensc 343
 
344
 
1 www 345
                $dataPost = (array) $form->getData();
11139 stevensc 346
 
1 www 347
                $jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);
11139 stevensc 348
                $jobCategory = $jobCategoryMapper->fetchOneByUuid($dataPost['job_category_id']);
1 www 349
 
11139 stevensc 350
 
351
 
1 www 352
                $hydrator = new ObjectPropertyHydrator();
353
                $location = new Location();
354
                $hydrator->hydrate($dataPost, $location);
11139 stevensc 355
 
356
 
357
                $locationMapper = LocationMapper::getInstance($this->adapter);
1 www 358
                $result = $locationMapper->insert($location);
359
 
11139 stevensc 360
                if ($result) {
361
 
1 www 362
                    $job = new Job();
363
                    $hydrator->hydrate($dataPost, $job);
11139 stevensc 364
 
15349 efrain 365
                    $job->network_id = $currentUser->network_id;
1 www 366
                    $job->location_id = $location->id;
367
                    $job->status = Job::STATUS_INACTIVE;
368
                    $job->company_id = $company->id;
369
                    $job->job_category_id = $jobCategory->id;
370
                    $job->description = '';
11139 stevensc 371
 
1 www 372
                    $last_date_of_application = $job->last_date_of_application;
11139 stevensc 373
 
14875 efrain 374
                    $dt = \DateTime::createFromFormat('m/d/Y', $last_date_of_application);
11139 stevensc 375
                    if ($dt) {
1 www 376
                        $job->last_date_of_application = $dt->format('Y-m-d');
377
                    }
11139 stevensc 378
 
379
 
380
 
1 www 381
                    $jobMapper = JobMapper::getInstance($this->adapter);
382
                    $result = $jobMapper->insert($job);
11139 stevensc 383
 
384
                    if ($result) {
385
 
1 www 386
                        $this->logger->info('Se agrego el empleo : ' . $job->title . ' a  la empresa ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
11139 stevensc 387
 
388
                        switch ($job->employment_type) {
389
                            case Job::EMPLOYMENT_TYPE_FULL_TIME:
1 www 390
                                $employment_type = 'LABEL_EMPLOYMENT_TYPE_FULL_TIME';
391
                                break;
11139 stevensc 392
                            case Job::EMPLOYMENT_TYPE_PART_TIME:
1 www 393
                                $employment_type = 'LABEL_EMPLOYMENT_TYPE_PART_TIME';
394
                                break;
11139 stevensc 395
 
396
                            case Job::EMPLOYMENT_TYPE_CONTRACT:
1 www 397
                                $employment_type = 'LABEL_EMPLOYMENT_TYPE_CONTRACT';
398
                                break;
11139 stevensc 399
 
400
                            case Job::EMPLOYMENT_TYPE_TEMPORARY:
1 www 401
                                $employment_type = 'LABEL_EMPLOYMENT_TYPE_TEMPORARY';
402
                                break;
11139 stevensc 403
 
404
                            default:
1 www 405
                                $employment_type = '';
406
                                break;
407
                        }
11139 stevensc 408
 
1 www 409
                        $months = [
410
                            1 => 'LABEL_MONTH_JANUARY',
411
                            2 => 'LABEL_MONTH_FEBRUARY',
412
                            3 => 'LABEL_MONTH_MARCH',
413
                            4 => 'LABEL_MONTH_APRIL',
414
                            5 => 'LABEL_MONTH_MAY',
415
                            6 => 'LABEL_MONTH_JUNE',
416
                            7 => 'LABEL_MONTH_JULY',
417
                            8 => 'LABEL_MONTH_AUGUST',
418
                            9 => 'LABEL_MONTH_SEPTEMBER',
419
                            10 => 'LABEL_MONTH_OCTOBER',
420
                            11 => 'LABEL_MONTH_NOVEMBER',
421
                            12 => 'LABEL_MONTH_DECEMBER',
422
                        ];
11139 stevensc 423
 
1 www 424
                        $dt = \DateTime::createFromFormat('Y-m-d', $job->last_date_of_application);
425
                        $last_date_of_application = $dt->format('d') . ' de ' . $months[$dt->format('n')] . ' de ' . $dt->format('Y');
11139 stevensc 426
 
1 www 427
                        $job = $jobMapper->fetchOne($job->id);
11139 stevensc 428
 
429
 
1 www 430
                        //'LABEL_RECORD_ADDED'
431
                        $response = [
432
                            'success'   => true,
433
                            'data'   => [
434
                                'title' => $job->title,
435
                                'status' => 'LABEL_INACTIVE',
436
                                'employment_type' => $employment_type,
437
                                'job_category' => $jobCategory->name,
438
                                'last_date_of_application' => $last_date_of_application,
439
                                'location'  => $location->formatted_address,
11139 stevensc 440
                                'route_status' => $this->url()->fromRoute('jobs/edit/status', ['id' => $job->uuid]),
441
                                'route_title' => $this->url()->fromRoute('jobs/edit/title', ['id' => $job->uuid]),
442
                                'route_extended' => $this->url()->fromRoute('jobs/edit/extended', ['id' => $job->uuid]),
443
                                'route_location' => $this->url()->fromRoute('jobs/edit/location', ['id' => $job->uuid]),
444
                                'route_job_category' => $this->url()->fromRoute('jobs/edit/job-category', ['id' => $job->uuid]),
445
                                'route_employment_type' => $this->url()->fromRoute('jobs/edit/employment-type', ['id' => $job->uuid]),
446
                                'route_salary' => $this->url()->fromRoute('jobs/edit/salary', ['id' => $job->uuid]),
447
                                'route_experience' => $this->url()->fromRoute('jobs/edit/experience', ['id' => $job->uuid]),
448
                                'route_languages' => $this->url()->fromRoute('jobs/edit/languages', ['id' => $job->uuid]),
449
                                'route_degrees' => $this->url()->fromRoute('jobs/edit/degrees', ['id' => $job->uuid]),
450
                                'route_skills' => $this->url()->fromRoute('jobs/edit/skills', ['id' => $job->uuid]),
451
                                'route_last_date_of_application' => $this->url()->fromRoute('jobs/edit/last-date-of-application', ['id' => $job->uuid]),
452
 
1 www 453
                            ]
454
                        ];
455
                    } else {
456
                        $response = [
457
                            'success'   => false,
458
                            'data' => 'ERROR_THERE_WAS_AN_ERROR'
459
                        ];
460
                    }
461
                } else {
462
                    $response = [
463
                        'success'   => false,
464
                        'data' => 'ERROR_THERE_WAS_AN_ERROR'
465
                    ];
466
                }
467
            } else {
468
                $messages = [];
469
                $form_messages = (array) $form->getMessages();
11139 stevensc 470
                foreach ($form_messages  as $fieldname => $field_messages) {
471
 
1 www 472
                    $messages[$fieldname] = array_values($field_messages);
473
                }
11139 stevensc 474
 
1 www 475
                return new JsonModel([
476
                    'success'   => false,
477
                    'data'   => $messages
478
                ]);
479
            }
480
        } else {
481
            $response = [
482
                'success' => false,
483
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
484
            ];
11139 stevensc 485
        }
1 www 486
 
487
        return new JsonModel($response);
488
    }
11139 stevensc 489
 
1 www 490
    /**
491
     *
492
     * Borrar un perfil excepto el público
493
     * @return \Laminas\View\Model\JsonModel
494
     */
495
    public function deleteAction()
496
    {
11139 stevensc 497
 
1 www 498
        $currentUserPlugin = $this->plugin('currentUserPlugin');
499
        $currentUser = $currentUserPlugin->getUser();
500
        $currentCompany = $currentUserPlugin->getCompany();
11139 stevensc 501
 
502
 
1 www 503
        $request = $this->getRequest();
504
        $id = $this->params()->fromRoute('id');
11139 stevensc 505
 
506
        if (!$id) {
1 www 507
            $data = [
508
                'success'   => false,
509
                'data'   => 'ERROR_INVALID_PARAMETER'
510
            ];
11139 stevensc 511
 
1 www 512
            return new JsonModel($data);
513
        }
11139 stevensc 514
 
1 www 515
        $jobMapper = JobMapper::getInstance($this->adapter);
516
        $job = $jobMapper->fetchOneByUuid($id);
11139 stevensc 517
        if (!$job) {
1 www 518
            $data = [
519
                'success'   => false,
520
                'data'   => 'ERROR_JOB_NOT_FOUND'
521
            ];
11139 stevensc 522
 
1 www 523
            return new JsonModel($data);
524
        }
11139 stevensc 525
 
526
        if ($job->company_id != $currentCompany->id) {
1 www 527
            $data = [
528
                'success'   => false,
529
                'data'   => 'ERROR_UNAUTHORIZED'
530
            ];
11139 stevensc 531
 
1 www 532
            return new JsonModel($data);
533
        }
534
 
11139 stevensc 535
 
536
 
537
        if ($request->isPost()) {
1 www 538
            $companyMapper = CompanyMapper::getInstance($this->adapter);
539
            $company = $companyMapper->fetchOne($currentCompany->id);
11139 stevensc 540
 
1 www 541
            $result = $jobMapper->delete($job);
11139 stevensc 542
            if ($result) {
1 www 543
                $this->logger->info('Se borro el empleo : ' . $job->title . ' de la empresa : ' .  $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
11139 stevensc 544
 
1 www 545
                $data = [
546
                    'success' => true,
547
                    'data' => 'LABEL_RECORD_DELETED'
548
                ];
549
            } else {
11139 stevensc 550
 
1 www 551
                $data = [
552
                    'success'   => false,
553
                    'data'      => $job->getError()
554
                ];
11139 stevensc 555
 
1 www 556
                return new JsonModel($data);
557
            }
558
        } else {
559
            $data = [
560
                'success' => false,
561
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
562
            ];
11139 stevensc 563
 
1 www 564
            return new JsonModel($data);
565
        }
11139 stevensc 566
 
1 www 567
        return new JsonModel($data);
568
    }
11139 stevensc 569
 
1 www 570
    /**
571
     * Presenta el perfil con las opciónes de edición de cada sección
572
     * @return \Laminas\Http\Response|\Laminas\View\Model\ViewModel|\Laminas\View\Model\JsonModel
573
     */
574
    public function editAction()
575
    {
576
        $currentUserPlugin = $this->plugin('currentUserPlugin');
577
        $currentUser = $currentUserPlugin->getUser();
578
        $currentCompany = $currentUserPlugin->getCompany();
11139 stevensc 579
 
580
 
1 www 581
        $request = $this->getRequest();
582
        $id = $this->params()->fromRoute('id');
11139 stevensc 583
 
584
        if (!$id) {
1 www 585
            $data = [
586
                'success'   => false,
587
                'data'   => 'ERROR_INVALID_PARAMETER'
588
            ];
11139 stevensc 589
 
1 www 590
            return new JsonModel($data);
591
        }
11139 stevensc 592
 
1 www 593
        $jobMapper = JobMapper::getInstance($this->adapter);
594
        $job = $jobMapper->fetchOneByUuid($id);
11139 stevensc 595
        if (!$job) {
1 www 596
            $data = [
597
                'success'   => false,
598
                'data'   => 'ERROR_JOB_NOT_FOUND'
599
            ];
11139 stevensc 600
 
1 www 601
            return new JsonModel($data);
602
        }
11139 stevensc 603
 
604
        if ($job->company_id != $currentCompany->id) {
1 www 605
            $data = [
606
                'success'   => false,
607
                'data'   => 'ERROR_UNAUTHORIZED'
608
            ];
11139 stevensc 609
 
1 www 610
            return new JsonModel($data);
611
        }
612
 
11139 stevensc 613
 
614
        if ($request->isGet()) {
1 www 615
            $months = [
616
                1 => 'LABEL_MONTH_JANUARY',
617
                2 => 'LABEL_MONTH_FEBRUARY',
618
                3 => 'LABEL_MONTH_MARCH',
619
                4 => 'LABEL_MONTH_APRIL',
620
                5 => 'LABEL_MONTH_MAY',
621
                6 => 'LABEL_MONTH_JUNE',
622
                7 => 'LABEL_MONTH_JULY',
623
                8 => 'LABEL_MONTH_AUGUST',
624
                9 => 'LABEL_MONTH_SEPTEMBER',
625
                10 => 'LABEL_MONTH_OCTOBER',
626
                11 => 'LABEL_MONTH_NOVEMBER',
627
                12 => 'LABEL_MONTH_DECEMBER',
628
            ];
11139 stevensc 629
 
1 www 630
            $dt = \DateTime::createFromFormat('Y-m-d', $job->last_date_of_application);
631
            $last_date_of_application = $dt->format('d') . ' de ' . $months[$dt->format('n')] . ' de ' . $dt->format('Y');
11139 stevensc 632
 
633
 
634
 
1 www 635
            $locationMapper = LocationMapper::getInstance($this->adapter);
636
            $location = $locationMapper->fetchOne($job->location_id);
11139 stevensc 637
 
1 www 638
            $jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);
639
            $jobCategory = $jobCategoryMapper->fetchOne($job->job_category_id);
11139 stevensc 640
 
641
            switch ($job->employment_type) {
642
                case Job::EMPLOYMENT_TYPE_FULL_TIME:
1 www 643
                    $employment_type = 'LABEL_EMPLOYMENT_TYPE_FULL_TIME';
644
                    break;
11139 stevensc 645
                case Job::EMPLOYMENT_TYPE_PART_TIME:
1 www 646
                    $employment_type = 'LABEL_EMPLOYMENT_TYPE_PART_TIME';
647
                    break;
11139 stevensc 648
 
649
                case Job::EMPLOYMENT_TYPE_CONTRACT:
1 www 650
                    $employment_type = 'LABEL_EMPLOYMENT_TYPE_CONTRACT';
651
                    break;
11139 stevensc 652
 
653
                case Job::EMPLOYMENT_TYPE_TEMPORARY:
1 www 654
                    $employment_type = 'LABEL_EMPLOYMENT_TYPE_TEMPORARY';
655
                    break;
11139 stevensc 656
 
657
                default:
1 www 658
                    $employment_type = '';
659
                    break;
660
            }
661
 
11139 stevensc 662
            switch ($job->status) {
663
                case Job::STATUS_ACTIVE:
1 www 664
                    $status = 'LABEL_ACTIVE';
665
                    break;
11139 stevensc 666
 
667
                case Job::STATUS_INACTIVE:
1 www 668
                    $status = 'LABEL_INACTIVE';
669
                    break;
11139 stevensc 670
 
671
                default:
1 www 672
                    $status = '';
673
                    break;
674
            }
11139 stevensc 675
 
676
 
1 www 677
            $degreeMapper = DegreeMapper::getInstance($this->adapter);
11139 stevensc 678
 
1 www 679
            $jobDegreeMapper = JobDegreeMapper::getInstance($this->adapter);
680
            $records = $jobDegreeMapper->fetchAllByJobId($job->id);
11139 stevensc 681
 
1 www 682
            $job_degrees = [];
11139 stevensc 683
            foreach ($records as $record) {
1 www 684
                $degree = $degreeMapper->fetchOne($record->degree_id);
685
                array_push($job_degrees, $degree->name);
686
            }
687
 
11139 stevensc 688
 
1 www 689
            $languageMapper = LanguageMapper::getInstance($this->adapter);
690
            $jobLanguageMapper = JobLanguageMapper::getInstance($this->adapter);
691
            $records = $jobLanguageMapper->fetchAllByJobId($job->id);
11139 stevensc 692
 
1 www 693
            $job_languages = [];
11139 stevensc 694
            foreach ($records as $record) {
1 www 695
                $language = $languageMapper->fetchOne($record->language_id);
696
                array_push($job_languages, $language->name);
697
            }
11139 stevensc 698
 
1 www 699
            $skillMapper = SkillMapper::getInstance($this->adapter);
11139 stevensc 700
 
1 www 701
            $jobSkillMapper = JobSkillMapper::getInstance($this->adapter);
702
            $records = $jobSkillMapper->fetchAllByJobId($job->id);
11139 stevensc 703
 
1 www 704
            $job_skills = [];
11139 stevensc 705
            foreach ($records as $record) {
1 www 706
                $skill = $skillMapper->fetchOne($record->skill_id);
707
                array_push($job_skills, $skill->name);
708
            }
709
 
710
 
11139 stevensc 711
 
1 www 712
            return new JsonModel([
11139 stevensc 713
                'success' => true,
1 www 714
                'data' => [
715
                    'title'                     => $job->title,
716
                    'status'                    => $status,
11899 stevensc 717
                    'description'               => $job->description,
1 www 718
                    'location'                  => $location->formatted_address,
719
                    'employment_type'           => $employment_type,
720
                    'last_date_of_application'  => $last_date_of_application,
721
                    'job_category'              => $jobCategory->name,
722
                    'experience'                => $job->experience_visible ? $job->experience_min . '-' . $job->experience_max : '',
723
                    'salary'                    => $job->salary_visible ==  Job::SALARY_VISIBLE_YES ? $job->salary_min . '-' . $job->salary_max . ' ' . $job->salary_currency : '',
724
                    'degrees'                   => $job_degrees,
725
                    'languages'                 => $job_languages,
726
                    'skills'                    => $job_skills,
11139 stevensc 727
 
728
                    'route_status'              => $this->url()->fromRoute('jobs/edit/status', ['id' => $job->uuid]),
729
                    'route_title'               => $this->url()->fromRoute('jobs/edit/title', ['id' => $job->uuid]),
730
                    'route_extended'            => $this->url()->fromRoute('jobs/edit/extended', ['id' => $job->uuid]),
731
                    'route_location'            => $this->url()->fromRoute('jobs/edit/location', ['id' => $job->uuid]),
732
                    'route_job_category'        => $this->url()->fromRoute('jobs/edit/job-category', ['id' => $job->uuid]),
733
                    'route_employment_type'     => $this->url()->fromRoute('jobs/edit/employment-type', ['id' => $job->uuid]),
734
                    'route_salary'              => $this->url()->fromRoute('jobs/edit/salary', ['id' => $job->uuid]),
735
                    'route_experience'          => $this->url()->fromRoute('jobs/edit/experience', ['id' => $job->uuid]),
736
                    'route_languages'           => $this->url()->fromRoute('jobs/edit/languages', ['id' => $job->uuid]),
737
                    'route_degrees'             => $this->url()->fromRoute('jobs/edit/degrees', ['id' => $job->uuid]),
738
                    'route_skills'              => $this->url()->fromRoute('jobs/edit/skills', ['id' => $job->uuid]),
739
                    'route_last_date_of_application'    => $this->url()->fromRoute('jobs/edit/last-date-of-application', ['id' => $job->uuid]),
1 www 740
                ]
741
            ]);
742
        } else {
743
            $data = [
744
                'success' => false,
745
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
746
            ];
11139 stevensc 747
 
1 www 748
            return new JsonModel($data);
749
        }
11139 stevensc 750
 
1 www 751
        return new JsonModel($data);
752
    }
11139 stevensc 753
 
754
 
755
 
1 www 756
    /**
757
     * Actualización de la descripción y cualquier otro campo extendido del perfil a futuro
758
     * @return \Laminas\View\Model\JsonModel
759
     */
760
    public function extendedAction()
761
    {
762
        $currentUserPlugin = $this->plugin('currentUserPlugin');
763
        $currentUser = $currentUserPlugin->getUser();
764
        $currentCompany = $currentUserPlugin->getCompany();
11139 stevensc 765
 
766
 
1 www 767
        $request = $this->getRequest();
768
        $id = $this->params()->fromRoute('id');
769
 
11139 stevensc 770
 
771
        if (!$id) {
1 www 772
            $response = [
773
                'success' => false,
774
                'data' => 'ERROR_INVALID_PARAMETER'
775
            ];
11139 stevensc 776
 
1 www 777
            return new JsonModel($response);
778
        }
11139 stevensc 779
 
1 www 780
        $jobMapper = JobMapper::getInstance($this->adapter);
781
        $job = $jobMapper->fetchOneByUuid($id);
11139 stevensc 782
 
783
        if (!$job) {
1 www 784
            $response = [
785
                'success' => false,
786
                'data' => 'ERROR_JOB_NOT_FOUND'
787
            ];
11139 stevensc 788
 
1 www 789
            return new JsonModel($response);
790
        }
11139 stevensc 791
 
792
        if ($job->company_id != $currentCompany->id) {
1 www 793
            $response = [
794
                'success' => false,
795
                'data' => 'ERROR_UNAUTHORIZED'
796
            ];
11139 stevensc 797
 
1 www 798
            return new JsonModel($response);
799
        }
11139 stevensc 800
 
801
 
1 www 802
        $companyMapper = CompanyMapper::getInstance($this->adapter);
803
        $company = $companyMapper->fetchOne($currentCompany->id);
11139 stevensc 804
        if (!$company) {
1 www 805
            $response = [
806
                'success' => false,
807
                'data' => 'ERROR_COMPANY_NOT_FOUND'
808
            ];
11139 stevensc 809
 
1 www 810
            return new JsonModel($response);
811
        }
812
 
813
 
11139 stevensc 814
 
815
 
1 www 816
        $request = $this->getRequest();
11139 stevensc 817
        if ($request->isGet()) {
1 www 818
            $data = [
819
                'success' => true,
820
                'data' => [
7136 stevensc 821
                    'description' => strip_tags($job->description, 'p'),
1 www 822
                ]
823
            ];
11139 stevensc 824
 
1 www 825
            return new JsonModel($data);
11139 stevensc 826
        } else if ($request->isPost()) {
827
 
828
 
1 www 829
            $form = new CompanyJobExtendedForm();
830
            $dataPost = $request->getPost()->toArray();
11139 stevensc 831
 
1 www 832
            $form->setData($dataPost);
11139 stevensc 833
 
834
            if ($form->isValid()) {
1 www 835
                $dataPost = (array) $form->getData();
11139 stevensc 836
 
1 www 837
                $hydrator = new ObjectPropertyHydrator();
838
                $hydrator->hydrate($dataPost, $job);
11139 stevensc 839
 
1 www 840
                $jobMapper->updateExtended($job);
11139 stevensc 841
 
1 www 842
                $this->logger->info('Se actualizo las descripción del empleo ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
11139 stevensc 843
 
1 www 844
                return new JsonModel([
845
                    'success'   => true,
846
                    'data' => [
7136 stevensc 847
                        'description' => strip_tags($job->description, 'p'),
1 www 848
                    ]
849
                ]);
850
            } else {
851
                $messages = [];
852
                $form_messages = (array) $form->getMessages();
11139 stevensc 853
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 854
                    $messages[$fieldname] = array_values($field_messages);
855
                }
11139 stevensc 856
 
1 www 857
                return new JsonModel([
858
                    'success'   => false,
859
                    'data'   => $messages
860
                ]);
861
            }
862
        }
11139 stevensc 863
 
864
 
1 www 865
        $data = [
866
            'success' => false,
867
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
868
        ];
11139 stevensc 869
 
870
 
1 www 871
        return new JsonModel($data);
872
    }
11139 stevensc 873
 
874
 
1 www 875
    public function locationAction()
876
    {
11139 stevensc 877
 
1 www 878
        $currentUserPlugin = $this->plugin('currentUserPlugin');
879
        $currentUser = $currentUserPlugin->getUser();
880
        $currentCompany = $currentUserPlugin->getCompany();
11139 stevensc 881
 
882
 
1 www 883
        $request = $this->getRequest();
884
        $id = $this->params()->fromRoute('id');
11139 stevensc 885
 
886
 
887
        if (!$id) {
1 www 888
            $response = [
889
                'success' => false,
890
                'data' => 'ERROR_INVALID_PARAMETER'
891
            ];
11139 stevensc 892
 
1 www 893
            return new JsonModel($response);
894
        }
11139 stevensc 895
 
1 www 896
        $jobMapper = JobMapper::getInstance($this->adapter);
897
        $job = $jobMapper->fetchOneByUuid($id);
11139 stevensc 898
 
899
        if (!$job) {
1 www 900
            $response = [
901
                'success' => false,
902
                'data' => 'ERROR_JOB_NOT_FOUND'
903
            ];
11139 stevensc 904
 
1 www 905
            return new JsonModel($response);
906
        }
11139 stevensc 907
 
908
        if ($job->company_id != $currentCompany->id) {
1 www 909
            $response = [
910
                'success' => false,
911
                'data' => 'ERROR_UNAUTHORIZED'
912
            ];
11139 stevensc 913
 
1 www 914
            return new JsonModel($response);
915
        }
11139 stevensc 916
 
917
 
1 www 918
        $companyMapper = CompanyMapper::getInstance($this->adapter);
919
        $company = $companyMapper->fetchOne($currentCompany->id);
11139 stevensc 920
        if (!$company) {
1 www 921
            $response = [
922
                'success' => false,
923
                'data' => 'ERROR_COMPANY_NOT_FOUND'
924
            ];
11139 stevensc 925
 
1 www 926
            return new JsonModel($response);
927
        }
11139 stevensc 928
 
929
 
1 www 930
        $request = $this->getRequest();
11139 stevensc 931
        if ($request->isPost()) {
1 www 932
            $form = new CompanyJobLocationForm();
933
            $dataPost = $request->getPost()->toArray();
11139 stevensc 934
 
1 www 935
            $form->setData($dataPost);
11139 stevensc 936
            if ($form->isValid()) {
1 www 937
                $dataPost = (array) $form->getData();
11139 stevensc 938
 
1 www 939
                $locationMapper = LocationMapper::getInstance($this->adapter);
940
                $location = $locationMapper->fetchOne($job->location_id);
11139 stevensc 941
 
1 www 942
                $hydrator = new ObjectPropertyHydrator();
943
                $hydrator->hydrate($dataPost, $location);
11139 stevensc 944
 
945
                if ($locationMapper->update($location)) {
946
                    $this->logger->info('Se actualizo una ubicación del empleo: ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
947
 
948
                    $response = [
949
                        'success' => true,
950
                        'data' =>  $location->formatted_address
951
                    ];
1 www 952
                } else {
953
                    $response = [
954
                        'success'   => false,
955
                        'data' => 'ERROR_THERE_WAS_AN_ERROR'
956
                    ];
957
                }
958
            } else {
959
                $response = [
960
                    'success'   => false,
961
                    'data'   =>   'ERROR_PLACED_AUTOCOMPLETE_DOES_NOT_CONTAIN_GEOMETRY'
962
                ];
963
            }
11139 stevensc 964
 
1 www 965
            return new JsonModel($response);
966
        }
11139 stevensc 967
 
1 www 968
        $response = [
969
            'success' => false,
970
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
971
        ];
11139 stevensc 972
 
973
 
1 www 974
        return new JsonModel($response);
975
    }
11139 stevensc 976
 
1 www 977
    public function employmentTypeAction()
978
    {
11139 stevensc 979
 
1 www 980
        $currentUserPlugin = $this->plugin('currentUserPlugin');
981
        $currentUser = $currentUserPlugin->getUser();
982
        $currentCompany = $currentUserPlugin->getCompany();
11139 stevensc 983
 
984
 
1 www 985
        $request = $this->getRequest();
986
        $id = $this->params()->fromRoute('id');
11139 stevensc 987
 
988
 
989
        if (!$id) {
1 www 990
            $response = [
991
                'success' => false,
992
                'data' => 'ERROR_INVALID_PARAMETER'
993
            ];
11139 stevensc 994
 
1 www 995
            return new JsonModel($response);
996
        }
11139 stevensc 997
 
1 www 998
        $jobMapper = JobMapper::getInstance($this->adapter);
999
        $job = $jobMapper->fetchOneByUuid($id);
11139 stevensc 1000
 
1001
        if (!$job) {
1 www 1002
            $response = [
1003
                'success' => false,
1004
                'data' => 'ERROR_JOB_NOT_FOUND'
1005
            ];
11139 stevensc 1006
 
1 www 1007
            return new JsonModel($response);
1008
        }
11139 stevensc 1009
 
1010
        if ($job->company_id != $currentCompany->id) {
1 www 1011
            $response = [
1012
                'success' => false,
1013
                'data' => 'ERROR_UNAUTHORIZED'
1014
            ];
11139 stevensc 1015
 
1 www 1016
            return new JsonModel($response);
1017
        }
11139 stevensc 1018
 
1019
 
1 www 1020
        $companyMapper = CompanyMapper::getInstance($this->adapter);
1021
        $company = $companyMapper->fetchOne($currentCompany->id);
11139 stevensc 1022
        if (!$company) {
1 www 1023
            $response = [
1024
                'success' => false,
1025
                'data' => 'ERROR_COMPANY_NOT_FOUND'
1026
            ];
11139 stevensc 1027
 
1 www 1028
            return new JsonModel($response);
1029
        }
11139 stevensc 1030
 
8367 efrain 1031
        $employment_types = [];
1032
        $employment_types[Job::EMPLOYMENT_TYPE_FULL_TIME] = 'LABEL_EMPLOYMENT_TYPE_FULL_TIME';
1033
        $employment_types[Job::EMPLOYMENT_TYPE_PART_TIME] = 'LABEL_EMPLOYMENT_TYPE_PART_TIME';
1034
        $employment_types[Job::EMPLOYMENT_TYPE_CONTRACT] = 'LABEL_EMPLOYMENT_TYPE_CONTRACT';
1035
        $employment_types[Job::EMPLOYMENT_TYPE_TEMPORARY] = 'LABEL_EMPLOYMENT_TYPE_TEMPORARY';
1036
 
11139 stevensc 1037
 
1 www 1038
        $request = $this->getRequest();
11139 stevensc 1039
        if ($request->isGet()) {
1 www 1040
            $data = [
1041
                'success' => true,
8367 efrain 1042
                'data' => [
1043
                    'employment_type' => $job->employment_type,
1044
                    'employment_types' => $employment_types
11139 stevensc 1045
                ]
1 www 1046
            ];
11139 stevensc 1047
 
1 www 1048
            return new JsonModel($data);
11139 stevensc 1049
        } else if ($request->isPost()) {
1050
 
1 www 1051
            $form = new CompanyJobEmploymentTypeForm();
1052
            $dataPost = $request->getPost()->toArray();
11139 stevensc 1053
 
1 www 1054
            $form->setData($dataPost);
11139 stevensc 1055
 
1056
            if ($form->isValid()) {
1057
 
1 www 1058
                $dataPost = (array) $form->getData();
11139 stevensc 1059
 
1 www 1060
                $hydrator = new ObjectPropertyHydrator();
1061
                $hydrator->hydrate($dataPost, $job);
11139 stevensc 1062
 
1063
                if ($jobMapper->updateEmploymentType($job)) {
1064
                    $this->logger->info('Se actualizo tipo de empleo: ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1065
 
1066
                    switch ($job->employment_type) {
1067
                        case Job::EMPLOYMENT_TYPE_FULL_TIME:
1 www 1068
                            $employment_type = 'LABEL_EMPLOYMENT_TYPE_FULL_TIME';
1069
                            break;
11139 stevensc 1070
                        case Job::EMPLOYMENT_TYPE_PART_TIME:
1 www 1071
                            $employment_type = 'LABEL_EMPLOYMENT_TYPE_PART_TIME';
1072
                            break;
11139 stevensc 1073
 
1074
                        case Job::EMPLOYMENT_TYPE_CONTRACT:
1 www 1075
                            $employment_type = 'LABEL_EMPLOYMENT_TYPE_CONTRACT';
1076
                            break;
11139 stevensc 1077
 
1078
                        case Job::EMPLOYMENT_TYPE_TEMPORARY:
1 www 1079
                            $employment_type = 'LABEL_EMPLOYMENT_TYPE_TEMPORARY';
1080
                            break;
11139 stevensc 1081
 
1082
                        default:
1 www 1083
                            $employment_type = '';
1084
                            break;
1085
                    }
1086
 
11139 stevensc 1087
 
1088
 
1 www 1089
                    return new JsonModel([
1090
                        'success'   => true,
1091
                        'data' => $employment_type
1092
                    ]);
11139 stevensc 1093
                } else {
1 www 1094
                    return new JsonModel([
1095
                        'success'   => false,
1096
                        'data' => 'ERROR_THERE_WAS_AN_ERROR'
1097
                    ]);
1098
                }
1099
            } else {
1100
                $messages = [];
1101
                $form_messages = (array) $form->getMessages();
11139 stevensc 1102
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 1103
                    $messages[$fieldname] = array_values($field_messages);
1104
                }
11139 stevensc 1105
 
1 www 1106
                return new JsonModel([
1107
                    'success'   => false,
1108
                    'data'   => $messages
1109
                ]);
1110
            }
1111
        }
11139 stevensc 1112
 
1113
 
1 www 1114
        $data = [
1115
            'success' => false,
1116
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1117
        ];
11139 stevensc 1118
 
1119
 
1 www 1120
        return new JsonModel($data);
1121
    }
11139 stevensc 1122
 
1 www 1123
    public function jobCategoryAction()
1124
    {
11139 stevensc 1125
 
1 www 1126
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1127
        $currentUser = $currentUserPlugin->getUser();
1128
        $currentCompany = $currentUserPlugin->getCompany();
11139 stevensc 1129
 
1130
 
1 www 1131
        $request = $this->getRequest();
1132
        $id = $this->params()->fromRoute('id');
11139 stevensc 1133
 
1134
 
1135
        if (!$id) {
1 www 1136
            $response = [
1137
                'success' => false,
1138
                'data' => 'ERROR_INVALID_PARAMETER'
1139
            ];
11139 stevensc 1140
 
1 www 1141
            return new JsonModel($response);
1142
        }
11139 stevensc 1143
 
1 www 1144
        $jobMapper = JobMapper::getInstance($this->adapter);
1145
        $job = $jobMapper->fetchOneByUuid($id);
11139 stevensc 1146
 
1147
        if (!$job) {
1 www 1148
            $response = [
1149
                'success' => false,
1150
                'data' => 'ERROR_JOB_NOT_FOUND'
1151
            ];
11139 stevensc 1152
 
1 www 1153
            return new JsonModel($response);
1154
        }
11139 stevensc 1155
 
1156
        if ($job->company_id != $currentCompany->id) {
1 www 1157
            $response = [
1158
                'success' => false,
1159
                'data' => 'ERROR_UNAUTHORIZED'
1160
            ];
11139 stevensc 1161
 
1 www 1162
            return new JsonModel($response);
1163
        }
11139 stevensc 1164
 
1165
 
1 www 1166
        $companyMapper = CompanyMapper::getInstance($this->adapter);
1167
        $company = $companyMapper->fetchOne($currentCompany->id);
11139 stevensc 1168
        if (!$company) {
1 www 1169
            $response = [
1170
                'success' => false,
1171
                'data' => 'ERROR_COMPANY_NOT_FOUND'
1172
            ];
11139 stevensc 1173
 
1 www 1174
            return new JsonModel($response);
1175
        }
11139 stevensc 1176
 
8367 efrain 1177
        $jobCategories = [];
1 www 1178
        $jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);
15087 efrain 1179
        $records = $jobCategoryMapper->fetchAllActive();
11139 stevensc 1180
 
1181
        foreach ($records as $record) {
8367 efrain 1182
            $jobCategories[$record->uuid] = $record->name;
1183
        }
11139 stevensc 1184
 
1185
 
1186
        $jobCategory = $jobCategoryMapper->fetchOne($job->job_category_id);
1187
 
1188
 
1 www 1189
        $request = $this->getRequest();
11139 stevensc 1190
        if ($request->isGet()) {
1 www 1191
            $data = [
1192
                'success' => true,
8367 efrain 1193
                'data' => [
1194
                    'job_category' => $jobCategory->uuid,
1195
                    'job_categories' => $jobCategories
11139 stevensc 1196
                ],
1 www 1197
            ];
11139 stevensc 1198
 
1 www 1199
            return new JsonModel($data);
11139 stevensc 1200
        } else if ($request->isPost()) {
1201
 
1 www 1202
            $form = new CompanyJobCategoryForm($this->adapter);
1203
            $dataPost = $request->getPost()->toArray();
11139 stevensc 1204
 
1 www 1205
            $form->setData($dataPost);
11139 stevensc 1206
 
1207
            if ($form->isValid()) {
1208
                $this->logger->info('Se actualizaron la categoría de la empresa: ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1209
 
1 www 1210
                $dataPost = (array) $form->getData();
11139 stevensc 1211
 
1 www 1212
                $jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);
11139 stevensc 1213
                $jobCategory = $jobCategoryMapper->fetchOneByUuid($dataPost['job_category_id']);
1 www 1214
 
1215
                $job->job_category_id = $jobCategory->id;
11139 stevensc 1216
 
1217
                if ($jobMapper->updateJobCategory($job)) {
1218
 
1219
 
1 www 1220
                    return new JsonModel([
1221
                        'success'   => true,
1222
                        'data' => $jobCategory->name
1223
                    ]);
11139 stevensc 1224
                } else {
1 www 1225
                    return new JsonModel([
1226
                        'success'   => false,
1227
                        'data' => 'ERROR_THERE_WAS_AN_ERROR'
1228
                    ]);
1229
                }
1230
            } else {
1231
                $messages = [];
1232
                $form_messages = (array) $form->getMessages();
11139 stevensc 1233
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 1234
                    $messages[$fieldname] = array_values($field_messages);
1235
                }
11139 stevensc 1236
 
1 www 1237
                return new JsonModel([
1238
                    'success'   => false,
1239
                    'data'   => $messages
1240
                ]);
1241
            }
1242
        }
11139 stevensc 1243
 
1244
 
1 www 1245
        $data = [
1246
            'success' => false,
1247
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1248
        ];
11139 stevensc 1249
 
1250
 
1 www 1251
        return new JsonModel($data);
1252
    }
1253
 
11139 stevensc 1254
 
1 www 1255
    public function salaryAction()
1256
    {
1257
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1258
        $currentUser = $currentUserPlugin->getUser();
1259
        $currentCompany = $currentUserPlugin->getCompany();
11139 stevensc 1260
 
1261
 
1 www 1262
        $request = $this->getRequest();
1263
        $id = $this->params()->fromRoute('id');
11139 stevensc 1264
 
1265
 
1266
        if (!$id) {
1 www 1267
            $response = [
1268
                'success' => false,
1269
                'data' => 'ERROR_INVALID_PARAMETER'
1270
            ];
11139 stevensc 1271
 
1 www 1272
            return new JsonModel($response);
1273
        }
11139 stevensc 1274
 
1 www 1275
        $jobMapper = JobMapper::getInstance($this->adapter);
1276
        $job = $jobMapper->fetchOneByUuid($id);
11139 stevensc 1277
 
1278
        if (!$job) {
1 www 1279
            $response = [
1280
                'success' => false,
1281
                'data' => 'ERROR_JOB_NOT_FOUND'
1282
            ];
11139 stevensc 1283
 
1 www 1284
            return new JsonModel($response);
1285
        }
11139 stevensc 1286
 
1287
        if ($job->company_id != $currentCompany->id) {
1 www 1288
            $response = [
1289
                'success' => false,
1290
                'data' => 'ERROR_UNAUTHORIZED'
1291
            ];
11139 stevensc 1292
 
1 www 1293
            return new JsonModel($response);
1294
        }
11139 stevensc 1295
 
1296
 
1 www 1297
        $companyMapper = CompanyMapper::getInstance($this->adapter);
1298
        $company = $companyMapper->fetchOne($currentCompany->id);
11139 stevensc 1299
        if (!$company) {
1 www 1300
            $response = [
1301
                'success' => false,
1302
                'data' => 'ERROR_COMPANY_NOT_FOUND'
1303
            ];
11139 stevensc 1304
 
1 www 1305
            return new JsonModel($response);
1306
        }
11139 stevensc 1307
 
14813 efrain 1308
 
1309
        $currencies = [];
1310
        $currencyMapper = CurrencyMapper::getInstance($this->adapter);
15087 efrain 1311
        $records =  $currencyMapper->fetchAllActive();
14813 efrain 1312
        foreach($records as $record)
1313
        {
1314
            $currencies[$record->currency] = $record->name;
1315
        }
1316
 
1317
 
1318
 
1319
 
11139 stevensc 1320
 
1 www 1321
        $request = $this->getRequest();
11139 stevensc 1322
        if ($request->isGet()) {
1 www 1323
            $data = [
1324
                'success' => true,
1325
                'data' => [
1326
                    'salary_visible' => $job->salary_visible,
1327
                    'salary_currency' => $job->salary_currency,
1328
                    'salary_min' => $job->salary_min,
14813 efrain 1329
                    'salary_max' =>  $job->salary_max,
1330
                    'currencies' => $currencies,
1 www 1331
                ]
1332
            ];
11139 stevensc 1333
 
1 www 1334
            return new JsonModel($data);
11139 stevensc 1335
        } else if ($request->isPost()) {
1336
 
1337
 
1 www 1338
            $form = new CompanyJobSalaryForm($this->adapter);
1339
            $dataPost = $request->getPost()->toArray();
1340
 
11139 stevensc 1341
            $dataPost['salary_visible'] = empty($dataPost['salary_visible']) ? Job::SALARY_VISIBLE_NO :  $dataPost['salary_visible'];
1342
            $dataPost['salary_currency'] = empty($dataPost['salary_currency']) ? 'USD' :  $dataPost['salary_currency'];
1343
 
1344
 
1 www 1345
            $form->setData($dataPost);
11139 stevensc 1346
 
1347
            if ($form->isValid()) {
1 www 1348
                $dataPost = (array) $form->getData();
11139 stevensc 1349
 
1 www 1350
                $hydrator = new ObjectPropertyHydrator();
1351
                $hydrator->hydrate($dataPost, $job);
11139 stevensc 1352
 
1 www 1353
                $jobMapper->updateSalary($job);
11139 stevensc 1354
 
1 www 1355
                $this->logger->info('Se actualizo el salario del empleo ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
11139 stevensc 1356
 
1 www 1357
                return new JsonModel([
1358
                    'success'   => true,
11139 stevensc 1359
                    'data' =>  $job->salary_visible == Job::SALARY_VISIBLE_YES ?  $job->salary_min . '-' . $job->salary_max . ' ' . $job->salary_currency : ''
1 www 1360
                ]);
1361
            } else {
1362
                $messages = [];
1363
                $form_messages = (array) $form->getMessages();
11139 stevensc 1364
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 1365
                    $messages[$fieldname] = array_values($field_messages);
1366
                }
11139 stevensc 1367
 
1 www 1368
                return new JsonModel([
1369
                    'success'   => false,
1370
                    'data'   => $messages
1371
                ]);
1372
            }
1373
        }
11139 stevensc 1374
 
1375
 
1 www 1376
        $data = [
1377
            'success' => false,
1378
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1379
        ];
11139 stevensc 1380
 
1381
 
1 www 1382
        return new JsonModel($data);
1383
    }
11139 stevensc 1384
 
1 www 1385
    public function experienceAction()
1386
    {
1387
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1388
        $currentUser = $currentUserPlugin->getUser();
1389
        $currentCompany = $currentUserPlugin->getCompany();
11139 stevensc 1390
 
1391
 
1 www 1392
        $request = $this->getRequest();
1393
        $id = $this->params()->fromRoute('id');
11139 stevensc 1394
 
1395
 
1396
        if (!$id) {
1 www 1397
            $response = [
1398
                'success' => false,
1399
                'data' => 'ERROR_INVALID_PARAMETER'
1400
            ];
11139 stevensc 1401
 
1 www 1402
            return new JsonModel($response);
1403
        }
11139 stevensc 1404
 
1 www 1405
        $jobMapper = JobMapper::getInstance($this->adapter);
1406
        $job = $jobMapper->fetchOneByUuid($id);
11139 stevensc 1407
 
1408
        if (!$job) {
1 www 1409
            $response = [
1410
                'success' => false,
1411
                'data' => 'ERROR_JOB_NOT_FOUND'
1412
            ];
11139 stevensc 1413
 
1 www 1414
            return new JsonModel($response);
1415
        }
11139 stevensc 1416
 
1417
        if ($job->company_id != $currentCompany->id) {
1 www 1418
            $response = [
1419
                'success' => false,
1420
                'data' => 'ERROR_UNAUTHORIZED'
1421
            ];
11139 stevensc 1422
 
1 www 1423
            return new JsonModel($response);
1424
        }
11139 stevensc 1425
 
1426
 
1 www 1427
        $companyMapper = CompanyMapper::getInstance($this->adapter);
1428
        $company = $companyMapper->fetchOne($currentCompany->id);
11139 stevensc 1429
        if (!$company) {
1 www 1430
            $response = [
1431
                'success' => false,
1432
                'data' => 'ERROR_COMPANY_NOT_FOUND'
1433
            ];
11139 stevensc 1434
 
1 www 1435
            return new JsonModel($response);
1436
        }
11139 stevensc 1437
 
1 www 1438
        $request = $this->getRequest();
11139 stevensc 1439
        if ($request->isGet()) {
1 www 1440
            $data = [
1441
                'success' => true,
1442
                'data' =>  [
1443
                    'experience_visible' => $job->experience_visible,
1444
                    'experience_min' => $job->experience_min,
1445
                    'experience_max' => $job->experience_max
11139 stevensc 1446
                ]
1 www 1447
            ];
11139 stevensc 1448
 
1 www 1449
            return new JsonModel($data);
11139 stevensc 1450
        } else if ($request->isPost()) {
1451
 
1452
 
1 www 1453
            $form = new CompanyJobExperienceForm();
1454
            $dataPost = $request->getPost()->toArray();
11139 stevensc 1455
 
1 www 1456
            $form->setData($dataPost);
11139 stevensc 1457
 
1458
            if ($form->isValid()) {
1 www 1459
                $dataPost = (array) $form->getData();
11139 stevensc 1460
 
1 www 1461
                $hydrator = new ObjectPropertyHydrator();
1462
                $hydrator->hydrate($dataPost, $job);
11139 stevensc 1463
 
1 www 1464
                $jobMapper->updateExperience($job);
11139 stevensc 1465
 
1 www 1466
                $this->logger->info('Se actualizo el experiencia del empleo ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
11139 stevensc 1467
 
1 www 1468
                return new JsonModel([
1469
                    'success'   => true,
1470
                    'data' => $job->experience_visible ? $job->experience_min . '-' . $job->experience_max . ' LABEL_YEARS' : ''
1471
                ]);
1472
            } else {
1473
                $messages = [];
1474
                $form_messages = (array) $form->getMessages();
11139 stevensc 1475
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 1476
                    $messages[$fieldname] = array_values($field_messages);
1477
                }
11139 stevensc 1478
 
1 www 1479
                return new JsonModel([
1480
                    'success'   => false,
1481
                    'data'   => $messages
1482
                ]);
1483
            }
1484
        }
11139 stevensc 1485
 
1486
 
1 www 1487
        $data = [
1488
            'success' => false,
1489
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1490
        ];
11139 stevensc 1491
 
1492
 
1 www 1493
        return new JsonModel($data);
1494
    }
11139 stevensc 1495
 
1 www 1496
    public function skillAction()
1497
    {
11139 stevensc 1498
 
1 www 1499
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1500
        $currentUser = $currentUserPlugin->getUser();
1501
        $currentCompany = $currentUserPlugin->getCompany();
11139 stevensc 1502
 
1503
 
1 www 1504
        $request = $this->getRequest();
1505
        $id = $this->params()->fromRoute('id');
11139 stevensc 1506
 
1507
 
1508
        if (!$id) {
1 www 1509
            $response = [
1510
                'success' => false,
1511
                'data' => 'ERROR_INVALID_PARAMETER'
1512
            ];
11139 stevensc 1513
 
1 www 1514
            return new JsonModel($response);
1515
        }
11139 stevensc 1516
 
1 www 1517
        $jobMapper = JobMapper::getInstance($this->adapter);
1518
        $job = $jobMapper->fetchOneByUuid($id);
11139 stevensc 1519
 
1520
        if (!$job) {
1 www 1521
            $response = [
1522
                'success' => false,
1523
                'data' => 'ERROR_JOB_NOT_FOUND'
1524
            ];
11139 stevensc 1525
 
1 www 1526
            return new JsonModel($response);
1527
        }
11139 stevensc 1528
 
1529
        if ($job->company_id != $currentCompany->id) {
1 www 1530
            $response = [
1531
                'success' => false,
1532
                'data' => 'ERROR_UNAUTHORIZED'
1533
            ];
11139 stevensc 1534
 
1 www 1535
            return new JsonModel($response);
1536
        }
11139 stevensc 1537
 
1538
 
1 www 1539
        $companyMapper = CompanyMapper::getInstance($this->adapter);
1540
        $company = $companyMapper->fetchOne($currentCompany->id);
11139 stevensc 1541
        if (!$company) {
1 www 1542
            $response = [
1543
                'success' => false,
1544
                'data' => 'ERROR_COMPANY_NOT_FOUND'
1545
            ];
11139 stevensc 1546
 
1 www 1547
            return new JsonModel($response);
1548
        }
11139 stevensc 1549
 
1550
 
1551
 
1 www 1552
        $request = $this->getRequest();
11139 stevensc 1553
        if ($request->isGet()) {
1554
 
8367 efrain 1555
            $skills = [];
1 www 1556
            $skillMapper = SkillMapper::getInstance($this->adapter);
15087 efrain 1557
            $records = $skillMapper->fetchAllActive();
11139 stevensc 1558
 
1559
            foreach ($records as $record) {
8367 efrain 1560
                $skills[$record->uuid] = $record->name;
1561
            }
11139 stevensc 1562
 
1 www 1563
            $jobSkillMapper = JobSkillMapper::getInstance($this->adapter);
8367 efrain 1564
            $skillsByjob  = $jobSkillMapper->fetchAllByJobId($job->id);
11139 stevensc 1565
 
1 www 1566
            $items = [];
11139 stevensc 1567
            foreach ($skillsByjob as $skill) {
1568
                $skill = $skillMapper->fetchOne($skill->skill_id);
1569
 
1570
 
1571
                array_push($items, $skill->uuid);
1 www 1572
            }
11139 stevensc 1573
 
1 www 1574
            $data = [
1575
                'success' => true,
8367 efrain 1576
                'data' => [
1577
                    'skills_selected' => $items,
1578
                    'skills_available' => $skills
11139 stevensc 1579
                ]
1 www 1580
            ];
11139 stevensc 1581
 
1 www 1582
            return new JsonModel($data);
11139 stevensc 1583
        } else if ($request->isPost()) {
1584
 
1 www 1585
            $form = new CompanyJobSkillForm($this->adapter);
1586
            $dataPost = $request->getPost()->toArray();
11139 stevensc 1587
 
1 www 1588
            $form->setData($dataPost);
11139 stevensc 1589
 
1590
            if ($form->isValid()) {
1 www 1591
                $this->logger->info('Se actualizaron las habilidades requeridas del empleo : ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
11139 stevensc 1592
 
1 www 1593
                $skillMapper = SkillMapper::getInstance($this->adapter);
11139 stevensc 1594
 
1 www 1595
                $jobSkillMapper = JobSkillMapper::getInstance($this->adapter);
1596
                $jobSkillMapper->deleteByJobId($job->id);
11139 stevensc 1597
 
1 www 1598
                $dataPost = (array) $form->getData();
1599
                $skills = $dataPost['skills'];
11139 stevensc 1600
                foreach ($skills as $skill_id) {
1601
                    $skill = $skillMapper->fetchOneByUuid($skill_id);
1602
 
1 www 1603
                    $jobSkill = new JobSkill();
1604
                    $jobSkill->job_id = $job->id;
1605
                    $jobSkill->skill_id = $skill->id;
11139 stevensc 1606
 
1 www 1607
                    $jobSkillMapper->insert($jobSkill);
1608
                }
11139 stevensc 1609
 
1 www 1610
                $items = [];
11139 stevensc 1611
                $records = $jobSkillMapper->fetchAllByJobId($job->id);
1612
                foreach ($records as $record) {
1 www 1613
                    $skill = $skillMapper->fetchOne($record->skill_id);
11139 stevensc 1614
 
1615
                    array_push($items,  ['value' => $skill->uuid, 'label' => $skill->name]);
1 www 1616
                }
11139 stevensc 1617
 
1 www 1618
                return new JsonModel([
1619
                    'success'   => true,
1620
                    'data'   => $items
1621
                ]);
1622
            } else {
1623
                $messages = [];
1624
                $form_messages = (array) $form->getMessages();
11139 stevensc 1625
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 1626
                    $messages[$fieldname] = array_values($field_messages);
1627
                }
11139 stevensc 1628
 
1 www 1629
                return new JsonModel([
1630
                    'success'   => false,
1631
                    'data'   => $messages
1632
                ]);
1633
            }
11139 stevensc 1634
 
1 www 1635
            $jobSkillMapper = JobSkillMapper::getInstance($this->adapter);
1636
        }
11139 stevensc 1637
 
1638
 
1 www 1639
        $data = [
1640
            'success' => false,
1641
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1642
        ];
11139 stevensc 1643
 
1644
 
1 www 1645
        return new JsonModel($data);
1646
    }
1647
 
11139 stevensc 1648
 
1 www 1649
    public function languageAction()
1650
    {
11139 stevensc 1651
 
1 www 1652
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1653
        $currentUser = $currentUserPlugin->getUser();
1654
        $currentCompany = $currentUserPlugin->getCompany();
11139 stevensc 1655
 
1656
 
1 www 1657
        $request = $this->getRequest();
1658
        $id = $this->params()->fromRoute('id');
11139 stevensc 1659
 
1660
 
1661
        if (!$id) {
1 www 1662
            $response = [
1663
                'success' => false,
1664
                'data' => 'ERROR_INVALID_PARAMETER'
1665
            ];
11139 stevensc 1666
 
1 www 1667
            return new JsonModel($response);
1668
        }
11139 stevensc 1669
 
1 www 1670
        $jobMapper = JobMapper::getInstance($this->adapter);
1671
        $job = $jobMapper->fetchOneByUuid($id);
11139 stevensc 1672
 
1673
        if (!$job) {
1 www 1674
            $response = [
1675
                'success' => false,
1676
                'data' => 'ERROR_JOB_NOT_FOUND'
1677
            ];
11139 stevensc 1678
 
1 www 1679
            return new JsonModel($response);
1680
        }
11139 stevensc 1681
 
1682
        if ($job->company_id != $currentCompany->id) {
1 www 1683
            $response = [
1684
                'success' => false,
1685
                'data' => 'ERROR_UNAUTHORIZED'
1686
            ];
11139 stevensc 1687
 
1 www 1688
            return new JsonModel($response);
1689
        }
11139 stevensc 1690
 
1691
 
1 www 1692
        $companyMapper = CompanyMapper::getInstance($this->adapter);
1693
        $company = $companyMapper->fetchOne($currentCompany->id);
11139 stevensc 1694
        if (!$company) {
1 www 1695
            $response = [
1696
                'success' => false,
1697
                'data' => 'ERROR_COMPANY_NOT_FOUND'
1698
            ];
11139 stevensc 1699
 
1 www 1700
            return new JsonModel($response);
1701
        }
11139 stevensc 1702
 
1703
 
1704
 
1 www 1705
        $request = $this->getRequest();
11139 stevensc 1706
        if ($request->isGet()) {
1 www 1707
            $this->logger->info('Se actualizaron los idiomas requeridos del empleo : ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
11139 stevensc 1708
 
8367 efrain 1709
            $languages = [];
1710
            $languageMapper = LanguageMapper::getInstance($this->adapter);
15087 efrain 1711
            $records = $languageMapper->fetchAllActive();
11139 stevensc 1712
 
1713
            foreach ($records as $record) {
8367 efrain 1714
                $languages[$record->id] = $record->name;
1715
            }
11139 stevensc 1716
 
1 www 1717
            $jobLanguageMapper = JobLanguageMapper::getInstance($this->adapter);
8367 efrain 1718
            $languagesSelected  = $jobLanguageMapper->fetchAllByJobId($job->id);
11139 stevensc 1719
 
1 www 1720
            $items = [];
11139 stevensc 1721
            foreach ($languagesSelected as $language) {
1 www 1722
                array_push($items, $language->language_id);
1723
            }
11139 stevensc 1724
 
1 www 1725
            $data = [
1726
                'success' => true,
8367 efrain 1727
                'data' => [
1728
                    'languages_selected' => $items,
1729
                    'languages_available' => $languages
11139 stevensc 1730
                ]
1 www 1731
            ];
11139 stevensc 1732
 
1 www 1733
            return new JsonModel($data);
11139 stevensc 1734
        } else if ($request->isPost()) {
1735
 
1 www 1736
            $form = new CompanyJobLanguageForm($this->adapter);
1737
            $dataPost = $request->getPost()->toArray();
11139 stevensc 1738
 
1 www 1739
            $form->setData($dataPost);
11139 stevensc 1740
 
1741
            if ($form->isValid()) {
1 www 1742
                $languageMapper = LanguageMapper::getInstance($this->adapter);
11139 stevensc 1743
 
1 www 1744
                $jobLanguageMapper = JobLanguageMapper::getInstance($this->adapter);
1745
                $jobLanguageMapper->deleteByJobId($job->id);
11139 stevensc 1746
 
1 www 1747
                $dataPost = (array) $form->getData();
1748
                $languages = $dataPost['languages'];
11139 stevensc 1749
                foreach ($languages as $language_id) {
1 www 1750
                    $language = $languageMapper->fetchOne($language_id);
11139 stevensc 1751
 
1 www 1752
                    $jobLanguage = new JobLanguage();
1753
                    $jobLanguage->job_id = $job->id;
1754
                    $jobLanguage->language_id = $language->id;
11139 stevensc 1755
 
1 www 1756
                    $jobLanguageMapper->insert($jobLanguage);
1757
                }
11139 stevensc 1758
 
1 www 1759
                $items = [];
1760
                $records = $jobLanguageMapper->fetchAllByJobId($job->id);
11139 stevensc 1761
                foreach ($records as $record) {
1 www 1762
                    $language = $languageMapper->fetchOne($record->language_id);
11139 stevensc 1763
 
1 www 1764
                    array_push($items,  ['value' => $language->id, 'label' => $language->name]);
1765
                }
11139 stevensc 1766
 
1 www 1767
                return new JsonModel([
1768
                    'success'   => true,
1769
                    'data'   => $items
1770
                ]);
1771
            } else {
1772
                $messages = [];
1773
                $form_messages = (array) $form->getMessages();
11139 stevensc 1774
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 1775
                    $messages[$fieldname] = array_values($field_messages);
1776
                }
11139 stevensc 1777
 
1 www 1778
                return new JsonModel([
1779
                    'success'   => false,
1780
                    'data'   => $messages
1781
                ]);
1782
            }
1783
        }
11139 stevensc 1784
 
1785
 
1 www 1786
        $data = [
1787
            'success' => false,
1788
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1789
        ];
11139 stevensc 1790
 
1791
 
1 www 1792
        return new JsonModel($data);
1793
    }
11139 stevensc 1794
 
1 www 1795
    public function degreeAction()
1796
    {
11139 stevensc 1797
 
1 www 1798
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1799
        $currentUser = $currentUserPlugin->getUser();
1800
        $currentCompany = $currentUserPlugin->getCompany();
11139 stevensc 1801
 
1802
 
1 www 1803
        $request = $this->getRequest();
1804
        $id = $this->params()->fromRoute('id');
11139 stevensc 1805
 
1806
 
1807
        if (!$id) {
1 www 1808
            $response = [
1809
                'success' => false,
1810
                'data' => 'ERROR_INVALID_PARAMETER'
1811
            ];
11139 stevensc 1812
 
1 www 1813
            return new JsonModel($response);
1814
        }
11139 stevensc 1815
 
1 www 1816
        $jobMapper = JobMapper::getInstance($this->adapter);
1817
        $job = $jobMapper->fetchOneByUuid($id);
11139 stevensc 1818
 
1819
        if (!$job) {
1 www 1820
            $response = [
1821
                'success' => false,
1822
                'data' => 'ERROR_JOB_NOT_FOUND'
1823
            ];
11139 stevensc 1824
 
1 www 1825
            return new JsonModel($response);
1826
        }
11139 stevensc 1827
 
1828
        if ($job->company_id != $currentCompany->id) {
1 www 1829
            $response = [
1830
                'success' => false,
1831
                'data' => 'ERROR_UNAUTHORIZED'
1832
            ];
11139 stevensc 1833
 
1 www 1834
            return new JsonModel($response);
1835
        }
11139 stevensc 1836
 
1837
 
1 www 1838
        $companyMapper = CompanyMapper::getInstance($this->adapter);
1839
        $company = $companyMapper->fetchOne($currentCompany->id);
11139 stevensc 1840
        if (!$company) {
1 www 1841
            $response = [
1842
                'success' => false,
1843
                'data' => 'ERROR_COMPANY_NOT_FOUND'
1844
            ];
11139 stevensc 1845
 
1 www 1846
            return new JsonModel($response);
1847
        }
11139 stevensc 1848
 
1849
 
1850
 
1 www 1851
        $request = $this->getRequest();
11139 stevensc 1852
        if ($request->isGet()) {
1 www 1853
            $this->logger->info('Se actualizaron los idiomas requeridos del empleo : ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
11139 stevensc 1854
 
1855
 
8367 efrain 1856
            $degrees_available = [];
1 www 1857
            $degreeMapper = DegreeMapper::getInstance($this->adapter);
11139 stevensc 1858
 
15087 efrain 1859
            $records = $degreeMapper->fetchAllActive();
11139 stevensc 1860
            foreach ($records as $record) {
8367 efrain 1861
                $degrees_available[$record->uuid] = $record->name;
1862
            }
11139 stevensc 1863
 
1 www 1864
            $jobDegreeMapper = JobDegreeMapper::getInstance($this->adapter);
1865
            $records  = $jobDegreeMapper->fetchAllByJobId($job->id);
11139 stevensc 1866
 
1 www 1867
            $items = [];
11139 stevensc 1868
            foreach ($records as $record) {
1 www 1869
                $degree = $degreeMapper->fetchOne($record->degree_id);
11139 stevensc 1870
 
1 www 1871
                array_push($items, $degree->uuid);
1872
            }
11139 stevensc 1873
 
1 www 1874
            $data = [
1875
                'success' => true,
8367 efrain 1876
                'data' => [
1877
                    'degrees_selected' => $items,
1878
                    'degrees_available' => $degrees_available
11139 stevensc 1879
                ]
1 www 1880
            ];
11139 stevensc 1881
 
1 www 1882
            return new JsonModel($data);
11139 stevensc 1883
        } else if ($request->isPost()) {
1884
 
1 www 1885
            $form = new CompanyJobDegreeForm($this->adapter);
1886
            $dataPost = $request->getPost()->toArray();
11139 stevensc 1887
 
1 www 1888
            $form->setData($dataPost);
11139 stevensc 1889
 
1890
            if ($form->isValid()) {
1 www 1891
                $degreeMapper = DegreeMapper::getInstance($this->adapter);
11139 stevensc 1892
 
1 www 1893
                $jobDegreeMapper = JobDegreeMapper::getInstance($this->adapter);
1894
                $jobDegreeMapper->deleteByJobId($job->id);
11139 stevensc 1895
 
1 www 1896
                $dataPost = (array) $form->getData();
1897
                $degrees = $dataPost['degrees'];
11139 stevensc 1898
                foreach ($degrees as $degree_id) {
1 www 1899
                    $degree = $degreeMapper->fetchOneByUuid($degree_id);
11139 stevensc 1900
 
1 www 1901
                    $jobDegree = new JobDegree();
1902
                    $jobDegree->job_id = $job->id;
1903
                    $jobDegree->degree_id = $degree->id;
1904
                    $jobDegreeMapper->insert($jobDegree);
1905
                }
11139 stevensc 1906
 
1 www 1907
                $items = [];
1908
                $records = $jobDegreeMapper->fetchAllByJobId($job->id);
11139 stevensc 1909
                foreach ($records as $record) {
1 www 1910
                    $degree = $degreeMapper->fetchOne($record->degree_id);
1911
                    array_push($items,  ['value' => $degree->uuid, 'label' => $degree->name]);
1912
                }
11139 stevensc 1913
 
1 www 1914
                return new JsonModel([
1915
                    'success'   => true,
1916
                    'data'   => $items
1917
                ]);
1918
            } else {
1919
                $messages = [];
1920
                $form_messages = (array) $form->getMessages();
11139 stevensc 1921
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 1922
                    $messages[$fieldname] = array_values($field_messages);
1923
                }
11139 stevensc 1924
 
1 www 1925
                return new JsonModel([
1926
                    'success'   => false,
1927
                    'data'   => $messages
1928
                ]);
1929
            }
1930
        }
11139 stevensc 1931
 
1932
 
1 www 1933
        $data = [
1934
            'success' => false,
1935
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
1936
        ];
11139 stevensc 1937
 
1938
 
1 www 1939
        return new JsonModel($data);
1940
    }
11139 stevensc 1941
 
1 www 1942
    public function lastDateOfApplicationAction()
1943
    {
11139 stevensc 1944
 
1 www 1945
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1946
        $currentUser = $currentUserPlugin->getUser();
1947
        $currentCompany = $currentUserPlugin->getCompany();
11139 stevensc 1948
 
1949
 
1 www 1950
        $request = $this->getRequest();
1951
        $id = $this->params()->fromRoute('id');
11139 stevensc 1952
 
1953
 
1954
        if (!$id) {
1 www 1955
            $response = [
1956
                'success' => false,
1957
                'data' => 'ERROR_INVALID_PARAMETER'
1958
            ];
11139 stevensc 1959
 
1 www 1960
            return new JsonModel($response);
1961
        }
11139 stevensc 1962
 
1 www 1963
        $jobMapper = JobMapper::getInstance($this->adapter);
1964
        $job = $jobMapper->fetchOneByUuid($id);
11139 stevensc 1965
 
1966
        if (!$job) {
1 www 1967
            $response = [
1968
                'success' => false,
1969
                'data' => 'ERROR_JOB_NOT_FOUND'
1970
            ];
11139 stevensc 1971
 
1 www 1972
            return new JsonModel($response);
1973
        }
11139 stevensc 1974
 
1975
        if ($job->company_id != $currentCompany->id) {
1 www 1976
            $response = [
1977
                'success' => false,
1978
                'data' => 'ERROR_UNAUTHORIZED'
1979
            ];
11139 stevensc 1980
 
1 www 1981
            return new JsonModel($response);
1982
        }
11139 stevensc 1983
 
1984
 
1 www 1985
        $companyMapper = CompanyMapper::getInstance($this->adapter);
1986
        $company = $companyMapper->fetchOne($currentCompany->id);
11139 stevensc 1987
        if (!$company) {
1 www 1988
            $response = [
1989
                'success' => false,
1990
                'data' => 'ERROR_COMPANY_NOT_FOUND'
1991
            ];
11139 stevensc 1992
 
1 www 1993
            return new JsonModel($response);
1994
        }
11139 stevensc 1995
 
1996
 
1997
 
1 www 1998
        $request = $this->getRequest();
11139 stevensc 1999
        if ($request->isGet()) {
1 www 2000
            $dt = \DateTime::createFromFormat('Y-m-d', $job->last_date_of_application);
11139 stevensc 2001
 
1 www 2002
            $data = [
2003
                'success' => true,
14875 efrain 2004
                'data' => $dt->format('m/d/Y'),
1 www 2005
            ];
11139 stevensc 2006
 
1 www 2007
            return new JsonModel($data);
11139 stevensc 2008
        } else if ($request->isPost()) {
2009
 
1 www 2010
            $form = new CompanyJobLastDateOfApplicationForm();
2011
            $dataPost = $request->getPost()->toArray();
11139 stevensc 2012
 
1 www 2013
            $form->setData($dataPost);
11139 stevensc 2014
 
2015
            if ($form->isValid()) {
2016
                $this->logger->info('Se actualizo la última fecha de aplicación de la empresa: ' . $company->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
2017
 
14875 efrain 2018
                $dt = \DateTime::createFromFormat('m/d/Y', $form->get('last_date_of_application')->getValue());
1 www 2019
                $job->last_date_of_application = $dt->format('Y-m-d');
11139 stevensc 2020
 
2021
                if ($jobMapper->updateLastDateOfApplication($job)) {
1 www 2022
                    $months = [
2023
                        1 => 'LABEL_MONTH_JANUARY',
2024
                        2 => 'LABEL_MONTH_FEBRUARY',
2025
                        3 => 'LABEL_MONTH_MARCH',
2026
                        4 => 'LABEL_MONTH_APRIL',
2027
                        5 => 'LABEL_MONTH_MAY',
2028
                        6 => 'LABEL_MONTH_JUNE',
2029
                        7 => 'LABEL_MONTH_JULY',
2030
                        8 => 'LABEL_MONTH_AUGUST',
2031
                        9 => 'LABEL_MONTH_SEPTEMBER',
2032
                        10 => 'LABEL_MONTH_OCTOBER',
2033
                        11 => 'LABEL_MONTH_NOVEMBER',
2034
                        12 => 'LABEL_MONTH_DECEMBER',
2035
                    ];
11139 stevensc 2036
 
2037
                    $last_date_of_application = $dt->format('d') . ' de ' . $months[$dt->format('n')] . ' de ' . $dt->format('Y');
2038
 
2039
 
1 www 2040
                    return new JsonModel([
2041
                        'success'   => true,
2042
                        'data' => $last_date_of_application
2043
                    ]);
11139 stevensc 2044
                } else {
1 www 2045
                    return new JsonModel([
2046
                        'success'   => false,
2047
                        'data' => 'ERROR_THERE_WAS_AN_ERROR'
2048
                    ]);
2049
                }
2050
            } else {
2051
                $messages = [];
2052
                $form_messages = (array) $form->getMessages();
11139 stevensc 2053
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 2054
                    $messages[$fieldname] = array_values($field_messages);
2055
                }
11139 stevensc 2056
 
1 www 2057
                return new JsonModel([
2058
                    'success'   => false,
2059
                    'data'   => $messages
2060
                ]);
2061
            }
2062
        }
11139 stevensc 2063
 
2064
 
1 www 2065
        $data = [
2066
            'success' => false,
2067
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
2068
        ];
11139 stevensc 2069
 
2070
 
1 www 2071
        return new JsonModel($data);
2072
    }
11139 stevensc 2073
 
1 www 2074
    public function usersWhoAppliedAction()
2075
    {
2076
        $currentUserPlugin = $this->plugin('currentUserPlugin');
2077
        $currentUser = $currentUserPlugin->getUser();
2078
        $currentCompany = $currentUserPlugin->getCompany();
15351 efrain 2079
 
2080
        $currentNetworkPlugin = $this->plugin('currentNetworkPlugin');
2081
        $network = $currentNetworkPlugin->getNetwork();
11139 stevensc 2082
 
2083
 
1 www 2084
        $request = $this->getRequest();
2085
        $id = $this->params()->fromRoute('id');
11139 stevensc 2086
 
2087
        if (!$id) {
1 www 2088
            $data = [
2089
                'success'   => false,
2090
                'data'   => 'ERROR_INVALID_PARAMETER'
2091
            ];
11139 stevensc 2092
 
1 www 2093
            return new JsonModel($data);
2094
        }
11139 stevensc 2095
 
1 www 2096
        $jobMapper = JobMapper::getInstance($this->adapter);
2097
        $job = $jobMapper->fetchOneByUuid($id);
11139 stevensc 2098
        if (!$job) {
1 www 2099
            $data = [
2100
                'success'   => false,
2101
                'data'   => 'ERROR_JOB_NOT_FOUND'
2102
            ];
11139 stevensc 2103
 
1 www 2104
            return new JsonModel($data);
2105
        }
11139 stevensc 2106
 
2107
        if ($job->company_id != $currentCompany->id) {
1 www 2108
            $data = [
2109
                'success'   => false,
2110
                'data'   => 'ERROR_UNAUTHORIZED'
2111
            ];
11139 stevensc 2112
 
1 www 2113
            return new JsonModel($data);
2114
        }
2115
 
11139 stevensc 2116
 
1 www 2117
        $request = $this->getRequest();
11139 stevensc 2118
        if ($request->isGet()) {
2119
 
1 www 2120
 
2121
            $queryMapper = QueryMapper::getInstance($this->adapter);
2122
            $select = $queryMapper->getSql()->select();
11139 stevensc 2123
            $select->columns(['id',  'user_uuid' => 'uuid', 'first_name', 'last_name', 'email']);
1 www 2124
            $select->from(['u' => UserMapper::_TABLE]);
2125
            $select->join(['ja' => JobApplicationMapper::_TABLE], 'ja.user_id = u.id', ['user_profile_id']);
2126
            $select->join(['up' => UserProfileMapper::_TABLE], 'ja.user_profile_id = up.id', ['user_profile_uuid' => 'uuid']);
2127
            $select->where->equalTo('u.status', User::STATUS_ACTIVE);
14875 efrain 2128
            $select->where->equalTo('ja.job_id', $job->id);
11139 stevensc 2129
            $select->order(['first_name', 'last_name']);
14875 efrain 2130
 
2131
 
11139 stevensc 2132
 
1 www 2133
            $items = [];
11139 stevensc 2134
            $records = $queryMapper->fetchAll($select);
2135
 
2136
            foreach ($records as $record) {
1 www 2137
                $item = [
2138
                    'first_name' => $record['first_name'],
2139
                    'last_name' => $record['last_name'],
2140
                    'email' => $record['email'],
15351 efrain 2141
                    'link_view' => 'https://'. $network->main_hostname . '/profile/view/' . $record['user_profile_uuid'],
1 www 2142
 
2143
                ];
11139 stevensc 2144
 
1 www 2145
                array_push($items, $item);
2146
            }
2147
 
11139 stevensc 2148
 
1 www 2149
            $response = [
2150
                'success' => true,
2151
                'data' => $items
2152
            ];
2153
 
2154
            return new JsonModel($response);
2155
        } else {
2156
            return new JsonModel([
2157
                'success' => false,
2158
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
2159
            ]);
2160
        }
2161
    }
11139 stevensc 2162
 
2163
 
1 www 2164
    public function statusAction()
2165
    {
2166
        $currentUserPlugin = $this->plugin('currentUserPlugin');
2167
        $currentUser = $currentUserPlugin->getUser();
2168
        $currentCompany = $currentUserPlugin->getCompany();
11139 stevensc 2169
 
2170
 
1 www 2171
        $request = $this->getRequest();
2172
        $id = $this->params()->fromRoute('id');
11139 stevensc 2173
 
2174
 
2175
        if (!$id) {
1 www 2176
            $response = [
2177
                'success' => false,
2178
                'data' => 'ERROR_INVALID_PARAMETER'
2179
            ];
11139 stevensc 2180
 
1 www 2181
            return new JsonModel($response);
2182
        }
11139 stevensc 2183
 
1 www 2184
        $jobMapper = JobMapper::getInstance($this->adapter);
2185
        $job = $jobMapper->fetchOneByUuid($id);
11139 stevensc 2186
 
2187
        if (!$job) {
1 www 2188
            $response = [
2189
                'success' => false,
2190
                'data' => 'ERROR_JOB_NOT_FOUND'
2191
            ];
11139 stevensc 2192
 
1 www 2193
            return new JsonModel($response);
2194
        }
11139 stevensc 2195
 
2196
        if ($job->company_id != $currentCompany->id) {
1 www 2197
            $response = [
2198
                'success' => false,
2199
                'data' => 'ERROR_UNAUTHORIZED'
2200
            ];
11139 stevensc 2201
 
1 www 2202
            return new JsonModel($response);
2203
        }
11139 stevensc 2204
 
2205
 
1 www 2206
        $companyMapper = CompanyMapper::getInstance($this->adapter);
2207
        $company = $companyMapper->fetchOne($currentCompany->id);
11139 stevensc 2208
        if (!$company) {
1 www 2209
            $response = [
2210
                'success' => false,
2211
                'data' => 'ERROR_COMPANY_NOT_FOUND'
2212
            ];
11139 stevensc 2213
 
1 www 2214
            return new JsonModel($response);
2215
        }
11139 stevensc 2216
 
2217
 
2218
 
2219
 
1 www 2220
        $request = $this->getRequest();
11139 stevensc 2221
        if ($request->isGet()) {
1 www 2222
            $data = [
2223
                'success' => true,
2224
                'data' => [
2225
                    'status' => $job->status,
2226
                ]
2227
            ];
11139 stevensc 2228
 
1 www 2229
            return new JsonModel($data);
11139 stevensc 2230
        } else if ($request->isPost()) {
2231
 
2232
 
1 www 2233
            $form = new CompanyJobStatusForm();
2234
            $dataPost = $request->getPost()->toArray();
11139 stevensc 2235
 
1 www 2236
            $form->setData($dataPost);
11139 stevensc 2237
 
2238
            if ($form->isValid()) {
1 www 2239
                $dataPost = (array) $form->getData();
11139 stevensc 2240
 
1 www 2241
                $hydrator = new ObjectPropertyHydrator();
2242
                $hydrator->hydrate($dataPost, $job);
11139 stevensc 2243
 
1 www 2244
                $jobMapper->updateStatus($job);
11139 stevensc 2245
 
1 www 2246
                $this->logger->info('Se actualizo el estatus del empleo ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
11139 stevensc 2247
 
2248
                switch ($job->status) {
2249
                    case  Job::STATUS_ACTIVE:
1 www 2250
                        $status = 'LABEL_ACTIVE';
2251
                        break;
11139 stevensc 2252
 
2253
                    case  Job::STATUS_INACTIVE:
1 www 2254
                        $status = 'LABEL_INACTIVE';
2255
                        break;
11139 stevensc 2256
 
2257
 
2258
                    case  Job::STATUS_DELETED:
1 www 2259
                        $status = 'LABEL_DELETED';
2260
                        break;
11139 stevensc 2261
 
2262
                    default:
1 www 2263
                        $status = '';
2264
                        break;
2265
                }
11139 stevensc 2266
 
2267
 
1 www 2268
                return new JsonModel([
2269
                    'success'   => true,
2270
                    'data' => [
2271
                        'status' => $status,
2272
                    ]
2273
                ]);
2274
            } else {
2275
                $messages = [];
2276
                $form_messages = (array) $form->getMessages();
11139 stevensc 2277
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 2278
                    $messages[$fieldname] = array_values($field_messages);
2279
                }
11139 stevensc 2280
 
1 www 2281
                return new JsonModel([
2282
                    'success'   => false,
2283
                    'data'   => $messages
2284
                ]);
2285
            }
2286
        }
11139 stevensc 2287
 
2288
 
1 www 2289
        $data = [
2290
            'success' => false,
2291
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
2292
        ];
11139 stevensc 2293
 
2294
 
1 www 2295
        return new JsonModel($data);
2296
    }
11139 stevensc 2297
 
2298
 
1 www 2299
    public function titleAction()
2300
    {
2301
        $currentUserPlugin = $this->plugin('currentUserPlugin');
2302
        $currentUser = $currentUserPlugin->getUser();
2303
        $currentCompany = $currentUserPlugin->getCompany();
11139 stevensc 2304
 
2305
 
1 www 2306
        $request = $this->getRequest();
2307
        $id = $this->params()->fromRoute('id');
11139 stevensc 2308
 
2309
 
2310
        if (!$id) {
1 www 2311
            $response = [
2312
                'success' => false,
2313
                'data' => 'ERROR_INVALID_PARAMETER'
2314
            ];
11139 stevensc 2315
 
1 www 2316
            return new JsonModel($response);
2317
        }
11139 stevensc 2318
 
1 www 2319
        $jobMapper = JobMapper::getInstance($this->adapter);
2320
        $job = $jobMapper->fetchOneByUuid($id);
11139 stevensc 2321
 
2322
        if (!$job) {
1 www 2323
            $response = [
2324
                'success' => false,
2325
                'data' => 'ERROR_JOB_NOT_FOUND'
2326
            ];
11139 stevensc 2327
 
1 www 2328
            return new JsonModel($response);
2329
        }
11139 stevensc 2330
 
2331
        if ($job->company_id != $currentCompany->id) {
1 www 2332
            $response = [
2333
                'success' => false,
2334
                'data' => 'ERROR_UNAUTHORIZED'
2335
            ];
11139 stevensc 2336
 
1 www 2337
            return new JsonModel($response);
2338
        }
11139 stevensc 2339
 
2340
 
1 www 2341
        $companyMapper = CompanyMapper::getInstance($this->adapter);
2342
        $company = $companyMapper->fetchOne($currentCompany->id);
11139 stevensc 2343
        if (!$company) {
1 www 2344
            $response = [
2345
                'success' => false,
2346
                'data' => 'ERROR_COMPANY_NOT_FOUND'
2347
            ];
11139 stevensc 2348
 
1 www 2349
            return new JsonModel($response);
2350
        }
11139 stevensc 2351
 
2352
 
2353
 
2354
 
1 www 2355
        $request = $this->getRequest();
11139 stevensc 2356
        if ($request->isGet()) {
1 www 2357
            $data = [
2358
                'success' => true,
2359
                'data' => [
2360
                    'title' => $job->title,
2361
                ]
2362
            ];
11139 stevensc 2363
 
1 www 2364
            return new JsonModel($data);
11139 stevensc 2365
        } else if ($request->isPost()) {
2366
 
2367
 
1 www 2368
            $form = new CompanyJobTitleForm();
2369
            $dataPost = $request->getPost()->toArray();
11139 stevensc 2370
 
1 www 2371
            $form->setData($dataPost);
11139 stevensc 2372
 
2373
            if ($form->isValid()) {
1 www 2374
                $dataPost = (array) $form->getData();
11139 stevensc 2375
 
1 www 2376
                $hydrator = new ObjectPropertyHydrator();
2377
                $hydrator->hydrate($dataPost, $job);
11139 stevensc 2378
 
1 www 2379
                $jobMapper->updateTitle($job);
11139 stevensc 2380
 
1 www 2381
                $this->logger->info('Se actualizo el título del empleo ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
11139 stevensc 2382
 
1 www 2383
                return new JsonModel([
2384
                    'success'   => true,
2385
                    'data' => [
2386
                        'title' => $job->title,
2387
                    ]
2388
                ]);
2389
            } else {
2390
                $messages = [];
2391
                $form_messages = (array) $form->getMessages();
11139 stevensc 2392
                foreach ($form_messages  as $fieldname => $field_messages) {
1 www 2393
                    $messages[$fieldname] = array_values($field_messages);
2394
                }
11139 stevensc 2395
 
1 www 2396
                return new JsonModel([
2397
                    'success'   => false,
2398
                    'data'   => $messages
2399
                ]);
2400
            }
2401
        }
11139 stevensc 2402
 
2403
 
1 www 2404
        $data = [
2405
            'success' => false,
2406
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
2407
        ];
11139 stevensc 2408
 
2409
 
1 www 2410
        return new JsonModel($data);
2411
    }
2412
}