Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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

Rev Autor Línea Nro. Línea
1 www 1
<?php
2
/**
3
 *
4
 * Controlador: Mis Perfiles
5
 *
6
 */
7
declare(strict_types=1);
8
 
9
namespace LeadersLinked\Controller;
10
 
11
use Laminas\Db\Adapter\AdapterInterface;
6849 efrain 12
 
1 www 13
use Laminas\Mvc\Controller\AbstractActionController;
14
use Laminas\Log\LoggerInterface;
15
use Laminas\View\Model\ViewModel;
16
use Laminas\View\Model\JsonModel;
17
 
18
use LeadersLinked\Library\Functions;
19
use LeadersLinked\Mapper\CompanyUserMapper;
20
use LeadersLinked\Model\Job;
21
use LeadersLinked\Mapper\LocationMapper;
22
use LeadersLinked\Mapper\JobMapper;
23
use LeadersLinked\Mapper\CompanyMapper;
24
use LeadersLinked\Mapper\JobCategoryMapper;
25
use LeadersLinked\Mapper\JobSkillMapper;
26
use LeadersLinked\Mapper\JobDegreeMapper;
27
use LeadersLinked\Mapper\JobLanguageMapper;
28
use LeadersLinked\Mapper\DegreeMapper;
29
use LeadersLinked\Mapper\LanguageMapper;
30
use LeadersLinked\Mapper\SkillMapper;
31
use LeadersLinked\Mapper\IndustryMapper;
32
use LeadersLinked\Mapper\CompanySizeMapper;
33
use LeadersLinked\Mapper\CompanyLocationMapper;
34
use LeadersLinked\Mapper\JobApplicationMapper;
35
use LeadersLinked\Form\Job\ApplyForm;
36
use LeadersLinked\Model\JobApplication;
37
use LeadersLinked\Mapper\JobSaveMapper;
38
use LeadersLinked\Model\JobSave;
39
use LeadersLinked\Mapper\QueryMapper;
40
use LeadersLinked\Mapper\UserProfileMapper;
41
 
2805 kerby 42
 
