Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
1384 efrain 1
<?php
2
 
3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
8
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
9
use Laminas\Mvc\Controller\AbstractActionController;
10
use Laminas\Log\LoggerInterface;
11
use Laminas\View\Model\ViewModel;
12
use Laminas\View\Model\JsonModel;
1387 eleazar 13
use LeadersLinked\Form\RecruitForm;
1384 efrain 14
use LeadersLinked\Library\Functions;
1386 eleazar 15
use LeadersLinked\Mapper\RecruitmentSelectionVacancyMapper;
1387 eleazar 16
use LeadersLinked\Model\RecruitmentSelectionVacancy;
1384 efrain 17
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
18
use LeadersLinked\Model\Location;
19
use LeadersLinked\Mapper\LocationMapper;
20
use LeadersLinked\Mapper\IndustryMapper;
21
use LeadersLinked\Mapper\JobDescriptionMapper;
22
use LeadersLinked\Mapper\JobDescriptionCompetencyMapper;
23
use LeadersLinked\Mapper\CompetencyMapper;
24
use LeadersLinked\Mapper\CompetencyTypeMapper;
25
use LeadersLinked\Mapper\BehaviorCompetencyMapper;
26
use LeadersLinked\Mapper\BehaviorMapper;
27
use LeadersLinked\Mapper\JobDescriptionBehaviorCompetencyMapper;
28
use LeadersLinked\Mapper\CompanyMapper;
29
use LeadersLinked\Model\Company;
30
use LeadersLinked\Mapper\JobCategoryMapper;
31
 
32
class RecruitmentSelectionVacancyController extends AbstractActionController {
33
 
34
    /**
35
     *
36
     * @var AdapterInterface
37
     */
38
    private $adapter;
39
 
40
    /**
41
     *
42
     * @var AbstractAdapter
43
     */
44
    private $cache;
45
 
46
    /**
47
     *
48
     * @var  LoggerInterface
49
     */
50
    private $logger;
51
 
52
    /**
53
     *
54
     * @var array
55
     */
56
    private $config;
57
 
58
    /**
59
     *
60
     * @param AdapterInterface $adapter
61
     * @param AbstractAdapter $cache
62
     * @param LoggerInterface $logger
63
     * @param array $config
64
     */
65
    public function __construct($adapter, $cache, $logger, $config) {
66
        $this->adapter = $adapter;
67
        $this->cache = $cache;
68
        $this->logger = $logger;
69
        $this->config = $config;
70
    }
71
 
72
    public function indexAction() {
73
        $request = $this->getRequest();
74
        $currentUserPlugin = $this->plugin('currentUserPlugin');
75
        $currentCompany = $currentUserPlugin->getCompany();
76
        $currentUser = $currentUserPlugin->getUser();
77
 
78
 
79
        $request = $this->getRequest();
80
        if ($request->isGet()) {
81
            $sandbox = $this->config['leaderslinked.runmode.sandbox'];
82
            if($sandbox) {
83
                $google_map_key  = $this->config['leaderslinked.google_map.sandbox_api_key'];
84
            } else {
85
                $google_map_key  = $this->config['leaderslinked.google_map.production_api_key'];
86
            }
87
 
88
 
89
            $headers = $request->getHeaders();
90
 
91
            $isJson = false;
92
            if ($headers->has('Accept')) {
93
                $accept = $headers->get('Accept');
94
 
95
                $prioritized = $accept->getPrioritized();
96
 
97
                foreach ($prioritized as $key => $value) {
98
                    $raw = trim($value->getRaw());
99
 
100
                    if (!$isJson) {
101
                        $isJson = strpos($raw, 'json');
102
                    }
103
                }
104
            }
105
 
106
            //$isJson = true;
107
            if ($isJson) {
108
                $search = $this->params()->fromQuery('search', []);
109
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
110
 
111
                $page = intval($this->params()->fromQuery('start', 1), 10);
112
                $records_x_page = intval($this->params()->fromQuery('length', 10), 10);
113
                $order = $this->params()->fromQuery('order', []);
114
                $order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);
115
                $order_direction = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var($order[0]['dir'], FILTER_SANITIZE_STRING));
116
 
117
                $fields = ['name'];
118
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
119
 
120
                if (!in_array($order_direction, ['ASC', 'DESC'])) {
121
                    $order_direction = 'ASC';
122
                }
123
 
1386 eleazar 124
                $recruitmentSelectionVacancyMapper = RecruitmentSelectionVacancyMapper::getInstance($this->adapter);
125
                $paginator = $recruitmentSelectionVacancyMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);
1384 efrain 126
 
127
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
1386 eleazar 128
                $industryMapper = IndustryMapper::getInstance($this->adapter);
1384 efrain 129
                $jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);
