Proyectos de Subversion LeadersLinked - Backend

Rev

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