Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 4865 | Rev 4883 | 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;
4865 eleazar 25
use LeadersLinked\Form\SurveySegmentedForm;
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);
4873 eleazar 155
                $formSegmented = new SurveySegmentedForm($this->adapter, $currentCompany->id);
4579 eleazar 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);
4873 eleazar 161
                $viewModel->setVariable('formSegmented', $formSegmented);
4579 eleazar 162
                return $viewModel;
163
            }
164
        } else {
165
            return new JsonModel([
166
                'success' => false,
167
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
168
            ]);
169
        }
4384 eleazar 170
    }
171
 
4579 eleazar 172
    public function addAction() {
173
        $request = $this->getRequest();
174
        $currentUserPlugin = $this->plugin('currentUserPlugin');
175
        $currentCompany = $currentUserPlugin->getCompany();
176
        $currentUser = $currentUserPlugin->getUser();
177
 
178
        $request = $this->getRequest();
179
 
180
        if ($request->isPost()) {
181
 
182
            $form = new SurveyForm($this->adapter, $currentCompany->id);
4672 eleazar 183
 
4579 eleazar 184
            $dataPost = $request->getPost()->toArray();
4661 eleazar 185
            $dataPost['status'] = isset($dataPost['status']) ? $dataPost['status'] : SurveyForm::STATUS_INACTIVE;
4579 eleazar 186
 
187
            $form->setData($dataPost);
188
 
189
            if ($form->isValid()) {
190
                $dataPost = (array) $form->getData();
191
 
192
                $hydrator = new ObjectPropertyHydrator();
193
                $survey = new Survey();
194
                $hydrator->hydrate($dataPost, $survey);
195
 
196
                if (!$survey->status) {
197
                    $survey->status = Survey::STATUS_INACTIVE;
198
                }
199
                $survey->company_id = $currentCompany->id;
200
 
4677 eleazar 201
                $surveyFormMapper = SurveyFormMapper::getInstance($this->adapter);
202
                $surveyForm = $surveyFormMapper->fetchOneByUuid($dataPost['form_id']);
203
                $survey->form_id = $surveyForm->id;
4579 eleazar 204
 
4724 eleazar 205
                $surveyMapper = SurveyMapper::getInstance($this->adapter);
206
                $result = $surveyMapper->insert($survey);
4730 eleazar 207
 
4579 eleazar 208
                if ($result) {
4734 eleazar 209
 
4728 eleazar 210
                    if ($result) {
4579 eleazar 211
 
212
                        $data = [
213
                            'success' => true,
214
                            'data' => 'LABEL_RECORD_ADDED'
215
                        ];
216
                    } else {
217
 
218
                        $data = [
219
                            'success' => false,
220
                            'data' => 'ERROR_RECORD_NOT_FOUND'
221
                        ];
222
                    }
223
                } else {
224
                    $data = [
225
                        'success' => false,
226
                        'data' => $surveyMapper->getError()
227
                    ];
228
                }
229
 
230
                return new JsonModel($data);
231
            } else {
232
                $messages = [];
233
                $form_messages = (array) $form->getMessages();
234
                foreach ($form_messages as $fieldname => $field_messages) {
235
 
236
                    $messages[$fieldname] = array_values($field_messages);
237
                }
238
 
239
                return new JsonModel([
240
                    'success' => false,
241
                    'data' => $messages
242
                ]);
243
            }
244
        } else {
245
            $data = [
246
                'success' => false,
247
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
248
            ];
249
 
250
            return new JsonModel($data);
251
        }
252
 
253
        return new JsonModel($data);
254
    }
255
 
