Proyectos de Subversion LeadersLinked - Backend

Rev

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