Proyectos de Subversion LeadersLinked - Backend

Rev

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