Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16791 | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
66 efrain 1
<?php
649 geraldo 2
 
66 efrain 3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
16768 efrain 7
 
66 efrain 8
use Laminas\Mvc\Controller\AbstractActionController;
9
use Laminas\View\Model\ViewModel;
10
use Laminas\View\Model\JsonModel;
15403 efrain 11
use LeadersLinked\Form\JobDescription\JobDescriptionForm;
12
use LeadersLinked\Model\Company;
66 efrain 13
use LeadersLinked\Model\JobDescription;
14
use LeadersLinked\Model\JobDescriptionCompetency;
15403 efrain 15
use LeadersLinked\Model\JobDescriptionCompetencyBehavior;
1320 efrain 16
use LeadersLinked\Mapper\BehaviorMapper;
15403 efrain 17
use LeadersLinked\Mapper\CompetencyMapper;
15030 efrain 18
use LeadersLinked\Mapper\CompetencyBehaviorMapper;
15403 efrain 19
use LeadersLinked\Mapper\CompetencyTypeMapper;
20
use LeadersLinked\Mapper\JobDescriptionMapper;
21
use LeadersLinked\Mapper\JobDescriptionCompetencyBehaviorMapper;
22
use LeadersLinked\Mapper\JobDescriptionCompetencyMapper;
23
use LeadersLinked\Library\Functions;
24
use LeadersLinked\Library\JobDescriptionPdf;
25
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
16770 efrain 26
use LeadersLinked\Model\User;
27
use Laminas\Http\Response;
16954 efrain 28
use LeadersLinked\Form\JobDescription\ContentUploadForm;
29
use PhpOffice\PhpSpreadsheet\IOFactory;
30
use LeadersLinked\Model\CompetencyType;
31
use LeadersLinked\Model\Behavior;
32
use LeadersLinked\Model\Competency;
33
use LeadersLinked\Model\CompetencyBehavior;
15403 efrain 34
 
16766 efrain 35
 
