Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 645 | Rev 649 | 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
2
declare(strict_types=1);
3
 
4
namespace LeadersLinked\Controller;
5
 
6
use Laminas\Db\Adapter\AdapterInterface;
7
use Laminas\Cache\Storage\Adapter\AbstractAdapter;
8
use Laminas\Mvc\Controller\AbstractActionController;
9
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
10
use Laminas\Log\LoggerInterface;
11
use Laminas\View\Model\ViewModel;
12
use Laminas\View\Model\JsonModel;
13
use LeadersLinked\Library\Functions;
14
use LeadersLinked\Mapper\JobDescriptionMapper;
15
use LeadersLinked\Mapper\CompetencyTypeMapper;
16
use LeadersLinked\Model\JobDescription;
17
use LeadersLinked\Form\JobDescriptionForm;
18
use LeadersLinked\Mapper\CompetencyMapper;
567 geraldo 19
use LeadersLinked\Library\JobPDF;
66 efrain 20
use LeadersLinked\Mapper\JobDescriptionCompetencyMapper;
21
use LeadersLinked\Mapper\JobDescriptionSubordinateMapper;
22
use LeadersLinked\Model\JobDescriptionCompetency;
23
use LeadersLinked\Model\JobDescriptionSubordinate;
24
 
25
 
26
class JobDescriptionController extends AbstractActionController
27
{
28
    /**
29
     *
30
     * @var AdapterInterface
31
     */
32
    private $adapter;
33
 
34
 
35
    /**
36
     *
37
     * @var AbstractAdapter
38
     */
39
    private $cache;
40
 
41
    /**
42
     *
43
     * @var  LoggerInterface
44
     */
45
    private $logger;
46
 
47
 
48
    /**
49
     *
50
     * @var array
51
     */
52
    private $config;
53
 
54
 
55
    /**
56
     *
57
     * @param AdapterInterface $adapter
58
     * @param AbstractAdapter $cache
59
     * @param LoggerInterface $logger
60
     * @param array $config
61
     */
62
    public function __construct($adapter, $cache , $logger, $config)
63
    {
64
        $this->adapter      = $adapter;
65
        $this->cache        = $cache;
66
        $this->logger       = $logger;
67
        $this->config       = $config;
68
 
69
    }
70
 
71
    public function indexAction()
72
    {
73
        $currentUserPlugin = $this->plugin('currentUserPlugin');
74
        $currentUser = $currentUserPlugin->getUser();
75
        $currentCompany = $currentUserPlugin->getCompany();
76
 
77
        $request = $this->getRequest();
78
 
79
        $headers  = $request->getHeaders();
80
 
81
        $request = $this->getRequest();
82
        if($request->isGet()) {
83
 
84
 
85
            $headers  = $request->getHeaders();
86
 
87
            $isJson = false;
88
            if($headers->has('Accept')) {
89
                $accept = $headers->get('Accept');
90
 
91
                $prioritized = $accept->getPrioritized();
92
 
93
                foreach($prioritized as $key => $value) {
94
                    $raw = trim($value->getRaw());
95
 
96
                    if(!$isJson) {
97
                        $isJson = strpos($raw, 'json');
98
                    }
99
 
100
                }
101
            }
102
 
103
            if($isJson) {
104
                $search = $this->params()->fromQuery('search', []);
105
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
106
 
107
                $page               = intval($this->params()->fromQuery('start', 1), 10);
108
                $records_x_page     = intval($this->params()->fromQuery('length', 10), 10);
109
                $order =  $this->params()->fromQuery('order', []);
110
                $order_field        = empty($order[0]['column']) ? 99 :  intval($order[0]['column'], 10);
111
                $order_direction    = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var( $order[0]['dir'], FILTER_SANITIZE_STRING));
112
 
113
                $fields =  ['name'];
114
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
115
 
116
                if(!in_array($order_direction, ['ASC', 'DESC'])) {
117
                    $order_direction = 'ASC';
118
                }
119
 
120
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
121
                $paginator = $jobDescriptionMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);
122
 
123
                $items = [];
124
                $records = $paginator->getCurrentItems();
125
                foreach($records as $record)
126
                {
127
 
128
 
129
 
130
                    $item = [
131
                        'name' => $record->name,
132
                        'status' => $record->status,
133
                        'actions' => [
561 geraldo 134
                            'link_report'=> $this->url()->fromRoute('settings/jobs-description/report', ['id' => $record->uuid ]),
66 efrain 135
                            'link_edit' => $this->url()->fromRoute('settings/jobs-description/edit', ['id' => $record->uuid ]),
136
                            'link_delete' => $this->url()->fromRoute('settings/jobs-description/delete', ['id' => $record->uuid  ])
137
                        ]
138
                    ];
139
 
140
                    array_push($items, $item);
141
                }
142
 
143
                return new JsonModel([
144
                    'success' => true,
145
                    'data' => [
146
                        'items' => $items,
147
                        'total' => $paginator->getTotalItemCount(),
148
                    ]
149
                ]);
150
 
151
 
152
            } else  {
153
                $form = new JobDescriptionForm($this->adapter, $currentCompany->id);
154
 
155
                $this->layout()->setTemplate('layout/layout-backend');
156
                $viewModel = new ViewModel();
157
                $viewModel->setTemplate('leaders-linked/jobs-description/index.phtml');
158
                $viewModel->setVariable('form', $form);
159
                return $viewModel ;
160
            }
161
 
162
        } else {
163
            return new JsonModel([
164
                'success' => false,
165
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
166
            ]);;
167
        }