4856 eleazar 256
    public function segmentAction() {
4855 eleazar 257
        $request = $this->getRequest();
258
        $currentUserPlugin = $this->plugin('currentUserPlugin');
259
        $currentCompany = $currentUserPlugin->getCompany();
260
        $currentUser = $currentUserPlugin->getUser();
261
 
262
        $request = $this->getRequest();
263
        $uuid = $this->params()->fromRoute('id');
264
 
265
 
266
        if (!$uuid) {
267
            $data = [
268
                'success' => false,
269
                'data' => 'ERROR_INVALID_PARAMETER'
270
            ];
271
 
272
            return new JsonModel($data);
273
        }
274
 
275
        $surveyMapper = SurveyMapper::getInstance($this->adapter);
276
        $survey = $surveyMapper->fetchOneByUuid($uuid);
277
        if (!$survey) {
278
            $data = [
279
                'success' => false,
280
                'data' => 'ERROR_RECORD_NOT_FOUND'
281
            ];
282
 
283
            return new JsonModel($data);
284
        }
285
 
286
        if ($survey->company_id != $currentCompany->id) {
287
            return new JsonModel([
288
                'success' => false,
289
                'data' => 'ERROR_UNAUTHORIZED'
290
            ]);
291
        }
292
 
4863 eleazar 293
        if($request->isPost()){
4865 eleazar 294
            $form = new SurveySegmentedForm($this->adapter, $currentCompany->id);
4855 eleazar 295
            $dataPost = $request->getPost()->toArray();
296
            $form->setData($dataPost);
297
 
298
            if ($form->isValid()) {
299
                $dataPost = (array) $form->getData();
300
 
301
                $hydrator = new ObjectPropertyHydrator();
302
 
303
                $location = new Location();
304
                $hydrator->hydrate($dataPost, $location);
305
 
306
                $locationMapper= LocationMapper::getInstance($this->adapter);
307
                $resultLocation = $locationMapper->insert($location);
308
 
309
 
310
                if (!$resultLocation) {
311
                    return new JsonModel([
312
                        'success'   => false,
313
                        'data' => 'ERROR_THERE_WAS_AN_ERROR'
314
                    ]);
315
                }
316
 
317
                $jobDescription = new SurveyJobDescription();
318
                $jobCategory = new SurveyJobCategory();
319
                $industry = new SurveyIndustry();
320
                $service = new SurveyService();
321
                $hydrator->hydrate($dataPost, $vacancy);
322
 
323
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
324
                $jobDescription = $jobDescriptionMapper->fetchOneByUuid($dataPost['job_description_id']);
325
                $jobDescription->job_description_id = $jobDescription->id;
326
 
327
                $jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);
328
                $jobCategory = $jobCategoryMapper->fetchOneByUuid( $dataPost['job_category_id']);
329
                $jobCategory->job_category_id = $jobCategory->id;
330
 
331
                $industryMapper = IndustryMapper::getInstance($this->adapter);
332
                $industry = $industryMapper->fetchOneByUuid($dataPost['industry_id']);
333
                $industry->industry_id = $industry->id;
334
 
335
                $serviceMapper = ServiceMapper::getInstance($this->adapter);
336
                $service = $serviceMapper->fetchOneByUuid($dataPost['service_id']);
337
                $service->service_id = $service->id;
338
 
339
                $recruitmentSelectionVacancyMapper = RecruitmentSelectionVacancyMapper::getInstance($this->adapter);
340
 
341
                $result = $recruitmentSelectionVacancyMapper->insert($vacancy);
342
 
343
                if ($result) {
344
                    $this->logger->info('Se agrego el proceso de reclutamiento' . $vacancy->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
345
 
346
                    $data = [
347
                        'success' => true,
348
                        'data' => 'LABEL_RECORD_ADDED'
349
                    ];
350
 
351
                } else {
352
                    $data = [
353
                        'success' => false,
354
                        'data' => $recruitmentSelectionVacancyMapper->getError()
355
                    ];
356
                }
357
 
358
                return new JsonModel($data);
359
            } else {
360
                $messages = [];
361
                $form_messages = (array) $form->getMessages();
362
                foreach ($form_messages as $fieldname => $field_messages) {
363
 
364
                    $messages[$fieldname] = array_values($field_messages);
365
                }
366
 
367
                return new JsonModel([
368
                    'success' => false,
369
                    'data' => $messages
370
                ]);
371
            }
372
        } else {
373
            $data = [
374
                'success' => false,
375
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
376
            ];
377
 
378
            return new JsonModel($data);
379
        }
380
 
381
        return new JsonModel($data);
382
 
383
    }
384
 
