Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 17020 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

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