Proyectos de Subversion LeadersLinked - Backend

Rev

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