Proyectos de Subversion LeadersLinked - Backend

Rev

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

Rev Autor Línea Nro. Línea
4384 eleazar 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;
4579 eleazar 11
use Laminas\View\Model\ViewModel;
4384 eleazar 12
use Laminas\View\Model\JsonModel;
4579 eleazar 13
use LeadersLinked\Mapper\SurveyMapper;
4678 eleazar 14
use LeadersLinked\Mapper\SurveyFormMapper;
4855 eleazar 15
use LeadersLinked\Model\Location;
16
use LeadersLinked\Mapper\LocationMapper;
17
use LeadersLinked\Mapper\IndustryMapper;
18
use LeadersLinked\Mapper\JobDescriptionMapper;
19
use LeadersLinked\Mapper\BehaviorMapper;
20
use LeadersLinked\Mapper\JobDescriptionBehaviorCompetencyMapper;
21
use LeadersLinked\Mapper\CompanyMapper;
22
use LeadersLinked\Mapper\ServiceMapper;
23
use LeadersLinked\Model\Company;
24
use LeadersLinked\Mapper\JobCategoryMapper;
25
 
4579 eleazar 26
use LeadersLinked\Form\SurveyForm;
27
use LeadersLinked\Model\Survey;
28
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
4384 eleazar 29
 
30
class SurveyController extends AbstractActionController {
31
 
32
    /**
33
     *
34
     * @var AdapterInterface
35
     */
36
    private $adapter;
37
 
38
    /**
39
     *
40
     * @var AbstractAdapter
41
     */
42
    private $cache;
43
 
44
    /**
45
     *
46
     * @var  LoggerInterface
47
     */
48
    private $logger;
49
 
50
    /**
51
     *
52
     * @var array
53
     */
54
    private $config;
55
 
56
    /**
57
     *
58
     * @param AdapterInterface $adapter
59
     * @param AbstractAdapter $cache
60
     * @param LoggerInterface $logger
61
     * @param array $config
62
     */
63
    public function __construct($adapter, $cache, $logger, $config) {
64
        $this->adapter = $adapter;
65
        $this->cache = $cache;
66
        $this->logger = $logger;
67
        $this->config = $config;
68
    }
69
 
70
    public function indexAction() {
4579 eleazar 71
        $request = $this->getRequest();
72
        $currentUserPlugin = $this->plugin('currentUserPlugin');
73
        $currentCompany = $currentUserPlugin->getCompany();
74
        $currentUser = $currentUserPlugin->getUser();
4384 eleazar 75
 
4579 eleazar 76
 
77
        $request = $this->getRequest();
78
        if ($request->isGet()) {
79
 
80
            $headers = $request->getHeaders();
81
 
82
            $isJson = false;
83
            if ($headers->has('Accept')) {
84
                $accept = $headers->get('Accept');
85
 
86
                $prioritized = $accept->getPrioritized();
87
 
88
                foreach ($prioritized as $key => $value) {
89
                    $raw = trim($value->getRaw());
90
 
91
                    if (!$isJson) {
92
                        $isJson = strpos($raw, 'json');
93
                    }
94
                }
95
            }
96
 
97
            if ($isJson) {
98
                $search = $this->params()->fromQuery('search', []);
99
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
100
 
101
                $page = intval($this->params()->fromQuery('start', 1), 10);
102
                $records_x_page = intval($this->params()->fromQuery('length', 10), 10);
103
                $order = $this->params()->fromQuery('order', []);
104
                $order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);
105
                $order_direction = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var($order[0]['dir'], FILTER_SANITIZE_STRING));
106
 
107
                $fields = ['name'];
108
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
109
 
110
                if (!in_array($order_direction, ['ASC', 'DESC'])) {
111
                    $order_direction = 'ASC';
112
                }
113
 
4661 eleazar 114
                $acl = $this->getEvent()->getViewModel()->getVariable('acl');
115
                $allowAdd = $acl->isAllowed($currentUser->usertype_id, 'survey/add');
116
                $allowEdit = $acl->isAllowed($currentUser->usertype_id, 'survey/edit');
117
                $allowDelete = $acl->isAllowed($currentUser->usertype_id, 'survey/delete');
118
                $allowSegment = $acl->isAllowed($currentUser->usertype_id, 'survey/segment');
119
 
4579 eleazar 120
                $surveyMapper = SurveyMapper::getInstance($this->adapter);
121
                $paginator = $surveyMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);
122
 
123
                $items = [];
124
                $records = $paginator->getCurrentItems();
125
 
126
                foreach ($records as $record) {
4754 eleazar 127
                    $surveyFormMapper = SurveyFormMapper::getInstance($this->adapter);
128
                    $surveyForm = $surveyFormMapper->fetchOne($record->form_id);
129
 
4579 eleazar 130
                    $item = [
131
                        'id' => $record->id,
132
                        'name' => $record->name,
4754 eleazar 133
                        'form' => $surveyForm->name,
4579 eleazar 134
                        'status' => $record->status,
135
                        'actions' => [
136
                            'link_edit' => $this->url()->fromRoute('survey/edit', ['id' => $record->uuid]),
137
                            'link_delete' => $this->url()->fromRoute('survey/delete', ['id' => $record->uuid]),
138
                            'link_segment' => $this->url()->fromRoute('survey/segment', ['id' => $record->uuid])
139
                        ]
140
                    ];
141
 
142
                    array_push($items, $item);
143
                }
144
 
145
                return new JsonModel([
146
                    'success' => true,
147
                    'data' => [
148
                        'items' => $items,
149
                        'total' => $paginator->getTotalItemCount(),
150
                    ]
151
                ]);
152
            } else {
153
 
154
                $form = new SurveyForm($this->adapter, $currentCompany->id);
155
 
156
                $this->layout()->setTemplate('layout/layout-backend');
157
                $viewModel = new ViewModel();
158
                $viewModel->setTemplate('leaders-linked/survey/index.phtml');
159
                $viewModel->setVariable('form', $form);
160
                return $viewModel;
161
            }
