Proyectos de Subversion LeadersLinked - Backend

Rev

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