Proyectos de Subversion LeadersLinked - Backend

Rev

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

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