1 www 43
class JobController extends AbstractActionController
44
{
45
    /**
46
     *
6866 efrain 47
     * @var \Laminas\Db\Adapter\AdapterInterface
1 www 48
     */
49
    private $adapter;
50
 
51
    /**
52
     *
6866 efrain 53
     * @var \LeadersLinked\Cache\CacheInterface
1 www 54
     */
6866 efrain 55
    private $cache;
56
 
57
 
58
    /**
59
     *
60
     * @var \Laminas\Log\LoggerInterface
61
     */
1 www 62
    private $logger;
63
 
64
    /**
65
     *
66
     * @var array
67
     */
68
    private $config;
69
 
6866 efrain 70
 
1 www 71
    /**
72
     *
6866 efrain 73
     * @var \Laminas\Mvc\I18n\Translator
74
     */
75
    private $translator;
76
 
77
 
78
    /**
79
     *
80
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
81
     * @param \LeadersLinked\Cache\CacheInterface $cache
82
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
1 www 83
     * @param array $config
6866 efrain 84
     * @param \Laminas\Mvc\I18n\Translator $translator
1 www 85
     */
6866 efrain 86
    public function __construct($adapter, $cache, $logger, $config, $translator)
1 www 87
    {
88
        $this->adapter      = $adapter;
6866 efrain 89
        $this->cache        = $cache;
1 www 90
        $this->logger       = $logger;
91
        $this->config       = $config;
6866 efrain 92
        $this->translator   = $translator;
1 www 93
    }
94
 
95
    /**
96
     *
97
     * Generación del listado de perfiles
98
     * {@inheritDoc}
99
     * @see \Laminas\Mvc\Controller\AbstractActionController::indexAction()
100
     */
101
    public function indexAction()
102
    {
103
 
104
        return new JsonModel([
105
            'success' => false,
106
            'data' => 'ERROR_METHOD_NOT_ALLOWED'
107
        ]);
108
    }
109
 
110
    public function viewAction()
111
    {
3639 efrain 112
        $currentUserPlugin = $this->plugin('currentUserPlugin');
113
        $currentUser = $currentUserPlugin->getUser();
1 www 114
 
115
        $flashMessenger = $this->plugin('FlashMessenger');
116
        $request = $this->getRequest();
117
        $id = $this->params()->fromRoute('id');
118
 
119
        if(!$id) {
120
            $flashMessenger->addErrorMessage('ERROR_INVALID_PARAMETER');
121
            return $this->redirect()->toRoute('dashboard');
122
        }
123
 
124
        $jobMapper = JobMapper::getInstance($this->adapter);
3639 efrain 125
        $job = $jobMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
1 www 126
        if(!$job) {
127
            $flashMessenger->addErrorMessage('ERROR_RECORD_NOT_FOUND');
128
            return $this->redirect()->toRoute('dashboard');
129
        }
130
 
131
        if($job->status != Job::STATUS_ACTIVE) {
132
            $flashMessenger->addErrorMessage('ERROR_UNAUTHORIZED');
133
            return $this->redirect()->toRoute('dashboard');
134
        }
135
 
136
        $companyMapper = CompanyMapper::getInstance($this->adapter);
137
        $company = $companyMapper->fetchOne($job->company_id);
138
        if(!$company) {
139
            $flashMessenger->addErrorMessage('ERROR_RECORD_NOT_FOUND');
140
            return $this->redirect()->toRoute('dashboard');
141
        }
142
 
143
 
144
 
145
 
146
 
147
        if($request->isGet()) {
148
            $currentUserPlugin = $this->plugin('currentUserPlugin');
149
            $currentUser = $currentUserPlugin->getUser();
150
 
151
            $companyUserMapper = CompanyUserMapper::getInstance($this->adapter);
6388 efrain 152
            $now = $companyUserMapper->getDatebaseNow();
153
 
7300 efrain 154
 
155
            $headers  = $request->getHeaders();
156
 
157
            $isJson = false;
158
            if($headers->has('Accept')) {
159
                $accept = $headers->get('Accept');
160
 
161
                $prioritized = $accept->getPrioritized();
162
 
163
                foreach($prioritized as $key => $value) {
164
                    $raw = trim($value->getRaw());
165
 
166
                    if(!$isJson) {
167
                        $isJson = strpos($raw, 'json');
168
                    }
169
 
170
                }
171
            }
172
 
173
 
174
 
1 www 175
            $companyUser = $companyUserMapper->fetchOneByCompanyIdAndUserId($company->id, $currentUser->id);
176
 
177
            $jobApplicationMapper = JobApplicationMapper::getInstance($this->adapter);
178
            $total_applications = $jobApplicationMapper->fetchTotalApplicationsByJobId($job->id);
179
 
180
 
181
            $job->visits++;
182
            $jobMapper->updateVisits($job);
183
 
184
 
185
            //if($companyUser) {
186
            //   $job_apply_operation = '';
187
            //} else {
188
                $jobApplication = $jobApplicationMapper->fetchOneByJobIdAndUserId($job->id, $currentUser->id);
189
                if($jobApplication) {
190
                    $job_apply_operation = 'remove-apply';
191
                } else {
192
                    $job_apply_operation = 'apply';
193
                }
194
 
195
            //}
196
 
197
            $jobSaveMapper = JobSaveMapper::getInstance($this->adapter);
198
            $jobSave = $jobSaveMapper->fetchOneByJobIdAndUserId($job->id, $currentUser->id);
199
            if($jobSave) {
200
                $job_save_operation = 'remove-job-saved';
201
            } else {
202
                $job_save_operation = 'job-save';
203
            }
204
 
205
 
206
            $months = [
207
                1 => 'LABEL_MONTH_JANUARY',
208
                2 => 'LABEL_MONTH_FEBRUARY',
209
                3 => 'LABEL_MONTH_MARCH',
210
                4 => 'LABEL_MONTH_APRIL',
211
                5 => 'LABEL_MONTH_MAY',
212
                6 => 'LABEL_MONTH_JUNE',
213
                7 => 'LABEL_MONTH_JULY',
214
                8 => 'LABEL_MONTH_AUGUST',
215
                9 => 'LABEL_MONTH_SEPTEMBER',
216
                10 => 'LABEL_MONTH_OCTOBER',
217
                11 => 'LABEL_MONTH_NOVEMBER',
218
                12 => 'LABEL_MONTH_DECEMBER',
219
            ];
220
 
221
            $dt = \dateTime::createFromFormat('Y-m-d', $job->last_date_of_application);
222
            $last_date_of_application = $dt->format('d') . ' de ' . $months[$dt->format('n')] . ' de ' . $dt->format('Y');
223
 
224
            $locationMapper = LocationMapper::getInstance($this->adapter);
225
            $location = $locationMapper->fetchOne($job->location_id);
226
 
227
            $jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);
228
            $jobCategory = $jobCategoryMapper->fetchOne($job->job_category_id);
229
 
230
            switch($job->employment_type)
231
            {
232
                case Job::EMPLOYMENT_TYPE_FULL_TIME :
233
                    $employment_type = 'LABEL_EMPLOYMENT_TYPE_FULL_TIME';
234
                    break;
235
                case Job::EMPLOYMENT_TYPE_PART_TIME :
236
                    $employment_type = 'LABEL_EMPLOYMENT_TYPE_PART_TIME';
237
                    break;
238
 
239
                case Job::EMPLOYMENT_TYPE_CONTRACT :
240
                    $employment_type = 'LABEL_EMPLOYMENT_TYPE_CONTRACT';
241
                    break;
242
 
243
                case Job::EMPLOYMENT_TYPE_TEMPORARY :
244
                    $employment_type = 'LABEL_EMPLOYMENT_TYPE_TEMPORARY';
245
                    break;
246
 
247
                default :
248
                    $employment_type = '';
249
                    break;
250
            }
251
 
252
            $degrees = [];
253
            $degreeMapper = DegreeMapper::getInstance($this->adapter);
3454 efrain 254
            $records = $degreeMapper->fetchAllActive();
1 www 255
            foreach($records as $record)
256
            {
257
                $degrees[$record->uuid] = $record->name;
258
            }
259
 
260
            $jobDegreeMapper = JobDegreeMapper::getInstance($this->adapter);
261
            $records = $jobDegreeMapper->fetchAllByJobId($job->id);
262
 
263
            $job_degrees = [];
264
            foreach($records as $record)
265
            {
266
                $degree = $degreeMapper->fetchOne($record->degree_id);
267
                array_push($job_degrees, $degree->name);
268
            }
269
 
270
            $languages = [];
271
            $languageMapper = LanguageMapper::getInstance($this->adapter);
3454 efrain 272
            $records = $languageMapper->fetchAllActive();
1 www 273
            foreach($records as $record)
274
            {
275
                $languages[$record->id] = $record->name;
276
            }
277
 
278
            $jobLanguageMapper = JobLanguageMapper::getInstance($this->adapter);
279
            $records = $jobLanguageMapper->fetchAllByJobId($job->id);
280
 
281
 
282
            $job_languages = [];
283
            foreach($records as $record)
284
            {
285
                $language = $languageMapper->fetchOne($record->language_id);
286
                array_push($job_languages, $language->name);
287
            }
288
 
289
            $skills = [];
290
            $skillMapper = SkillMapper::getInstance($this->adapter);
291
 
3454 efrain 292
            $records = $skillMapper->fetchAllActive();
1 www 293
            foreach($records as $record)
294
            {
295
                $skills[$record->uuid] = $record->name;
296
            }
297
 
298
 
299
            $jobSkillMapper = JobSkillMapper::getInstance($this->adapter);
300
            $records = $jobSkillMapper->fetchAllByJobId($job->id);
301
 
302
            $job_skills = [];
303
            foreach($records as $record)
304
            {
305
                $skill = $skillMapper->fetchOne($record->skill_id);
306
                array_push($job_skills, $skill->name);
307
            }
308
 
309
 
310
            $industryMapper = IndustryMapper::getInstance($this->adapter);
311
            $industry = $industryMapper->fetchOne($company->industry_id);
312
 
313
            $companySizeMapper = CompanySizeMapper::getInstance($this->adapter);
314
            $companySize = $companySizeMapper->fetchOne($company->company_size_id);
315
 
316
            $companyLocationMapper = CompanyLocationMapper::getInstance($this->adapter);
317
            $companyLocation = $companyLocationMapper->fetchOneMainLocationByCompanyId($company->id);
318
 
319
 
320
            $company_address = '';
321
            if($companyLocation) {
322
                $mainLocation = $locationMapper->fetchOne($companyLocation->location_id);
323
                if($mainLocation) {
324
                    $company_address = $mainLocation->formatted_address;
325
                }
326
            }
327
 
328
            $user_profiles = [];
329
            $userProfileMapper = UserProfileMapper::getInstance($this->adapter);
330
            $records = $userProfileMapper->fetchAllByUserId($currentUser->id);
331
            foreach($records as $record)
332
            {
333
                $user_profiles[$record->uuid] = $record->name;
334
            }
335
 
336
 
3138 efrain 337
            $timeElapsed = Functions::timeAgo($job->updated_on, $now);
338
 
7300 efrain 339
            if($isJson) {
340
                return new JsonModel([
341
                    'company_uuid'  => $company->uuid,
342
                    'company_image'         => $company->image,
343
                    'job_uuid'              => $job->uuid,
344
                    'job_title'             => $job->title,
345
                    'job_description'       => $job->description,
346
                    'total_applications'    => $total_applications,
347
                    'location'              => $location->formatted_address,
348
                    'employment_type'       => $employment_type,
349
                    'last_date_of_application'  => $last_date_of_application,
350
                    'job_category'              => $jobCategory->name,
351
                    'timeElapsed'               => $timeElapsed,
352
                    'experience'                => $job->experience_visible ? $job->experience_min . '-' . $job->experience_max : '',
353
                    'salary'                    => $job->salary_visible ? $job->salary_min . '-' . $job->salary_max . ' (' . $job->salary_currency . ')' : '',
354
                    'job_degrees'               => $job_degrees,
355
                    'job_languages'             => $job_languages,
356
                    'job_skills'                => $job_skills,
357
                    'job_visits'                => $job->visits,
358
                    'job_apply_operation'       => $job_apply_operation,
359
                    'job_save_operation'        => $job_save_operation,
360
                    'company_name'              => $company->name,
361
                    'company_foundation_year'   => $company->foundation_year,
362
                    'company_website'           => $company->website,
363
                    'company_industry'          => $industry->name,
364
                    'company_size'              => $companySize->minimum_no_of_employee . '-' . $companySize->maximum_no_of_employee,
365
                    'company_address'           => $company_address,
366
                    'user_profiles'             => $user_profiles,
367
                    'skills'                    => $skills,
368
                    'languages'                 => $languages,
369
                    'degrees'                   => $degrees,
370
                ]);
371
            } else {
372
                $formApply = new ApplyForm($this->adapter, $currentUser->id);
373
 
1 www 374
 
7300 efrain 375
                $this->layout()->setTemplate('layout/layout.phtml');
376
                $viewModel = new ViewModel();
377
                $viewModel->setTemplate('leaders-linked/job/view.phtml');
378
                $viewModel->setVariables([
379
                    'company_uuid'  => $company->uuid,
380
                    'company_image'         => $company->image,
381
                    'job_uuid'              => $job->uuid,
382
                    'job_title'             => $job->title,
383
                    'job_description'       => $job->description,
384
                    'total_applications'    => $total_applications,
385
                    'location'              => $location->formatted_address,
386
                    'employment_type'       => $employment_type,
387
                    'last_date_of_application'  => $last_date_of_application,
388
                    'job_category'              => $jobCategory->name,
389
                    'timeElapsed'               => $timeElapsed,
390
                    'experience'                => $job->experience_visible ? $job->experience_min . '-' . $job->experience_max : '',
391
                    'salary'                    => $job->salary_visible ? $job->salary_min . '-' . $job->salary_max . ' (' . $job->salary_currency . ')' : '',
392
                    'job_degrees'               => $job_degrees,
393
                    'job_languages'             => $job_languages,
394
                    'job_skills'                => $job_skills,
395
                    'job_visits'                => $job->visits,
396
                    'job_apply_operation'       => $job_apply_operation,
397
                    'job_save_operation'        => $job_save_operation,
398
                    'company_name'              => $company->name,
399
                    'company_foundation_year'   => $company->foundation_year,
400
                    'company_website'           => $company->website,
401
                    'company_industry'          => $industry->name,
402
                    'company_size'              => $companySize->minimum_no_of_employee . '-' . $companySize->maximum_no_of_employee,
403
                    'company_address'           => $company_address,
404
                    'formApply'                 => $formApply,
405
                    'user_profiles'             => $user_profiles
406
 
407
 
408
                ]);
409
            }
1 www 410
            return $viewModel ;
411
 
412
        } else {
413
            $data = [
414
                'success' => false,
415
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
416
            ];
417
 
418
            return new JsonModel($data);
419
        }
420
 
421
        return new JsonModel($data);
422
    }
