Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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