130
 
131
                $items = [];
132
                $records = $paginator->getCurrentItems();
133
                foreach ($records as $record) {
134
 
135
 
136
 
137
                    $jobDescription = $jobDescriptionMapper->fetchOne($record->job_description_id);
138
                    if ($jobDescription) {
139
 
140
                        $item = [
141
                            'id' => $record->id,
142
                            'name' => $record->name,
143
                            'job_description' => $jobDescription->name,
144
                            'status' => $record->status,
145
                            'actions' => [
1395 eleazar 146
                                'link_edit' => $this->url()->fromRoute('recruitment-and-selection-vacancies/forms/edit', ['id' => $record->uuid]),
147
                                'link_delete' => $this->url()->fromRoute('recruitment-and-selection-vacancies/forms/delete', ['id' => $record->uuid])
1384 efrain 148
                            ]
149
                        ];
150
                    }
151
 
152
                    array_push($items, $item);
153
                }
154
 
155
                return new JsonModel([
156
                    'success' => true,
157
                    'data' => [
158
                        'items' => $items,
159
                        'total' => $paginator->getTotalItemCount(),
160
                    ]
161
                ]);
162
            } else {
163
 
164
                $form = new RecruitForm($this->adapter, $currentCompany->id);
165
 
166
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
167
                $jobsDescription = $jobDescriptionMapper->fetchAllByCompanyId($currentCompany->id);
168
                $industryMapper = industryMapper::getInstance($this->adapter);
169
                $industry = $industryMapper->fetchAllActives($currentCompany->id);
170
                $jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);
171
                $jobCategory = $jobCategoryMapper->fetchAllActives($currentCompany->id);
172
 
173
                $this->layout()->setTemplate('layout/layout-backend');
174
                $viewModel = new ViewModel();
1396 eleazar 175
                $viewModel->setTemplate('leaders-linked/recruitment-and-selection-vacancies/index.phtml');
1384 efrain 176
                $viewModel->setVariable('form', $form);
177
                $viewModel->setVariable('industry', $industry);
178
                $viewModel->setVariable('jobsDescription', $jobsDescription);
179
                $viewModel->setVariable('jobCategory', $jobCategory);
180
                $viewModel->setVariable('google_map_key', $google_map_key);
181
                return $viewModel;
182
            }
183
        } else {
184
            return new JsonModel([
185
                'success' => false,
186
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
187
            ]);
188
            ;
189
        }
190
    }
191
 