168
    }
169
 
170
    public function addAction()
171
    {
172
        $currentUserPlugin = $this->plugin('currentUserPlugin');
173
        $currentUser = $currentUserPlugin->getUser();
174
        $currentCompany = $currentUserPlugin->getCompany();
175
 
176
        $request = $this->getRequest();
177
 
178
 
179
        if($request->isGet()) {
180
 
181
            $data = [
182
               'competency_types' => [],
183
               'competencies' => [],
184
               'jobs_description' => [],
185
            ];
186
 
187
            $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
188
            $records = $competencyTypeMapper->fetchAllByCompanyId($currentCompany->id);
189
 
190
            $competencyTypesUUID = [];
191
            foreach($records as $record)
192
            {
193
                array_push($data['competency_types'], [
194
                    'competency_type_id' => $record->uuid,
195
                    'name' => $record->name,
196
                ]);
197
 
198
                $competencyTypesUUID[$record->id] = $record->uuid;
199
            }
200
 
201
 
202
 
203
            $competencyMapper = CompetencyMapper::getInstance($this->adapter);
204
            $records = $competencyMapper->fetchAllActiveByCompanyId($currentCompany->id);
205
 
206
 
207
            foreach($records as $record)
208
            {
209
                if(isset($competencyTypesUUID[$record->competency_type_id])) {
210
 
211
                    array_push($data['competencies'], [
212
                        'competency_type_id' => $competencyTypesUUID[$record->competency_type_id],
213
                        'competency_id' => $record->uuid,
214
                        'name' => $record->name,
215
                    ]);
216
                }
217
            }
218
 
219
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
220
            $records = $jobDescriptionMapper->fetchAllActiveByCompanyId($currentCompany->id);
221
 
222
            foreach($records as $record)
223
            {
224
                array_push($data['jobs_description'], [
225
                    'job_description_id' => $record->uuid,
226
                    'name' => $record->name
227
                ]);
228
            }
229
 
230
 
231
            $data = [
232
                'success'   => true,
233
                'data'      => $data,
234
            ];
235
 
236
 
237
            return new JsonModel($data);
238
 
239
 
240
        } else  if($request->isPost()) {
241
            $form = new  JobDescriptionForm($this->adapter, $currentCompany->id);
242
            $dataPost = $request->getPost()->toArray();
243
 
244
 
245
 
246
 
247
 
248
            $form->setData($dataPost);
249
 
250
            if($form->isValid()) {
251
                $dataPost = (array) $form->getData();
252
                $dataPost['status'] = $dataPost['status'] ? $dataPost['status'] : JobDescription::STATUS_INACTIVE;
253
 
254
 
255
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
256
 
257
                if(!empty($dataPost['job_description_id_boss'])) {
258
 
259
                    $jobDescriptionBoss = $jobDescriptionMapper->fetchOneByUuid($dataPost['job_description_id_boss']);
260
                    if($jobDescriptionBoss) {
261
                        if($jobDescriptionBoss->company_id == $currentCompany->id) {
262
                            $dataPost['job_description_id_boss'] = $jobDescriptionBoss->id;
263
                        } else {
264
                            $dataPost['job_description_id_boss'] = null;
265
                        }
266
                    } else {
267
                        $dataPost['job_description_id_boss'] = null;
268
                    }
269
                }
270
 
271
 
272
 
273
                $hydrator = new ObjectPropertyHydrator();
274
                $jobDescription = new JobDescription();
275
 
276
                $hydrator->hydrate($dataPost, $jobDescription);
277
 
278
                if($currentCompany) {
279
                    $jobDescription->company_id = $currentCompany->id;
280
                }
281
 
282
 
283
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
284
                $result = $jobDescriptionMapper->insert($jobDescription);
285
 
286
 
287
                if($result) {
288
                    $jobDescriptionSubordinateMapper = JobDescriptionSubordinateMapper::getInstance($this->adapter);
289
                    $jobDescriptionSubordinateMapper->deleteAllByJobDescriptionIdTopLevel($jobDescription->id);
290
 
291
                    $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
292
                    $jobDescriptionCompetencyMapper->deleteAllBJobDescriptionId($jobDescription->id);
293
 
294
 
295
                    $competencyMapper = CompetencyMapper::getInstance($this->adapter);
296
                    $competencies = $competencyMapper->fetchAllActiveByCompanyId($currentCompany->id);
297
 
298
 
299
                    foreach($competencies as $competency)
300
                    {
301
                        $level = filter_var($this->params()->fromPost('competency_level' . $competency->uuid, ''), FILTER_SANITIZE_NUMBER_INT);
302
                        if(in_array($level, [1, 2, 3, 4])) {
303
                            $jobDescriptionCompetency = new JobDescriptionCompetency();
304
                            $jobDescriptionCompetency->competency_id = $competency->id;
305
                            $jobDescriptionCompetency->job_description_id = $jobDescription->id;
306
                            $jobDescriptionCompetency->level = $level;
307
                            $jobDescriptionCompetencyMapper->insert($jobDescriptionCompetency);
308
                        }
309
                    }
310
 
311
 
312
                    $jobsDescriptionListingSubordinate = $jobDescriptionMapper->fetchAllActiveByCompanyIdWhereIdNotEqual($currentCompany->id, $jobDescription->id);
313
                    foreach($jobsDescriptionListingSubordinate as $jobDescriptionListingSubordinate)
314
                    {
315
                        $job_description_subordinate = filter_var($this->params()->fromPost('job_description_id_subordinate' . $jobDescriptionListingSubordinate->uuid, ''), FILTER_SANITIZE_STRING);
316
                        if($job_description_subordinate) {
317
                            $jobDescriptionSubordinate = new JobDescriptionSubordinate();
318
                            $jobDescriptionSubordinate->job_description_id_top_level = $jobDescription->id;
319
                            $jobDescriptionSubordinate->job_description_id_low_level = $jobDescriptionListingSubordinate->id;
320
                            $jobDescriptionSubordinateMapper->insert($jobDescriptionSubordinate);
321
                        }
322
                    }
323
 
324
 
325
 
326
                    $this->logger->info('Se agrego el cargo ' . $jobDescription->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
327
 
328
                    $data = [
329
                        'success'   => true,
330
                        'data'   => 'LABEL_RECORD_ADDED'
331
                    ];
332
                } else {
333
                    $data = [
334
                        'success'   => false,
335
                        'data'      => $jobDescriptionMapper->getError()
336
                    ];
337
 
338
                }
339
 
340
                return new JsonModel($data);
341
 
342
            } else {
343
                $messages = [];
344
                $form_messages = (array) $form->getMessages();
345
                foreach($form_messages  as $fieldname => $field_messages)
346
                {
347
 
348
                    $messages[$fieldname] = array_values($field_messages);
349
                }
350
 
351
                return new JsonModel([
352
                    'success'   => false,
353
                    'data'   => $messages
354
                ]);
355
            }
356
 
357
        } else {
358
            $data = [
359
                'success' => false,
360
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
361
            ];
362
 
363
            return new JsonModel($data);
364
        }
365
 
366
        return new JsonModel($data);
367
    }
368
 
369
    public function editAction()
370
    {
371
        $currentUserPlugin = $this->plugin('currentUserPlugin');
372
        $currentUser = $currentUserPlugin->getUser();
373
        $currentCompany = $currentUserPlugin->getCompany();
374
 
375
        $request = $this->getRequest();
376
        $uuid = $this->params()->fromRoute('id');
377
 
378
 
379
        if(!$uuid) {
380
            $data = [
381
                'success'   => false,
382
                'data'   => 'ERROR_INVALID_PARAMETER'
383
            ];
384
 
385
            return new JsonModel($data);
386
        }
387
 
388
        $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
389
        $jobDescription = $jobDescriptionMapper->fetchOneByUuid($uuid);
390
        if(!$jobDescription) {
391
            $data = [
392
                'success'   => false,
393
                'data'   => 'ERROR_RECORD_NOT_FOUND'
394
            ];
395
 
396
            return new JsonModel($data);
397
        }
398
 
399
        if($jobDescription->company_id != $currentCompany->id) {
400
            $data = [
401
                'success'   => false,
402
                'data'   => 'ERROR_UNAUTHORIZED'
403
            ];
404
 
405
            return new JsonModel($data);
406
        }
407
 
408
 
409
        if($request->isPost()) {
410
            $form = new JobDescriptionForm($this->adapter, $currentCompany->id, $jobDescription->id);
411
            $dataPost = $request->getPost()->toArray();
412
 
413
 
414
            $form->setData($dataPost);
415
 
416
            if($form->isValid()) {
417
                $dataPost = (array) $form->getData();
418
                $dataPost['status'] = $dataPost['status'] ? $dataPost['status'] : JobDescription::STATUS_INACTIVE;
419
 
420
 
421
                if(!empty($dataPost['job_description_id_boss'])) {
422
 
423
                    $jobDescriptionBoss = $jobDescriptionMapper->fetchOneByUuid($dataPost['job_description_id_boss']);
424
                    if($jobDescriptionBoss) {
425
                        if($jobDescriptionBoss->id != $jobDescription->id && $jobDescriptionBoss->company_id == $currentCompany->id) {
426
                            $dataPost['job_description_id_boss'] = $jobDescriptionBoss->id;
427
                        } else {
428
                            $dataPost['job_description_id_boss'] = null;
429
                        }
430
                    } else {
431
                        $dataPost['job_description_id_boss'] = null;
432
                    }
433
                }
434
 
435
 
436
 
437
                $hydrator = new ObjectPropertyHydrator();
438
                $hydrator->hydrate($dataPost, $jobDescription);
439
 
440
                $result = $jobDescriptionMapper->update($jobDescription);
441
 
442
                if($result) {
443
 
444
                    $jobDescriptionSubordinateMapper = JobDescriptionSubordinateMapper::getInstance($this->adapter);
445
                    $jobDescriptionSubordinateMapper->deleteAllByJobDescriptionIdTopLevel($jobDescription->id);
446
 
447
                    $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
448
                    $jobDescriptionCompetencyMapper->deleteAllBJobDescriptionId($jobDescription->id);
449
 
450
 
451
                    $competencyMapper = CompetencyMapper::getInstance($this->adapter);
452
                    $competencies = $competencyMapper->fetchAllActiveByCompanyId($currentCompany->id);
453
 
454
 
455
                    foreach($competencies as $competency)
456
                    {
457
                        $level = filter_var($this->params()->fromPost('competency_level' . $competency->uuid, ''), FILTER_SANITIZE_NUMBER_INT);
458
                        if(in_array($level, [ 1, 2, 3, 4])) {
459
                            $jobDescriptionCompetency = new JobDescriptionCompetency();
460
                            $jobDescriptionCompetency->competency_id = $competency->id;
461
                            $jobDescriptionCompetency->job_description_id = $jobDescription->id;
462
                            $jobDescriptionCompetency->level = $level;
463
                            $jobDescriptionCompetencyMapper->insert($jobDescriptionCompetency);
464
                        }
465
                    }
466
 
467
 
468
                    $jobsDescriptionListingSubordinate = $jobDescriptionMapper->fetchAllActiveByCompanyIdWhereIdNotEqual($currentCompany->id, $jobDescription->id);
469
                    foreach($jobsDescriptionListingSubordinate as $jobDescriptionListingSubordinate)
470
                    {
471
                        $job_description_subordinate = filter_var($this->params()->fromPost('job_description_id_subordinate' . $jobDescriptionListingSubordinate->uuid, ''), FILTER_SANITIZE_STRING);
472
                        if($job_description_subordinate) {
473
                            $jobDescriptionSubordinate = new JobDescriptionSubordinate();
474
                            $jobDescriptionSubordinate->job_description_id_top_level = $jobDescription->id;
475
                            $jobDescriptionSubordinate->job_description_id_low_level = $jobDescriptionListingSubordinate->id;
476
                            $jobDescriptionSubordinateMapper->insert($jobDescriptionSubordinate);
477
                        }
478
                    }
479
 
480
 
481
                    $this->logger->info('Se actualizo el cargo ' . $jobDescription->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
482
 
483
                    $data = [
484
                        'success' => true,
485
                        'data' => 'LABEL_RECORD_UPDATED'
486
                    ];
487
                } else {
488
                    $data = [
489
                        'success'   => false,
490
                        'data'      => $jobDescriptionMapper->getError()
491
                    ];
492
                }
493
 
494
                return new JsonModel($data);
495
 
496
            } else {
497
                $messages = [];
498
                $form_messages = (array) $form->getMessages();
499
                foreach($form_messages  as $fieldname => $field_messages)
500
                {
501
                    $messages[$fieldname] = array_values($field_messages);
502
                }
503
 
504
                return new JsonModel([
505
                    'success'   => false,
506
                    'data'   => $messages
507
                ]);
508
            }
509
        } else if ($request->isGet()) {
510
 
511
            $hydrator = new ObjectPropertyHydrator();
512
 
513
            $data = $hydrator->extract($jobDescription);
514
 
515
            if(!empty($data['job_description_id_boss'])) {
516
 
517
                $jobDescriptionBoss = $jobDescriptionMapper->fetchOne($data['job_description_id_boss']);
518
                if($jobDescriptionBoss) {
519
                    $data['job_description_id_boss'] = $jobDescriptionBoss->uuid;
520
                } else {
521
                    $data['job_description_id_boss'] = '';
522
                }
523
            } else {
524
                $data['job_description_id_boss'] = '';
525
            }
526
 
527
 
528
            $data['competency_types'] = [];
529
 
530
            $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
531
            $records = $competencyTypeMapper->fetchAllByCompanyId($currentCompany->id);
532
 
533
            $competencyTypesUUID = [];
534
            foreach($records as $record)
535
            {
536
                array_push($data['competency_types'], [
537
                    'competency_type_id' => $record->uuid,
538
                    'name' => $record->name,
539
                ]);
540
 
541
                $competencyTypesUUID[$record->id] = $record->uuid;
542
            }
543
 
544
            $data['competencies'] = [];
545
 
546
 
547
            $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
548
 
549
            $competencyMapper = CompetencyMapper::getInstance($this->adapter);
550
            $records = $competencyMapper->fetchAllActiveByCompanyId($currentCompany->id);
551
 
552
 
553
            foreach($records as $record)
554
            {
555
                if(isset($competencyTypesUUID[ $record->competency_type_id ])) {
556
 
557
 
558
                    $level = 0;
559
                    $jobDescriptionCompetency = $jobDescriptionCompetencyMapper->fetchOneByJobDescriptionIdAndCompetencyId($jobDescription->id, $record->id);
560
                    if($jobDescriptionCompetency) {
561
                        $level = $jobDescriptionCompetency->level;
562
                    }
563
 
564
 
565
                    array_push($data['competencies'], [
566
                        'competency_type_id' => $competencyTypesUUID[$record->competency_type_id],
567
                        'competency_id' => $record->uuid,
568
                        'name' => $record->name,
569
                        'level' => $level
570
                    ]);
571
                }
572
            }
573
 
574
            $data['jobs_description'] = [];
575
 
576
            $jobsDescriptionUUID = [];
577
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
578
            $records = $jobDescriptionMapper->fetchAllActiveByCompanyId($currentCompany->id);
579
 
580
            foreach($records as $record)
581
            {
582
                if($record->id == $jobDescription->id) {
583
                    continue;
584
                }
585
 
586
                $jobsDescriptionUUID[ $record->id ] = $record->uuid;
587
 
588
 
589
                array_push($data['jobs_description'], [
590
                    'job_description_id' => $record->uuid,
591
                    'name' => $record->name
592
                ]);
593
            }
594
 
595
            $data['subordinates'] = [];
596
            $jobDescriptionSubordinateMapper = JobDescriptionSubordinateMapper::getInstance($this->adapter);
597
            $records = $jobDescriptionSubordinateMapper->fetchAllByJobDescriptionIdTopLevel($jobDescription->id);
598
 
599
 
600
            foreach($records as $record)
601
            {
602
 
603
                if(isset($jobsDescriptionUUID[$record->job_description_id_low_level])) {
604
 
605
 
606
                    array_push($data['subordinates'], $jobsDescriptionUUID[$record->job_description_id_low_level]);
607
                }
608
            }
609
 
610
 
611
 
612
            $response = [
613
                'success' => true,
614
                'data' => $data
615
            ];
616
 
617
            return new JsonModel($response);
618
        } else {
619
            $data = [
620
                'success' => false,
621
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
622
            ];
623
 
624
            return new JsonModel($data);
625
        }
626
 
627
        return new JsonModel($data);
628
    }
629
 
630
    public function deleteAction()
631
    {
632
        $currentUserPlugin = $this->plugin('currentUserPlugin');
633
        $currentUser = $currentUserPlugin->getUser();
634
        $currentCompany = $currentUserPlugin->getCompany();
635
 
636
        $request = $this->getRequest();
637
        $uuid = $this->params()->fromRoute('id');
638
 
639
        if(!$uuid) {
640
            $data = [
641
                'success'   => false,
642
                'data'   => 'ERROR_INVALID_PARAMETER'
643
            ];
644
 
645
            return new JsonModel($data);
646
        }
647
 
648
 
649
        $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
650
        $jobDescription = $jobDescriptionMapper->fetchOneByUuid($uuid);
651
        if(!$jobDescription) {
652
            $data = [
653
                'success'   => false,
654
                'data'   => 'ERROR_RECORD_NOT_FOUND'
655
            ];
656
 
657
            return new JsonModel($data);
658
        }
659
 
660
        if($jobDescription->company_id != $currentCompany->id) {
661
            $data = [
662
                'success'   => false,
663
                'data'   => 'ERROR_UNAUTHORIZED'
664
            ];
665
 
666
            return new JsonModel($data);
667
        }
668
 
669
 
670
        if($request->isPost()) {
671
            $result = $jobDescriptionMapper->delete($jobDescription);
672
            if($result) {
673
                $this->logger->info('Se borro el cargo de trabajo ' . $jobDescription->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
674
 
675
                $data = [
676
                    'success' => true,
677
                    'data' => 'LABEL_RECORD_DELETED'
678
                ];
679
            } else {
680
 
681
                $data = [
682
                    'success'   => false,
683
                    'data'      => $jobDescriptionMapper->getError()
684
                ];
685
 
686
                return new JsonModel($data);
687
            }
688
 
689
        } else {
690
            $data = [
691
                'success' => false,
692
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
693
            ];
694
 
695
            return new JsonModel($data);
696
        }
697
 
698
        return new JsonModel($data);
699
    }
561 geraldo 700
 
701
 
702
    public function reportAction()
703
    {
704
        $currentUserPlugin = $this->plugin('currentUserPlugin');
705
        $currentUser = $currentUserPlugin->getUser();
706
        $currentCompany = $currentUserPlugin->getCompany();
707
 
708
        $request = $this->getRequest();
709
        $uuid = $this->params()->fromRoute('id');
710
 
711
 
712
        if(!$uuid) {
713
            $data = [
714
                'success'   => false,
715
                'data'   => 'ERROR_INVALID_PARAMETER'
716
            ];
717
 
718
            return new JsonModel($data);
719
        }
720
 
721
        $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
722
        $jobDescription = $jobDescriptionMapper->fetchOneByUuid($uuid);
723
        if(!$jobDescription) {
724
            $data = [
725
                'success'   => false,
726
                'data'   => 'ERROR_RECORD_NOT_FOUND'
727
            ];
728
 
729
            return new JsonModel($data);
730
        }
731
 
732
        if($jobDescription->company_id != $currentCompany->id) {
733
            $data = [
734
                'success'   => false,
735
                'data'   => 'ERROR_UNAUTHORIZED'
736
            ];
737
 
738
            return new JsonModel($data);
739
        }
740
 
741
 
742
        if ($request->isGet()) {
743
 
744
            return $this->renderPdf($jobDescription);
745
 
746
        } else {
747
            $data = [
748
                'success' => false,
749
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
750
            ];
751
 
752
            return new JsonModel($data);
753
        }
754
 
755
        return new JsonModel($data);
756
    }
66 efrain 757
 
561 geraldo 758
 
759
    public function renderPDF($jobDescription) {
760
 
761
 
762
 
763
 
764
        //Generate New PDF
567 geraldo 765
        $pdf = new JobPDF();
561 geraldo 766
 
767
        $pdf->AliasNbPages();
768
        $pdf->AddPage();
564 geraldo 769
 
599 geraldo 770
        $header=array('Columna 1','Columna 2');
638 geraldo 771
        $pdf->singleTable(
645 geraldo 772
            'Nombre del puesto de trabajo',[
614 geraldo 773
            array(
645 geraldo 774
                'title'=>'Categoría Laboral:',
612 geraldo 775
                'content'=>$jobDescription->name
614 geraldo 776
            )]);
579 geraldo 777
 
646 geraldo 778
 
628 geraldo 779
 
638 geraldo 780
            $pdf->singleTable(
645 geraldo 781
                'Relación jerárquica',[
628 geraldo 782
 
783
                array(
645 geraldo 784
                    'title'=>'Depende a: ',
628 geraldo 785
                    'content'=>$jobDescription->name
786
                ),
787
                array(
645 geraldo 788
                    'title'=>'Supervisa a: ',
628 geraldo 789
                    'content'=>$jobDescription->name
790
                )
791
 
792
            ]);
793
 
646 geraldo 794
 
628 geraldo 795
 
638 geraldo 796
            $pdf->singleTable(
645 geraldo 797
                'Objetivos',[
628 geraldo 798
                array(
635 geraldo 799
                    'content'=>strip_tags($jobDescription->objectives)
628 geraldo 800
                )
801
 
802
            ]);
803
 
646 geraldo 804
 
628 geraldo 805
 
638 geraldo 806
            $pdf->singleTable(
645 geraldo 807
                'Funciones principales',[
628 geraldo 808
                array(
635 geraldo 809
                    'content'=>strip_tags($jobDescription->functions)
628 geraldo 810
                )
811
 
812
            ]);
637 geraldo 813
 
628 geraldo 814
 
597 geraldo 815
 
579 geraldo 816
 
817
 
818
 
819
 
820
 
564 geraldo 821
 
561 geraldo 822
 
823
 
824
        return $pdf->Output();
825
    }
66 efrain 826
 
827
}