Proyectos de Subversion LeadersLinked - Backend

Rev

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