Proyectos de Subversion LeadersLinked - Backend

Rev

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