Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 840 | Rev 842 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

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