Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 4863 | Rev 4873 | 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);
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
 
4863 eleazar 291
        if($request->isPost()){
4865 eleazar 292
            $form = new SurveySegmentedForm($this->adapter, $currentCompany->id);
4855 eleazar 293
            $dataPost = $request->getPost()->toArray();
294
            $form->setData($dataPost);
295
 
296
            if ($form->isValid()) {
297
                $dataPost = (array) $form->getData();
298
 
299
                $hydrator = new ObjectPropertyHydrator();
300
 
301
                $location = new Location();
302
                $hydrator->hydrate($dataPost, $location);
303
 
304
                $locationMapper= LocationMapper::getInstance($this->adapter);
305
                $resultLocation = $locationMapper->insert($location);
306
 
307
 
308
                if (!$resultLocation) {
309
                    return new JsonModel([
310
                        'success'   => false,
311
                        'data' => 'ERROR_THERE_WAS_AN_ERROR'
312
                    ]);
313
                }
314
 
315
                $jobDescription = new SurveyJobDescription();
316
                $jobCategory = new SurveyJobCategory();
317
                $industry = new SurveyIndustry();
318
                $service = new SurveyService();
319
                $hydrator->hydrate($dataPost, $vacancy);
320
 
321
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
322
                $jobDescription = $jobDescriptionMapper->fetchOneByUuid($dataPost['job_description_id']);
323
                $jobDescription->job_description_id = $jobDescription->id;
324
 
325
                $jobCategoryMapper = JobCategoryMapper::getInstance($this->adapter);
326
                $jobCategory = $jobCategoryMapper->fetchOneByUuid( $dataPost['job_category_id']);
327
                $jobCategory->job_category_id = $jobCategory->id;
328
 
329
                $industryMapper = IndustryMapper::getInstance($this->adapter);
330
                $industry = $industryMapper->fetchOneByUuid($dataPost['industry_id']);
331
                $industry->industry_id = $industry->id;
332
 
333
                $serviceMapper = ServiceMapper::getInstance($this->adapter);
334
                $service = $serviceMapper->fetchOneByUuid($dataPost['service_id']);
335
                $service->service_id = $service->id;
336
 
337
                $recruitmentSelectionVacancyMapper = RecruitmentSelectionVacancyMapper::getInstance($this->adapter);
338
 
339
                $result = $recruitmentSelectionVacancyMapper->insert($vacancy);
340
 
341
                if ($result) {
342
                    $this->logger->info('Se agrego el proceso de reclutamiento' . $vacancy->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
343
 
344
                    $data = [
345
                        'success' => true,
346
                        'data' => 'LABEL_RECORD_ADDED'
347
                    ];
348
 
349
                } else {
350
                    $data = [
351
                        'success' => false,
352
                        'data' => $recruitmentSelectionVacancyMapper->getError()
353
                    ];
354
                }
355
 
356
                return new JsonModel($data);
357
            } else {
358
                $messages = [];
359
                $form_messages = (array) $form->getMessages();
360
                foreach ($form_messages as $fieldname => $field_messages) {
361
 
362
                    $messages[$fieldname] = array_values($field_messages);
363
                }
364
 
365
                return new JsonModel([
366
                    'success' => false,
367
                    'data' => $messages
368
                ]);
369
            }
370
        } else {
371
            $data = [
372
                'success' => false,
373
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
374
            ];
375
 
376
            return new JsonModel($data);
377
        }
378
 
379
        return new JsonModel($data);
380
 
381
    }
382
 