162
        } else {
163
            return new JsonModel([
164
                'success' => false,
165
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
166
            ]);
167
        }
4384 eleazar 168
    }
169
 
4579 eleazar 170
    public function addAction() {
171
        $request = $this->getRequest();
172
        $currentUserPlugin = $this->plugin('currentUserPlugin');
173
        $currentCompany = $currentUserPlugin->getCompany();
174
        $currentUser = $currentUserPlugin->getUser();
175
 
176
        $request = $this->getRequest();
177
 
178
        if ($request->isPost()) {
179
 
180
            $form = new SurveyForm($this->adapter, $currentCompany->id);
4672 eleazar 181
 
4579 eleazar 182
            $dataPost = $request->getPost()->toArray();
4661 eleazar 183
            $dataPost['status'] = isset($dataPost['status']) ? $dataPost['status'] : SurveyForm::STATUS_INACTIVE;
4579 eleazar 184
 
185
            $form->setData($dataPost);
186
 
187
            if ($form->isValid()) {
188
                $dataPost = (array) $form->getData();
189
 
190
                $hydrator = new ObjectPropertyHydrator();
191
                $survey = new Survey();
192
                $hydrator->hydrate($dataPost, $survey);
193
 
194
                if (!$survey->status) {
195
                    $survey->status = Survey::STATUS_INACTIVE;
196
                }
197
                $survey->company_id = $currentCompany->id;
198
 
4677 eleazar 199
                $surveyFormMapper = SurveyFormMapper::getInstance($this->adapter);
200
                $surveyForm = $surveyFormMapper->fetchOneByUuid($dataPost['form_id']);
201
                $survey->form_id = $surveyForm->id;
4579 eleazar 202
 
4724 eleazar 203
                $surveyMapper = SurveyMapper::getInstance($this->adapter);
204
                $result = $surveyMapper->insert($survey);
4730 eleazar 205
 
4579 eleazar 206
                if ($result) {
4734 eleazar 207
 
4728 eleazar 208
                    if ($result) {
4579 eleazar 209
 
210
                        $data = [
211
                            'success' => true,
212
                            'data' => 'LABEL_RECORD_ADDED'
213
                        ];
214
                    } else {
215
 
216
                        $data = [
217
                            'success' => false,
218
                            'data' => 'ERROR_RECORD_NOT_FOUND'
219
                        ];
220
                    }
221
                } else {
222
                    $data = [
223
                        'success' => false,
224
                        'data' => $surveyMapper->getError()
225
                    ];
226
                }
227
 
228
                return new JsonModel($data);
229
            } else {
230
                $messages = [];
231
                $form_messages = (array) $form->getMessages();
232
                foreach ($form_messages as $fieldname => $field_messages) {
233
 
234
                    $messages[$fieldname] = array_values($field_messages);
235
                }
236
 
237
                return new JsonModel([
238
                    'success' => false,
239
                    'data' => $messages
240
                ]);
241
            }
242
        } else {
243
            $data = [
244
                'success' => false,
245
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
246
            ];
247
 
248
            return new JsonModel($data);
249
        }
250
 
251
        return new JsonModel($data);
252
    }
