Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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