192
    public function addAction() {
193
        $request = $this->getRequest();
194
        $currentUserPlugin = $this->plugin('currentUserPlugin');
195
        $currentCompany = $currentUserPlugin->getCompany();
196
        $currentUser = $currentUserPlugin->getUser();
197
 
198
        $request = $this->getRequest();
199
 
200
 
201
        if ($request->isPost()) {
202
            $form = new RecruitForm($this->adapter, $currentCompany->id);
203
            $dataPost = $request->getPost()->toArray();
204
 
205
 
1387 eleazar 206
            $dataPost['status'] = isset($dataPost['status']) ? $dataPost['status'] : RecruitmentSelectionVacancy::STATUS_INACTIVE;
1384 efrain 207
 
208
            $form->setData($dataPost);
209
 
210
            if ($form->isValid()) {
211
 
212
 
213
                $dataPost = (array) $form->getData();
214
 
215
                $hydrator = new ObjectPropertyHydrator();
1387 eleazar 216
                $recruitmentForm = new RecruitmentSelectionVacancy();
1384 efrain 217
                $hydrator->hydrate($dataPost, $recruitmentForm);
218
 
219
                if (!$recruitmentForm->status) {
1387 eleazar 220
                    $recruitmentForm->status = RecruitmentSelectionVacancy::STATUS_INACTIVE;
1384 efrain 221
                }
222
                $recruitmentForm->company_id = $currentCompany->id;
1386 eleazar 223
                $recruitmentSelectionVacancyMapper = RecurtingForm::getInstance($this->adapter);;
1384 efrain 224
 
1386 eleazar 225
                $result = $recruitmentSelectionVacancyMapper->insert($recruitmentForm);
1384 efrain 226
 
227
 
228
                if ($result) {
1385 eleazar 229
                    $this->logger->info('Se agrego el proceso de reclutamiento' . $recruitmentForm->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1384 efrain 230
 
231
                    $data = [
232
                        'success' => true,
233
                        'data' => 'LABEL_RECORD_ADDED'
234
                    ];
235
 
236
                } else {
237
                    $data = [
238
                        'success' => false,
1411 eleazar 239
                        'data' => ''//$recruitmentSelectionVacancyMapper->getError()
1384 efrain 240
                    ];
241
                }
242
 
243
                return new JsonModel($data);
244
            } else {
245
                $messages = [];
246
                $form_messages = (array) $form->getMessages();
247
                foreach ($form_messages as $fieldname => $field_messages) {
248
 
249
                    $messages[$fieldname] = array_values($field_messages);
250
                }
251
 
252
                return new JsonModel([
253
                    'success' => false,
254
                    'data' => $messages
255
                ]);
256
            }
257
        } else {
258
            $data = [
259
                'success' => false,
260
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
261
            ];
262
 
263
            return new JsonModel($data);
264
        }
265
 
266
        return new JsonModel($data);
267
    }
268
 
269
    public function editAction() {
270
        $request = $this->getRequest();
271
        $currentUserPlugin = $this->plugin('currentUserPlugin');
272
        $currentCompany = $currentUserPlugin->getCompany();
273
        $currentUser = $currentUserPlugin->getUser();
274
 
275
        $request = $this->getRequest();
276
        $uuid = $this->params()->fromRoute('id');
277
 
278
 
279
        if (!$uuid) {
280
            $data = [
281
                'success' => false,
282
                'data' => 'ERROR_INVALID_PARAMETER'
283
            ];
284
 
285
            return new JsonModel($data);
286
        }
287
 
1386 eleazar 288
        $recruitmentSelectionVacancyMapper = RecruitmentSelectionVacancyMapper::getInstance($this->adapter);
289
        $recruitmentCandidate = $recruitmentSelectionVacancyMapper->fetchOneByUuid($uuid);
1384 efrain 290
        if (!$recruitmentCandidate) {
291
            $data = [
292
                'success' => false,
293
                'data' => 'ERROR_RECORD_NOT_FOUND'
294
            ];
295
 
296
            return new JsonModel($data);
297
        }
298
 
299
        if ($recruitmentCandidate->company_id != $currentCompany->id) {
300
            return new JsonModel([
301
                'success' => false,
302
                'data' => 'ERROR_UNAUTHORIZED'
303
            ]);
304
        }
305
 
306
 
307
        if ($request->isPost()) {
308
            $form = new RecruitForm($this->adapter, $currentCompany->id);
309
            $dataPost = $request->getPost()->toArray();
1387 eleazar 310
            $dataPost['status'] = isset($dataPost['status']) ? $dataPost['status'] : RecruitmentSelectionVacancy::STATUS_INACTIVE;
1384 efrain 311
 
312
            $form->setData($dataPost);
313
 
314
            if ($form->isValid()) {
315
                $dataPost = (array) $form->getData();
316
 
317
                $hydrator = new ObjectPropertyHydrator();
318
                $hydrator->hydrate($dataPost, $recruitmentCandidate);
319
 
320
                if (!$recruitmentCandidate->status) {
1387 eleazar 321
                    $recruitmentCandidate->status = RecruitmentSelectionVacancy::STATUS_INACTIVE;
1384 efrain 322
                }
323
 
324
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
325
                $jobDescription = $jobDescriptionMapper->fetchOneByUuid($dataPost['job_description_id']);
326
                $recruitmentCandidate->job_description_id = $jobDescription->id;
327
 
328
                $recruitmentCandidate->job_description_id = $jobDescription->id;
329
 
1386 eleazar 330
                $result = $recruitmentSelectionVacancyMapper->update($recruitmentCandidate);
1384 efrain 331
 
332
                if ($result) {
333
                    $this->logger->info('Se agrego el candidato' . $recruitmentCandidate->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
334
                    $data = [
335
                        'success' => true,
336
                        'id' => $recruitmentCandidate->id,
1395 eleazar 337
                        'action_edit' => $this->url()->fromRoute('recruitment-and-selection-vacancies/forms/edit', ['id' => $recruitmentCandidate->uuid]),
1384 efrain 338
                        'data' => 'LABEL_RECORD_UPDATED'
339
                    ];
340
                } else {
341
                    $data = [
342
                        'success' => false,
1386 eleazar 343
                        'data' => $recruitmentSelectionVacancyMapper->getError()
1384 efrain 344
                    ];
345
                }
346
 
347
                return new JsonModel($data);
348
            } else {
349
                $messages = [];
350
                $form_messages = (array) $form->getMessages();
351
                foreach ($form_messages as $fieldname => $field_messages) {
352
                    $messages[$fieldname] = array_values($field_messages);
353
                }
354
 
355
                return new JsonModel([
356
                    'success' => false,
357
                    'data' => $messages
358
                ]);
359
            }
360
        } else if ($request->isGet()) {
361
            $hydrator = new ObjectPropertyHydrator();
362
 
363
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
364
            $jobDescription = $jobDescriptionMapper->fetchOne($recruitmentCandidate->job_description_id);
365
            if (!$jobDescription) {
366
                $data = [
367
                    'success' => false,
368
                    'data' => 'ERROR_METHOD_NOT_ALLOWED'
369
                ];
370
 
371
                return new JsonModel($data);
372
            }
373
 
374
            $data = [
375
                'success' => true,
376
                'data' => [
377
                    'id' => $recruitmentCandidate->uuid,
378
                    'name' => $recruitmentCandidate->name,
1402 eleazar 379
                    'company'=>$currentCompany->id,
380
                    'job_description_id' => $jobDescription->job_description_id,
1411 eleazar 381
                    'location_search' => $recruitmentCandidate->location_id,
1402 eleazar 382
                    'job_category_id' => $recruitmentCandidate->job_category_id,
1384 efrain 383
                    'text' => $recruitmentCandidate->text,
384
                    'industry' => $recruitmentCandidate->industry_id,
385
                    'status' => $recruitmentCandidate->status,
386
                    'content' => $recruitmentCandidate->content ? json_decode($recruitmentCandidate->content) : [],
387
                ]
388
            ];
389
 
390
            return new JsonModel($data);
391
        } else {
392
            $data = [
393
                'success' => false,
394
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
395
            ];
396
 
397
            return new JsonModel($data);
398
        }
399
 
400
        return new JsonModel($data);
401
    }
402
 
403
    public function deleteAction() {
404
        $request = $this->getRequest();
405
        $currentUserPlugin = $this->plugin('currentUserPlugin');
406
        $currentCompany = $currentUserPlugin->getCompany();
407
        $currentUser = $currentUserPlugin->getUser();
408
 
409
        $request = $this->getRequest();
410
        $uuid = $this->params()->fromRoute('id');
411
 
412
        if (!$uuid) {
413
            $data = [
414
                'success' => false,
415
                'data' => 'ERROR_INVALID_PARAMETER'
416
            ];
417
 
418
            return new JsonModel($data);
419
        }
420
 
1386 eleazar 421
        $recruitmentSelectionVacancyMapper = RecruitmentSelectionVacancyMapper::getInstance($this->adapter);
422
        $recruitmentCandidate = $recruitmentSelectionVacancyMapper->fetchOneByUuid($uuid);
1384 efrain 423
        if (!$recruitmentCandidate) {
424
            $data = [
425
                'success' => false,
426
                'data' => 'ERROR_RECORD_NOT_FOUND'
427
            ];
428
 
429
            return new JsonModel($data);
430
        }
431
 
432
        if ($recruitmentCandidate->company_id != $currentCompany->id) {
433
            return new JsonModel([
434
                'success' => false,
435
                'data' => 'ERROR_UNAUTHORIZED'
436
            ]);
437
        }
438
 
439
        if ($request->isPost()) {
440
 
441
 
1386 eleazar 442
            $result = $recruitmentSelectionVacancyMapper->delete($recruitmentCandidate->id);
1384 efrain 443
            if ($result) {
444
                $this->logger->info('Se borro el formulario de reclutamiento ' . $recruitmentCandidate->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
445
 
446
                $data = [
447
                    'success' => true,
448
                    'data' => 'LABEL_RECORD_DELETED'
449
                ];
450
            } else {
451
 
452
                $data = [
453
                    'success' => false,
1386 eleazar 454
                    'data' => $recruitmentSelectionVacancyMapper->getError()
1384 efrain 455
                ];
456
 
457
                return new JsonModel($data);
458
            }
459
        } else {
460
            $data = [
461
                'success' => false,
462
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
463
            ];
464
 
465
            return new JsonModel($data);
466
        }
467
 
468
        return new JsonModel($data);
469
    }
470
 
471
 
472
 
473
}