Proyectos de Subversion LeadersLinked - Backend

Rev

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