Proyectos de Subversion LeadersLinked - Backend

Rev

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