4579 eleazar 383
    public function editAction() {
384
        $request = $this->getRequest();
385
        $currentUserPlugin = $this->plugin('currentUserPlugin');
386
        $currentCompany = $currentUserPlugin->getCompany();
387
        $currentUser = $currentUserPlugin->getUser();
388
 
389
        $request = $this->getRequest();
390
        $uuid = $this->params()->fromRoute('id');
391
 
392
 
393
        if (!$uuid) {
394
            $data = [
395
                'success' => false,
396
                'data' => 'ERROR_INVALID_PARAMETER'
397
            ];
398
 
399
            return new JsonModel($data);
400
        }
401
 
402
        $surveyMapper = SurveyMapper::getInstance($this->adapter);
403
        $survey = $surveyMapper->fetchOneByUuid($uuid);
404
 
405
        if (!$survey) {
406
            $data = [
407
                'success' => false,
408
                'data' => 'ERROR_RECORD_NOT_FOUND'
409
            ];
410
 
411
            return new JsonModel($data);
412
        }
413
 
414
        if ($survey->company_id != $currentCompany->id) {
415
            return new JsonModel([
416
                'success' => false,
417
                'data' => 'ERROR_UNAUTHORIZED'
418
            ]);
419
        }
420
 
421
 
422
        if ($request->isPost()) {
423
            $form = new SurveyForm();
424
            $dataPost = $request->getPost()->toArray();
425
            $dataPost['status'] = isset($dataPost['status']) ? $dataPost['status'] : SurveyForm::STATUS_INACTIVE;
426
 
427
            $form->setData($dataPost);
428
 
429
            if ($form->isValid()) {
430
                $dataPost = (array) $form->getData();
431
 
432
                $hydrator = new ObjectPropertyHydrator();
433
                $hydrator->hydrate($dataPost, $survey);
434
 
435
                if (!$survey->status) {
436
                    $survey->status = Survey::STATUS_INACTIVE;
437
                }
4749 eleazar 438
 
439
                $surveyFormMapper = SurveyFormMapper::getInstance($this->adapter);
440
                $surveyForm = $surveyFormMapper->fetchOneByUuid($dataPost['form_id']);
441
                $survey->form_id = $surveyForm->id;
442
 
4579 eleazar 443
                $result = $surveyMapper->update($survey);
444
 
445
                if ($result) {
446
                    $this->logger->info('Se edito la encuesta ' . $survey->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
447
                    $data = [
448
                        'success' => true,
449
                        'id' => $survey->id,
450
                        'action_edit' => $this->url()->fromRoute('survey/edit', ['id' => $survey->uuid]),
451
                        'data' => 'LABEL_RECORD_UPDATED'
452
                    ];
453
                } else {
454
                    $data = [
455
                        'success' => false,
456
                        'data' => $surveyMapper->getError()
457
                    ];
458
                }
459
 
460
                return new JsonModel($data);
461
            } else {
462
                $messages = [];
463
                $form_messages = (array) $form->getMessages();
464
                foreach ($form_messages as $fieldname => $field_messages) {
465
                    $messages[$fieldname] = array_values($field_messages);
466
                }
467
 
468
                return new JsonModel([
469
                    'success' => false,
470
                    'data' => $messages
471
                ]);
472
            }
473
        } else if ($request->isGet()) {
474
            $hydrator = new ObjectPropertyHydrator();
475
 
4749 eleazar 476
            $surveyFormMapper = SurveyFormMapper::getInstance($this->adapter);
477
            $surveyForm = $surveyFormMapper->fetchOne($survey->form_id);
478
 
4579 eleazar 479
            $data = [
480
                'success' => true,
481
                'data' => [
4653 eleazar 482
                    'name' => $survey->name,
4749 eleazar 483
                    'form_id' => $surveyForm->uuid,
4653 eleazar 484
                    'target' => $survey->target,
485
                    'identity' => $survey->identity,
486
                    'since_date' => $survey->since_date,
487
                    'last_date' => $survey->last_date,
488
                    'status' => $survey->status,
4579 eleazar 489
                ]
490
            ];
491
 
492
            return new JsonModel($data);
493
        } else {
494
            $data = [
495
                'success' => false,
496
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
497
            ];
498
 
499
            return new JsonModel($data);
500
        }
501
 
502
        return new JsonModel($data);
503
    }
504
 
505
    public function deleteAction() {
506
        $request = $this->getRequest();
507
        $currentUserPlugin = $this->plugin('currentUserPlugin');
508
        $currentCompany = $currentUserPlugin->getCompany();
509
        $currentUser = $currentUserPlugin->getUser();
510
 
511
        $request = $this->getRequest();
512
        $uuid = $this->params()->fromRoute('id');
513
 
514
        if (!$uuid) {
515
            $data = [
516
                'success' => false,
517
                'data' => 'ERROR_INVALID_PARAMETER'
518
            ];
519
 
520
            return new JsonModel($data);
521
        }
522
 
523
        $surveyMapper = SurveyMapper::getInstance($this->adapter);
524
        $survey = $surveyMapper->fetchOneByUuid($uuid);
525
        if (!$survey) {
526
            $data = [
527
                'success' => false,
528
                'data' => 'ERROR_RECORD_NOT_FOUND'
529
            ];
530
 
531
            return new JsonModel($data);
532
        }
533
 
534
        if ($survey->company_id != $currentCompany->id) {
535
            return new JsonModel([
536
                'success' => false,
537
                'data' => 'ERROR_UNAUTHORIZED'
538
            ]);
539
        }
540
 
541
        if ($request->isPost()) {
542
 
543
            $result = $surveyMapper->delete($survey->id);
544
            if ($result) {
4735 eleazar 545
                //$this->logger->info('Se borro la encuesta ' . $survey->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
4579 eleazar 546
 
547
                $data = [
548
                    'success' => true,
549
                    'data' => 'LABEL_RECORD_DELETED'
550
                ];
551
            } else {
552
 
553
                $data = [
554
                    'success' => false,
555
                    'data' => $surveyMapper->getError()
556
                ];
557
 
558
                return new JsonModel($data);
559
            }
560
        } else {
561
            $data = [
562
                'success' => false,
563
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
564
            ];
565
 
566
            return new JsonModel($data);
567
        }
568
 
569
        return new JsonModel($data);
570
    }
571
 
4384 eleazar 572
}