Proyectos de Subversion LeadersLinked - Backend

Rev

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

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