Proyectos de Subversion LeadersLinked - Backend

Rev

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

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