253
 
4856 eleazar 254
    public function segmentAction() {
4855 eleazar 255
        $request = $this->getRequest();
256
        $currentUserPlugin = $this->plugin('currentUserPlugin');
257
        $currentCompany = $currentUserPlugin->getCompany();
258
        $currentUser = $currentUserPlugin->getUser();
259
 
260
        $request = $this->getRequest();
261
        $uuid = $this->params()->fromRoute('id');
262
 
263
 
264
        if (!$uuid) {
265
            $data = [
266
                'success' => false,
267
                'data' => 'ERROR_INVALID_PARAMETER'
268
            ];
269
 
270
            return new JsonModel($data);
271
        }
272
 
273
        $surveyMapper = SurveyMapper::getInstance($this->adapter);
274
        $survey = $surveyMapper->fetchOneByUuid($uuid);
275
        if (!$survey) {
276
            $data = [
277
                'success' => false,
278
                'data' => 'ERROR_RECORD_NOT_FOUND'
279
            ];
280
 
281
            return new JsonModel($data);
282
        }
283
 
284
        if ($survey->company_id != $currentCompany->id) {
285
            return new JsonModel([
286
                'success' => false,
287
                'data' => 'ERROR_UNAUTHORIZED'
288
            ]);
289
        }
290
        if($request->isGet()){
291
            $location = new Location();
292
            $hydrator->hydrate($dataPost, $location);
293
 
294
            $locationMapper= LocationMapper::getInstance($this->adapter);
295
            $result = $locationMapper->insert($location);
296
 
297
            $survey = new Survey();
298
            $hydrator->hydrate($dataPost, $survey);
299
 
300
            $survey->location_id = $location->id;
301
            $survey->company_id = $currentCompany->id;
302
 
303
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
304
            $jobDescription = $jobDescriptionMapper->fetchAllByCompanyId($currentCompany->id);
305
 
306
            $jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);
307
            $jobCategory = $jobCategoryMapper->fetchAllByCompanyId($currentCompany->id);
308
 
309
            $industryMapper = IndustryMapper::getInstance($this->adapter);
310
            $industry = $industryMapper->fetchAllByCompanyId($currentCompany->id);
311
 
312
            $serviceMapper = ServiceMapper::getInstance($this->adapter);
313
            $service = $serviceMapper->fetchAllByCompanyId($currentCompany->id);
314
 
315
        } else if($request->isPost()){
316
            $form = new SurveyForm($this->adapter, $currentCompany->id);
317
            $dataPost = $request->getPost()->toArray();
318
            $form->setData($dataPost);
319
 
320
            if ($form->isValid()) {
321
                $dataPost = (array) $form->getData();
322
 
323
                $hydrator = new ObjectPropertyHydrator();
324
 
325
                $location = new Location();
326
                $hydrator->hydrate($dataPost, $location);
327
 
328
                $locationMapper= LocationMapper::getInstance($this->adapter);
329
                $resultLocation = $locationMapper->insert($location);
330
 
331
 
332
                if (!$resultLocation) {
333
                    return new JsonModel([
334
                        'success'   => false,
335
                        'data' => 'ERROR_THERE_WAS_AN_ERROR'
336
                    ]);
337
                }
338
 
339
                $jobDescription = new SurveyJobDescription();
340
                $jobCategory = new SurveyJobCategory();
341
                $industry = new SurveyIndustry();
342
                $service = new SurveyService();
343
                $hydrator->hydrate($dataPost, $vacancy);
344
 
345
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
346
                $jobDescription = $jobDescriptionMapper->fetchOneByUuid($dataPost['job_description_id']);
347
                $jobDescription->job_description_id = $jobDescription->id;
348
 
349
                $jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);
350
                $jobCategory = $jobCategoryMapper->fetchOneByUuid( $dataPost['job_category_id']);
351
                $jobCategory->job_category_id = $jobCategory->id;
352
 
353
                $industryMapper = IndustryMapper::getInstance($this->adapter);
354
                $industry = $industryMapper->fetchOneByUuid($dataPost['industry_id']);
355
                $industry->industry_id = $industry->id;
356
 
357
                $serviceMapper = ServiceMapper::getInstance($this->adapter);
358
                $service = $serviceMapper->fetchOneByUuid($dataPost['service_id']);
359
                $service->service_id = $service->id;
360
 
361
                $recruitmentSelectionVacancyMapper = RecruitmentSelectionVacancyMapper::getInstance($this->adapter);
362
 
363
                $result = $recruitmentSelectionVacancyMapper->insert($vacancy);
364
 
365
                if ($result) {
366
                    $this->logger->info('Se agrego el proceso de reclutamiento' . $vacancy->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
367
 
368
                    $data = [
369
                        'success' => true,
370
                        'data' => 'LABEL_RECORD_ADDED'
371
                    ];
372
 
373
                } else {
374
                    $data = [
375
                        'success' => false,
376
                        'data' => $recruitmentSelectionVacancyMapper->getError()
377
                    ];
378
                }
379
 
380
                return new JsonModel($data);
381
            } else {
382
                $messages = [];
383
                $form_messages = (array) $form->getMessages();
384
                foreach ($form_messages as $fieldname => $field_messages) {
385
 
386
                    $messages[$fieldname] = array_values($field_messages);
387
                }
388
 
389
                return new JsonModel([
390
                    'success' => false,
391
                    'data' => $messages
392
                ]);
393
            }
394
        } else {
395
            $data = [
396
                'success' => false,
397
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
398
            ];
399
 
400
            return new JsonModel($data);
401
        }