4579 eleazar 385
    public function editAction() {
386
        $request = $this->getRequest();
387
        $currentUserPlugin = $this->plugin('currentUserPlugin');
388
        $currentCompany = $currentUserPlugin->getCompany();
389
        $currentUser = $currentUserPlugin->getUser();
390
 
391
        $request = $this->getRequest();
392
        $uuid = $this->params()->fromRoute('id');
393
 
394
 
395
        if (!$uuid) {
396
            $data = [
397
                'success' => false,
398
                'data' => 'ERROR_INVALID_PARAMETER'
399
            ];
400
 
401
            return new JsonModel($data);
402
        }
403
 
404
        $surveyMapper = SurveyMapper::getInstance($this->adapter);
405
        $survey = $surveyMapper->fetchOneByUuid($uuid);
406
 
407
        if (!$survey) {
408
            $data = [
409
                'success' => false,
410
                'data' => 'ERROR_RECORD_NOT_FOUND'
411
            ];
412
 
413
            return new JsonModel($data);
414
        }
415
 
416
        if ($survey->company_id != $currentCompany->id) {
417
            return new JsonModel([
418
                'success' => false,
419
                'data' => 'ERROR_UNAUTHORIZED'
420
            ]);
421
        }
422
 
423
 
424
        if ($request->isPost()) {
425
            $form = new SurveyForm();
426
            $dataPost = $request->getPost()->toArray();
427
            $dataPost['status'] = isset($dataPost['status']) ? $dataPost['status'] : SurveyForm::STATUS_INACTIVE;
428
 
429
            $form->setData($dataPost);
430
 
431
            if ($form->isValid()) {
432
                $dataPost = (array) $form->getData();
433
 
434
                $hydrator = new ObjectPropertyHydrator();
435
                $hydrator->hydrate($dataPost, $survey);
436
 
437
                if (!$survey->status) {
438
                    $survey->status = Survey::STATUS_INACTIVE;
439
                }
4749 eleazar 440
 
441
                $surveyFormMapper = SurveyFormMapper::getInstance($this->adapter);
442
                $surveyForm = $surveyFormMapper->fetchOneByUuid($dataPost['form_id']);
443
                $survey->form_id = $surveyForm->id;
444
 
4579 eleazar 445
                $result = $surveyMapper->update($survey);
446
 
447
                if ($result) {
448
                    $this->logger->info('Se edito la encuesta ' . $survey->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
449
                    $data = [
450
                        'success' => true,
451
                        'id' => $survey->id,
452
                        'action_edit' => $this->url()->fromRoute('survey/edit', ['id' => $survey->uuid]),
453
                        'data' => 'LABEL_RECORD_UPDATED'
454
                    ];
455
                } else {
456
                    $data = [
457
                        'success' => false,
458
                        'data' => $surveyMapper->getError()
459
                    ];
460
                }
461
 
462
                return new JsonModel($data);
463
            } else {
464
                $messages = [];
465
                $form_messages = (array) $form->getMessages();
466
                foreach ($form_messages as $fieldname => $field_messages) {
467
                    $messages[$fieldname] = array_values($field_messages);
468
                }
469
 
470
                return new JsonModel([
471
                    'success' => false,
472
                    'data' => $messages
473
                ]);
474
            }
475
        } else if ($request->isGet()) {
476
            $hydrator = new ObjectPropertyHydrator();
477
 
4749 eleazar 478
            $surveyFormMapper = SurveyFormMapper::getInstance($this->adapter);
479
            $surveyForm = $surveyFormMapper->fetchOne($survey->form_id);
480
 
4579 eleazar 481
            $data = [
482
                'success' => true,
483
                'data' => [
4653 eleazar 484
                    'name' => $survey->name,
4749 eleazar 485
                    'form_id' => $surveyForm->uuid,
4653 eleazar 486
                    'target' => $survey->target,
487
                    'identity' => $survey->identity,
488
                    'since_date' => $survey->since_date,
489
                    'last_date' => $survey->last_date,
490
                    'status' => $survey->status,
4579 eleazar 491
                ]
492
            ];
493
 
494
            return new JsonModel($data);
495
        } else {
496
            $data = [
497
                'success' => false,
498
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
499
            ];
500
 
501
            return new JsonModel($data);
502
        }
503
 
504
        return new JsonModel($data);
505
    }
506
 
507
    public function deleteAction() {
508
        $request = $this->getRequest();
509
        $currentUserPlugin = $this->plugin('currentUserPlugin');
510
        $currentCompany = $currentUserPlugin->getCompany();
511
        $currentUser = $currentUserPlugin->getUser();
512
 
513
        $request = $this->getRequest();
514
        $uuid = $this->params()->fromRoute('id');
515
 
516
        if (!$uuid) {
517
            $data = [
518
                'success' => false,
519
                'data' => 'ERROR_INVALID_PARAMETER'
520
            ];
521
 
522
            return new JsonModel($data);
523
        }
524
 
525
        $surveyMapper = SurveyMapper::getInstance($this->adapter);
526
        $survey = $surveyMapper->fetchOneByUuid($uuid);
527
        if (!$survey) {
528
            $data = [
529
                'success' => false,
530
                'data' => 'ERROR_RECORD_NOT_FOUND'
531
            ];
532
 
533
            return new JsonModel($data);
534
        }
535
 
536
        if ($survey->company_id != $currentCompany->id) {
537
            return new JsonModel([
538
                'success' => false,
539
                'data' => 'ERROR_UNAUTHORIZED'
540
            ]);
541
        }
542
 
543
        if ($request->isPost()) {
544
 
545
            $result = $surveyMapper->delete($survey->id);
546
            if ($result) {
4735 eleazar 547
                //$this->logger->info('Se borro la encuesta ' . $survey->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
4579 eleazar 548
 
549
                $data = [
550
                    'success' => true,
551
                    'data' => 'LABEL_RECORD_DELETED'
552
                ];
553
            } else {
554
 
555
                $data = [
556
                    'success' => false,
557
                    'data' => $surveyMapper->getError()
558
                ];
559
 
560
                return new JsonModel($data);
561
            }
562
        } else {
563
            $data = [
564
                'success' => false,
565
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
566
            ];
567
 
568
            return new JsonModel($data);
569
        }
570
 
571
        return new JsonModel($data);
572
    }
573
 
4384 eleazar 574
}