Proyectos de Subversion LeadersLinked - Backend

Rev

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