423
 
424
    public function applyJobAction()
425
    {
3639 efrain 426
        $currentUserPlugin = $this->plugin('currentUserPlugin');
427
        $currentUser = $currentUserPlugin->getUser();
428
 
429
 
1 www 430
        $request = $this->getRequest();
431
        $id = $this->params()->fromRoute('id');
432
 
433
        if(!$id) {
434
            $data = [
435
                'success' => false,
436
                'data' => 'ERROR_INVALID_PARAMETER'
437
            ];
438
 
439
            return new JsonModel($data);
440
        }
441
 
442
        $jobMapper = JobMapper::getInstance($this->adapter);
3639 efrain 443
        $job = $jobMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
1 www 444
        if(!$job) {
445
            $data = [
446
                'success' => false,
447
                'data' => 'ERROR_RECORD_NOT_FOUND'
448
            ];
449
 
450
            return new JsonModel($data);
451
        }
452
 
453
        if($job->status != Job::STATUS_ACTIVE) {
454
            $data = [
455
                'success' => false,
456
                'data' => 'ERROR_UNAUTHORIZED'
457
            ];
458
 
459
            return new JsonModel($data);
460
        }
461
 
462
        $companyMapper = CompanyMapper::getInstance($this->adapter);
463
        $company = $companyMapper->fetchOne($job->company_id);
464
        if(!$company) {
465
            $data = [
466
                'success' => false,
467
                'data' => 'ERROR_RECORD_NOT_FOUND'
468
            ];
469
 
470
            return new JsonModel($data);
471
        }
472
 
473
 
474
        if($request->isPost()) {
3639 efrain 475
 
1 www 476
            $form = new ApplyForm($this->adapter, $currentUser->id);
477
            $dataPost = $request->getPost()->toArray();
478
 
479
            $form->setData($dataPost);
480
 
481
            if($form->isValid()) {
482
                $dataPost = (array) $form->getData();
483
 
484
                $userProfileMapper = UserProfileMapper::getInstance($this->adapter);
485
                $userProfile = $userProfileMapper->fetchOneByUuid($dataPost['user_profile_id']);
486
 
487
                $jobApplicationMapper = JobApplicationMapper::getInstance($this->adapter);
488
                $jobApplication = $jobApplicationMapper->fetchOneByJobIdAndUserId($job->id, $currentUser->id);
489
 
490
                $result = true;
491
 
492
                if(!$jobApplication) {
493
                    $jobApplication = new JobApplication();
494
                    $jobApplication->job_id = $job->id;
495
                    $jobApplication->user_id = $currentUser->id;
496
                    $jobApplication->user_profile_id = $userProfile->id;
497
 
498
                    $result = $jobApplicationMapper->insert($jobApplication);
499
                    if($result) {
500
                        $this->logger->info('El usuario  ' . $currentUser->first_name .  ' ' . $currentUser->last_name . ' aplico al trabajo ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
501
                    }
502
                }
503
 
504
                if($result) {
505
 
506
                    $total = $jobApplicationMapper->fetchTotalApplicationsByJobId($job->id);
507
 
508
                    $data = [
509
                        'success'   => true,
510
                        'data'      => 'LABEL_SUCCESSFUL_APPLICATION',
511
                        'total'     => $total
512
                    ];
513
 
514
 
515
 
516
                } else {
517
                    $data = [
518
                        'success'   => false,
519
                        'data'      => $jobApplicationMapper->getError()
520
                    ];
521
                }
522
 
523
 
524
                return new JsonModel($data);
525
 
526
            } else {
527
                $messages = [];
528
                $form_messages = (array) $form->getMessages();
529
                foreach($form_messages  as $fieldname => $field_messages)
530
                {
531
                    $messages[$fieldname] = array_values($field_messages);
532
                }
533
 
534
                return new JsonModel([
535
                    'success'   => false,
536
                    'data'   => $messages
537
                ]);
538
            }
539
 
540
        } else {
541
            $data = [
542
                'success' => false,
543
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
544
            ];
545
 
546
            return new JsonModel($data);
547
 
548
        }
549
    }
550
 
551
    public function removeApplyJobAction()
552
    {
3639 efrain 553
        $currentUserPlugin = $this->plugin('currentUserPlugin');
554
        $currentUser = $currentUserPlugin->getUser();
555
 
1 www 556
        $request = $this->getRequest();
557
        $id = $this->params()->fromRoute('id');
558
 
559
        if(!$id) {
560
            $data = [
561
                'success' => false,
562
                'data' => 'ERROR_INVALID_PARAMETER'
563
            ];
564
 
565
            return new JsonModel($data);
566
        }
567
 
568
        $jobMapper = JobMapper::getInstance($this->adapter);
3639 efrain 569
        $job = $jobMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
1 www 570
        if(!$job) {
571
            $data = [
572
                'success' => false,
573
                'data' => 'ERROR_RECORD_NOT_FOUND'
574
            ];
575
 
576
            return new JsonModel($data);
577
        }
578
 
579
        if($job->status != Job::STATUS_ACTIVE) {
580
            $data = [
581
                'success' => false,
582
                'data' => 'ERROR_UNAUTHORIZED'
583
            ];
584
 
585
            return new JsonModel($data);
586
        }
587
 
588
        $companyMapper = CompanyMapper::getInstance($this->adapter);
589
        $company = $companyMapper->fetchOne($job->company_id);
590
        if(!$company) {
591
            $data = [
592
                'success' => false,
593
                'data' => 'ERROR_RECORD_NOT_FOUND'
594
            ];
595
 
596
            return new JsonModel($data);
597
        }
598
 
599
 
600
        if($request->isPost()) {
601
 
602
            $jobApplicationMapper = JobApplicationMapper::getInstance($this->adapter);
603
            $result = $jobApplicationMapper->deleteByJobIdAndUserId($job->id, $currentUser->id);
604
 
605
            if($result) {
606
                $this->logger->info('El usuario  ' . $currentUser->first_name .  ' ' . $currentUser->last_name . ' removio su aplicación al trabajo ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
607
 
608
                $total = $jobApplicationMapper->fetchTotalApplicationsByJobId($job->id);
609
                $data = [
610
                    'success'   => true,
611
                    'data'      => 'LABEL_APPLICATION_WAS_REMOVED',
612
                    'total'     => $total
613
                ];
614
            } else {
615
                $data = [
616
                    'success'   => false,
617
                    'data'      => $jobApplicationMapper->getError()
618
                ];
619
 
620
 
621
            }
622
 
623
            return new JsonModel($data);
624
 
625
        } else {
626
            $data = [
627
                'success' => false,
628
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
629
            ];
630
 
631
            return new JsonModel($data);
632
 
633
        }
634
    }
635
 
636
    public function removeSaveJobAction()
637
    {
3639 efrain 638
        $currentUserPlugin = $this->plugin('currentUserPlugin');
639
        $currentUser = $currentUserPlugin->getUser();
640
 
1 www 641
        $request = $this->getRequest();
642
        $id = $this->params()->fromRoute('id');
643
 
644
        if(!$id) {
645
            $data = [
646
                'success' => false,
647
                'data' => 'ERROR_INVALID_PARAMETER'
648
            ];
649
 
650
            return new JsonModel($data);
651
        }
652
 
653
        $jobMapper = JobMapper::getInstance($this->adapter);
3639 efrain 654
        $job = $jobMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
1 www 655
        if(!$job) {
656
            $data = [
657
                'success' => false,
658
                'data' => 'ERROR_RECORD_NOT_FOUND'
659
            ];
660
 
661
            return new JsonModel($data);
662
        }
663
 
664
        if($job->status != Job::STATUS_ACTIVE) {
665
            $data = [
666
                'success' => false,
667
                'data' => 'ERROR_UNAUTHORIZED'
668
            ];
669
 
670
            return new JsonModel($data);
671
        }
672
 
673
        $companyMapper = CompanyMapper::getInstance($this->adapter);
674
        $company = $companyMapper->fetchOne($job->company_id);
675
        if(!$company) {
676
            $data = [
677
                'success' => false,
678
                'data' => 'ERROR_RECORD_NOT_FOUND'
679
            ];
680
 
681
            return new JsonModel($data);
682
        }
683
 
684
 
685
        if($request->isPost()) {
3639 efrain 686
 
1 www 687
            $jobSaveMapper = JobSaveMapper::getInstance($this->adapter);
688
            $result = $jobSaveMapper->deleteByJobIdAndUserId($job->id, $currentUser->id);
689
 
690
            if($result) {
691
                $this->logger->info('El usuario  ' . $currentUser->first_name .  ' ' . $currentUser->last_name . ' removio este trabajo salvado ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
692
 
693
                $data = [
694
                    'success'   => true,
695
                    ''
696
                ];
697
            } else {
698
                $data = [
699
                    'success'   => false,
700
                    'data'      => $jobSaveMapper->getError()
701
                ];
702
 
703
 
704
            }
705
 
706
            return new JsonModel($data);
707
 
708
        } else {
709
            $data = [
710
                'success' => false,
711
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
712
            ];
713
 
714
            return new JsonModel($data);
715
 
716
        }
717
    }
718
 
719
 
720
    public function saveJobAction()
721
    {
3639 efrain 722
        $currentUserPlugin = $this->plugin('currentUserPlugin');
723
        $currentUser = $currentUserPlugin->getUser();
724
 
1 www 725
        $request = $this->getRequest();
726
        $id = $this->params()->fromRoute('id');
727
 
728
        if(!$id) {
729
            $data = [
730
                'success' => false,
731
                'data' => 'ERROR_INVALID_PARAMETER'
732
            ];
733
 
734
            return new JsonModel($data);
735
        }
736
 
737
        $jobMapper = JobMapper::getInstance($this->adapter);
3639 efrain 738
        $job = $jobMapper->fetchOneByUuidAndNetworkId($id, $currentUser->network_id);
1 www 739
        if(!$job) {
740
            $data = [
741
                'success' => false,
742
                'data' => 'ERROR_RECORD_NOT_FOUND'
743
            ];
744
 
745
            return new JsonModel($data);
746
        }
747
 
748
        if($job->status != Job::STATUS_ACTIVE) {
749
            $data = [
750
                'success' => false,
751
                'data' => 'ERROR_UNAUTHORIZED'
752
            ];
753
 
754
            return new JsonModel($data);
755
        }
756
 
757
        $companyMapper = CompanyMapper::getInstance($this->adapter);
758
        $company = $companyMapper->fetchOne($job->company_id);
759
        if(!$company) {
760
            $data = [
761
                'success' => false,
762
                'data' => 'ERROR_RECORD_NOT_FOUND'
763
            ];
764
 
765
            return new JsonModel($data);
766
        }
767
 
768
 
769
        if($request->isPost()) {
3639 efrain 770
 
1 www 771
            $jobSaveMapper = JobSaveMapper::getInstance($this->adapter);
772
            $jobSave = $jobSaveMapper->fetchOneByJobIdAndUserId($job->id, $currentUser->id);
773
 
774
            if($jobSave) {
775
                $result = true;
776
            } else {
777
                $jobSave = new JobSave();
778
                $jobSave->job_id = $job->id;
779
                $jobSave->user_id = $currentUser->id;
780
 
781
                $result = $jobSaveMapper->insert($jobSave);
782
            }
783
 
784
            if($result) {
785
                $this->logger->info('El usuario  ' . $currentUser->first_name .  ' ' . $currentUser->last_name . ' salvo este trabajo ' . $job->title, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
786
 
787
                $data = [
788
                    'success'   => true,
789
                ];
790
            } else {
791
                $data = [
792
                    'success'   => false,
793
                    'data'      => $jobSaveMapper->getError()
794
                ];
795
 
796
 
797
            }
798
 
799
            return new JsonModel($data);
800
 
801
        } else {
802
            $data = [
803
                'success' => false,
804
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
805
            ];
806
 
807
            return new JsonModel($data);
808
 
809
        }
810
    }
811
 
812
    public function appliedJobsAction()
813
    {
814
        $currentUserPlugin = $this->plugin('currentUserPlugin');
815
        $currentUser = $currentUserPlugin->getUser();
3639 efrain 816
 
1 www 817
        $request = $this->getRequest();
818
        if($request->isGet()) {
819
 
820
 
821
            $headers  = $request->getHeaders();
822
            $isJson = false;
823
            if($headers->has('Accept')) {
824
                $accept = $headers->get('Accept');
825
 
826
                $prioritized = $accept->getPrioritized();
827
 
828
                foreach($prioritized as $key => $value) {
829
                    $raw = trim($value->getRaw());
830
 
831
                    if(!$isJson) {
832
                        $isJson = strpos($raw, 'json');
833
                    }
834
 
835
                }
836
            }
837
 
838
            if($isJson) {
839
                $employment_types = [
840
                    job::EMPLOYMENT_TYPE_FULL_TIME => 'LABEL_EMPLOYMENT_TYPE_FULL_TIME',
841
                    Job::EMPLOYMENT_TYPE_PART_TIME  => 'LABEL_EMPLOYMENT_TYPE_PART_TIME',
842
                    Job::EMPLOYMENT_TYPE_TEMPORARY => 'LABEL_EMPLOYMENT_TYPE_TEMPORARY',
1327 efrain 843
                    Job::EMPLOYMENT_TYPE_CONTRACT =>  'LABEL_EMPLOYMENT_TYPE_CONTRACT',
1 www 844
                ];
845
 
6749 efrain 846
                $search = Functions::sanitizeFilterString($this->params()->fromQuery('search', ''));
1 www 847
 
848
                $queryMapper = QueryMapper::getInstance($this->adapter);
849
 
850
                $select = $queryMapper->getSql()->select();
851
                $select->columns(['id', 'uuid', 'title', 'employment_type', 'last_date_of_application']);
852
                $select->from(['j' => JobMapper::_TABLE]);
853
                $select->join(['ja' => JobApplicationMapper::_TABLE], 'j.id = ja.job_id');
3639 efrain 854
                $select->where->equalTo('j.network_id', $currentUser->network_id);
1 www 855
                $select->where->equalTo('j.status', Job::STATUS_ACTIVE);
856
                $select->where->equalTo('ja.user_id', $currentUser->id);
857
 
858
                if($search) {
859
                    $select->where->like('title', '%' . $search . '%');
860
                }
861
 
862
                $select->order('last_date_of_application DESC');
863
 
864
                $records = $queryMapper->fetchAll($select);
865
 
1327 efrain 866
 
867
 
1 www 868
 
869
                $items = [];
870
                foreach($records as $record)
871
                {
872
 
873
                    $item = [
874
                        'id' => $record['uuid'],
875
                        'title' => $record['title'],
876
                        'employment_type' => $employment_types[$record['employment_type']],
877
                        'last_date_of_application' => $record['last_date_of_application'],
878
                        'link_remove' => $this->url()->fromRoute('job/remove-apply-job', ['id' => $record['uuid']  ]),
879
                        'link_view' => $this->url()->fromRoute('job/view', ['id' => $record['uuid'] ]),
880
                    ];
881
 
882
                    array_push($items, $item);
883
                }
884
 
885
 
886
 
887
                $response = [
888
                    'success' => true,
889
                    'data' => $items
890
                ];
891
 
892
                return new JsonModel($response);
893
 
894
 
895
            } else {
896
                $this->layout()->setTemplate('layout/layout.phtml');
897
                $viewModel = new ViewModel();
898
                $viewModel->setTemplate('leaders-linked/job/applied-jobs.phtml');
899
                return $viewModel ;
900
            }
901
 
902
        } else {
903
            return new JsonModel([
904
                'success' => false,
905
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
906
            ]);
907
        }
908
    }
909
 
910
    public function savedJobsAction()
911
    {
912
        $currentUserPlugin = $this->plugin('currentUserPlugin');
913
        $currentUser = $currentUserPlugin->getUser();
3639 efrain 914
 
1 www 915
        $request = $this->getRequest();
916
        if($request->isGet()) {
917
 
918
 
919
            $headers  = $request->getHeaders();
920
 
921
            $isJson = false;
922
            if($headers->has('Accept')) {
923
                $accept = $headers->get('Accept');
924
 
925
                $prioritized = $accept->getPrioritized();
926
 
927
                foreach($prioritized as $key => $value) {
928
                    $raw = trim($value->getRaw());
929
 
930
                    if(!$isJson) {
931
                        $isJson = strpos($raw, 'json');
932
                    }
933
 
934
                }
935
            }
936
 
937
            if($isJson) {
938
                $employment_types = [
939
                    job::EMPLOYMENT_TYPE_FULL_TIME => 'LABEL_EMPLOYMENT_TYPE_FULL_TIME',
940
                    Job::EMPLOYMENT_TYPE_PART_TIME  => 'LABEL_EMPLOYMENT_TYPE_PART_TIME',
941
                    Job::EMPLOYMENT_TYPE_TEMPORARY => 'LABEL_EMPLOYMENT_TYPE_TEMPORARY',
942
                ];
943
 
6749 efrain 944
                $search = Functions::sanitizeFilterString($this->params()->fromQuery('search', ''));
1 www 945
 
946
                $queryMapper = QueryMapper::getInstance($this->adapter);
947
 
948
                $select = $queryMapper->getSql()->select();
2803 kerby 949
                $select->columns(['id', 'uuid', 'title', 'employment_type', 'last_date_of_application']);
1 www 950
                $select->from(['j' => JobMapper::_TABLE]);
951
                $select->join(['js' => JobSaveMapper::_TABLE], 'j.id = js.job_id');
2807 kerby 952
                $select->join(['c' => CompanyMapper::_TABLE], 'j.company_id = c.id',['image', 'comp_uuid'=>'uuid']);
3639 efrain 953
                $select->where->equalTo('j.network_id', $currentUser->network_id);
1 www 954
                $select->where->equalTo('j.status', Job::STATUS_ACTIVE);
955
                $select->where->equalTo('js.user_id', $currentUser->id);
956
 
957
                if($search) {
958
                    $select->where->like('title', '%' . $search . '%');
959
                }
960
 
961
                $select->order('last_date_of_application DESC');
2796 kerby 962
 
2807 kerby 963
                // $selectString = $queryMapper->getSql()->buildSqlString($select);
2796 kerby 964
 
2807 kerby 965
                // print_r(
966
                //     $selectString
967
                // );
2796 kerby 968
 
1 www 969
 
970
                $records = $queryMapper->fetchAll($select);
971
 
2809 kerby 972
                // print_r($records);
1 www 973
                $items = [];
974
                foreach($records as $record)
975
                {
976
 
977
                    $item = [
978
                        'id' => $record['uuid'],
979
                        'title' => $record['title'],
980
                        'employment_type' => $employment_types[$record['employment_type']],
981
                        'last_date_of_application' => $record['last_date_of_application'],
2808 kerby 982
                        'image' => $this->url()->fromRoute('storage', ['type' => 'company', 'code' => $record['comp_uuid'], 'filename' => $record['image']]),
1 www 983
                        'link_remove' => $this->url()->fromRoute('job/remove-save-job', ['id' => $record['uuid']  ]),
984
                        'link_view' => $this->url()->fromRoute('job/view', ['id' => $record['uuid'] ]),
985
                    ];
986
 
987
                    array_push($items, $item);
988
                }
989
 
990
 
991
 
992
                $response = [
993
                    'success' => true,
994
                    'data' => $items
995
                ];
996
 
997
                return new JsonModel($response);
998
 
999
 
1000
            } else {
1001
                $this->layout()->setTemplate('layout/layout.phtml');
1002
                $viewModel = new ViewModel();
1003
                $viewModel->setTemplate('leaders-linked/job/saved-jobs.phtml');
1004
                return $viewModel ;
1005
            }
1006
 
1007
        } else {
1008
            return new JsonModel([
1009
                'success' => false,
1010
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1011
            ]);
1012
        }
1013
    }
1014
 
1015
}