Proyectos de Subversion LeadersLinked - Backend

Rev

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