Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16770 | Rev 16779 | Ir a la última revisión | | 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;
15403 efrain 28
 
16766 efrain 29
 
14203 stevensc 30
class JobDescriptionController extends AbstractActionController
31
{
66 efrain 32
    /**
33
     *
16769 efrain 34
     * @var \Laminas\Db\Adapter\AdapterInterface
66 efrain 35
     */
36
    private $adapter;
16769 efrain 37
 
66 efrain 38
    /**
39
     *
16769 efrain 40
     * @var \LeadersLinked\Cache\CacheInterface
66 efrain 41
     */
16769 efrain 42
    private $cache;
43
 
44
 
45
    /**
46
     *
47
     * @var \Laminas\Log\LoggerInterface
48
     */
66 efrain 49
    private $logger;
16769 efrain 50
 
66 efrain 51
    /**
52
     *
53
     * @var array
54
     */
55
    private $config;
15403 efrain 56
 
16769 efrain 57
 
15403 efrain 58
    /**
16769 efrain 59
     *
60
     * @var \Laminas\Mvc\I18n\Translator
15403 efrain 61
     */
62
    private $translator;
16769 efrain 63
 
64
 
66 efrain 65
    /**
66
     *
16769 efrain 67
     * @param \Laminas\Db\Adapter\AdapterInterface $adapter
68
     * @param \LeadersLinked\Cache\CacheInterface $cache
69
     * @param \Laminas\Log\LoggerInterface LoggerInterface $logger
66 efrain 70
     * @param array $config
16769 efrain 71
     * @param \Laminas\Mvc\I18n\Translator $translator
66 efrain 72
     */
16769 efrain 73
    public function __construct($adapter, $cache, $logger, $config, $translator)
14203 stevensc 74
    {
16769 efrain 75
        $this->adapter      = $adapter;
76
        $this->cache        = $cache;
77
        $this->logger       = $logger;
78
        $this->config       = $config;
79
        $this->translator   = $translator;
66 efrain 80
    }
649 geraldo 81
 
14203 stevensc 82
    public function indexAction()
83
    {
66 efrain 84
        $currentUserPlugin = $this->plugin('currentUserPlugin');
85
        $currentUser = $currentUserPlugin->getUser();
86
        $currentCompany = $currentUserPlugin->getCompany();
649 geraldo 87
 
16770 efrain 88
 
66 efrain 89
        $request = $this->getRequest();
649 geraldo 90
        $headers = $request->getHeaders();
91
 
16770 efrain 92
 
93
        if ($request->isPost()) {
94
 
95
            $data = $this->params()->fromPost('data');
96
 
97
            if(!empty($data)) {
98
 
99
                $json = json_decode($data, true);
100
                if(is_array($json)) {
101
 
102
                    $jobDescriptionIdBoss = 0;
103
                    $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
104
 
105
 
106
 
107
                    $position = 0;
108
                    foreach($json as $item)
109
                    {
649 geraldo 110
 
16770 efrain 111
                        $this->recursiveSave($currentCompany, $jobDescriptionMapper, $jobDescriptionIdBoss, $item, $position);
112
                        $position++;
113
                    }
649 geraldo 114
 
16770 efrain 115
                }
116
            }
117
            return new JsonModel([
118
                'success' => true,
119
            ]);
120
 
121
 
122
        } else if ($request->isGet()) {
123
 
124
 
649 geraldo 125
            $headers = $request->getHeaders();
126
 
66 efrain 127
            $isJson = false;
649 geraldo 128
            if ($headers->has('Accept')) {
66 efrain 129
                $accept = $headers->get('Accept');
649 geraldo 130
 
66 efrain 131
                $prioritized = $accept->getPrioritized();
649 geraldo 132
 
133
                foreach ($prioritized as $key => $value) {
66 efrain 134
                    $raw = trim($value->getRaw());
649 geraldo 135
 
136
                    if (!$isJson) {
66 efrain 137
                        $isJson = strpos($raw, 'json');
138
                    }
139
                }
140
            }
649 geraldo 141
 
142
            if ($isJson) {
15371 efrain 143
 
16770 efrain 144
 
145
 
146
                $items = [];
147
 
148
                $jobDescriptionIdBoss = 0;
66 efrain 149
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
16770 efrain 150
 
151
 
152
 
153
                $items = $this->recursiveLoad($currentUser, $currentCompany, $jobDescriptionMapper, $jobDescriptionIdBoss);
66 efrain 154
                return new JsonModel([
155
                    'success' => true,
156
                    'data' => [
157
                        'items' => $items,
16770 efrain 158
 
66 efrain 159
                    ]
160
                ]);
16770 efrain 161
 
649 geraldo 162
            } else {
15403 efrain 163
 
164
 
165
 
649 geraldo 166
 
847 geraldo 167
                $form = new JobDescriptionForm($this->adapter, $currentCompany ? $currentCompany->id : null);
842 geraldo 168
 
66 efrain 169
                $this->layout()->setTemplate('layout/layout-backend');
170
                $viewModel = new ViewModel();
171
                $viewModel->setTemplate('leaders-linked/jobs-description/index.phtml');
15403 efrain 172
                $viewModel->setVariables([
173
                    'form' => $form,
15444 efrain 174
 
15403 efrain 175
 
176
                ]);
649 geraldo 177
                return $viewModel;
178
            }
66 efrain 179
        } else {
180
            return new JsonModel([
181
                'success' => false,
182
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
16770 efrain 183
            ]);
66 efrain 184
        }
185
    }
16770 efrain 186
 
187
    /**
188
     *
189
     * @param Company $currentCompany
190
     * @param JobDescriptionMapper $jobDescriptionMapper
191
     * @param int $jobDescriptionIdBoss
192
     * @param int $position
193
     * @param array $item
194
     */
195
    private function recursiveSave($currentCompany, $jobDescriptionMapper, $jobDescriptionIdBoss, $item, $position)
196
    {
197
 
649 geraldo 198
 
16770 efrain 199
        if(!empty($item) && is_array($item)) {
200
            foreach($item as $subitem)
201
            {
202
                $jobDescription = $jobDescriptionMapper->fetchOneByUuid($subitem['id']);
203
                if($jobDescriptionMapper) {
204
                    if($jobDescriptionIdBoss) {
205
 
206
 
207
                        $jobDescriptionMapper->setJobDescriptionIdBossByJobDescripcionId($jobDescription->id,  $jobDescriptionIdBoss, $position);
208
                    } else {
209
                        $jobDescriptionMapper->removeJobDescriptionIdBossByJobDescriptionId($jobDescription->id, $position);
210
                    }
211
 
212
                    $position++;
213
 
214
                    if(!empty($subitem['children']) && is_array($subitem['children'])) {
215
 
216
                        $position2 = 0;
217
                        foreach($subitem['children'] as $subitem2)
218
                        {
219
                            $this->recursiveSave($currentCompany, $jobDescriptionMapper, $jobDescription->id,  $subitem2, $position2);
220
                            $position2++;
221
                        }
222
 
223
                    }
224
 
225
 
226
                }
227
            }
228
        }
229
    }
230
 
231
 
232
    /**
233
     *
234
     * @param User $currentUser
235
     * @param Company $currentCompany
236
     * @param JobDescriptionMapper $jobDescriptionMapper
237
     * @param int $jobDescriptionIdBoss
238
     * @return array
239
     */
240
    private function recursiveLoad($currentUser, $currentCompany, $jobDescriptionMapper, $jobDescriptionIdBoss)
241
    {
242
        $acl            = $this->getEvent()->getViewModel()->getVariable('acl');
243
        $allowAdd       = $acl->isAllowed($currentUser->usertype_id, 'jobs-description/add') ? 1 : 0;
244
        $allowEdit      = $acl->isAllowed($currentUser->usertype_id, 'jobs-description/edit') ? 1 : 0;
245
        $allowDelete    = $acl->isAllowed($currentUser->usertype_id, 'jobs-description/delete') ? 1 : 0;
246
        $allowReport    = $acl->isAllowed($currentUser->usertype_id, 'jobs-description/report') ? 1 : 0;
247
 
248
 
249
        $items = [];
250
 
251
 
252
        if ($currentCompany) {
253
            $records = $jobDescriptionMapper->fetchAllByCompanyIdAndJobDescriptionIdBoss($currentCompany->id, $jobDescriptionIdBoss);
254
        } else {
255
            $records = $jobDescriptionMapper->fetchAllDefaultAndJobDescriptionIdBoss($jobDescriptionIdBoss);
256
        }
257
 
16778 efrain 258
 
259
 
260
 
16770 efrain 261
        foreach($records as $record)
262
        {
16778 efrain 263
 
264
 
265
 
16770 efrain 266
            array_push($items, [
267
                'uuid' => $record->uuid,
268
                'name' => $record->name,
269
                'children' => $this->recursiveLoad($currentUser, $currentCompany, $jobDescriptionMapper, $record->id),
270
                'status' => $record->status,
271
                'link_report' => $allowReport ? $this->url()->fromRoute('jobs-description/report', ['id' => $record->uuid]) : '',
272
                'link_edit' => $allowEdit ? $this->url()->fromRoute('jobs-description/edit', ['id' => $record->uuid]) : '',
273
                'link_delete' => $allowDelete ? $this->url()->fromRoute('jobs-description/delete', ['id' => $record->uuid]) : '',
274
                'link_add' => $allowAdd ? $this->url()->fromRoute('jobs-description/add', ['id' => $record->uuid]) : '',
275
            ]);
276
        }
277
 
278
        return $items;
279
    }
280
 
14203 stevensc 281
    public function addAction()
282
    {
16778 efrain 283
 
284
 
66 efrain 285
        $currentUserPlugin = $this->plugin('currentUserPlugin');
286
        $currentUser = $currentUserPlugin->getUser();
287
        $currentCompany = $currentUserPlugin->getCompany();
649 geraldo 288
 
66 efrain 289
        $request = $this->getRequest();
649 geraldo 290
 
291
 
292
        if ($request->isGet()) {
15444 efrain 293
            $behaviors = [];
294
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
15403 efrain 295
 
15444 efrain 296
 
297
            if($currentCompany) {
298
                $records = $behaviorMapper->fetchAllActiveByCompanyId($currentCompany->id);
299
            } else {
300
                $records = $behaviorMapper->fetchAllActiveByDefault();
301
            }
302
 
303
            $behaviorIds = [];
304
            foreach($records as $record)
305
            {
306
 
307
                $behaviorIds[ $record->id ] = $record->uuid;
308
 
309
                array_push($behaviors, [
310
                    'uuid' => $record->uuid,
311
                    'description' => $record->description
312
                ]);
313
            }
314
 
315
 
316
            $competencyTypes = [];
317
 
318
 
319
            $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
320
 
321
            if($currentCompany) {
322
                $records = $competencyTypeMapper->fetchAllActiveByCompanyId($currentCompany->id);
323
            } else {
324
                $records = $competencyTypeMapper->fetchAllActiveByDefault();
325
            }
326
 
327
 
328
            $competencyTypeIds = [];
329
            foreach($records as $record)
330
            {
331
                $competencyTypeIds[ $record->id ] =  $record->uuid;
332
 
333
 
334
                array_push($competencyTypes, [
335
                    'uuid' => $record->uuid,
336
                    'name' => $record->name,
337
                ]);
338
            }
339
 
340
            $competencyMapper = CompetencyMapper::getInstance($this->adapter);
341
            if($currentCompany) {
342
                $records = $competencyMapper->fetchAllActiveByCompanyId($currentCompany->id);
343
            } else {
344
                $records = $competencyMapper->fetchAllActiveByDefault();
345
            }
346
 
347
            $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
348
 
349
 
350
 
351
            $competencies = [];
352
 
353
            foreach($records as $record)
354
            {
355
                if(!isset($competencyTypeIds[ $record->competency_type_id ])) {
356
                    continue;
357
                }
358
 
359
                $behaviors_by_competency = [];
360
 
361
                $competencyBehaviors = $competencyBehaviorMapper->fetchAllByCompetencyId($record->id);
362
                foreach($competencyBehaviors as $competencyBehavior)
363
                {
364
                    if(!isset($behaviorIds[ $competencyBehavior->behavior_id ])) {
365
                        continue;
366
                    }
367
 
368
                    array_push($behaviors_by_competency, $behaviorIds[ $competencyBehavior->behavior_id ]);
369
                }
370
 
371
 
372
                if($behaviors_by_competency) {
373
                    array_push($competencies, [
374
                        'competency_type_uuid' => $competencyTypeIds[ $record->competency_type_id ],
375
                        'uuid' => $record->uuid,
376
                        'name' => $record->name,
377
                        'behaviors' => $behaviors_by_competency,
378
                    ]);
379
                }
380
 
381
 
382
            }
383
 
384
 
385
 
649 geraldo 386
 
387
 
15403 efrain 388
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
389
            if($currentCompany) {
390
                $records = $jobDescriptionMapper->fetchAllActiveByCompanyId($currentCompany->id);
391
            } else {
392
                $jobDescriptionMapper->fetchAllActiveByDefault();
856 geraldo 393
            }
15403 efrain 394
 
395
            $jobsDescription = [];
396
 
397
            foreach ($records as $record)
398
            {
399
                $jobsDescription[ $record->uuid ] = $record->name;
856 geraldo 400
            }
649 geraldo 401
 
402
 
66 efrain 403
            $data = [
649 geraldo 404
                'success' => true,
15403 efrain 405
                'data' => [
406
                    'jobs_description' => $jobsDescription,
15444 efrain 407
                    'behaviors' => $behaviors,
408
                    'competency_types' => $competencyTypes,
409
                    'competencies' => $competencies,
15403 efrain 410
                ]
66 efrain 411
            ];
649 geraldo 412
 
413
 
66 efrain 414
            return new JsonModel($data);
649 geraldo 415
        } else if ($request->isPost()) {
854 geraldo 416
            $form = new JobDescriptionForm($this->adapter, $currentCompany ? $currentCompany->id : null);
66 efrain 417
            $dataPost = $request->getPost()->toArray();
649 geraldo 418
 
419
 
66 efrain 420
            $form->setData($dataPost);
649 geraldo 421
 
422
            if ($form->isValid()) {
16770 efrain 423
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
15403 efrain 424
 
16770 efrain 425
                $position =  0;
426
                $job_description_boss_id = 0;
15403 efrain 427
 
16770 efrain 428
                $id = $this->params()->fromRoute('id');
429
                if($id) {
15403 efrain 430
 
16770 efrain 431
                    $jobDescriptionBoos = $jobDescriptionMapper->fetchOneByUuid($id);
432
                    if($jobDescriptionBoos && $jobDescriptionBoos->company_id == $currentCompany->id) {
433
                        $job_description_boss_id = $jobDescriptionBoos->id;
15030 efrain 434
 
16770 efrain 435
                        $position = $jobDescriptionMapper->fetchMaxPositionByJobDescriptionIdBoss($jobDescriptionBoos->id);
436
                   }
437
 
438
 
66 efrain 439
                }
15030 efrain 440
 
16770 efrain 441
 
442
                $dataPost = (array) $form->getData();
443
                $dataPost['status'] = empty($dataPost['status']) ? JobDescription::STATUS_INACTIVE : $dataPost['status'];
444
 
445
                $hydrator = new ObjectPropertyHydrator();
446
                $jobDescription = new JobDescription();
447
                $jobDescription->job_description_id_boss = $job_description_boss_id;
448
                $jobDescription->position = $position;
449
 
649 geraldo 450
                if ($currentCompany) {
847 geraldo 451
                    $jobDescription->company_id = $currentCompany ? $currentCompany->id : null;
66 efrain 452
                }
16770 efrain 453
 
454
                $hydrator->hydrate($dataPost, $jobDescription);
455
 
66 efrain 456
                $result = $jobDescriptionMapper->insert($jobDescription);
649 geraldo 457
 
1195 geraldo 458
                if ($result) {
15403 efrain 459
                    $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
460
                    $competencyMapper = CompetencyMapper::getInstance($this->adapter);
461
                    $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
462
 
463
 
464
                    $jobDescriptionCompetencyBehaviorMapper = JobDescriptionCompetencyBehaviorMapper::getInstance($this->adapter);
465
                    $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
466
 
467
                    $competencies_selected = isset($dataPost['competencies_selected']) ? $dataPost['competencies_selected'] : [];
468
                    foreach($competencies_selected as $competency_selected)
469
                    {
16770 efrain 470
 
15403 efrain 471
                        $competency_uuid = isset($competency_selected['competency_uuid']) ? $competency_selected['competency_uuid'] : '';
472
                        $competency = $competencyMapper->fetchOneByUuid($competency_uuid);
473
 
474
 
475
                        if($competency) {
476
                            if($currentCompany) {
477
                                $ok = $competency->company_id == $currentCompany->id;
478
                            } else {
479
                                $ok = empty($competency->company_id);
480
                            }
481
                        } else {
482
                            $ok = false;
483
                        }
484
 
485
                        if(!$ok) {
486
                            continue;
487
                        }
488
 
489
 
490
                        $behavior_uuid = isset($competency_selected['behavior_uuid']) ? $competency_selected['behavior_uuid'] : '';
491
                        $behavior = $behaviorMapper->fetchOneByUuid($behavior_uuid);
492
                        if($behavior) {
493
                            if($currentCompany) {
494
                                $ok = $behavior->company_id == $currentCompany->id;
495
                            } else {
496
                                $ok = empty($behavior->company_id);
497
                            }
498
 
499
 
500
                        } else {
501
                            $ok = false;
502
                        }
503
 
504
                        if($competency->company_id != $behavior->company_id) {
505
                            continue;
506
                        }
507
 
508
                        $competencyBehavior = $competencyBehaviorMapper->fetchOneByBehaviorIdAndCompetencyId($behavior->id, $competency->id);
509
                        if(!$competencyBehavior) {
510
                            continue;
511
                        }
512
 
513
                        $level = isset($competency_selected['level']) ? $competency_selected['level'] : 0;
514
                        $level = intval($level, 10);
515
 
516
 
517
                        $jobDescriptionCompetency =  $jobDescriptionCompetencyMapper->fetchOneByJobDescriptionIdAndCompetencyId($jobDescription->id, $competency->id);
518
                        if(!$jobDescriptionCompetency) {
66 efrain 519
                            $jobDescriptionCompetency = new JobDescriptionCompetency();
520
                            $jobDescriptionCompetency->competency_id = $competency->id;
521
                            $jobDescriptionCompetency->job_description_id = $jobDescription->id;
522
                            $jobDescriptionCompetencyMapper->insert($jobDescriptionCompetency);
15403 efrain 523
 
524
                        }
525
 
526
 
527
 
528
                        $jobDescriptionCompetencyBehavior = new JobDescriptionCompetencyBehavior();
529
                        $jobDescriptionCompetencyBehavior->job_description_id = $jobDescription->id;
530
                        $jobDescriptionCompetencyBehavior->competency_id = $competency->id;
531
                        $jobDescriptionCompetencyBehavior->behavior_id = $behavior->id;
532
                        $jobDescriptionCompetencyBehavior->level = $level;
533
                        $jobDescriptionCompetencyBehaviorMapper->insert($jobDescriptionCompetencyBehavior);
534
                    }
535
 
649 geraldo 536
 
66 efrain 537
                    $this->logger->info('Se agrego el cargo ' . $jobDescription->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
649 geraldo 538
 
66 efrain 539
                    $data = [
649 geraldo 540
                        'success' => true,
541
                        'data' => 'LABEL_RECORD_ADDED'
66 efrain 542
                    ];
543
                } else {
544
                    $data = [
649 geraldo 545
                        'success' => false,
546
                        'data' => $jobDescriptionMapper->getError()
66 efrain 547
                    ];
548
                }
649 geraldo 549
 
66 efrain 550
                return new JsonModel($data);
551
            } else {
552
                $messages = [];
553
                $form_messages = (array) $form->getMessages();
649 geraldo 554
                foreach ($form_messages as $fieldname => $field_messages) {
555
 
66 efrain 556
                    $messages[$fieldname] = array_values($field_messages);
557
                }
649 geraldo 558
 
66 efrain 559
                return new JsonModel([
649 geraldo 560
                    'success' => false,
561
                    'data' => $messages
66 efrain 562
                ]);
563
            }
564
        } else {
565
            $data = [
566
                'success' => false,
567
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
568
            ];
649 geraldo 569
 
66 efrain 570
            return new JsonModel($data);
571
        }
649 geraldo 572
 
66 efrain 573
        return new JsonModel($data);
574
    }
649 geraldo 575
 
14203 stevensc 576
    public function editAction()
577
    {
66 efrain 578
        $currentUserPlugin = $this->plugin('currentUserPlugin');
579
        $currentUser = $currentUserPlugin->getUser();
580
        $currentCompany = $currentUserPlugin->getCompany();
649 geraldo 581
 
66 efrain 582
        $request = $this->getRequest();
583
        $uuid = $this->params()->fromRoute('id');
584
 
649 geraldo 585
 
586
        if (!$uuid) {
66 efrain 587
            $data = [
649 geraldo 588
                'success' => false,
589
                'data' => 'ERROR_INVALID_PARAMETER'
66 efrain 590
            ];
649 geraldo 591
 
66 efrain 592
            return new JsonModel($data);
593
        }
594
 
595
        $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
596
        $jobDescription = $jobDescriptionMapper->fetchOneByUuid($uuid);
649 geraldo 597
        if (!$jobDescription) {
66 efrain 598
            $data = [
649 geraldo 599
                'success' => false,
600
                'data' => 'ERROR_RECORD_NOT_FOUND'
66 efrain 601
            ];
649 geraldo 602
 
66 efrain 603
            return new JsonModel($data);
604
        }
649 geraldo 605
 
851 geraldo 606
        if ($currentCompany && $jobDescription->company_id != $currentCompany->id) {
66 efrain 607
            $data = [
649 geraldo 608
                'success' => false,
609
                'data' => 'ERROR_UNAUTHORIZED'
66 efrain 610
            ];
649 geraldo 611
 
66 efrain 612
            return new JsonModel($data);
613
        }
614
 
649 geraldo 615
 
616
        if ($request->isPost()) {
847 geraldo 617
            $form = new JobDescriptionForm($this->adapter, $currentCompany ? $currentCompany->id : null, $jobDescription->id);
66 efrain 618
            $dataPost = $request->getPost()->toArray();
649 geraldo 619
 
620
 
66 efrain 621
            $form->setData($dataPost);
649 geraldo 622
 
623
            if ($form->isValid()) {
15403 efrain 624
 
625
 
626
 
66 efrain 627
                $dataPost = (array) $form->getData();
15403 efrain 628
 
629
                $hydrator = new ObjectPropertyHydrator();
630
                $hydrator->hydrate($dataPost, $jobDescription);
631
 
66 efrain 632
                $dataPost['status'] = $dataPost['status'] ? $dataPost['status'] : JobDescription::STATUS_INACTIVE;
15403 efrain 633
 
634
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
635
 
636
 
66 efrain 637
                $result = $jobDescriptionMapper->update($jobDescription);
649 geraldo 638
 
639
                if ($result) {
15403 efrain 640
                    $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
641
                    $competencyMapper = CompetencyMapper::getInstance($this->adapter);
642
                    $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
643
 
644
 
645
                    $jobDescriptionCompetencyBehaviorMapper = JobDescriptionCompetencyBehaviorMapper::getInstance($this->adapter);
646
                    $jobDescriptionCompetencyBehaviorMapper->deleteAllBJobDescriptionId($jobDescription->id);
647
 
1195 geraldo 648
                    $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
15403 efrain 649
                    $jobDescriptionCompetencyMapper->deleteAllBJobDescriptionId($jobDescription->id);
650
 
651
                    $competencies_selected = isset($dataPost['competencies_selected']) ? $dataPost['competencies_selected'] : [];
652
                    foreach($competencies_selected as $competency_selected)
653
                    {
654
                        $competency_uuid = isset($competency_selected['competency_uuid']) ? $competency_selected['competency_uuid'] : '';
655
                        $competency = $competencyMapper->fetchOneByUuid($competency_uuid);
656
 
657
 
658
                        if($competency) {
659
                            if($currentCompany) {
660
                                $ok = $competency->company_id == $currentCompany->id;
661
                            } else {
662
                                $ok = empty($competency->company_id);
663
                            }
664
                        } else {
665
                            $ok = false;
666
                        }
667
 
668
                        if(!$ok) {
669
                            continue;
670
                        }
671
 
672
 
673
                        $behavior_uuid = isset($competency_selected['behavior_uuid']) ? $competency_selected['behavior_uuid'] : '';
674
                        $behavior = $behaviorMapper->fetchOneByUuid($behavior_uuid);
675
                        if($behavior) {
676
                            if($currentCompany) {
677
                                $ok = $behavior->company_id == $currentCompany->id;
678
                            } else {
679
                                $ok = empty($behavior->company_id);
680
                            }
681
 
682
 
683
                        } else {
684
                            $ok = false;
685
                        }
686
 
687
                        if($competency->company_id != $behavior->company_id) {
688
                            continue;
689
                        }
690
 
691
                        $competencyBehavior = $competencyBehaviorMapper->fetchOneByBehaviorIdAndCompetencyId($behavior->id, $competency->id);
692
                        if(!$competencyBehavior) {
693
                            continue;
694
                        }
695
 
696
                        $level = isset($competency_selected['level']) ? $competency_selected['level'] : 0;
697
                        $level = intval($level, 10);
698
 
699
 
700
                        $jobDescriptionCompetency =  $jobDescriptionCompetencyMapper->fetchOneByJobDescriptionIdAndCompetencyId($jobDescription->id, $competency->id);
701
                        if(!$jobDescriptionCompetency) {
66 efrain 702
                            $jobDescriptionCompetency = new JobDescriptionCompetency();
703
                            $jobDescriptionCompetency->competency_id = $competency->id;
704
                            $jobDescriptionCompetency->job_description_id = $jobDescription->id;
705
                            $jobDescriptionCompetencyMapper->insert($jobDescriptionCompetency);
15403 efrain 706
 
66 efrain 707
                        }
15030 efrain 708
 
15403 efrain 709
 
710
 
711
                        $jobDescriptionCompetencyBehavior = new JobDescriptionCompetencyBehavior();
712
                        $jobDescriptionCompetencyBehavior->job_description_id = $jobDescription->id;
713
                        $jobDescriptionCompetencyBehavior->competency_id = $competency->id;
714
                        $jobDescriptionCompetencyBehavior->behavior_id = $behavior->id;
715
                        $jobDescriptionCompetencyBehavior->level = $level;
716
                        $jobDescriptionCompetencyBehaviorMapper->insert($jobDescriptionCompetencyBehavior);
66 efrain 717
                    }
15403 efrain 718
 
719
 
720
 
66 efrain 721
                    $this->logger->info('Se actualizo el cargo ' . $jobDescription->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
649 geraldo 722
 
66 efrain 723
                    $data = [
724
                        'success' => true,
725
                        'data' => 'LABEL_RECORD_UPDATED'
726
                    ];
727
                } else {
728
                    $data = [
649 geraldo 729
                        'success' => false,
730
                        'data' => $jobDescriptionMapper->getError()
66 efrain 731
                    ];
732
                }
649 geraldo 733
 
66 efrain 734
                return new JsonModel($data);
735
            } else {
736
                $messages = [];
737
                $form_messages = (array) $form->getMessages();
649 geraldo 738
                foreach ($form_messages as $fieldname => $field_messages) {
66 efrain 739
                    $messages[$fieldname] = array_values($field_messages);
740
                }
649 geraldo 741
 
66 efrain 742
                return new JsonModel([
649 geraldo 743
                    'success' => false,
744
                    'data' => $messages
66 efrain 745
                ]);
746
            }
747
        } else if ($request->isGet()) {
15444 efrain 748
            $behaviors = [];
749
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
750
 
751
 
752
            if($currentCompany) {
753
                $records = $behaviorMapper->fetchAllActiveByCompanyId($currentCompany->id);
754
            } else {
755
                $records = $behaviorMapper->fetchAllActiveByDefault();
756
            }
757
 
758
            $behaviorIds = [];
759
            foreach($records as $record)
760
            {
761
 
762
                $behaviorIds[ $record->id ] = $record->uuid;
763
 
764
                array_push($behaviors, [
765
                    'uuid' => $record->uuid,
766
                    'description' => $record->description
767
                ]);
768
            }
769
 
770
 
771
            $competencyTypes = [];
772
 
773
 
774
            $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
775
 
776
            if($currentCompany) {
777
                $records = $competencyTypeMapper->fetchAllActiveByCompanyId($currentCompany->id);
778
            } else {
779
                $records = $competencyTypeMapper->fetchAllActiveByDefault();
780
            }
781
 
782
 
783
            $competencyTypeIds = [];
784
            foreach($records as $record)
785
            {
786
                $competencyTypeIds[ $record->id ] =  $record->uuid;
787
 
788
 
789
                array_push($competencyTypes, [
790
                    'uuid' => $record->uuid,
791
                    'name' => $record->name,
792
                ]);
793
            }
794
 
795
            $competencyMapper = CompetencyMapper::getInstance($this->adapter);
796
            if($currentCompany) {
797
                $records = $competencyMapper->fetchAllActiveByCompanyId($currentCompany->id);
798
            } else {
799
                $records = $competencyMapper->fetchAllActiveByDefault();
800
            }
801
 
802
            $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
803
 
804
 
805
 
806
            $competencies = [];
807
 
808
            foreach($records as $record)
809
            {
810
                if(!isset($competencyTypeIds[ $record->competency_type_id ])) {
811
                    continue;
812
                }
813
 
814
                $behaviors_by_competency = [];
815
 
816
                $competencyBehaviors = $competencyBehaviorMapper->fetchAllByCompetencyId($record->id);
817
                foreach($competencyBehaviors as $competencyBehavior)
818
                {
819
                    if(!isset($behaviorIds[ $competencyBehavior->behavior_id ])) {
820
                        continue;
821
                    }
822
 
823
                    array_push($behaviors_by_competency, $behaviorIds[ $competencyBehavior->behavior_id ]);
824
                }
825
 
826
 
827
                if($behaviors_by_competency) {
828
                    array_push($competencies, [
829
                        'competency_type_uuid' => $competencyTypeIds[ $record->competency_type_id ],
830
                        'uuid' => $record->uuid,
831
                        'name' => $record->name,
832
                        'behaviors' => $behaviors_by_competency,
833
                    ]);
834
                }
835
 
836
 
837
            }
649 geraldo 838
 
15403 efrain 839
            $data = [
840
                'name' => $jobDescription->name,
841
                'functions' => $jobDescription->functions,
842
                'objectives' => $jobDescription->objectives,
843
                'status' => $jobDescription->status,
844
                'competencies_selected' => [],
15444 efrain 845
                'behaviors' => $behaviors,
846
                'competency_types' => $competencyTypes,
847
                'competencies' => $competencies,
15403 efrain 848
            ];
849
 
1320 efrain 850
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
66 efrain 851
            $competencyMapper = CompetencyMapper::getInstance($this->adapter);
15403 efrain 852
            $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
853
 
854
            $competencyTypes = [];
649 geraldo 855
 
15403 efrain 856
            $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
857
            $jobDescriptionCompetencyBehaviorMapper = JobDescriptionCompetencyBehaviorMapper::getInstance($this->adapter);
858
 
859
            $jobDescriptionCompetencies = $jobDescriptionCompetencyMapper->fetchAllByJobDescriptionId($jobDescription->id);
860
            foreach($jobDescriptionCompetencies as $jobDescriptionCompetency)
861
            {
862
                $competency = $competencyMapper->fetchOne($jobDescriptionCompetency->competency_id);
863
                if(!$competency) {
864
                    continue;
865
                }
866
 
867
                if(isset($competencyTypes[$competency->competency_type_id])) {
868
                    $competencyType = $competencyTypes[$competency->competency_type_id];
869
                } else {
870
 
871
                    $competencyType = $competencyTypeMapper->fetchOne($competency->competency_type_id);
872
                    if(!$competencyType) {
873
                        continue;
1154 geraldo 874
                    }
15403 efrain 875
 
876
                    $competencyTypes[$competency->competency_type_id] = $competencyType;
877
                }
878
 
879
                $competency_selected = [
880
                    'uuid' => $competency->uuid,
881
                    'competency_type_uuid' => $competencyType->uuid,
882
                    'behaviors' => []
883
                ];
884
 
15444 efrain 885
 
15403 efrain 886
 
15444 efrain 887
                foreach($competencies as $record_competency)
15403 efrain 888
                {
15444 efrain 889
                    if($record_competency['uuid'] == $competency->uuid) {
890
 
891
                        foreach($record_competency['behaviors'] as $uuid_behavior)
892
                        {
1154 geraldo 893
 
15444 efrain 894
 
895
                            $behavior = $behaviorMapper->fetchOneByUuid($uuid_behavior);
896
                            if($behavior) {
897
 
898
                                $jobDescriptionCompetencyBehavior = $jobDescriptionCompetencyBehaviorMapper->fetchOneByJobDescriptionIdAndCompetencyIdAndBehaviorId($jobDescription->id, $competency->id, $behavior->id);
899
                                if($jobDescriptionCompetencyBehavior) {
900
                                    $level = $jobDescriptionCompetencyBehavior->level;
901
                                } else {
902
                                    $level = 0;
903
                                }
904
 
905
                                array_push($competency_selected['behaviors'], ['uuid' => $behavior->uuid, 'level' => $level]);
906
                            }
907
                        }
908
 
1197 geraldo 909
                    }
15403 efrain 910
 
15444 efrain 911
 
66 efrain 912
                }
15403 efrain 913
 
15444 efrain 914
 
915
 
15403 efrain 916
                array_push($data['competencies_selected'], $competency_selected);
917
 
918
 
919
 
66 efrain 920
            }
921
 
922
            $response = [
923
                'success' => true,
924
                'data' => $data
925
            ];
649 geraldo 926
 
66 efrain 927
            return new JsonModel($response);
928
        } else {
929
            $data = [
930
                'success' => false,
931
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
932
            ];
649 geraldo 933
 
66 efrain 934
            return new JsonModel($data);
935
        }
649 geraldo 936
 
66 efrain 937
        return new JsonModel($data);
938
    }
649 geraldo 939
 
14203 stevensc 940
    public function deleteAction()
941
    {
66 efrain 942
        $currentUserPlugin = $this->plugin('currentUserPlugin');
943
        $currentUser = $currentUserPlugin->getUser();
944
        $currentCompany = $currentUserPlugin->getCompany();
649 geraldo 945
 
66 efrain 946
        $request = $this->getRequest();
947
        $uuid = $this->params()->fromRoute('id');
649 geraldo 948
 
949
        if (!$uuid) {
66 efrain 950
            $data = [
649 geraldo 951
                'success' => false,
952
                'data' => 'ERROR_INVALID_PARAMETER'
66 efrain 953
            ];
649 geraldo 954
 
66 efrain 955
            return new JsonModel($data);
956
        }
649 geraldo 957
 
958
 
66 efrain 959
        $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
960
        $jobDescription = $jobDescriptionMapper->fetchOneByUuid($uuid);
649 geraldo 961
        if (!$jobDescription) {
66 efrain 962
            $data = [
649 geraldo 963
                'success' => false,
964
                'data' => 'ERROR_RECORD_NOT_FOUND'
66 efrain 965
            ];
649 geraldo 966
 
66 efrain 967
            return new JsonModel($data);
968
        }
649 geraldo 969
 
851 geraldo 970
        if ($currentCompany && $jobDescription->company_id != $currentCompany->id) {
66 efrain 971
            $data = [
649 geraldo 972
                'success' => false,
973
                'data' => 'ERROR_UNAUTHORIZED'
66 efrain 974
            ];
649 geraldo 975
 
66 efrain 976
            return new JsonModel($data);
977
        }
978
 
649 geraldo 979
 
980
        if ($request->isPost()) {
16770 efrain 981
            $jobDescriptionMapper->removeAllJobDescriptionIdBossByJobDescripcionId($jobDescription->id);
982
 
983
 
66 efrain 984
            $result = $jobDescriptionMapper->delete($jobDescription);
649 geraldo 985
            if ($result) {
66 efrain 986
                $this->logger->info('Se borro el cargo de trabajo ' . $jobDescription->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
649 geraldo 987
 
66 efrain 988
                $data = [
989
                    'success' => true,
990
                    'data' => 'LABEL_RECORD_DELETED'
991
                ];
992
            } else {
993
 
994
                $data = [
649 geraldo 995
                    'success' => false,
996
                    'data' => $jobDescriptionMapper->getError()
66 efrain 997
                ];
998
 
999
                return new JsonModel($data);
1000
            }
1001
        } else {
1002
            $data = [
1003
                'success' => false,
1004
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1005
            ];
649 geraldo 1006
 
66 efrain 1007
            return new JsonModel($data);
1008
        }
649 geraldo 1009
 
66 efrain 1010
        return new JsonModel($data);
1011
    }
561 geraldo 1012
 
14203 stevensc 1013
    public function importAction()
1014
    {
850 geraldo 1015
 
852 geraldo 1016
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1017
        $currentUser = $currentUserPlugin->getUser();
1018
        $currentCompany = $currentUserPlugin->getCompany();
854 geraldo 1019
 
1020
        if (!$currentCompany) {
852 geraldo 1021
            $data = [
1022
                'success' => false,
1023
                'data' => 'ERROR_UNAUTHORIZED'
1024
            ];
854 geraldo 1025
 
852 geraldo 1026
            return new JsonModel($data);
1027
        }
854 geraldo 1028
 
852 geraldo 1029
        $request = $this->getRequest();
854 geraldo 1030
 
1031
        if ($request->isPost()) {
1032
 
852 geraldo 1033
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
1034
            $jobDescriptionsDefault = $jobDescriptionMapper->fetchAllByDefault();
854 geraldo 1035
 
852 geraldo 1036
            $new_records = 0;
854 geraldo 1037
            foreach ($jobDescriptionsDefault as $jobDescriptionDefault) {
1038
                if ($jobDescriptionDefault->status == JobDescription::STATUS_INACTIVE) {
852 geraldo 1039
                    continue;
1040
                }
854 geraldo 1041
 
852 geraldo 1042
                $jobDescription = $jobDescriptionMapper->fetchOneByCompanyId($currentCompany->id, $jobDescriptionDefault->id);
854 geraldo 1043
                if (!$jobDescription) {
1044
 
852 geraldo 1045
                    $jobDescription = new JobDescription();
1046
                    $jobDescription->company_id = $currentCompany->id;
1047
                    $jobDescription->job_description_id_default = $jobDescriptionDefault->id;
1048
                    $jobDescription->name = $jobDescriptionDefault->name;
1049
                    $jobDescription->functions = $jobDescriptionDefault->functions;
1050
                    $jobDescription->objectives = $jobDescriptionDefault->objectives;
1051
                    $jobDescription->status = JobDescription::STATUS_ACTIVE;
854 geraldo 1052
 
858 geraldo 1053
                    $result = $jobDescriptionMapper->insert($jobDescription);
854 geraldo 1054
 
858 geraldo 1055
                    if ($result) {
1056
 
1057
                        //Add Competencies
955 geraldo 1058
                        $competenceMapper = CompetencyMapper::getInstance($this->adapter);
858 geraldo 1059
                        $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
953 geraldo 1060
                        $jobDescriptionCompetencies = $jobDescriptionCompetencyMapper->fetchByJobDescriptionId($jobDescriptionDefault->id);
939 geraldo 1061
 
953 geraldo 1062
                        if (count($jobDescriptionCompetencies) != 0) {
1063
                            foreach ($jobDescriptionCompetencies as $record) {
955 geraldo 1064
 
1065
                                $competence = $competenceMapper->fetchOneByCompanyIdAndCompetencyIdDefault($currentCompany->id, $record->competency_id);
956 geraldo 1066
                                if ($competence) {
1067
                                    $newDescriptionCompetency = new JobDescriptionCompetency();
1068
                                    $newDescriptionCompetency->competency_id = $competence->id;
1069
                                    $newDescriptionCompetency->job_description_id = $jobDescription->id;
1070
                                    $newDescriptionCompetency->level = $record->level;
1071
                                    $jobDescriptionCompetencyMapper->insert($newDescriptionCompetency);
955 geraldo 1072
                                }
858 geraldo 1073
                            }
1074
                        }
1075
 
852 geraldo 1076
                        $new_records++;
1077
                    } else {
1078
                        $data = [
1079
                            'success' => false,
1080
                            'data' => 'ERROR_CANT_ADD_JOB_DESCRIPTION'
1081
                        ];
854 geraldo 1082
 
852 geraldo 1083
                        return new JsonModel($data);
1084
                    }
1085
                }
1086
            }
854 geraldo 1087
 
1088
            if ($new_records) {
1089
 
1090
                if (1 == $new_records) {
852 geraldo 1091
                    $data = [
1092
                        'success' => true,
1093
                        'data' => 'LABEL_1_JOB_DESCRIPTION_IMPORTED'
1094
                    ];
854 geraldo 1095
 
852 geraldo 1096
                    return new JsonModel($data);
1097
                } else {
1098
                    $data = [
1099
                        'success' => true,
854 geraldo 1100
                        'data' => $new_records . ' LABEL_MULTI_JOB_DESCRIPTION_IMPORTED'
852 geraldo 1101
                    ];
854 geraldo 1102
 
852 geraldo 1103
                    return new JsonModel($data);
1104
                }
1105
            } else {
1106
                $data = [
1107
                    'success' => true,
1108
                    'data' => 'LABEL_NO_JOB_DESCRIPTION_IMPORTED'
1109
                ];
854 geraldo 1110
 
852 geraldo 1111
                return new JsonModel($data);
1112
            }
1113
        } else {
1114
            $data = [
1115
                'success' => false,
1116
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1117
            ];
854 geraldo 1118
 
852 geraldo 1119
            return new JsonModel($data);
1120
        }
854 geraldo 1121
 
852 geraldo 1122
        return new JsonModel($data);
850 geraldo 1123
    }
1124
 
14203 stevensc 1125
    public function reportAction()
1126
    {
561 geraldo 1127
        $currentUserPlugin = $this->plugin('currentUserPlugin');
1128
        $currentUser = $currentUserPlugin->getUser();
1129
        $currentCompany = $currentUserPlugin->getCompany();
649 geraldo 1130
 
561 geraldo 1131
        $request = $this->getRequest();
1132
        $uuid = $this->params()->fromRoute('id');
1133
 
649 geraldo 1134
 
1135
        if (!$uuid) {
561 geraldo 1136
            $data = [
649 geraldo 1137
                'success' => false,
1138
                'data' => 'ERROR_INVALID_PARAMETER'
561 geraldo 1139
            ];
649 geraldo 1140
 
561 geraldo 1141
            return new JsonModel($data);
1142
        }
1143
 
1144
        $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
1145
        $jobDescription = $jobDescriptionMapper->fetchOneByUuid($uuid);
649 geraldo 1146
        if (!$jobDescription) {
561 geraldo 1147
            $data = [
649 geraldo 1148
                'success' => false,
1149
                'data' => 'ERROR_RECORD_NOT_FOUND'
561 geraldo 1150
            ];
649 geraldo 1151
 
561 geraldo 1152
            return new JsonModel($data);
1153
        }
649 geraldo 1154
 
851 geraldo 1155
        if ($currentCompany && $jobDescription->company_id != $currentCompany->id) {
561 geraldo 1156
            $data = [
649 geraldo 1157
                'success' => false,
1158
                'data' => 'ERROR_UNAUTHORIZED'
561 geraldo 1159
            ];
649 geraldo 1160
 
561 geraldo 1161
            return new JsonModel($data);
1162
        }
1163
 
649 geraldo 1164
 
561 geraldo 1165
        if ($request->isGet()) {
1166
 
15444 efrain 1167
 
16770 efrain 1168
            /*
15403 efrain 1169
            $filename = Functions::normalizeStringFilename($jobDescription->name . '-' . date('Y-m-d H:i a') . '.pdf');
1213 geraldo 1170
 
15403 efrain 1171
 
15444 efrain 1172
 
1173
 
15403 efrain 1174
            $content = base64_encode($this->renderPdf($currentCompany, $jobDescription));
15444 efrain 1175
            $data = [
1176
                'success' => true,
1177
                'data' => [
1178
                    'basename' => $filename,
1179
                    'content' => $content
1180
                ]
1181
            ];
15403 efrain 1182
 
16770 efrain 1183
            return new JsonModel($data);*/
15444 efrain 1184
 
16770 efrain 1185
 
15444 efrain 1186
 
1187
            $content = $this->renderPdf($currentCompany, $jobDescription);
15403 efrain 1188
            $response = new Response();
1189
            $response->setStatusCode(200);
1190
            $response->setContent($content);
16770 efrain 1191
 
15403 efrain 1192
            $headers = $response->getHeaders();
1193
            $headers->clearHeaders();
1194
 
1195
            $headers->addHeaderLine('Content-Description: File Transfer');
1196
            $headers->addHeaderLine('Content-Type: application/pdf');
1197
            //$headers->addHeaderLine('Content-Disposition: attachment; filename=' . $filename);
1198
            $headers->addHeaderLine('Content-Transfer-Encoding: binary');
1199
            $headers->addHeaderLine('Expires: 0');
1200
            $headers->addHeaderLine('Cache-Control: must-revalidate');
1201
            $headers->addHeaderLine('Pragma: public');
1202
            return $response;
16770 efrain 1203
 
15403 efrain 1204
 
15444 efrain 1205
 
15403 efrain 1206
 
1207
 
561 geraldo 1208
        } else {
1209
            $data = [
1210
                'success' => false,
1211
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1212
            ];
649 geraldo 1213
 
561 geraldo 1214
            return new JsonModel($data);
1215
        }
649 geraldo 1216
 
561 geraldo 1217
        return new JsonModel($data);
1218
    }
15403 efrain 1219
 
1220
 
842 geraldo 1221
 
15403 efrain 1222
 
1223
 
788 geraldo 1224
    /**
1225
     * Render PDF
15079 efrain 1226
     * @param Company $company;
1336 efrain 1227
     * @param JobDescription $jobDescription
1228
     * @return mixed
788 geraldo 1229
     */
15403 efrain 1230
    private function renderPDF($company, $jobDescription)
14203 stevensc 1231
    {
561 geraldo 1232
 
1233
        //Generate New PDF
15403 efrain 1234
        $pdf = new JobDescriptionPdf();
1235
        $pdf->SetTitle($jobDescription->name);
842 geraldo 1236
 
15079 efrain 1237
 
1238
        $target_path = $this->config['leaderslinked.fullpath.company'] . DIRECTORY_SEPARATOR . $company->uuid;
1239
 
1240
        $header = $company->header ? $target_path . DIRECTORY_SEPARATOR . $company->header : '';
1241
        if(empty($header) || !file_exists($header)) {
1242
            $header = $this->config['leaderslinked.images_default.company_pdf_header'];
1243
        }
1244
 
1245
        $footer = $company->footer ? $target_path . DIRECTORY_SEPARATOR . $company->footer : '';
1246
        if(empty($footer) || !file_exists($footer)) {
1247
            $footer = $this->config['leaderslinked.images_default.company_pdf_footer'];
1248
        }
1249
 
1250
        $pdf->header = $header;
1251
        $pdf->footer = $footer;
15403 efrain 1252
        $pdf->translator = $this->translator;
842 geraldo 1253
 
561 geraldo 1254
 
927 geraldo 1255
        $pdf->SetMargins(10, 0, 10);
714 geraldo 1256
 
561 geraldo 1257
        $pdf->AliasNbPages();
1258
        $pdf->AddPage();
564 geraldo 1259
 
697 geraldo 1260
        // Add Title
1261
        $pdf->customHeader();
654 geraldo 1262
 
649 geraldo 1263
        // Job Description Name
654 geraldo 1264
 
649 geraldo 1265
        $job_descrition[] = array(
15403 efrain 1266
            'title' => $this->translator->translate('LABEL_PDF_JOB_DESCRIPTION_LABORAL_CATEGORY') .  ' : ' ,
709 geraldo 1267
            'content' => ' ' . $jobDescription->name
649 geraldo 1268
        );
654 geraldo 1269
 
649 geraldo 1270
 
15403 efrain 1271
        $pdf->borderTable($this->translator->translate('LABEL_PDF_JOB_TITLE_NAME') . ' : ', $job_descrition);
649 geraldo 1272
 
15403 efrain 1273
 
654 geraldo 1274
        //Hierarchical Relationship
1275
 
650 geraldo 1276
        $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
16770 efrain 1277
 
714 geraldo 1278
        $subordinate = '';
16770 efrain 1279
 
1280
        if($jobDescription->company_id) {
1281
            $jobDescriptionSubordinates = $jobDescriptionMapper->fetchAllByCompanyIdAndJobDescriptionIdBoss($jobDescription->company_id,$jobDescription->id);
1282
        } else {
1283
            $jobDescriptionSubordinates = $jobDescriptionMapper->fetchAllDefaultAndJobDescriptionIdBoss($jobDescription->id);
1284
        }
1285
 
1286
        if ($jobDescriptionSubordinates) {
1287
            foreach ($jobDescriptionSubordinates as $jobDescriptionSubordinate) {
1288
                $subordinate .= $jobDescriptionSubordinate->name . ' ';
717 geraldo 1289
            }
1290
        }
714 geraldo 1291
 
649 geraldo 1292
        $jobDescriptionBoss = $jobDescriptionMapper->fetchOne($jobDescription->job_description_id_boss);
1293
 
654 geraldo 1294
        $relationship = [
15403 efrain 1295
            [
1296
                'title' => $this->translator->translate('LABEL_PDF_JOB_SUPERVISES') . ': ',
726 geraldo 1297
                'content' => $subordinate ? ' ' . $subordinate : ' No aplica'
15403 efrain 1298
            ],
1299
            [
1300
                'title' => $this->translator->translate('LABEL_PDF_JOB_SUPERVISED_BY') . ': ',
1301
                'content' => $jobDescriptionBoss ? ' ' . $jobDescriptionBoss->name : ' ' .  $this->translator->translate('LABEL_PDF_JOB_DOES_NOT_APPLY'),
1302
            ]
654 geraldo 1303
        ];
579 geraldo 1304
 
15403 efrain 1305
        $pdf->borderTable($this->translator->translate('LABEL_PDF_JOB_HIERARCHICAL_RELATIONSHIP') . ' : ', $relationship);
628 geraldo 1306
 
654 geraldo 1307
        // Objetives
628 geraldo 1308
 
1259 geraldo 1309
        $objetives[] = array('content' => strip_tags($jobDescription->objectives));
15403 efrain 1310
        $pdf->borderTable($this->translator->translate('LABEL_PDF_JOB_OBJECTIVES') . ' : ', $objetives);
653 geraldo 1311
 
654 geraldo 1312
        // Functions
628 geraldo 1313
 
1259 geraldo 1314
        $functions[] = array('content' => strip_tags($jobDescription->functions));
15403 efrain 1315
        $pdf->borderTable($this->translator->translate('LABEL_PDF_JOB_PRINCIPAL_FUNCTIONS') . ' : ', $functions);
628 geraldo 1316
 
749 geraldo 1317
        // add section signature
709 geraldo 1318
        $pdf->sectionSignature();
1319
 
654 geraldo 1320
        //Competencies
628 geraldo 1321
 
658 geraldo 1322
        $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
15444 efrain 1323
        $jobDescriptionCompetencies = $jobDescriptionCompetencyMapper->fetchAllByJobDescriptionId($jobDescription->id);
649 geraldo 1324
 
672 geraldo 1325
        $competencyMapper = CompetencyMapper::getInstance($this->adapter);
933 geraldo 1326
        $competenceTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
15030 efrain 1327
        $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
15403 efrain 1328
        $jobDescriptionCompetencyBehaviorMapper = JobDescriptionCompetencyBehaviorMapper::getInstance($this->adapter);
1320 efrain 1329
        $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
842 geraldo 1330
 
939 geraldo 1331
 
15444 efrain 1332
        $max = count($jobDescriptionCompetencies);
672 geraldo 1333
 
15444 efrain 1334
        if ($max) {
842 geraldo 1335
 
748 geraldo 1336
            // add new page
842 geraldo 1337
 
748 geraldo 1338
            $pdf->AddPage();
679 geraldo 1339
 
745 geraldo 1340
            $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 1341
 
745 geraldo 1342
            $pdf->singleTable('Competencias requeridas para el cargo:', $competencies_header);
709 geraldo 1343
 
745 geraldo 1344
 
1345
            // Add scale section
15444 efrain 1346
           // $pdf->sectionScale();
745 geraldo 1347
 
1348
 
15444 efrain 1349
            for ($i = 0; $i < $max; $i++)  {
745 geraldo 1350
 
15444 efrain 1351
                $record = $jobDescriptionCompetencies[$i];
1352
 
15030 efrain 1353
                $behaviorCompetencies = $competencyBehaviorMapper->fetchAllByCompetencyId($record->competency_id);
1213 geraldo 1354
                $behaviors = [];
1355
 
1356
                foreach ($behaviorCompetencies as $rows) {
1357
 
1358
                    $behavior = $behaviorMapper->fetchOne($rows->behavior_id);
15444 efrain 1359
                    if ($behavior) {
1360
                        $jobDescriptionCompetencyBehavior = $jobDescriptionCompetencyBehaviorMapper->fetchOneByJobDescriptionIdAndCompetencyIdAndBehaviorId($jobDescription->id, $record->competency_id, $rows->behavior_id);
1361
                        if($jobDescriptionCompetencyBehavior) {
1362
                            $level = $jobDescriptionCompetencyBehavior->level;
1363
                        } else {
1364
                            $level = 0;
1365
                        }
1213 geraldo 1366
 
1367
                        array_push($behaviors, [
1368
                            'description' => $behavior->description,
15444 efrain 1369
                            'level' => $level
1213 geraldo 1370
                        ]);
1371
                    }
1372
                }
1373
 
745 geraldo 1374
                $competency = $competencyMapper->fetchOne($record->competency_id);
933 geraldo 1375
                $competenceType = $competenceTypeMapper->fetchOne($competency->competency_type_id);
745 geraldo 1376
 
15444 efrain 1377
                $j = $i + 1;
1378
                $last = $j == $max;
1379
 
1380
                $pdf->competencyTable($j, $competenceType, $competency, $behaviors, $last);
1381
 
1382
                if(!$last) {
1383
                    $y = $pdf->getY();
1384
                    if($y >= JobDescriptionPdf::MAX_Y_ADD_PAGE) {
1385
                        $this->addPage();
1386
                    }
1387
                }
933 geraldo 1388
 
709 geraldo 1389
            }
669 geraldo 1390
        }
15403 efrain 1391
 
1392
        /*
1393
 
1394
        $temp_file = tempnam(sys_get_temp_dir(), 'job-description');
1395
        $pdf->Output('F', $temp_file);
658 geraldo 1396
 
15403 efrain 1397
        return $temp_file;*/
1398
 
15444 efrain 1399
 
1400
 
15403 efrain 1401
        return $pdf->Output('S');
561 geraldo 1402
    }
15079 efrain 1403
 
15403 efrain 1404
 
1405
 
15079 efrain 1406
 
66 efrain 1407
}