402
 
403
        return new JsonModel($data);
404
 
405
    }
406
 
4579 eleazar 407
    public function editAction() {
408
        $request = $this->getRequest();
409
        $currentUserPlugin = $this->plugin('currentUserPlugin');
410
        $currentCompany = $currentUserPlugin->getCompany();
411
        $currentUser = $currentUserPlugin->getUser();
412
 
413
        $request = $this->getRequest();
414
        $uuid = $this->params()->fromRoute('id');
415
 
416
 
417
        if (!$uuid) {
418
            $data = [
419
                'success' => false,
420
                'data' => 'ERROR_INVALID_PARAMETER'
421
            ];
422
 
423
            return new JsonModel($data);
424
        }
425
 
426
        $surveyMapper = SurveyMapper::getInstance($this->adapter);
427
        $survey = $surveyMapper->fetchOneByUuid($uuid);
428
 
429
        if (!$survey) {
430
            $data = [
431
                'success' => false,
432
                'data' => 'ERROR_RECORD_NOT_FOUND'
433
            ];
434
 
435
            return new JsonModel($data);
436
        }
437
 
438
        if ($survey->company_id != $currentCompany->id) {
439
            return new JsonModel([
440
                'success' => false,
441
                'data' => 'ERROR_UNAUTHORIZED'
442
            ]);
443
        }
444
 
445
 
446
        if ($request->isPost()) {
447
            $form = new SurveyForm();
448
            $dataPost = $request->getPost()->toArray();
449
            $dataPost['status'] = isset($dataPost['status']) ? $dataPost['status'] : SurveyForm::STATUS_INACTIVE;
450
 
451
            $form->setData($dataPost);
452
 
453
            if ($form->isValid()) {
454
                $dataPost = (array) $form->getData();
455
 
456
                $hydrator = new ObjectPropertyHydrator();
457
                $hydrator->hydrate($dataPost, $survey);
458
 
459
                if (!$survey->status) {
460
                    $survey->status = Survey::STATUS_INACTIVE;
461
                }
4749 eleazar 462
 
463
                $surveyFormMapper = SurveyFormMapper::getInstance($this->adapter);
464
                $surveyForm = $surveyFormMapper->fetchOneByUuid($dataPost['form_id']);
465
                $survey->form_id = $surveyForm->id;
466
 
4579 eleazar 467
                $result = $surveyMapper->update($survey);
468
 
469
                if ($result) {
470
                    $this->logger->info('Se edito la encuesta ' . $survey->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
471
                    $data = [
472
                        'success' => true,
473
                        'id' => $survey->id,
474
                        'action_edit' => $this->url()->fromRoute('survey/edit', ['id' => $survey->uuid]),
475
                        'data' => 'LABEL_RECORD_UPDATED'
476
                    ];
477
                } else {
478
                    $data = [
479
                        'success' => false,
480
                        'data' => $surveyMapper->getError()
481
                    ];
482
                }
483
 
484
                return new JsonModel($data);
485
            } else {
486
                $messages = [];
487
                $form_messages = (array) $form->getMessages();
488
                foreach ($form_messages as $fieldname => $field_messages) {
489
                    $messages[$fieldname] = array_values($field_messages);
490
                }
491
 
492
                return new JsonModel([
493
                    'success' => false,
494
                    'data' => $messages
495
                ]);
496
            }
497
        } else if ($request->isGet()) {
498
            $hydrator = new ObjectPropertyHydrator();
499
 
4749 eleazar 500
            $surveyFormMapper = SurveyFormMapper::getInstance($this->adapter);
501
            $surveyForm = $surveyFormMapper->fetchOne($survey->form_id);
502
 
4579 eleazar 503
            $data = [
504
                'success' => true,
505
                'data' => [
4653 eleazar 506
                    'name' => $survey->name,
4749 eleazar 507
                    'form_id' => $surveyForm->uuid,
4653 eleazar 508
                    'target' => $survey->target,
509
                    'identity' => $survey->identity,
510
                    'since_date' => $survey->since_date,
511
                    'last_date' => $survey->last_date,
512
                    'status' => $survey->status,
4579 eleazar 513
                ]
514
            ];
515
 
516
            return new JsonModel($data);
517
        } else {
518
            $data = [
519
                'success' => false,
520
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
521
            ];
522
 
523
            return new JsonModel($data);
524
        }
525
 
526
        return new JsonModel($data);
527
    }
528
 
529
    public function deleteAction() {
530
        $request = $this->getRequest();
531
        $currentUserPlugin = $this->plugin('currentUserPlugin');
532
        $currentCompany = $currentUserPlugin->getCompany();
533
        $currentUser = $currentUserPlugin->getUser();
534
 
535
        $request = $this->getRequest();
536
        $uuid = $this->params()->fromRoute('id');
537
 
538
        if (!$uuid) {
539
            $data = [
540
                'success' => false,
541
                'data' => 'ERROR_INVALID_PARAMETER'
542
            ];
543
 
544
            return new JsonModel($data);
545
        }
546
 
547
        $surveyMapper = SurveyMapper::getInstance($this->adapter);
548
        $survey = $surveyMapper->fetchOneByUuid($uuid);
549
        if (!$survey) {
550
            $data = [
551
                'success' => false,
552
                'data' => 'ERROR_RECORD_NOT_FOUND'
553
            ];
554
 
555
            return new JsonModel($data);
556
        }
557
 
558
        if ($survey->company_id != $currentCompany->id) {
559
            return new JsonModel([
560
                'success' => false,
561
                'data' => 'ERROR_UNAUTHORIZED'
562
            ]);
563
        }
564
 
565
        if ($request->isPost()) {
566
 
567
            $result = $surveyMapper->delete($survey->id);
568
            if ($result) {
4735 eleazar 569
                //$this->logger->info('Se borro la encuesta ' . $survey->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
4579 eleazar 570
 
571
                $data = [
572
                    'success' => true,
573
                    'data' => 'LABEL_RECORD_DELETED'
574
                ];
575
            } else {
576
 
577
                $data = [
578
                    'success' => false,
579
                    'data' => $surveyMapper->getError()
580
                ];
581
 
582
                return new JsonModel($data);
583
            }
584
        } else {
585
            $data = [
586
                'success' => false,
587
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
588
            ];
589
 
590
            return new JsonModel($data);
591
        }
592
 
593
        return new JsonModel($data);
594
    }
595
 
4384 eleazar 596
}