Proyectos de Subversion LeadersLinked - Backend

Rev

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