Proyectos de Subversion LeadersLinked - Backend

Rev

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