Proyectos de Subversion LeadersLinked - Backend

Rev

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

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