Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 17288 | | Comparar con el anterior | Ultima modificación | Ver Log |

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