Proyectos de Subversion LeadersLinked - Backend

Rev

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