14203 stevensc 36
class JobDescriptionController extends AbstractActionController
37
{
66 efrain 38
    /**
39
     *
16769 efrain 40
     * @var \Laminas\Db\Adapter\AdapterInterface
66 efrain 41
     */
42
    private $adapter;
16769 efrain 43
 
66 efrain 44
    /**
45
     *
16769 efrain 46
     * @var \LeadersLinked\Cache\CacheInterface
66 efrain 47
     */
16769 efrain 48
    private $cache;
49
 
50
 
51
    /**
52
     *
53
     * @var \Laminas\Log\LoggerInterface
54
     */
66 efrain 55
    private $logger;
16769 efrain 56
 
66 efrain 57
    /**
58
     *
59
     * @var array
60
     */
61
    private $config;
15403 efrain 62
 
16769 efrain 63
 
15403 efrain 64
    /**
16769 efrain 65
     *
66
     * @var \Laminas\Mvc\I18n\Translator
15403 efrain 67
     */
68
    private $translator;
16769 efrain 69
 
70
 
66 efrain 71
    /**
72
     *
16769 efrain 73
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
74
     * @param \LeadersLinked\Cache\CacheInterface $cache
75
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
66 efrain 76
     * @param array $config
16769 efrain 77
     * @param \Laminas\Mvc\I18n\Translator $translator
66 efrain 78
     */
16769 efrain 79
    public function __construct($adapter, $cache, $logger, $config, $translator)
14203 stevensc 80
    {
16769 efrain 81
        $this->adapter      = $adapter;
82
        $this->cache        = $cache;
83
        $this->logger       = $logger;
84
        $this->config       = $config;
85
        $this->translator   = $translator;
66 efrain 86
    }
649 geraldo 87
 
14203 stevensc 88
    public function indexAction()
89
    {
66 efrain 90
        $currentUserPlugin = $this->plugin('currentUserPlugin');
91
        $currentUser = $currentUserPlugin->getUser();
92
        $currentCompany = $currentUserPlugin->getCompany();
649 geraldo 93
 
16770 efrain 94
 
66 efrain 95
        $request = $this->getRequest();
649 geraldo 96
        $headers = $request->getHeaders();
97
 
16770 efrain 98
 
16791 efrain 99
        if ($request->isGet()) {
649 geraldo 100
 
101
 
102
            $headers = $request->getHeaders();
103
 
66 efrain 104
            $isJson = false;
649 geraldo 105
            if ($headers->has('Accept')) {
66 efrain 106
                $accept = $headers->get('Accept');
649 geraldo 107
 
66 efrain 108
                $prioritized = $accept->getPrioritized();
649 geraldo 109
 
110
                foreach ($prioritized as $key => $value) {
66 efrain 111
                    $raw = trim($value->getRaw());
649 geraldo 112
 
113
                    if (!$isJson) {
66 efrain 114
                        $isJson = strpos($raw, 'json');
115
                    }
116
                }
117
            }
649 geraldo 118
 
119
            if ($isJson) {
15371 efrain 120
 
16770 efrain 121
 
122
 
123
                $items = [];
124
 
125
                $jobDescriptionIdBoss = 0;
66 efrain 126
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
16770 efrain 127
 
128
 
129
 
16787 efrain 130
                $items = $this->recursiveLoad($currentUser, $currentCompany, $jobDescriptionMapper, $jobDescriptionIdBoss);
16779 efrain 131
 
132
 
133
 
134
 
66 efrain 135
                return new JsonModel([
136
                    'success' => true,
137
                    'data' => [
138
                        'items' => $items,
16770 efrain 139
 
66 efrain 140
                    ]
141
                ]);
16770 efrain 142
 
649 geraldo 143
            } else {
15403 efrain 144
 
145
 
146
 
649 geraldo 147
 
847 geraldo 148
                $form = new JobDescriptionForm($this->adapter, $currentCompany ? $currentCompany->id : null);
842 geraldo 149
 
66 efrain 150
                $this->layout()->setTemplate('layout/layout-backend');
151
                $viewModel = new ViewModel();
152
                $viewModel->setTemplate('leaders-linked/jobs-description/index.phtml');
15403 efrain 153
                $viewModel->setVariables([
154
                    'form' => $form,
16787 efrain 155
                    'company_name' => $currentCompany->name,
15444 efrain 156
 
15403 efrain 157
 
158
                ]);
649 geraldo 159
                return $viewModel;
160
            }
66 efrain 161
        } else {
162
            return new JsonModel([
163
                'success' => false,
164
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
16770 efrain 165
            ]);
66 efrain 166
        }
167
    }
16770 efrain 168
 
16787 efrain 169
 
16770 efrain 170
 
171
    /**
172
     *
173
     * @param User $currentUser
174
     * @param Company $currentCompany
175
     * @param JobDescriptionMapper $jobDescriptionMapper
176
     * @param int $jobDescriptionIdBoss
177
     * @return array
178
     */
16787 efrain 179
    private function recursiveLoad($currentUser, $currentCompany, $jobDescriptionMapper, $jobDescriptionIdBoss)
16770 efrain 180
    {
181
        $acl            = $this->getEvent()->getViewModel()->getVariable('acl');
182
        $allowAdd       = $acl->isAllowed($currentUser->usertype_id, 'jobs-description/add') ? 1 : 0;
183
        $allowEdit      = $acl->isAllowed($currentUser->usertype_id, 'jobs-description/edit') ? 1 : 0;
184
        $allowDelete    = $acl->isAllowed($currentUser->usertype_id, 'jobs-description/delete') ? 1 : 0;
185
        $allowReport    = $acl->isAllowed($currentUser->usertype_id, 'jobs-description/report') ? 1 : 0;
186
 
187
 
188
        $items = [];
189
 
190
 
191
        if ($currentCompany) {
192
            $records = $jobDescriptionMapper->fetchAllByCompanyIdAndJobDescriptionIdBoss($currentCompany->id, $jobDescriptionIdBoss);
193
        } else {
194
            $records = $jobDescriptionMapper->fetchAllDefaultAndJobDescriptionIdBoss($jobDescriptionIdBoss);
195
        }
16787 efrain 196
 
16770 efrain 197
 
198
        foreach($records as $record)
199
        {
16778 efrain 200
 
201
 
202
 
16770 efrain 203
            array_push($items, [
204
                'uuid' => $record->uuid,
205
                'name' => $record->name,
16787 efrain 206
                'children' => $this->recursiveLoad($currentUser, $currentCompany, $jobDescriptionMapper, $record->id),
16770 efrain 207
                'status' => $record->status,
208
                'link_report' => $allowReport ? $this->url()->fromRoute('jobs-description/report', ['id' => $record->uuid]) : '',
209
                'link_edit' => $allowEdit ? $this->url()->fromRoute('jobs-description/edit', ['id' => $record->uuid]) : '',
210
                'link_delete' => $allowDelete ? $this->url()->fromRoute('jobs-description/delete', ['id' => $record->uuid]) : '',
211
                'link_add' => $allowAdd ? $this->url()->fromRoute('jobs-description/add', ['id' => $record->uuid]) : '',
212
            ]);
213
        }
214
 
215
        return $items;
216
    }
217
 
14203 stevensc 218
    public function addAction()
219
    {
16778 efrain 220
 
221
 
66 efrain 222
        $currentUserPlugin = $this->plugin('currentUserPlugin');
223
        $currentUser = $currentUserPlugin->getUser();
224
        $currentCompany = $currentUserPlugin->getCompany();
649 geraldo 225
 
66 efrain 226
        $request = $this->getRequest();
649 geraldo 227
 
228
 
229
        if ($request->isGet()) {
15444 efrain 230
            $behaviors = [];
231
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
15403 efrain 232
 
15444 efrain 233
 
234
            if($currentCompany) {
235
                $records = $behaviorMapper->fetchAllActiveByCompanyId($currentCompany->id);
236
            } else {
237
                $records = $behaviorMapper->fetchAllActiveByDefault();
238
            }
239
 
240
            $behaviorIds = [];
241
            foreach($records as $record)
242
            {
243
 
244
                $behaviorIds[ $record->id ] = $record->uuid;
245
 
246
                array_push($behaviors, [
247
                    'uuid' => $record->uuid,
248
                    'description' => $record->description
249
                ]);
250
            }
251
 
252
 
253
            $competencyTypes = [];
254
 
255
 
256
            $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
257
 
258
            if($currentCompany) {
259
                $records = $competencyTypeMapper->fetchAllActiveByCompanyId($currentCompany->id);
260
            } else {
261
                $records = $competencyTypeMapper->fetchAllActiveByDefault();
262
            }
263
 
264
 
265
            $competencyTypeIds = [];
266
            foreach($records as $record)
267
            {
268
                $competencyTypeIds[ $record->id ] =  $record->uuid;
269
 
270
 
271
                array_push($competencyTypes, [
272
                    'uuid' => $record->uuid,
273
                    'name' => $record->name,
274
                ]);
275
            }
276
 
277
            $competencyMapper = CompetencyMapper::getInstance($this->adapter);
278
            if($currentCompany) {
279
                $records = $competencyMapper->fetchAllActiveByCompanyId($currentCompany->id);
280
            } else {
281
                $records = $competencyMapper->fetchAllActiveByDefault();
282
            }
283
 
284
            $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
285
 
286
 
287
 
288
            $competencies = [];
289
 
290
            foreach($records as $record)
291
            {
292
                if(!isset($competencyTypeIds[ $record->competency_type_id ])) {
293
                    continue;
294
                }
295
 
296
                $behaviors_by_competency = [];
297
 
298
                $competencyBehaviors = $competencyBehaviorMapper->fetchAllByCompetencyId($record->id);
299
                foreach($competencyBehaviors as $competencyBehavior)
300
                {
301
                    if(!isset($behaviorIds[ $competencyBehavior->behavior_id ])) {
302
                        continue;
303
                    }
304
 
305
                    array_push($behaviors_by_competency, $behaviorIds[ $competencyBehavior->behavior_id ]);
306
                }
307
 
308
 
309
                if($behaviors_by_competency) {
310
                    array_push($competencies, [
311
                        'competency_type_uuid' => $competencyTypeIds[ $record->competency_type_id ],
312
                        'uuid' => $record->uuid,
313
                        'name' => $record->name,
314
                        'behaviors' => $behaviors_by_competency,
315
                    ]);
316
                }
317
 
318
 
319
            }
320
 
321
 
322
 
15403 efrain 323
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
16787 efrain 324
            $records = $jobDescriptionMapper->fetchAllByCompanyId($currentCompany->id);
15403 efrain 325
 
326
            $jobsDescription = [];
327
 
328
            foreach ($records as $record)
16787 efrain 329
            {
15403 efrain 330
                $jobsDescription[ $record->uuid ] = $record->name;
856 geraldo 331
            }
649 geraldo 332
 
333
 
66 efrain 334
            $data = [
649 geraldo 335
                'success' => true,
15403 efrain 336
                'data' => [
337
                    'jobs_description' => $jobsDescription,
15444 efrain 338
                    'behaviors' => $behaviors,
339
                    'competency_types' => $competencyTypes,
340
                    'competencies' => $competencies,
15403 efrain 341
                ]
66 efrain 342
            ];
649 geraldo 343
 
344
 
66 efrain 345
            return new JsonModel($data);
649 geraldo 346
        } else if ($request->isPost()) {
854 geraldo 347
            $form = new JobDescriptionForm($this->adapter, $currentCompany ? $currentCompany->id : null);
66 efrain 348
            $dataPost = $request->getPost()->toArray();
649 geraldo 349
 
350
 
66 efrain 351
            $form->setData($dataPost);
649 geraldo 352
 
353
            if ($form->isValid()) {
16770 efrain 354
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
15403 efrain 355
 
16787 efrain 356
                $dataPost = (array) $form->getData();
357
 
358
                if(!empty($dataPost['job_description_id_boss'])) {
15403 efrain 359
 
16787 efrain 360
                    $jobDescriptionBoos = $jobDescriptionMapper->fetchOneByUuid(Functions::sanitizeFilterString($dataPost['job_description_id_boss']));
16770 efrain 361
                    if($jobDescriptionBoos && $jobDescriptionBoos->company_id == $currentCompany->id) {
16787 efrain 362
                        $dataPost['job_description_id_boss'] = $jobDescriptionBoos->id;
363
                    } else {
364
                        $dataPost['job_description_id_boss'] = 0;
365
                    }
16770 efrain 366
 
367
 
66 efrain 368
                }
15030 efrain 369
 
16770 efrain 370
 
16787 efrain 371
 
16770 efrain 372
                $dataPost['status'] = empty($dataPost['status']) ? JobDescription::STATUS_INACTIVE : $dataPost['status'];
373
 
374
                $hydrator = new ObjectPropertyHydrator();
375
                $jobDescription = new JobDescription();
16787 efrain 376
 
16770 efrain 377
 
649 geraldo 378
                if ($currentCompany) {
847 geraldo 379
                    $jobDescription->company_id = $currentCompany ? $currentCompany->id : null;
66 efrain 380
                }
16770 efrain 381
 
382
                $hydrator->hydrate($dataPost, $jobDescription);
383
 
66 efrain 384
                $result = $jobDescriptionMapper->insert($jobDescription);
649 geraldo 385
 
1195 geraldo 386
                if ($result) {
15403 efrain 387
                    $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
388
                    $competencyMapper = CompetencyMapper::getInstance($this->adapter);
389
                    $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
390
 
391
 
392
                    $jobDescriptionCompetencyBehaviorMapper = JobDescriptionCompetencyBehaviorMapper::getInstance($this->adapter);
393
                    $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
394
 
395
                    $competencies_selected = isset($dataPost['competencies_selected']) ? $dataPost['competencies_selected'] : [];
396
                    foreach($competencies_selected as $competency_selected)
397
                    {
16770 efrain 398
 
15403 efrain 399
                        $competency_uuid = isset($competency_selected['competency_uuid']) ? $competency_selected['competency_uuid'] : '';
400
                        $competency = $competencyMapper->fetchOneByUuid($competency_uuid);
401
 
402
 
403
                        if($competency) {
404
                            if($currentCompany) {
405
                                $ok = $competency->company_id == $currentCompany->id;
406
                            } else {
407
                                $ok = empty($competency->company_id);
408
                            }
409
                        } else {
410
                            $ok = false;
411
                        }
412
 
413
                        if(!$ok) {
414
                            continue;
415
                        }
416
 
417
 
418
                        $behavior_uuid = isset($competency_selected['behavior_uuid']) ? $competency_selected['behavior_uuid'] : '';
419
                        $behavior = $behaviorMapper->fetchOneByUuid($behavior_uuid);
420
                        if($behavior) {
421
                            if($currentCompany) {
422
                                $ok = $behavior->company_id == $currentCompany->id;
423
                            } else {
424
                                $ok = empty($behavior->company_id);
425
                            }
426
 
427
 
428
                        } else {
429
                            $ok = false;
430
                        }
431
 
432
                        if($competency->company_id != $behavior->company_id) {
433
                            continue;
434
                        }
435
 
436
                        $competencyBehavior = $competencyBehaviorMapper->fetchOneByBehaviorIdAndCompetencyId($behavior->id, $competency->id);
437
                        if(!$competencyBehavior) {
438
                            continue;
439
                        }
440
 
441
                        $level = isset($competency_selected['level']) ? $competency_selected['level'] : 0;
442
                        $level = intval($level, 10);
443
 
444
 
445
                        $jobDescriptionCompetency =  $jobDescriptionCompetencyMapper->fetchOneByJobDescriptionIdAndCompetencyId($jobDescription->id, $competency->id);
446
                        if(!$jobDescriptionCompetency) {
66 efrain 447
                            $jobDescriptionCompetency = new JobDescriptionCompetency();
448
                            $jobDescriptionCompetency->competency_id = $competency->id;
449
                            $jobDescriptionCompetency->job_description_id = $jobDescription->id;
450
                            $jobDescriptionCompetencyMapper->insert($jobDescriptionCompetency);
15403 efrain 451
 
452
                        }
453
 
454
 
455
 
456
                        $jobDescriptionCompetencyBehavior = new JobDescriptionCompetencyBehavior();
457
                        $jobDescriptionCompetencyBehavior->job_description_id = $jobDescription->id;
458
                        $jobDescriptionCompetencyBehavior->competency_id = $competency->id;
459
                        $jobDescriptionCompetencyBehavior->behavior_id = $behavior->id;
460
                        $jobDescriptionCompetencyBehavior->level = $level;
461
                        $jobDescriptionCompetencyBehaviorMapper->insert($jobDescriptionCompetencyBehavior);
462
                    }
463
 
649 geraldo 464
 
66 efrain 465
                    $this->logger->info('Se agrego el cargo ' . $jobDescription->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
649 geraldo 466
 
66 efrain 467
                    $data = [
649 geraldo 468
                        'success' => true,
469
                        'data' => 'LABEL_RECORD_ADDED'
66 efrain 470
                    ];
471
                } else {
472
                    $data = [
649 geraldo 473
                        'success' => false,
474
                        'data' => $jobDescriptionMapper->getError()
66 efrain 475
                    ];
476
                }
649 geraldo 477
 
66 efrain 478
                return new JsonModel($data);
479
            } else {
480
                $messages = [];
481
                $form_messages = (array) $form->getMessages();
649 geraldo 482
                foreach ($form_messages as $fieldname => $field_messages) {
483
 
66 efrain 484
                    $messages[$fieldname] = array_values($field_messages);
485
                }
649 geraldo 486
 
66 efrain 487
                return new JsonModel([
649 geraldo 488
                    'success' => false,
489
                    'data' => $messages
66 efrain 490
                ]);
491
            }
492
        } else {
493
            $data = [
494
                'success' => false,
495
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
496
            ];
649 geraldo 497
 
66 efrain 498
            return new JsonModel($data);
499
        }
649 geraldo 500
 
66 efrain 501
        return new JsonModel($data);
502
    }
649 geraldo 503
 
14203 stevensc 504
    public function editAction()
505
    {
66 efrain 506
        $currentUserPlugin = $this->plugin('currentUserPlugin');
507
        $currentUser = $currentUserPlugin->getUser();
508
        $currentCompany = $currentUserPlugin->getCompany();
649 geraldo 509
 
66 efrain 510
        $request = $this->getRequest();
511
        $uuid = $this->params()->fromRoute('id');
512
 
649 geraldo 513
 
514
        if (!$uuid) {
66 efrain 515
            $data = [
649 geraldo 516
                'success' => false,
517
                'data' => 'ERROR_INVALID_PARAMETER'
66 efrain 518
            ];
649 geraldo 519
 
66 efrain 520
            return new JsonModel($data);
521
        }
522
 
523
        $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
524
        $jobDescription = $jobDescriptionMapper->fetchOneByUuid($uuid);
649 geraldo 525
        if (!$jobDescription) {
66 efrain 526
            $data = [
649 geraldo 527
                'success' => false,
528
                'data' => 'ERROR_RECORD_NOT_FOUND'
66 efrain 529
            ];
649 geraldo 530
 
66 efrain 531
            return new JsonModel($data);
532
        }
649 geraldo 533
 
851 geraldo 534
        if ($currentCompany && $jobDescription->company_id != $currentCompany->id) {
66 efrain 535
            $data = [
649 geraldo 536
                'success' => false,
537
                'data' => 'ERROR_UNAUTHORIZED'
66 efrain 538
            ];
649 geraldo 539
 
66 efrain 540
            return new JsonModel($data);
541
        }
542
 
649 geraldo 543
 
544
        if ($request->isPost()) {
847 geraldo 545
            $form = new JobDescriptionForm($this->adapter, $currentCompany ? $currentCompany->id : null, $jobDescription->id);
66 efrain 546
            $dataPost = $request->getPost()->toArray();
649 geraldo 547
 
66 efrain 548
            $form->setData($dataPost);
649 geraldo 549
 
550
            if ($form->isValid()) {
66 efrain 551
                $dataPost = (array) $form->getData();
16787 efrain 552
                if(!empty($dataPost['job_description_id_boss'])) {
553
 
554
                    $jobDescriptionBoos = $jobDescriptionMapper->fetchOneByUuid(Functions::sanitizeFilterString($dataPost['job_description_id_boss']));
555
                    if($jobDescriptionBoos && $jobDescriptionBoos->company_id == $currentCompany->id) {
556
                        $dataPost['job_description_id_boss'] = $jobDescriptionBoos->id;
557
                    } else {
558
                        $dataPost['job_description_id_boss'] = 0;
559
                    }
560
                }
15403 efrain 561
 
562
                $hydrator = new ObjectPropertyHydrator();
563
                $hydrator->hydrate($dataPost, $jobDescription);
564
 
66 efrain 565
                $dataPost['status'] = $dataPost['status'] ? $dataPost['status'] : JobDescription::STATUS_INACTIVE;
15403 efrain 566
 
567
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
568
 
569
 
66 efrain 570
                $result = $jobDescriptionMapper->update($jobDescription);
649 geraldo 571
 
572
                if ($result) {
15403 efrain 573
                    $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
574
                    $competencyMapper = CompetencyMapper::getInstance($this->adapter);
575
                    $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
576
 
577
 
578
                    $jobDescriptionCompetencyBehaviorMapper = JobDescriptionCompetencyBehaviorMapper::getInstance($this->adapter);
579
                    $jobDescriptionCompetencyBehaviorMapper->deleteAllBJobDescriptionId($jobDescription->id);
580
 
1195 geraldo 581
                    $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
15403 efrain 582
                    $jobDescriptionCompetencyMapper->deleteAllBJobDescriptionId($jobDescription->id);
583
 
584
                    $competencies_selected = isset($dataPost['competencies_selected']) ? $dataPost['competencies_selected'] : [];
585
                    foreach($competencies_selected as $competency_selected)
586
                    {
587
                        $competency_uuid = isset($competency_selected['competency_uuid']) ? $competency_selected['competency_uuid'] : '';
588
                        $competency = $competencyMapper->fetchOneByUuid($competency_uuid);
589
 
590
 
591
                        if($competency) {
592
                            if($currentCompany) {
593
                                $ok = $competency->company_id == $currentCompany->id;
594
                            } else {
595
                                $ok = empty($competency->company_id);
596
                            }
597
                        } else {
598
                            $ok = false;
599
                        }
600
 
601
                        if(!$ok) {
602
                            continue;
603
                        }
604
 
605
 
606
                        $behavior_uuid = isset($competency_selected['behavior_uuid']) ? $competency_selected['behavior_uuid'] : '';
607
                        $behavior = $behaviorMapper->fetchOneByUuid($behavior_uuid);
608
                        if($behavior) {
609
                            if($currentCompany) {
610
                                $ok = $behavior->company_id == $currentCompany->id;
611
                            } else {
612
                                $ok = empty($behavior->company_id);
613
                            }
614
 
615
 
616
                        } else {
617
                            $ok = false;
618
                        }
619
 
620
                        if($competency->company_id != $behavior->company_id) {
621
                            continue;
622
                        }
623
 
624
                        $competencyBehavior = $competencyBehaviorMapper->fetchOneByBehaviorIdAndCompetencyId($behavior->id, $competency->id);
625
                        if(!$competencyBehavior) {
626
                            continue;
627
                        }
628
 
629
                        $level = isset($competency_selected['level']) ? $competency_selected['level'] : 0;
630
                        $level = intval($level, 10);
631
 
632
 
633
                        $jobDescriptionCompetency =  $jobDescriptionCompetencyMapper->fetchOneByJobDescriptionIdAndCompetencyId($jobDescription->id, $competency->id);
634
                        if(!$jobDescriptionCompetency) {
66 efrain 635
                            $jobDescriptionCompetency = new JobDescriptionCompetency();
636
                            $jobDescriptionCompetency->competency_id = $competency->id;
637
                            $jobDescriptionCompetency->job_description_id = $jobDescription->id;
638
                            $jobDescriptionCompetencyMapper->insert($jobDescriptionCompetency);
15403 efrain 639
 
66 efrain 640
                        }
15030 efrain 641
 
15403 efrain 642
 
643
 
644
                        $jobDescriptionCompetencyBehavior = new JobDescriptionCompetencyBehavior();
645
                        $jobDescriptionCompetencyBehavior->job_description_id = $jobDescription->id;
646
                        $jobDescriptionCompetencyBehavior->competency_id = $competency->id;
647
                        $jobDescriptionCompetencyBehavior->behavior_id = $behavior->id;
648
                        $jobDescriptionCompetencyBehavior->level = $level;
649
                        $jobDescriptionCompetencyBehaviorMapper->insert($jobDescriptionCompetencyBehavior);
66 efrain 650
                    }
15403 efrain 651
 
652
 
653
 
66 efrain 654
                    $this->logger->info('Se actualizo el cargo ' . $jobDescription->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
649 geraldo 655
 
66 efrain 656
                    $data = [
657
                        'success' => true,
658
                        'data' => 'LABEL_RECORD_UPDATED'
659
                    ];
660
                } else {
661
                    $data = [
649 geraldo 662
                        'success' => false,
663
                        'data' => $jobDescriptionMapper->getError()
66 efrain 664
                    ];
665
                }
649 geraldo 666
 
66 efrain 667
                return new JsonModel($data);
668
            } else {
669
                $messages = [];
670
                $form_messages = (array) $form->getMessages();
649 geraldo 671
                foreach ($form_messages as $fieldname => $field_messages) {
66 efrain 672
                    $messages[$fieldname] = array_values($field_messages);
673
                }
649 geraldo 674
 
66 efrain 675
                return new JsonModel([
649 geraldo 676
                    'success' => false,
677
                    'data' => $messages
66 efrain 678
                ]);
679
            }
680
        } else if ($request->isGet()) {
15444 efrain 681
            $behaviors = [];
682
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
683
 
684
 
685
            if($currentCompany) {
686
                $records = $behaviorMapper->fetchAllActiveByCompanyId($currentCompany->id);
687
            } else {
688
                $records = $behaviorMapper->fetchAllActiveByDefault();
689
            }
690
 
691
            $behaviorIds = [];
692
            foreach($records as $record)
693
            {
694
 
695
                $behaviorIds[ $record->id ] = $record->uuid;
696
 
697
                array_push($behaviors, [
698
                    'uuid' => $record->uuid,
699
                    'description' => $record->description
700
                ]);
701
            }
702
 
703
 
704
            $competencyTypes = [];
705
 
706
 
707
            $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
708
 
709
            if($currentCompany) {
710
                $records = $competencyTypeMapper->fetchAllActiveByCompanyId($currentCompany->id);
711
            } else {
712
                $records = $competencyTypeMapper->fetchAllActiveByDefault();
713
            }
714
 
715
 
716
            $competencyTypeIds = [];
717
            foreach($records as $record)
718
            {
719
                $competencyTypeIds[ $record->id ] =  $record->uuid;
720
 
721
 
722
                array_push($competencyTypes, [
723
                    'uuid' => $record->uuid,
724
                    'name' => $record->name,
725
                ]);
726
            }
727
 
728
            $competencyMapper = CompetencyMapper::getInstance($this->adapter);
729
            if($currentCompany) {
730
                $records = $competencyMapper->fetchAllActiveByCompanyId($currentCompany->id);
731
            } else {
732
                $records = $competencyMapper->fetchAllActiveByDefault();
733
            }
734
 
735
            $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
736
 
737
 
738
 
739
            $competencies = [];
740
 
741
            foreach($records as $record)
742
            {
743
                if(!isset($competencyTypeIds[ $record->competency_type_id ])) {
744
                    continue;
745
                }
746
 
747
                $behaviors_by_competency = [];
748
 
749
                $competencyBehaviors = $competencyBehaviorMapper->fetchAllByCompetencyId($record->id);
750
                foreach($competencyBehaviors as $competencyBehavior)
751
                {
752
                    if(!isset($behaviorIds[ $competencyBehavior->behavior_id ])) {
753
                        continue;
754
                    }
755
 
756
                    array_push($behaviors_by_competency, $behaviorIds[ $competencyBehavior->behavior_id ]);
757
                }
758
 
759
 
760
                if($behaviors_by_competency) {
761
                    array_push($competencies, [
762
                        'competency_type_uuid' => $competencyTypeIds[ $record->competency_type_id ],
763
                        'uuid' => $record->uuid,
764
                        'name' => $record->name,
765
                        'behaviors' => $behaviors_by_competency,
766
                    ]);
767
                }
768
 
769
 
770
            }
16787 efrain 771
 
772
 
773
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
774
            $records = $jobDescriptionMapper->fetchAllByCompanyId($currentCompany->id);
775
 
776
            $jobsDescription = [];
777
 
778
            foreach ($records as $record)
779
            {
780
                if($jobDescription->id == $record->id) {
781
                    continue;
782
                }
783
 
784
                $jobsDescription[ $record->uuid ] = $record->name;
785
            }
786
 
787
            $job_description_id_boss = '';
788
            if($jobDescription->job_description_id_boss) {
789
                $jobDescriptionBoss = $jobDescriptionMapper->fetchOne($jobDescription->job_description_id_boss);
790
                if($jobDescriptionBoss) {
791
                    $job_description_id_boss = $jobDescriptionBoss->uuid;
792
                }
793
            }
649 geraldo 794
 
15403 efrain 795
            $data = [
16787 efrain 796
                'id' => $jobDescription->uuid,
15403 efrain 797
                'name' => $jobDescription->name,
798
                'functions' => $jobDescription->functions,
799
                'objectives' => $jobDescription->objectives,
800
                'status' => $jobDescription->status,
801
                'competencies_selected' => [],
15444 efrain 802
                'behaviors' => $behaviors,
803
                'competency_types' => $competencyTypes,
804
                'competencies' => $competencies,
16787 efrain 805
                'jobs_description' => $jobsDescription,
806
                'job_description_id_boss' => $job_description_id_boss,
15403 efrain 807
            ];
808
 
1320 efrain 809
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
66 efrain 810
            $competencyMapper = CompetencyMapper::getInstance($this->adapter);
15403 efrain 811
            $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
812
 
813
            $competencyTypes = [];
649 geraldo 814
 
15403 efrain 815
            $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
816
            $jobDescriptionCompetencyBehaviorMapper = JobDescriptionCompetencyBehaviorMapper::getInstance($this->adapter);
817
 
818
            $jobDescriptionCompetencies = $jobDescriptionCompetencyMapper->fetchAllByJobDescriptionId($jobDescription->id);
819
            foreach($jobDescriptionCompetencies as $jobDescriptionCompetency)
820
            {
821
                $competency = $competencyMapper->fetchOne($jobDescriptionCompetency->competency_id);
822
                if(!$competency) {
823
                    continue;
824
                }
825
 
826
                if(isset($competencyTypes[$competency->competency_type_id])) {
827
                    $competencyType = $competencyTypes[$competency->competency_type_id];
828
                } else {
829
 
830
                    $competencyType = $competencyTypeMapper->fetchOne($competency->competency_type_id);
831
                    if(!$competencyType) {
832
                        continue;
1154 geraldo 833
                    }
15403 efrain 834
 
835
                    $competencyTypes[$competency->competency_type_id] = $competencyType;
836
                }
837
 
838
                $competency_selected = [
839
                    'uuid' => $competency->uuid,
840
                    'competency_type_uuid' => $competencyType->uuid,
841
                    'behaviors' => []
842
                ];
843
 
15444 efrain 844
 
15403 efrain 845
 
15444 efrain 846
                foreach($competencies as $record_competency)
15403 efrain 847
                {
15444 efrain 848
                    if($record_competency['uuid'] == $competency->uuid) {
849
 
850
                        foreach($record_competency['behaviors'] as $uuid_behavior)
851
                        {
1154 geraldo 852
 
15444 efrain 853
 
854
                            $behavior = $behaviorMapper->fetchOneByUuid($uuid_behavior);
855
                            if($behavior) {
856
 
857
                                $jobDescriptionCompetencyBehavior = $jobDescriptionCompetencyBehaviorMapper->fetchOneByJobDescriptionIdAndCompetencyIdAndBehaviorId($jobDescription->id, $competency->id, $behavior->id);
858
                                if($jobDescriptionCompetencyBehavior) {
859
                                    $level = $jobDescriptionCompetencyBehavior->level;
860
                                } else {
861
                                    $level = 0;
862
                                }
863
 
864
                                array_push($competency_selected['behaviors'], ['uuid' => $behavior->uuid, 'level' => $level]);
865
                            }
866
                        }
867
 
1197 geraldo 868
                    }
15403 efrain 869
 
15444 efrain 870
 
66 efrain 871
                }
15403 efrain 872
 
15444 efrain 873
 
874
 
15403 efrain 875
                array_push($data['competencies_selected'], $competency_selected);
876
 
877
 
878
 
66 efrain 879
            }
880
 
881
            $response = [
882
                'success' => true,
883
                'data' => $data
884
            ];
649 geraldo 885
 
66 efrain 886
            return new JsonModel($response);
887
        } else {
888
            $data = [
889
                'success' => false,
890
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
891
            ];
649 geraldo 892
 
66 efrain 893
            return new JsonModel($data);
894
        }
649 geraldo 895
 
66 efrain 896
        return new JsonModel($data);
897
    }
649 geraldo 898
 
14203 stevensc 899
    public function deleteAction()
900
    {
66 efrain 901
        $currentUserPlugin = $this->plugin('currentUserPlugin');
902
        $currentUser = $currentUserPlugin->getUser();
903
        $currentCompany = $currentUserPlugin->getCompany();
649 geraldo 904
 
66 efrain 905
        $request = $this->getRequest();
906
        $uuid = $this->params()->fromRoute('id');
649 geraldo 907
 
908
        if (!$uuid) {
66 efrain 909
            $data = [
649 geraldo 910
                'success' => false,
911
                'data' => 'ERROR_INVALID_PARAMETER'
66 efrain 912
            ];
649 geraldo 913
 
66 efrain 914
            return new JsonModel($data);
915
        }
649 geraldo 916
 
917
 
66 efrain 918
        $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
919
        $jobDescription = $jobDescriptionMapper->fetchOneByUuid($uuid);
649 geraldo 920
        if (!$jobDescription) {
66 efrain 921
            $data = [
649 geraldo 922
                'success' => false,
923
                'data' => 'ERROR_RECORD_NOT_FOUND'
66 efrain 924
            ];
649 geraldo 925
 
66 efrain 926
            return new JsonModel($data);
927
        }
649 geraldo 928
 
851 geraldo 929
        if ($currentCompany && $jobDescription->company_id != $currentCompany->id) {
66 efrain 930
            $data = [
649 geraldo 931
                'success' => false,
932
                'data' => 'ERROR_UNAUTHORIZED'
66 efrain 933
            ];
649 geraldo 934
 
66 efrain 935
            return new JsonModel($data);
936
        }
937
 
649 geraldo 938
 
939
        if ($request->isPost()) {
16791 efrain 940
            $jobDescriptionMapper->removeParentByJobDescriptionId($jobDescription->id);
16770 efrain 941
 
942
 
66 efrain 943
            $result = $jobDescriptionMapper->delete($jobDescription);
649 geraldo 944
            if ($result) {
66 efrain 945
                $this->logger->info('Se borro el cargo de trabajo ' . $jobDescription->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
649 geraldo 946
 
66 efrain 947
                $data = [
948
                    'success' => true,
949
                    'data' => 'LABEL_RECORD_DELETED'
950
                ];
951
            } else {
952
 
953
                $data = [
649 geraldo 954
                    'success' => false,
955
                    'data' => $jobDescriptionMapper->getError()
66 efrain 956
                ];
957
 
958
                return new JsonModel($data);
959
            }
960
        } else {
961
            $data = [
962
                'success' => false,
963
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
964
            ];
649 geraldo 965
 
66 efrain 966
            return new JsonModel($data);
967
        }
649 geraldo 968
 
66 efrain 969
        return new JsonModel($data);
970
    }
561 geraldo 971
 
14203 stevensc 972
    public function importAction()
973
    {
850 geraldo 974
 
852 geraldo 975
        $currentUserPlugin = $this->plugin('currentUserPlugin');
976
        $currentUser = $currentUserPlugin->getUser();
977
        $currentCompany = $currentUserPlugin->getCompany();
854 geraldo 978
 
979
        if (!$currentCompany) {
852 geraldo 980
            $data = [
981
                'success' => false,
982
                'data' => 'ERROR_UNAUTHORIZED'
983
            ];
854 geraldo 984
 
852 geraldo 985
            return new JsonModel($data);
986
        }
854 geraldo 987
 
852 geraldo 988
        $request = $this->getRequest();
854 geraldo 989
 
990
        if ($request->isPost()) {
991
 
852 geraldo 992
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
993
            $jobDescriptionsDefault = $jobDescriptionMapper->fetchAllByDefault();
854 geraldo 994
 
852 geraldo 995
            $new_records = 0;
854 geraldo 996
            foreach ($jobDescriptionsDefault as $jobDescriptionDefault) {
997
                if ($jobDescriptionDefault->status == JobDescription::STATUS_INACTIVE) {
852 geraldo 998
                    continue;
999
                }
854 geraldo 1000
 
852 geraldo 1001
                $jobDescription = $jobDescriptionMapper->fetchOneByCompanyId($currentCompany->id, $jobDescriptionDefault->id);
854 geraldo 1002
                if (!$jobDescription) {
1003
 
852 geraldo 1004
                    $jobDescription = new JobDescription();
1005
                    $jobDescription->company_id = $currentCompany->id;
1006
                    $jobDescription->job_description_id_default = $jobDescriptionDefault->id;
1007
                    $jobDescription->name = $jobDescriptionDefault->name;
1008
                    $jobDescription->functions = $jobDescriptionDefault->functions;
1009
                    $jobDescription->objectives = $jobDescriptionDefault->objectives;
1010
                    $jobDescription->status = JobDescription::STATUS_ACTIVE;
854 geraldo 1011
 
858 geraldo 1012
                    $result = $jobDescriptionMapper->insert($jobDescription);
854 geraldo 1013
 
858 geraldo 1014
                    if ($result) {
1015
 
1016
                        //Add Competencies
955 geraldo 1017
                        $competenceMapper = CompetencyMapper::getInstance($this->adapter);
858 geraldo 1018
                        $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
953 geraldo 1019
                        $jobDescriptionCompetencies = $jobDescriptionCompetencyMapper->fetchByJobDescriptionId($jobDescriptionDefault->id);
939 geraldo 1020
 
953 geraldo 1021
                        if (count($jobDescriptionCompetencies) != 0) {
1022
                            foreach ($jobDescriptionCompetencies as $record) {
955 geraldo 1023
 
1024
                                $competence = $competenceMapper->fetchOneByCompanyIdAndCompetencyIdDefault($currentCompany->id, $record->competency_id);
956 geraldo 1025
                                if ($competence) {
1026
                                    $newDescriptionCompetency = new JobDescriptionCompetency();
1027
                                    $newDescriptionCompetency->competency_id = $competence->id;
1028
                                    $newDescriptionCompetency->job_description_id = $jobDescription->id;
1029
                                    $newDescriptionCompetency->level = $record->level;
1030
                                    $jobDescriptionCompetencyMapper->insert($newDescriptionCompetency);
955 geraldo 1031
                                }
858 geraldo 1032
                            }
1033
                        }
1034
 
852 geraldo 1035
                        $new_records++;
1036
                    } else {
1037
                        $data = [
1038
                            'success' => false,
1039
                            'data' => 'ERROR_CANT_ADD_JOB_DESCRIPTION'
1040
                        ];
854 geraldo 1041
 
852 geraldo 1042
                        return new JsonModel($data);
1043
                    }
1044
                }
1045
            }
854 geraldo 1046
 
1047
            if ($new_records) {
1048
 
1049
                if (1 == $new_records) {
852 geraldo 1050
                    $data = [
1051
                        'success' => true,
1052
                        'data' => 'LABEL_1_JOB_DESCRIPTION_IMPORTED'
1053
                    ];
854 geraldo 1054
 
852 geraldo 1055
                    return new JsonModel($data);
1056
                } else {
1057
                    $data = [
1058
                        'success' => true,
854 geraldo 1059
                        'data' => $new_records . ' LABEL_MULTI_JOB_DESCRIPTION_IMPORTED'
852 geraldo 1060
                    ];
854 geraldo 1061
 
852 geraldo 1062
                    return new JsonModel($data);
1063
                }
1064
            } else {
1065
                $data = [
1066
                    'success' => true,
1067
                    'data' => 'LABEL_NO_JOB_DESCRIPTION_IMPORTED'
1068
                ];
854 geraldo 1069
 
852 geraldo 1070
                return new JsonModel($data);
1071
            }
1072
        } else {
1073
            $data = [
1074
                'success' => false,
1075
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1076
            ];
854 geraldo 1077
 
852 geraldo 1078
            return new JsonModel($data);
1079
        }
854 geraldo 1080
 
852 geraldo 1081
        return new JsonModel($data);
850 geraldo 1082
    }
1083
 
14203 stevensc 1084
    public function reportAction()
1085
    {
561 geraldo 1086
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1087
        $currentUser = $currentUserPlugin->getUser();
1088
        $currentCompany = $currentUserPlugin->getCompany();
649 geraldo 1089
 
561 geraldo 1090
        $request = $this->getRequest();
1091
        $uuid = $this->params()->fromRoute('id');
1092
 
649 geraldo 1093
 
1094
        if (!$uuid) {
561 geraldo 1095
            $data = [
649 geraldo 1096
                'success' => false,
1097
                'data' => 'ERROR_INVALID_PARAMETER'
561 geraldo 1098
            ];
649 geraldo 1099
 
561 geraldo 1100
            return new JsonModel($data);
1101
        }
1102
 
1103
        $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
1104
        $jobDescription = $jobDescriptionMapper->fetchOneByUuid($uuid);
649 geraldo 1105
        if (!$jobDescription) {
561 geraldo 1106
            $data = [
649 geraldo 1107
                'success' => false,
1108
                'data' => 'ERROR_RECORD_NOT_FOUND'
561 geraldo 1109
            ];
649 geraldo 1110
 
561 geraldo 1111
            return new JsonModel($data);
1112
        }
649 geraldo 1113
 
851 geraldo 1114
        if ($currentCompany && $jobDescription->company_id != $currentCompany->id) {
561 geraldo 1115
            $data = [
649 geraldo 1116
                'success' => false,
1117
                'data' => 'ERROR_UNAUTHORIZED'
561 geraldo 1118
            ];
649 geraldo 1119
 
561 geraldo 1120
            return new JsonModel($data);
1121
        }
1122
 
649 geraldo 1123
 
561 geraldo 1124
        if ($request->isGet()) {
1125
 
15444 efrain 1126
 
16770 efrain 1127
            /*
15403 efrain 1128
            $filename = Functions::normalizeStringFilename($jobDescription->name . '-' . date('Y-m-d H:i a') . '.pdf');
1213 geraldo 1129
 
15403 efrain 1130
 
15444 efrain 1131
 
1132
 
15403 efrain 1133
            $content = base64_encode($this->renderPdf($currentCompany, $jobDescription));
15444 efrain 1134
            $data = [
1135
                'success' => true,
1136
                'data' => [
1137
                    'basename' => $filename,
1138
                    'content' => $content
1139
                ]
1140
            ];
15403 efrain 1141
 
16770 efrain 1142
            return new JsonModel($data);*/
15444 efrain 1143
 
16770 efrain 1144
 
15444 efrain 1145
 
1146
            $content = $this->renderPdf($currentCompany, $jobDescription);
15403 efrain 1147
            $response = new Response();
1148
            $response->setStatusCode(200);
1149
            $response->setContent($content);
16770 efrain 1150
 
15403 efrain 1151
            $headers = $response->getHeaders();
1152
            $headers->clearHeaders();
1153
 
1154
            $headers->addHeaderLine('Content-Description: File Transfer');
1155
            $headers->addHeaderLine('Content-Type: application/pdf');
1156
            //$headers->addHeaderLine('Content-Disposition: attachment; filename=' . $filename);
1157
            $headers->addHeaderLine('Content-Transfer-Encoding: binary');
1158
            $headers->addHeaderLine('Expires: 0');
1159
            $headers->addHeaderLine('Cache-Control: must-revalidate');
1160
            $headers->addHeaderLine('Pragma: public');
1161
            return $response;
16770 efrain 1162
 
15403 efrain 1163
 
15444 efrain 1164
 
15403 efrain 1165
 
1166
 
561 geraldo 1167
        } else {
1168
            $data = [
1169
                'success' => false,
1170
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1171
            ];
649 geraldo 1172
 
561 geraldo 1173
            return new JsonModel($data);
1174
        }
649 geraldo 1175
 
561 geraldo 1176
        return new JsonModel($data);
1177
    }
15403 efrain 1178
 
1179
 
16954 efrain 1180
    public function dictionaryAction()
1181
    {
1182
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1183
        $currentUser = $currentUserPlugin->getUser();
1184
        $currentCompany = $currentUserPlugin->getCompany();
1185
 
1186
        $request = $this->getRequest();
1187
 
1188
        if ($request->isGet()) {
1189
 
1190
            $form = new ContentUploadForm();
1191
 
1192
            $this->layout()->setTemplate('layout/layout-backend');
1193
            $viewModel = new ViewModel();
1194
            $viewModel->setTemplate('leaders-linked/jobs-description/dictionary.phtml');
1195
            $viewModel->setVariables([
1196
                'form' => $form
1197
            ]);
1198
            return $viewModel;
1199
 
1200
        }
1201
        else if ($request->isPost()) {
1202
 
1203
            $step = Functions::sanitizeFilterString($this->params()->fromPost('step'));
1204
            if($step == 'validation') {
1205
 
1206
                $form = new  ContentUploadForm();;
1207
                $dataPost = array_merge($request->getPost()->toArray(), $request->getFiles()->toArray());
1208
 
1209
                $form->setData($dataPost);
1210
 
1211
                if($form->isValid()) {
1212
 
1213
                    $file = $_FILES['file'];
1214
                    $tmp_filename = $file['tmp_name'];
1215
                    $final_filename =  'data/' . $file['name'];
1216
 
1217
                    if(!move_uploaded_file($tmp_filename, $final_filename)) {
1218
                        return new JsonModel([
1219
                            'success' => false,
1220
                            'data' => 'ERROR_UPLOAD_FILE'
1221
                        ]);
1222
                    }
1223
 
1224
 
1225
                    $behaviors = [];
1226
                    $competency_types = [];
1227
                    $competencies = [];
1228
 
1229
 
1230
 
1231
 
1232
 
1233
                    $spreadsheet = IOFactory::load($final_filename);
1234
 
1235
 
1236
                    //Tipos de competencias
1237
                    $spreadsheet->setActiveSheetIndex(0);
1238
                    $records = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
1239
 
1240
                    $i = 0;
1241
                    foreach($records as $record)
1242
                    {
1243
                        if(!$i) {
1244
                            $i++;
1245
                            continue;
1246
                        }
1247
 
1248
                        //A = Referencia	B = Nombre	C = Descripción
1249
 
1250
 
1251
                        $reference = Functions::sanitizeFilterString($record['A']);
1252
                        $name = Functions::sanitizeFilterString($record['B']);
1253
                        $description = Functions::sanitizeFilterString($record['C']);
842 geraldo 1254
 
16954 efrain 1255
 
1256
 
1257
                        if(empty($reference) || empty($name) || empty($description) ) {
1258
                            continue;
1259
                        }
1260
 
1261
                        array_push($competency_types, [
1262
                            'name' => $name,
1263
                            'description' => $description,
1264
                            'reference' => $reference
1265
                        ]);
1266
                    }
1267
 
1268
 
1269
                    //Comportamientos
1270
                    $spreadsheet->setActiveSheetIndex(1);
1271
 
1272
 
1273
                    $records = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
1274
 
1275
 
1276
                    $i = 0;
1277
                    foreach($records as $record)
1278
                    {
1279
                        if(!$i) {
1280
                            $i++;
1281
                            continue;
1282
                        }
1283
 
1284
 
1285
                        //A = Referencia	B = Descripción
1286
 
1287
 
1288
                        $reference = Functions::sanitizeFilterString($record['A']);
1289
                        $description = Functions::sanitizeFilterString($record['B']);
1290
 
1291
 
1292
 
1293
                        if(empty($reference) || empty($description) ) {
1294
                            continue;
1295
                        }
1296
 
1297
                        array_push($behaviors, [
1298
                            'description' => $description,
1299
                            'reference' => $reference
1300
                        ]);
1301
                    }
1302
 
1303
 
1304
                    //Competencias
1305
                    $spreadsheet->setActiveSheetIndex(2);
1306
 
1307
 
1308
                    $records = $spreadsheet->getActiveSheet()->toArray(null, true, true, true);
1309
 
1310
 
1311
                    $i  = 0;
1312
                    foreach($records as $record)
1313
                    {
1314
                        //A = Referencia	B = Tipo Competencia	C = Nombre	D = Descripción	 E =Comportamientos
1315
 
1316
 
1317
                        if(!$i) {
1318
                            $i++;
1319
                            continue;
1320
                        }
1321
 
1322
                        $reference = Functions::sanitizeFilterString($record['A']);
1323
                        $competency_type = Functions::sanitizeFilterString($record['B']);
1324
                        $name = Functions::sanitizeFilterString($record['C']);
1325
                        $description = Functions::sanitizeFilterString($record['D']);
1326
                        $behaviors_reference = Functions::sanitizeFilterString($record['E']);
1327
 
1328
 
1329
 
1330
                        if(empty($competency_type) || empty($reference) || empty($description) ) {
1331
                            continue;
1332
                        }
1333
 
1334
                        array_push($competencies, [
1335
                            'reference' => $reference,
1336
                            'competency_type' => $competency_type,
1337
                            'name' =>  $name,
1338
                            'description' => $description,
1339
                            'behaviors' => $behaviors_reference,
1340
                        ]);
1341
                    }
1342
 
1343
                    $data = [
1344
                        'competency_types' => $competency_types,
1345
                        'competencies' => $competencies,
1346
                        'behaviors' => $behaviors,
1347
                    ];
1348
 
1349
 
1350
 
1351
 
1352
                    $key = md5($currentUser->id . '-' . microtime(true));
1353
                    $this->cache->setItem($key, serialize($data));
1354
 
1355
                    return new JsonModel([
1356
                        'success' => true,
1357
                        'data' => [
1358
                            'key' => $key,
1359
                            'items' => $data,
1360
                        ]
1361
                    ]);
1362
 
1363
                    @unlink($final_filename);
1364
 
1365
 
1366
                } else {
1367
                    $messages = [];
1368
                    $form_messages = (array) $form->getMessages();
1369
                    foreach($form_messages  as $fieldname => $field_messages)
1370
                    {
1371
 
1372
                        $messages[$fieldname] = array_values($field_messages);
1373
                    }
1374
 
1375
                    return new JsonModel([
1376
                        'success'   => false,
1377
                        'data'   => $messages
1378
                    ]);
1379
                }
1380
            } else if ($step == 'process') {
1381
 
1382
                $key = Functions::sanitizeFilterString($this->params()->fromPost('key'));
1383
                if(!$key) {
1384
                    return new JsonModel([
1385
                        'success' => false,
1386
                        'data' => 'ERROR_CACHE_KEY_EMPTY'
1387
                    ]);
1388
                }
1389
 
1390
                $value = $this->cache->getItem($key);
1391
                if(!$value) {
1392
 
1393
                    return new JsonModel([
1394
                        'success' => false,
1395
                        'data' => 'ERROR_CACHE_NOT_FOUND'
1396
                    ]);
1397
                }
1398
 
1399
                $data = unserialize($value);
1400
                if(!$data) {
1401
                    return new JsonModel([
1402
                        'success' => false,
1403
                        'data' => 'ERROR_CACHE_INVALID'
1404
                    ]);
1405
                }
1406
 
1407
 
1408
 
1409
                $records_added = 0;
1410
 
1411
                $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
1412
 
1413
                $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
1414
                $competencyMapper = CompetencyMapper::getInstance($this->adapter);
1415
                $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
1416
 
1417
                if(!empty($data['competency_types'])) {
1418
                    foreach($data['competency_types'] as $record)
1419
                    {
1420
 
1421
                        $competencyType = $competencyTypeMapper->fetchOneDefaultByExternalCode($record['reference']);
1422
                        if(!$competencyType) {
1423
 
1424
                            $competencyType = new CompetencyType();
1425
                            $competencyType->external_code = $record['reference'];
1426
                            $competencyType->name = $record['name'];
1427
                            $competencyType->description = $record['description'];
1428
                            $competencyType->status = CompetencyType::STATUS_ACTIVE;
1429
 
1430
                            if($competencyTypeMapper->insert($competencyType)) {
1431
                                $records_added++;
1432
                            } else {
1433
                                continue;
1434
                            }
1435
                        }
1436
 
1437
                    }
1438
                }
1439
 
1440
                if(!empty($data['behaviors'])) {
1441
                    foreach($data['behaviors'] as $record)
1442
                    {
1443
                        $behavior = $behaviorMapper->fetchOneDefaultByExternalCode($record['reference']);
1444
                        if(!$behavior) {
1445
                            $behavior = new Behavior();
1446
                            $behavior->external_code = $record['reference'];
1447
                            $behavior->description = $record['description'];
1448
                            $behavior->status = Behavior::STATUS_ACTIVE;
1449
 
1450
                            if($behaviorMapper->insert($behavior)) {
1451
                                $records_added++;
1452
                            }else {
1453
                                continue;
1454
                            }
1455
                        }
1456
                    }
1457
                }
1458
 
1459
                if(!empty($data['competencies'])) {
1460
                    foreach($data['competencies'] as $record)
1461
                    {
1462
 
1463
 
1464
 
1465
                        $competency = $competencyMapper->fetchOneDefaultByExternalCode($record['reference']);
1466
 
1467
                        if(!$competency) {
1468
                            $competencyType = $competencyTypeMapper->fetchOneDefaultByExternalCode($record['competency_type']);
1469
                            if($competencyType) {
1470
                                $competency = new Competency();
1471
                                $competency->competency_type_id = $competencyType->id;
1472
                                $competency->external_code = $record['reference'];
1473
                                $competency->name = $record['name'];
1474
                                $competency->description = $record['description'];
1475
                                $competency->status = Competency::STATUS_ACTIVE;
1476
 
1477
                                if($competencyMapper->insert($competency)) {
1478
                                    $records_added++;
1479
                                } else {
1480
                                    continue;
1481
                                }
1482
                            }
1483
 
1484
                            if(!empty($record['behaviors'])) {
1485
                                $behaviors = explode(',', $record['behaviors']);
1486
                                if(!empty($behaviors)) {
1487
                                    foreach($behaviors as $reference_behavior) {
1488
 
1489
                                        $behavior = $behaviorMapper->fetchOneDefaultByExternalCode($reference_behavior);
1490
                                        if($behavior) {
1491
 
1492
 
1493
                                            $competencyBehavior = $competencyBehaviorMapper->fetchOneByBehaviorIdAndCompetencyId($behavior->id, $competency->id);
1494
                                            if(!$competencyBehavior) {
1495
                                                $competencyBehavior = new CompetencyBehavior();
1496
                                                $competencyBehavior->behavior_id = $behavior->id;
1497
                                                $competencyBehavior->competency_id = $competency->id;
1498
 
1499
                                                if($competencyBehaviorMapper->insert($competencyBehavior)) {
1500
                                                    $records_added++;
1501
                                                }
1502
                                            }
1503
                                        }
1504
                                    }
1505
                                }
1506
                            }
1507
                        }
1508
                    }
1509
                }
1510
 
1511
                if($records_added) {
1512
 
1513
                    $message = $records_added == 1 ?  'LABEL_1_RECORD_IMPORTED' : $records_added . ' LABEL_MULTI_RECORDS_IMPORTED';
1514
 
1515
                } else {
1516
                    $message = 'LABEL_NO_RECORDS_IMPORTED';
1517
 
1518
                }
1519
 
1520
                return new JsonModel([
1521
                    'success' => true,
1522
                    'data' => $message
1523
                ]);
1524
 
1525
 
1526
 
1527
 
1528
            } else {
1529
 
1530
                $data = [
1531
                    'success' => false,
1532
                    'data' => 'ERROR_STEP_UNKNOW'
1533
                ];
1534
 
1535
 
1536
 
1537
            }
1538
 
1539
            return new JsonModel($data);
1540
        }
1541
        else {
1542
            $data = [
1543
                'success' => false,
1544
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1545
            ];
1546
 
1547
            return new JsonModel($data);
1548
        }
1549
 
1550
        return new JsonModel($data);
1551
    }
15403 efrain 1552
 
1553
 
16954 efrain 1554
 
1555
 
788 geraldo 1556
    /**
1557
     * Render PDF
15079 efrain 1558
     * @param Company $company;
1336 efrain 1559
     * @param JobDescription $jobDescription
1560
     * @return mixed
788 geraldo 1561
     */
15403 efrain 1562
    private function renderPDF($company, $jobDescription)
14203 stevensc 1563
    {
561 geraldo 1564
 
1565
        //Generate New PDF
15403 efrain 1566
        $pdf = new JobDescriptionPdf();
1567
        $pdf->SetTitle($jobDescription->name);
842 geraldo 1568
 
15079 efrain 1569
 
1570
        $target_path = $this->config['leaderslinked.fullpath.company'] . DIRECTORY_SEPARATOR . $company->uuid;
1571
 
1572
        $header = $company->header ? $target_path . DIRECTORY_SEPARATOR . $company->header : '';
1573
        if(empty($header) || !file_exists($header)) {
1574
            $header = $this->config['leaderslinked.images_default.company_pdf_header'];
1575
        }
1576
 
1577
        $footer = $company->footer ? $target_path . DIRECTORY_SEPARATOR . $company->footer : '';
1578
        if(empty($footer) || !file_exists($footer)) {
1579
            $footer = $this->config['leaderslinked.images_default.company_pdf_footer'];
1580
        }
1581
 
1582
        $pdf->header = $header;
1583
        $pdf->footer = $footer;
15403 efrain 1584
        $pdf->translator = $this->translator;
842 geraldo 1585
 
561 geraldo 1586
 
927 geraldo 1587
        $pdf->SetMargins(10, 0, 10);
714 geraldo 1588
 
561 geraldo 1589
        $pdf->AliasNbPages();
1590
        $pdf->AddPage();
564 geraldo 1591
 
697 geraldo 1592
        // Add Title
1593
        $pdf->customHeader();
654 geraldo 1594
 
649 geraldo 1595
        // Job Description Name
654 geraldo 1596
 
649 geraldo 1597
        $job_descrition[] = array(
15403 efrain 1598
            'title' => $this->translator->translate('LABEL_PDF_JOB_DESCRIPTION_LABORAL_CATEGORY') .  ' : ' ,
709 geraldo 1599
            'content' => ' ' . $jobDescription->name
649 geraldo 1600
        );
654 geraldo 1601
 
649 geraldo 1602
 
15403 efrain 1603
        $pdf->borderTable($this->translator->translate('LABEL_PDF_JOB_TITLE_NAME') . ' : ', $job_descrition);
649 geraldo 1604
 
15403 efrain 1605
 
654 geraldo 1606
        //Hierarchical Relationship
1607
 
650 geraldo 1608
        $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
16770 efrain 1609
 
714 geraldo 1610
        $subordinate = '';
16770 efrain 1611
 
1612
        if($jobDescription->company_id) {
1613
            $jobDescriptionSubordinates = $jobDescriptionMapper->fetchAllByCompanyIdAndJobDescriptionIdBoss($jobDescription->company_id,$jobDescription->id);
1614
        } else {
1615
            $jobDescriptionSubordinates = $jobDescriptionMapper->fetchAllDefaultAndJobDescriptionIdBoss($jobDescription->id);
1616
        }
1617
 
1618
        if ($jobDescriptionSubordinates) {
1619
            foreach ($jobDescriptionSubordinates as $jobDescriptionSubordinate) {
1620
                $subordinate .= $jobDescriptionSubordinate->name . ' ';
717 geraldo 1621
            }
1622
        }
714 geraldo 1623
 
649 geraldo 1624
        $jobDescriptionBoss = $jobDescriptionMapper->fetchOne($jobDescription->job_description_id_boss);
1625
 
654 geraldo 1626
        $relationship = [
15403 efrain 1627
            [
1628
                'title' => $this->translator->translate('LABEL_PDF_JOB_SUPERVISES') . ': ',
726 geraldo 1629
                'content' => $subordinate ? ' ' . $subordinate : ' No aplica'
15403 efrain 1630
            ],
1631
            [
1632
                'title' => $this->translator->translate('LABEL_PDF_JOB_SUPERVISED_BY') . ': ',
1633
                'content' => $jobDescriptionBoss ? ' ' . $jobDescriptionBoss->name : ' ' .  $this->translator->translate('LABEL_PDF_JOB_DOES_NOT_APPLY'),
1634
            ]
654 geraldo 1635
        ];
579 geraldo 1636
 
15403 efrain 1637
        $pdf->borderTable($this->translator->translate('LABEL_PDF_JOB_HIERARCHICAL_RELATIONSHIP') . ' : ', $relationship);
628 geraldo 1638
 
654 geraldo 1639
        // Objetives
628 geraldo 1640
 
1259 geraldo 1641
        $objetives[] = array('content' => strip_tags($jobDescription->objectives));
15403 efrain 1642
        $pdf->borderTable($this->translator->translate('LABEL_PDF_JOB_OBJECTIVES') . ' : ', $objetives);
653 geraldo 1643
 
654 geraldo 1644
        // Functions
628 geraldo 1645
 
1259 geraldo 1646
        $functions[] = array('content' => strip_tags($jobDescription->functions));
15403 efrain 1647
        $pdf->borderTable($this->translator->translate('LABEL_PDF_JOB_PRINCIPAL_FUNCTIONS') . ' : ', $functions);
628 geraldo 1648
 
749 geraldo 1649
        // add section signature
709 geraldo 1650
        $pdf->sectionSignature();
1651
 
654 geraldo 1652
        //Competencies
628 geraldo 1653
 
658 geraldo 1654
        $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
15444 efrain 1655
        $jobDescriptionCompetencies = $jobDescriptionCompetencyMapper->fetchAllByJobDescriptionId($jobDescription->id);
649 geraldo 1656
 
672 geraldo 1657
        $competencyMapper = CompetencyMapper::getInstance($this->adapter);
933 geraldo 1658
        $competenceTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
15030 efrain 1659
        $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
15403 efrain 1660
        $jobDescriptionCompetencyBehaviorMapper = JobDescriptionCompetencyBehaviorMapper::getInstance($this->adapter);
1320 efrain 1661
        $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
842 geraldo 1662
 
939 geraldo 1663
 
15444 efrain 1664
        $max = count($jobDescriptionCompetencies);
672 geraldo 1665
 
15444 efrain 1666
        if ($max) {
842 geraldo 1667
 
748 geraldo 1668
            // add new page
842 geraldo 1669
 
748 geraldo 1670
            $pdf->AddPage();
679 geraldo 1671
 
745 geraldo 1672
            $competencies_header[] = array('content' => 'De acuerdo a la siguiente escala, se deberá asignar un valor a cada conducta deseable correspondiente a cada una de las competencias requeridas para el cargo. La valoración refiere a las conductas deseables requeridas en cada cargo, y no refiere a la persona que lo ocupa');
679 geraldo 1673
 
745 geraldo 1674
            $pdf->singleTable('Competencias requeridas para el cargo:', $competencies_header);
709 geraldo 1675
 
745 geraldo 1676
 
1677
            // Add scale section
15444 efrain 1678
           // $pdf->sectionScale();
745 geraldo 1679
 
1680
 
15444 efrain 1681
            for ($i = 0; $i < $max; $i++)  {
745 geraldo 1682
 
15444 efrain 1683
                $record = $jobDescriptionCompetencies[$i];
1684
 
15030 efrain 1685
                $behaviorCompetencies = $competencyBehaviorMapper->fetchAllByCompetencyId($record->competency_id);
1213 geraldo 1686
                $behaviors = [];
1687
 
1688
                foreach ($behaviorCompetencies as $rows) {
1689
 
1690
                    $behavior = $behaviorMapper->fetchOne($rows->behavior_id);
15444 efrain 1691
                    if ($behavior) {
1692
                        $jobDescriptionCompetencyBehavior = $jobDescriptionCompetencyBehaviorMapper->fetchOneByJobDescriptionIdAndCompetencyIdAndBehaviorId($jobDescription->id, $record->competency_id, $rows->behavior_id);
1693
                        if($jobDescriptionCompetencyBehavior) {
1694
                            $level = $jobDescriptionCompetencyBehavior->level;
1695
                        } else {
1696
                            $level = 0;
1697
                        }
1213 geraldo 1698
 
1699
                        array_push($behaviors, [
1700
                            'description' => $behavior->description,
15444 efrain 1701
                            'level' => $level
1213 geraldo 1702
                        ]);
1703
                    }
1704
                }
1705
 
745 geraldo 1706
                $competency = $competencyMapper->fetchOne($record->competency_id);
933 geraldo 1707
                $competenceType = $competenceTypeMapper->fetchOne($competency->competency_type_id);
745 geraldo 1708
 
15444 efrain 1709
                $j = $i + 1;
1710
                $last = $j == $max;
1711
 
1712
                $pdf->competencyTable($j, $competenceType, $competency, $behaviors, $last);
1713
 
1714
                if(!$last) {
1715
                    $y = $pdf->getY();
1716
                    if($y >= JobDescriptionPdf::MAX_Y_ADD_PAGE) {
1717
                        $this->addPage();
1718
                    }
1719
                }
933 geraldo 1720
 
709 geraldo 1721
            }
669 geraldo 1722
        }
15403 efrain 1723
 
1724
        /*
1725
 
1726
        $temp_file = tempnam(sys_get_temp_dir(), 'job-description');
1727
        $pdf->Output('F', $temp_file);
658 geraldo 1728
 
15403 efrain 1729
        return $temp_file;*/
1730
 
15444 efrain 1731
 
1732
 
15403 efrain 1733
        return $pdf->Output('S');
561 geraldo 1734
    }
15079 efrain 1735
 
16787 efrain 1736
 
66 efrain 1737
}