Proyectos de Subversion LeadersLinked - Backend

Rev

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