Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 1292 | Rev 1336 | 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;
1195 geraldo 25
use LeadersLinked\Model\JobDescriptionBehaviorCompetency;
26
use LeadersLinked\Mapper\JobDescriptionBehaviorCompetencyMapper;
66 efrain 27
use LeadersLinked\Model\JobDescriptionSubordinate;
1154 geraldo 28
use LeadersLinked\Mapper\BehaviorCompetencyMapper;
29
use LeadersLinked\Model\BehaviorCompetency;
1320 efrain 30
use LeadersLinked\Mapper\BehaviorMapper;
31
use LeadersLinked\Model\Behavior;
66 efrain 32
 
1320 efrain 33
 
649 geraldo 34
class JobDescriptionController extends AbstractActionController {
66 efrain 35
 
36
    /**
37
     *
38
     * @var AdapterInterface
39
     */
40
    private $adapter;
649 geraldo 41
 
66 efrain 42
    /**
43
     *
44
     * @var AbstractAdapter
45
     */
46
    private $cache;
649 geraldo 47
 
66 efrain 48
    /**
49
     *
50
     * @var  LoggerInterface
51
     */
52
    private $logger;
53
 
54
    /**
55
     *
56
     * @var array
57
     */
58
    private $config;
649 geraldo 59
 
66 efrain 60
    /**
61
     *
62
     * @param AdapterInterface $adapter
63
     * @param AbstractAdapter $cache
64
     * @param LoggerInterface $logger
65
     * @param array $config
66
     */
649 geraldo 67
    public function __construct($adapter, $cache, $logger, $config) {
68
        $this->adapter = $adapter;
69
        $this->cache = $cache;
70
        $this->logger = $logger;
71
        $this->config = $config;
66 efrain 72
    }
649 geraldo 73
 
74
    public function indexAction() {
66 efrain 75
        $currentUserPlugin = $this->plugin('currentUserPlugin');
76
        $currentUser = $currentUserPlugin->getUser();
77
        $currentCompany = $currentUserPlugin->getCompany();
649 geraldo 78
 
66 efrain 79
        $request = $this->getRequest();
649 geraldo 80
 
81
        $headers = $request->getHeaders();
82
 
66 efrain 83
        $request = $this->getRequest();
649 geraldo 84
        if ($request->isGet()) {
85
 
86
 
87
            $headers = $request->getHeaders();
88
 
66 efrain 89
            $isJson = false;
649 geraldo 90
            if ($headers->has('Accept')) {
66 efrain 91
                $accept = $headers->get('Accept');
649 geraldo 92
 
66 efrain 93
                $prioritized = $accept->getPrioritized();
649 geraldo 94
 
95
                foreach ($prioritized as $key => $value) {
66 efrain 96
                    $raw = trim($value->getRaw());
649 geraldo 97
 
98
                    if (!$isJson) {
66 efrain 99
                        $isJson = strpos($raw, 'json');
100
                    }
101
                }
102
            }
649 geraldo 103
 
104
            if ($isJson) {
66 efrain 105
                $search = $this->params()->fromQuery('search', []);
106
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
649 geraldo 107
 
108
                $page = intval($this->params()->fromQuery('start', 1), 10);
109
                $records_x_page = intval($this->params()->fromQuery('length', 10), 10);
110
                $order = $this->params()->fromQuery('order', []);
111
                $order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);
112
                $order_direction = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var($order[0]['dir'], FILTER_SANITIZE_STRING));
113
 
114
                $fields = ['name'];
66 efrain 115
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
649 geraldo 116
 
117
                if (!in_array($order_direction, ['ASC', 'DESC'])) {
66 efrain 118
                    $order_direction = 'ASC';
119
                }
649 geraldo 120
 
66 efrain 121
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
122
 
842 geraldo 123
                if ($currentCompany) {
124
                    $paginator = $jobDescriptionMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);
125
                } else {
126
                    $paginator = $jobDescriptionMapper->fetchAllDataTable($search, $page, $records_x_page, $order_field, $order_direction);
840 geraldo 127
                }
66 efrain 128
                $items = [];
129
                $records = $paginator->getCurrentItems();
649 geraldo 130
                foreach ($records as $record) {
131
 
132
 
133
 
66 efrain 134
                    $item = [
135
                        'name' => $record->name,
136
                        'status' => $record->status,
137
                        'actions' => [
649 geraldo 138
                            'link_report' => $this->url()->fromRoute('settings/jobs-description/report', ['id' => $record->uuid]),
139
                            'link_edit' => $this->url()->fromRoute('settings/jobs-description/edit', ['id' => $record->uuid]),
140
                            'link_delete' => $this->url()->fromRoute('settings/jobs-description/delete', ['id' => $record->uuid])
141
                        ]
66 efrain 142
                    ];
649 geraldo 143
 
66 efrain 144
                    array_push($items, $item);
145
                }
649 geraldo 146
 
66 efrain 147
                return new JsonModel([
148
                    'success' => true,
149
                    'data' => [
150
                        'items' => $items,
151
                        'total' => $paginator->getTotalItemCount(),
152
                    ]
153
                ]);
649 geraldo 154
            } else {
155
 
847 geraldo 156
                $form = new JobDescriptionForm($this->adapter, $currentCompany ? $currentCompany->id : null);
842 geraldo 157
 
66 efrain 158
                $this->layout()->setTemplate('layout/layout-backend');
159
                $viewModel = new ViewModel();
160
                $viewModel->setTemplate('leaders-linked/jobs-description/index.phtml');
161
                $viewModel->setVariable('form', $form);
649 geraldo 162
                return $viewModel;
163
            }
66 efrain 164
        } else {
165
            return new JsonModel([
166
                'success' => false,
167
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
649 geraldo 168
            ]);
169
            ;
66 efrain 170
        }
171
    }
649 geraldo 172
 
173
    public function addAction() {
66 efrain 174
        $currentUserPlugin = $this->plugin('currentUserPlugin');
175
        $currentUser = $currentUserPlugin->getUser();
176
        $currentCompany = $currentUserPlugin->getCompany();
649 geraldo 177
 
66 efrain 178
        $request = $this->getRequest();
649 geraldo 179
 
180
 
181
        if ($request->isGet()) {
182
 
66 efrain 183
            $data = [
649 geraldo 184
                'competency_types' => [],
185
                'competencies' => [],
186
                'jobs_description' => [],
66 efrain 187
            ];
649 geraldo 188
 
66 efrain 189
            $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
649 geraldo 190
 
856 geraldo 191
            $records = $currentCompany ?
192
                    $competencyTypeMapper->fetchAllByCompanyId($currentCompany->id) :
193
                    $competencyTypeMapper->fetchAllActivesByDefault();
842 geraldo 194
 
856 geraldo 195
            $competencyTypesUUID = [];
196
            foreach ($records as $record) {
197
                array_push($data['competency_types'], [
198
                    'competency_type_id' => $record->uuid,
199
                    'name' => $record->name,
200
                ]);
649 geraldo 201
 
856 geraldo 202
                $competencyTypesUUID[$record->id] = $record->uuid;
203
            }
66 efrain 204
 
649 geraldo 205
 
856 geraldo 206
            $competencyMapper = CompetencyMapper::getInstance($this->adapter);
1154 geraldo 207
            $behaviorCompetencyMapper = BehaviorCompetencyMapper::getInstance($this->adapter);
1320 efrain 208
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
844 geraldo 209
 
856 geraldo 210
            $records = $currentCompany ?
211
                    $competencyMapper->fetchAllActiveByCompanyId($currentCompany->id) :
212
                    $competencyMapper->fetchAllByDefault();
844 geraldo 213
 
856 geraldo 214
            foreach ($records as $record) {
215
                if (isset($competencyTypesUUID[$record->competency_type_id])) {
649 geraldo 216
 
1154 geraldo 217
 
1155 geraldo 218
                    $behaviorCompetencies = $behaviorCompetencyMapper->fetchByCompetencyId($record->id);
1154 geraldo 219
                    $behaviors = [];
1195 geraldo 220
 
1155 geraldo 221
                    foreach ($behaviorCompetencies as $rows) {
1195 geraldo 222
 
1155 geraldo 223
                        $behavior = $behaviorMapper->fetchOne($rows->behavior_id);
1154 geraldo 224
 
225
                        if ($behavior) {
226
                            array_push($behaviors, [
1207 geraldo 227
                                'behavior_id' => $behavior->id,
1180 geraldo 228
                                'competency_id' => $record->uuid,
1155 geraldo 229
                                'description' => $behavior->description,
1154 geraldo 230
                                'level' => 0
231
                            ]);
232
                        }
233
                    }
234
 
856 geraldo 235
                    array_push($data['competencies'], [
236
                        'competency_type_id' => $competencyTypesUUID[$record->competency_type_id],
237
                        'competency_id' => $record->uuid,
238
                        'name' => $record->name,
1154 geraldo 239
                        'behaviors' => $behaviors
856 geraldo 240
                    ]);
66 efrain 241
                }
856 geraldo 242
            }
649 geraldo 243
 
856 geraldo 244
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
245
            $records = $currentCompany ?
246
                    $jobDescriptionMapper->fetchAllActiveByCompanyId($currentCompany->id) :
247
                    $jobDescriptionMapper->fetchAllByDefault();
649 geraldo 248
 
856 geraldo 249
            foreach ($records as $record) {
250
                array_push($data['jobs_description'], [
251
                    'job_description_id' => $record->uuid,
252
                    'name' => $record->name
253
                ]);
66 efrain 254
            }
649 geraldo 255
 
256
 
66 efrain 257
            $data = [
649 geraldo 258
                'success' => true,
259
                'data' => $data,
66 efrain 260
            ];
649 geraldo 261
 
262
 
66 efrain 263
            return new JsonModel($data);
649 geraldo 264
        } else if ($request->isPost()) {
854 geraldo 265
            $form = new JobDescriptionForm($this->adapter, $currentCompany ? $currentCompany->id : null);
66 efrain 266
            $dataPost = $request->getPost()->toArray();
649 geraldo 267
 
268
 
66 efrain 269
            $form->setData($dataPost);
649 geraldo 270
 
271
            if ($form->isValid()) {
66 efrain 272
                $dataPost = (array) $form->getData();
273
                $dataPost['status'] = $dataPost['status'] ? $dataPost['status'] : JobDescription::STATUS_INACTIVE;
649 geraldo 274
 
275
 
66 efrain 276
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
649 geraldo 277
 
278
                if (!empty($dataPost['job_description_id_boss'])) {
279
 
66 efrain 280
                    $jobDescriptionBoss = $jobDescriptionMapper->fetchOneByUuid($dataPost['job_description_id_boss']);
649 geraldo 281
                    if ($jobDescriptionBoss) {
847 geraldo 282
                        if ($jobDescriptionBoss->company_id == $currentCompany ? $currentCompany->id : null) {
66 efrain 283
                            $dataPost['job_description_id_boss'] = $jobDescriptionBoss->id;
284
                        } else {
285
                            $dataPost['job_description_id_boss'] = null;
286
                        }
287
                    } else {
288
                        $dataPost['job_description_id_boss'] = null;
289
                    }
290
                }
291
 
292
                $hydrator = new ObjectPropertyHydrator();
293
                $jobDescription = new JobDescription();
649 geraldo 294
 
66 efrain 295
                $hydrator->hydrate($dataPost, $jobDescription);
649 geraldo 296
 
297
                if ($currentCompany) {
847 geraldo 298
                    $jobDescription->company_id = $currentCompany ? $currentCompany->id : null;
66 efrain 299
                }
300
 
301
                $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
302
                $result = $jobDescriptionMapper->insert($jobDescription);
649 geraldo 303
 
1195 geraldo 304
                if ($result) {
649 geraldo 305
 
66 efrain 306
                    $jobDescriptionSubordinateMapper = JobDescriptionSubordinateMapper::getInstance($this->adapter);
1195 geraldo 307
                    $jobDescriptionBehaviorCompetencyMapper = JobDescriptionBehaviorCompetencyMapper::getInstance($this->adapter);
308
                    $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
309
                    $competencyMapper = CompetencyMapper::getInstance($this->adapter);
1320 efrain 310
                    $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
1195 geraldo 311
 
66 efrain 312
                    $jobDescriptionSubordinateMapper->deleteAllByJobDescriptionIdTopLevel($jobDescription->id);
313
                    $jobDescriptionCompetencyMapper->deleteAllBJobDescriptionId($jobDescription->id);
1195 geraldo 314
                    $jobDescriptionBehaviorCompetencyMapper->deleteAllBJobDescriptionId($jobDescription->id);
649 geraldo 315
 
316
 
1195 geraldo 317
                    $competencies_selected = json_decode($dataPost['competencies_selected'], true);
649 geraldo 318
 
1195 geraldo 319
                    for ($i = 0; $i < count($competencies_selected); $i++) {
320
                        $competency = $competencyMapper->fetchOneByUuid($competencies_selected[$i]['competency_id']);
321
                        if ($competency) {
66 efrain 322
                            $jobDescriptionCompetency = new JobDescriptionCompetency();
323
                            $jobDescriptionCompetency->competency_id = $competency->id;
324
                            $jobDescriptionCompetency->job_description_id = $jobDescription->id;
325
                            $jobDescriptionCompetencyMapper->insert($jobDescriptionCompetency);
1195 geraldo 326
 
327
                            for ($b = 0; $b < count($competencies_selected[$i]['behaviors']); $b++) {
1204 geraldo 328
                                $jobDescriptionBehaviorCompetency = new JobDescriptionBehaviorCompetency();
329
                                $jobDescriptionBehaviorCompetency->competency_id = $competency->id;
330
                                $jobDescriptionBehaviorCompetency->behavior_id = $competencies_selected[$i]['behaviors'][$b]['behavior_id'];
331
                                $jobDescriptionBehaviorCompetency->level = $competencies_selected[$i]['behaviors'][$b]['level'];
332
                                $jobDescriptionBehaviorCompetency->job_description_id = $jobDescription->id;
333
                                $jobDescriptionBehaviorCompetencyMapper->insert($jobDescriptionBehaviorCompetency);
1195 geraldo 334
                            }
66 efrain 335
                        }
336
                    }
649 geraldo 337
 
1196 geraldo 338
                    $subordinates_selected = json_decode($dataPost['subordinates_selected'], true);
339
                    for ($i = 0; $i < count($subordinates_selected); $i++) {
649 geraldo 340
 
1203 geraldo 341
                        $jobDescriptionListingSubordinate = $jobDescriptionMapper->fetchOneByUuid($subordinates_selected[$i]['job_description_id']);
1195 geraldo 342
                        if ($jobDescriptionListingSubordinate) {
66 efrain 343
                            $jobDescriptionSubordinate = new JobDescriptionSubordinate();
344
                            $jobDescriptionSubordinate->job_description_id_top_level = $jobDescription->id;
345
                            $jobDescriptionSubordinate->job_description_id_low_level = $jobDescriptionListingSubordinate->id;
346
                            $jobDescriptionSubordinateMapper->insert($jobDescriptionSubordinate);
347
                        }
348
                    }
649 geraldo 349
 
66 efrain 350
                    $this->logger->info('Se agrego el cargo ' . $jobDescription->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
649 geraldo 351
 
66 efrain 352
                    $data = [
649 geraldo 353
                        'success' => true,
354
                        'data' => 'LABEL_RECORD_ADDED'
66 efrain 355
                    ];
356
                } else {
357
                    $data = [
649 geraldo 358
                        'success' => false,
359
                        'data' => $jobDescriptionMapper->getError()
66 efrain 360
                    ];
361
                }
649 geraldo 362
 
66 efrain 363
                return new JsonModel($data);
364
            } else {
365
                $messages = [];
366
                $form_messages = (array) $form->getMessages();
649 geraldo 367
                foreach ($form_messages as $fieldname => $field_messages) {
368
 
66 efrain 369
                    $messages[$fieldname] = array_values($field_messages);
370
                }
649 geraldo 371
 
66 efrain 372
                return new JsonModel([
649 geraldo 373
                    'success' => false,
374
                    'data' => $messages
66 efrain 375
                ]);
376
            }
377
        } else {
378
            $data = [
379
                'success' => false,
380
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
381
            ];
649 geraldo 382
 
66 efrain 383
            return new JsonModel($data);
384
        }
649 geraldo 385
 
66 efrain 386
        return new JsonModel($data);
387
    }
649 geraldo 388
 
389
    public function editAction() {
66 efrain 390
        $currentUserPlugin = $this->plugin('currentUserPlugin');
391
        $currentUser = $currentUserPlugin->getUser();
392
        $currentCompany = $currentUserPlugin->getCompany();
649 geraldo 393
 
66 efrain 394
        $request = $this->getRequest();
395
        $uuid = $this->params()->fromRoute('id');
396
 
649 geraldo 397
 
398
        if (!$uuid) {
66 efrain 399
            $data = [
649 geraldo 400
                'success' => false,
401
                'data' => 'ERROR_INVALID_PARAMETER'
66 efrain 402
            ];
649 geraldo 403
 
66 efrain 404
            return new JsonModel($data);
405
        }
406
 
407
        $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
408
        $jobDescription = $jobDescriptionMapper->fetchOneByUuid($uuid);
649 geraldo 409
        if (!$jobDescription) {
66 efrain 410
            $data = [
649 geraldo 411
                'success' => false,
412
                'data' => 'ERROR_RECORD_NOT_FOUND'
66 efrain 413
            ];
649 geraldo 414
 
66 efrain 415
            return new JsonModel($data);
416
        }
649 geraldo 417
 
851 geraldo 418
        if ($currentCompany && $jobDescription->company_id != $currentCompany->id) {
66 efrain 419
            $data = [
649 geraldo 420
                'success' => false,
421
                'data' => 'ERROR_UNAUTHORIZED'
66 efrain 422
            ];
649 geraldo 423
 
66 efrain 424
            return new JsonModel($data);
425
        }
426
 
649 geraldo 427
 
428
        if ($request->isPost()) {
847 geraldo 429
            $form = new JobDescriptionForm($this->adapter, $currentCompany ? $currentCompany->id : null, $jobDescription->id);
66 efrain 430
            $dataPost = $request->getPost()->toArray();
649 geraldo 431
 
432
 
66 efrain 433
            $form->setData($dataPost);
649 geraldo 434
 
435
            if ($form->isValid()) {
66 efrain 436
                $dataPost = (array) $form->getData();
437
                $dataPost['status'] = $dataPost['status'] ? $dataPost['status'] : JobDescription::STATUS_INACTIVE;
649 geraldo 438
 
439
 
440
                if (!empty($dataPost['job_description_id_boss'])) {
441
 
66 efrain 442
                    $jobDescriptionBoss = $jobDescriptionMapper->fetchOneByUuid($dataPost['job_description_id_boss']);
649 geraldo 443
                    if ($jobDescriptionBoss) {
444
                        if ($jobDescriptionBoss->id != $jobDescription->id && $jobDescriptionBoss->company_id == $currentCompany->id) {
66 efrain 445
                            $dataPost['job_description_id_boss'] = $jobDescriptionBoss->id;
446
                        } else {
447
                            $dataPost['job_description_id_boss'] = null;
448
                        }
449
                    } else {
450
                        $dataPost['job_description_id_boss'] = null;
451
                    }
452
                }
649 geraldo 453
 
66 efrain 454
                $hydrator = new ObjectPropertyHydrator();
455
                $hydrator->hydrate($dataPost, $jobDescription);
456
 
457
                $result = $jobDescriptionMapper->update($jobDescription);
649 geraldo 458
 
459
                if ($result) {
460
 
66 efrain 461
                    $jobDescriptionSubordinateMapper = JobDescriptionSubordinateMapper::getInstance($this->adapter);
1195 geraldo 462
                    $jobDescriptionBehaviorCompetencyMapper = JobDescriptionBehaviorCompetencyMapper::getInstance($this->adapter);
463
                    $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
464
                    $competencyMapper = CompetencyMapper::getInstance($this->adapter);
1320 efrain 465
                    $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
1195 geraldo 466
 
66 efrain 467
                    $jobDescriptionSubordinateMapper->deleteAllByJobDescriptionIdTopLevel($jobDescription->id);
468
                    $jobDescriptionCompetencyMapper->deleteAllBJobDescriptionId($jobDescription->id);
1195 geraldo 469
                    $jobDescriptionBehaviorCompetencyMapper->deleteAllBJobDescriptionId($jobDescription->id);
649 geraldo 470
 
471
 
1195 geraldo 472
                    $competencies_selected = json_decode($dataPost['competencies_selected'], true);
649 geraldo 473
 
1195 geraldo 474
                    for ($i = 0; $i < count($competencies_selected); $i++) {
475
                        $competency = $competencyMapper->fetchOneByUuid($competencies_selected[$i]['competency_id']);
476
                        if ($competency) {
66 efrain 477
                            $jobDescriptionCompetency = new JobDescriptionCompetency();
478
                            $jobDescriptionCompetency->competency_id = $competency->id;
479
                            $jobDescriptionCompetency->job_description_id = $jobDescription->id;
480
                            $jobDescriptionCompetencyMapper->insert($jobDescriptionCompetency);
1195 geraldo 481
 
482
                            for ($b = 0; $b < count($competencies_selected[$i]['behaviors']); $b++) {
1204 geraldo 483
                                $jobDescriptionBehaviorCompetency = new JobDescriptionBehaviorCompetency();
484
                                $jobDescriptionBehaviorCompetency->competency_id = $competency->id;
485
                                $jobDescriptionBehaviorCompetency->behavior_id = $competencies_selected[$i]['behaviors'][$b]['behavior_id'];
486
                                $jobDescriptionBehaviorCompetency->level = $competencies_selected[$i]['behaviors'][$b]['level'];
487
                                $jobDescriptionBehaviorCompetency->job_description_id = $jobDescription->id;
488
                                $jobDescriptionBehaviorCompetencyMapper->insert($jobDescriptionBehaviorCompetency);
1195 geraldo 489
                            }
66 efrain 490
                        }
491
                    }
649 geraldo 492
 
1196 geraldo 493
                    $subordinates_selected = json_decode($dataPost['subordinates_selected'], true);
494
                    for ($i = 0; $i < count($subordinates_selected); $i++) {
649 geraldo 495
 
1202 geraldo 496
                        $jobDescriptionListingSubordinate = $jobDescriptionMapper->fetchOneByUuid($subordinates_selected[$i]['job_description_id']);
1195 geraldo 497
                        if ($jobDescriptionListingSubordinate) {
66 efrain 498
                            $jobDescriptionSubordinate = new JobDescriptionSubordinate();
499
                            $jobDescriptionSubordinate->job_description_id_top_level = $jobDescription->id;
500
                            $jobDescriptionSubordinate->job_description_id_low_level = $jobDescriptionListingSubordinate->id;
501
                            $jobDescriptionSubordinateMapper->insert($jobDescriptionSubordinate);
502
                        }
503
                    }
649 geraldo 504
 
66 efrain 505
                    $this->logger->info('Se actualizo el cargo ' . $jobDescription->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
649 geraldo 506
 
66 efrain 507
                    $data = [
508
                        'success' => true,
509
                        'data' => 'LABEL_RECORD_UPDATED'
510
                    ];
511
                } else {
512
                    $data = [
649 geraldo 513
                        'success' => false,
514
                        'data' => $jobDescriptionMapper->getError()
66 efrain 515
                    ];
516
                }
649 geraldo 517
 
66 efrain 518
                return new JsonModel($data);
519
            } else {
520
                $messages = [];
521
                $form_messages = (array) $form->getMessages();
649 geraldo 522
                foreach ($form_messages as $fieldname => $field_messages) {
66 efrain 523
                    $messages[$fieldname] = array_values($field_messages);
524
                }
649 geraldo 525
 
66 efrain 526
                return new JsonModel([
649 geraldo 527
                    'success' => false,
528
                    'data' => $messages
66 efrain 529
                ]);
530
            }
531
        } else if ($request->isGet()) {
532
 
533
            $hydrator = new ObjectPropertyHydrator();
649 geraldo 534
 
66 efrain 535
            $data = $hydrator->extract($jobDescription);
649 geraldo 536
 
537
            if (!empty($data['job_description_id_boss'])) {
538
 
66 efrain 539
                $jobDescriptionBoss = $jobDescriptionMapper->fetchOne($data['job_description_id_boss']);
649 geraldo 540
                if ($jobDescriptionBoss) {
66 efrain 541
                    $data['job_description_id_boss'] = $jobDescriptionBoss->uuid;
542
                } else {
543
                    $data['job_description_id_boss'] = '';
544
                }
545
            } else {
546
                $data['job_description_id_boss'] = '';
547
            }
548
 
649 geraldo 549
 
66 efrain 550
            $data['competency_types'] = [];
649 geraldo 551
 
66 efrain 552
            $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
649 geraldo 553
 
857 geraldo 554
            $records = $currentCompany ?
555
                    $competencyTypeMapper->fetchAllByCompanyId($currentCompany->id) :
556
                    $competencyTypeMapper->fetchAllActivesByDefault();
557
 
66 efrain 558
            $competencyTypesUUID = [];
649 geraldo 559
            foreach ($records as $record) {
66 efrain 560
                array_push($data['competency_types'], [
561
                    'competency_type_id' => $record->uuid,
1153 geraldo 562
                    'name' => $record->name
66 efrain 563
                ]);
649 geraldo 564
 
66 efrain 565
                $competencyTypesUUID[$record->id] = $record->uuid;
566
            }
649 geraldo 567
 
66 efrain 568
            $data['competencies'] = [];
1198 geraldo 569
            $data['competencies_selected'] = [];
649 geraldo 570
 
66 efrain 571
            $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
1154 geraldo 572
            $behaviorCompetencyMapper = BehaviorCompetencyMapper::getInstance($this->adapter);
1320 efrain 573
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
1208 geraldo 574
            $jobDescriptionBehaviorCompetencyMapper = JobDescriptionBehaviorCompetencyMapper::getInstance($this->adapter);
649 geraldo 575
 
66 efrain 576
            $competencyMapper = CompetencyMapper::getInstance($this->adapter);
649 geraldo 577
 
1196 geraldo 578
            $competencyMapper = CompetencyMapper::getInstance($this->adapter);
579
            $behaviorCompetencyMapper = BehaviorCompetencyMapper::getInstance($this->adapter);
1320 efrain 580
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
1196 geraldo 581
 
857 geraldo 582
            $records = $currentCompany ?
583
                    $competencyMapper->fetchAllActiveByCompanyId($currentCompany->id) :
584
                    $competencyMapper->fetchAllByDefault();
649 geraldo 585
 
586
            foreach ($records as $record) {
587
                if (isset($competencyTypesUUID[$record->competency_type_id])) {
588
 
589
 
1155 geraldo 590
                    $behaviorCompetencies = $behaviorCompetencyMapper->fetchByCompetencyId($record->id);
1154 geraldo 591
                    $behaviors = [];
1207 geraldo 592
                    $behaviors_selected = [];
1195 geraldo 593
 
1155 geraldo 594
                    foreach ($behaviorCompetencies as $rows) {
1195 geraldo 595
 
1155 geraldo 596
                        $behavior = $behaviorMapper->fetchOne($rows->behavior_id);
1154 geraldo 597
                        if ($behavior) {
598
                            array_push($behaviors, [
1207 geraldo 599
                                'behavior_id' => $behavior->id,
1180 geraldo 600
                                'competency_id' => $record->uuid,
1155 geraldo 601
                                'description' => $behavior->description,
1154 geraldo 602
                                'level' => 0
603
                            ]);
604
                        }
605
                    }
606
 
1197 geraldo 607
                    $jobDescriptionCompetency = $jobDescriptionCompetencyMapper->fetchOneByJobDescriptionIdAndCompetencyId($jobDescription->id, $record->id);
608
                    if ($jobDescriptionCompetency) {
1209 geraldo 609
 
1207 geraldo 610
                        foreach ($behaviorCompetencies as $rows) {
1197 geraldo 611
 
1209 geraldo 612
                            $behavior = $behaviorMapper->fetchOne($rows->behavior_id);
1213 geraldo 613
                            $jobDescriptionBehaviorCompetency = $jobDescriptionBehaviorCompetencyMapper->fetchOneByBehavior($jobDescription->id, $record->id, $rows->behavior_id);
614
 
1209 geraldo 615
                            if ($behavior && $jobDescriptionBehaviorCompetency) {
1213 geraldo 616
 
617
                                array_push($behaviors_selected, [
618
                                    'behavior_id' => $behavior->id,
619
                                    'competency_id' => $record->uuid,
620
                                    'description' => $behavior->description,
621
                                    'level' => $jobDescriptionBehaviorCompetency->level
622
                                ]);
1209 geraldo 623
                            }
1207 geraldo 624
                        }
1197 geraldo 625
                        array_push($data['competencies_selected'], [
1198 geraldo 626
                            'competency_type_id' => $competencyTypesUUID[$record->competency_type_id],
627
                            'competency_id' => $record->uuid,
628
                            'name' => $record->name,
1207 geraldo 629
                            'behaviors' => $behaviors_selected
1198 geraldo 630
                        ]);
1197 geraldo 631
                    }
632
 
66 efrain 633
                    array_push($data['competencies'], [
634
                        'competency_type_id' => $competencyTypesUUID[$record->competency_type_id],
635
                        'competency_id' => $record->uuid,
636
                        'name' => $record->name,
1154 geraldo 637
                        'behaviors' => $behaviors
66 efrain 638
                    ]);
639
                }
640
            }
649 geraldo 641
 
66 efrain 642
            $data['jobs_description'] = [];
649 geraldo 643
 
66 efrain 644
            $jobsDescriptionUUID = [];
645
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
649 geraldo 646
 
1196 geraldo 647
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
857 geraldo 648
            $records = $currentCompany ?
649
                    $jobDescriptionMapper->fetchAllActiveByCompanyId($currentCompany->id) :
650
                    $jobDescriptionMapper->fetchAllByDefault();
651
 
649 geraldo 652
            foreach ($records as $record) {
1197 geraldo 653
 
1198 geraldo 654
                $jobsDescriptionUUID[$record->id] = $record->uuid;
1220 geraldo 655
                if ($record->id != $jobDescription->id) {
656
                    array_push($data['jobs_description'], [
657
                        'job_description_id' => $record->uuid,
658
                        'name' => $record->name
659
                    ]);
660
                }
66 efrain 661
            }
1198 geraldo 662
 
1196 geraldo 663
            $data['subordinates_selected'] = [];
66 efrain 664
            $jobDescriptionSubordinateMapper = JobDescriptionSubordinateMapper::getInstance($this->adapter);
665
            $records = $jobDescriptionSubordinateMapper->fetchAllByJobDescriptionIdTopLevel($jobDescription->id);
666
 
649 geraldo 667
            foreach ($records as $record) {
668
 
669
                if (isset($jobsDescriptionUUID[$record->job_description_id_low_level])) {
1205 geraldo 670
 
1207 geraldo 671
                    $jobDescriptionSub = $jobDescriptionMapper->fetchOne($record->job_description_id_low_level);
672
                    if ($jobDescriptionSub) {
1205 geraldo 673
 
1207 geraldo 674
                        array_push($data['subordinates_selected'], [
675
                            'job_description_id' => $jobDescriptionSub->uuid,
676
                            'name' => $jobDescriptionSub->name
677
                        ]);
678
                    }
66 efrain 679
                }
680
            }
681
 
682
            $response = [
683
                'success' => true,
684
                'data' => $data
685
            ];
649 geraldo 686
 
66 efrain 687
            return new JsonModel($response);
688
        } else {
689
            $data = [
690
                'success' => false,
691
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
692
            ];
649 geraldo 693
 
66 efrain 694
            return new JsonModel($data);
695
        }
649 geraldo 696
 
66 efrain 697
        return new JsonModel($data);
698
    }
649 geraldo 699
 
700
    public function deleteAction() {
66 efrain 701
        $currentUserPlugin = $this->plugin('currentUserPlugin');
702
        $currentUser = $currentUserPlugin->getUser();
703
        $currentCompany = $currentUserPlugin->getCompany();
649 geraldo 704
 
66 efrain 705
        $request = $this->getRequest();
706
        $uuid = $this->params()->fromRoute('id');
649 geraldo 707
 
708
        if (!$uuid) {
66 efrain 709
            $data = [
649 geraldo 710
                'success' => false,
711
                'data' => 'ERROR_INVALID_PARAMETER'
66 efrain 712
            ];
649 geraldo 713
 
66 efrain 714
            return new JsonModel($data);
715
        }
649 geraldo 716
 
717
 
66 efrain 718
        $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
719
        $jobDescription = $jobDescriptionMapper->fetchOneByUuid($uuid);
649 geraldo 720
        if (!$jobDescription) {
66 efrain 721
            $data = [
649 geraldo 722
                'success' => false,
723
                'data' => 'ERROR_RECORD_NOT_FOUND'
66 efrain 724
            ];
649 geraldo 725
 
66 efrain 726
            return new JsonModel($data);
727
        }
649 geraldo 728
 
851 geraldo 729
        if ($currentCompany && $jobDescription->company_id != $currentCompany->id) {
66 efrain 730
            $data = [
649 geraldo 731
                'success' => false,
732
                'data' => 'ERROR_UNAUTHORIZED'
66 efrain 733
            ];
649 geraldo 734
 
66 efrain 735
            return new JsonModel($data);
736
        }
737
 
649 geraldo 738
 
739
        if ($request->isPost()) {
66 efrain 740
            $result = $jobDescriptionMapper->delete($jobDescription);
649 geraldo 741
            if ($result) {
66 efrain 742
                $this->logger->info('Se borro el cargo de trabajo ' . $jobDescription->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
649 geraldo 743
 
66 efrain 744
                $data = [
745
                    'success' => true,
746
                    'data' => 'LABEL_RECORD_DELETED'
747
                ];
748
            } else {
749
 
750
                $data = [
649 geraldo 751
                    'success' => false,
752
                    'data' => $jobDescriptionMapper->getError()
66 efrain 753
                ];
754
 
755
                return new JsonModel($data);
756
            }
757
        } else {
758
            $data = [
759
                'success' => false,
760
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
761
            ];
649 geraldo 762
 
66 efrain 763
            return new JsonModel($data);
764
        }
649 geraldo 765
 
66 efrain 766
        return new JsonModel($data);
767
    }
561 geraldo 768
 
854 geraldo 769
    public function importAction() {
850 geraldo 770
 
852 geraldo 771
        $currentUserPlugin = $this->plugin('currentUserPlugin');
772
        $currentUser = $currentUserPlugin->getUser();
773
        $currentCompany = $currentUserPlugin->getCompany();
854 geraldo 774
 
775
        if (!$currentCompany) {
852 geraldo 776
            $data = [
777
                'success' => false,
778
                'data' => 'ERROR_UNAUTHORIZED'
779
            ];
854 geraldo 780
 
852 geraldo 781
            return new JsonModel($data);
782
        }
854 geraldo 783
 
852 geraldo 784
        $request = $this->getRequest();
854 geraldo 785
 
786
        if ($request->isPost()) {
787
 
852 geraldo 788
            $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
789
            $jobDescriptionsDefault = $jobDescriptionMapper->fetchAllByDefault();
854 geraldo 790
 
852 geraldo 791
            $new_records = 0;
854 geraldo 792
            foreach ($jobDescriptionsDefault as $jobDescriptionDefault) {
793
                if ($jobDescriptionDefault->status == JobDescription::STATUS_INACTIVE) {
852 geraldo 794
                    continue;
795
                }
854 geraldo 796
 
852 geraldo 797
                $jobDescription = $jobDescriptionMapper->fetchOneByCompanyId($currentCompany->id, $jobDescriptionDefault->id);
854 geraldo 798
                if (!$jobDescription) {
799
 
852 geraldo 800
                    $jobDescription = new JobDescription();
801
                    $jobDescription->company_id = $currentCompany->id;
802
                    $jobDescription->job_description_id_default = $jobDescriptionDefault->id;
803
                    $jobDescription->name = $jobDescriptionDefault->name;
804
                    $jobDescription->functions = $jobDescriptionDefault->functions;
805
                    $jobDescription->objectives = $jobDescriptionDefault->objectives;
806
                    $jobDescription->status = JobDescription::STATUS_ACTIVE;
854 geraldo 807
 
858 geraldo 808
                    $result = $jobDescriptionMapper->insert($jobDescription);
854 geraldo 809
 
858 geraldo 810
                    if ($result) {
811
 
812
                        //Add Competencies
955 geraldo 813
                        $competenceMapper = CompetencyMapper::getInstance($this->adapter);
858 geraldo 814
                        $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
953 geraldo 815
                        $jobDescriptionCompetencies = $jobDescriptionCompetencyMapper->fetchByJobDescriptionId($jobDescriptionDefault->id);
939 geraldo 816
 
953 geraldo 817
                        if (count($jobDescriptionCompetencies) != 0) {
818
                            foreach ($jobDescriptionCompetencies as $record) {
955 geraldo 819
 
820
                                $competence = $competenceMapper->fetchOneByCompanyIdAndCompetencyIdDefault($currentCompany->id, $record->competency_id);
956 geraldo 821
                                if ($competence) {
822
                                    $newDescriptionCompetency = new JobDescriptionCompetency();
823
                                    $newDescriptionCompetency->competency_id = $competence->id;
824
                                    $newDescriptionCompetency->job_description_id = $jobDescription->id;
825
                                    $newDescriptionCompetency->level = $record->level;
826
                                    $jobDescriptionCompetencyMapper->insert($newDescriptionCompetency);
955 geraldo 827
                                }
858 geraldo 828
                            }
829
                        }
830
 
852 geraldo 831
                        $new_records++;
832
                    } else {
833
                        $data = [
834
                            'success' => false,
835
                            'data' => 'ERROR_CANT_ADD_JOB_DESCRIPTION'
836
                        ];
854 geraldo 837
 
852 geraldo 838
                        return new JsonModel($data);
839
                    }
840
                }
841
            }
854 geraldo 842
 
843
            if ($new_records) {
844
 
845
                if (1 == $new_records) {
852 geraldo 846
                    $data = [
847
                        'success' => true,
848
                        'data' => 'LABEL_1_JOB_DESCRIPTION_IMPORTED'
849
                    ];
854 geraldo 850
 
852 geraldo 851
                    return new JsonModel($data);
852
                } else {
853
                    $data = [
854
                        'success' => true,
854 geraldo 855
                        'data' => $new_records . ' LABEL_MULTI_JOB_DESCRIPTION_IMPORTED'
852 geraldo 856
                    ];
854 geraldo 857
 
852 geraldo 858
                    return new JsonModel($data);
859
                }
860
            } else {
861
                $data = [
862
                    'success' => true,
863
                    'data' => 'LABEL_NO_JOB_DESCRIPTION_IMPORTED'
864
                ];
854 geraldo 865
 
852 geraldo 866
                return new JsonModel($data);
867
            }
868
        } else {
869
            $data = [
870
                'success' => false,
871
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
872
            ];
854 geraldo 873
 
852 geraldo 874
            return new JsonModel($data);
875
        }
854 geraldo 876
 
852 geraldo 877
        return new JsonModel($data);
850 geraldo 878
    }
879
 
649 geraldo 880
    public function reportAction() {
561 geraldo 881
        $currentUserPlugin = $this->plugin('currentUserPlugin');
882
        $currentUser = $currentUserPlugin->getUser();
883
        $currentCompany = $currentUserPlugin->getCompany();
649 geraldo 884
 
561 geraldo 885
        $request = $this->getRequest();
886
        $uuid = $this->params()->fromRoute('id');
887
 
649 geraldo 888
 
889
        if (!$uuid) {
561 geraldo 890
            $data = [
649 geraldo 891
                'success' => false,
892
                'data' => 'ERROR_INVALID_PARAMETER'
561 geraldo 893
            ];
649 geraldo 894
 
561 geraldo 895
            return new JsonModel($data);
896
        }
897
 
898
        $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
899
        $jobDescription = $jobDescriptionMapper->fetchOneByUuid($uuid);
649 geraldo 900
        if (!$jobDescription) {
561 geraldo 901
            $data = [
649 geraldo 902
                'success' => false,
903
                'data' => 'ERROR_RECORD_NOT_FOUND'
561 geraldo 904
            ];
649 geraldo 905
 
561 geraldo 906
            return new JsonModel($data);
907
        }
649 geraldo 908
 
851 geraldo 909
        if ($currentCompany && $jobDescription->company_id != $currentCompany->id) {
561 geraldo 910
            $data = [
649 geraldo 911
                'success' => false,
912
                'data' => 'ERROR_UNAUTHORIZED'
561 geraldo 913
            ];
649 geraldo 914
 
561 geraldo 915
            return new JsonModel($data);
916
        }
917
 
649 geraldo 918
 
561 geraldo 919
        if ($request->isGet()) {
920
 
1213 geraldo 921
 
842 geraldo 922
            return $this->renderPdf($currentCompany, $jobDescription);
561 geraldo 923
        } else {
924
            $data = [
925
                'success' => false,
926
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
927
            ];
649 geraldo 928
 
561 geraldo 929
            return new JsonModel($data);
930
        }
649 geraldo 931
 
561 geraldo 932
        return new JsonModel($data);
933
    }
842 geraldo 934
 
788 geraldo 935
    /**
936
     * Render PDF
937
     * @param type $currentCompany
938
     * @param type $jobDescription
939
     * @return type
940
     */
789 geraldo 941
    public function renderPDF($currentCompany, $jobDescription) {
561 geraldo 942
 
943
        //Generate New PDF
789 geraldo 944
        $pdf = new JobPDF();
842 geraldo 945
 
854 geraldo 946
        $pdf->header = '';
947
        $pdf->footer = '';
849 geraldo 948
 
842 geraldo 949
 
854 geraldo 950
        if ($currentCompany) {
951
            //get company Data
952
            $companyMapper = CompanyMapper::getInstance($this->adapter);
953
            $company = $companyMapper->fetchOne($currentCompany->id);
561 geraldo 954
 
854 geraldo 955
            $target_path = $this->config['leaderslinked.fullpath.company'] . DIRECTORY_SEPARATOR . $company->uuid;
842 geraldo 956
 
854 geraldo 957
            $pdf->header = $company->header ? $target_path . DIRECTORY_SEPARATOR . $company->header : '';
958
            $pdf->footer = $company->footer ? $target_path . DIRECTORY_SEPARATOR . $company->footer : '';
847 geraldo 959
        }
848 geraldo 960
 
927 geraldo 961
        $pdf->SetMargins(10, 0, 10);
714 geraldo 962
 
561 geraldo 963
        $pdf->AliasNbPages();
964
        $pdf->AddPage();
564 geraldo 965
 
697 geraldo 966
        // Add Title
967
        $pdf->customHeader();
654 geraldo 968
 
649 geraldo 969
        // Job Description Name
654 geraldo 970
 
649 geraldo 971
        $job_descrition[] = array(
654 geraldo 972
            'title' => 'Categoría Laboral:',
709 geraldo 973
            'content' => ' ' . $jobDescription->name
649 geraldo 974
        );
654 geraldo 975
 
764 geraldo 976
        $pdf->borderTable('Nombre del cargo de trabajo:', $job_descrition);
649 geraldo 977
 
978
 
654 geraldo 979
        //Hierarchical Relationship
980
 
650 geraldo 981
        $jobDescriptionMapper = JobDescriptionMapper::getInstance($this->adapter);
714 geraldo 982
 
983
        $jobDescriptionSubordinateMapper = JobDescriptionSubordinateMapper::getInstance($this->adapter);
724 geraldo 984
        $jobDescriptionSubordinate = $jobDescriptionSubordinateMapper->fetchAllByJobDescriptionIdTopLevel($jobDescription->id);
714 geraldo 985
 
986
        $subordinate = '';
745 geraldo 987
 
988
        if ($jobDescriptionSubordinate) {
989
 
990
            foreach ($jobDescriptionSubordinate as $rs) {
725 geraldo 991
                $jobSubordinate = $jobDescriptionMapper->fetchOne($rs->job_description_id_low_level);
745 geraldo 992
                if ($jobSubordinate) {
993
                    $subordinate .= $jobSubordinate->name . ' ';
994
                }
717 geraldo 995
            }
996
        }
714 geraldo 997
 
649 geraldo 998
        $jobDescriptionBoss = $jobDescriptionMapper->fetchOne($jobDescription->job_description_id_boss);
999
 
654 geraldo 1000
        $relationship = [
614 geraldo 1001
            array(
714 geraldo 1002
                'title' => 'Depende de: ',
726 geraldo 1003
                'content' => $subordinate ? ' ' . $subordinate : ' No aplica'
649 geraldo 1004
            ),
1005
            array(
1006
                'title' => 'Supervisa a: ',
709 geraldo 1007
                'content' => $jobDescriptionBoss ? ' ' . $jobDescriptionBoss->name : ' No aplica'
649 geraldo 1008
            )
654 geraldo 1009
        ];
579 geraldo 1010
 
701 geraldo 1011
        $pdf->borderTable('Relación jerárquica:', $relationship);
628 geraldo 1012
 
654 geraldo 1013
        // Objetives
628 geraldo 1014
 
1259 geraldo 1015
        $objetives[] = array('content' => strip_tags($jobDescription->objectives));
708 geraldo 1016
        $pdf->borderTable('Objetivos:', $objetives);
653 geraldo 1017
 
654 geraldo 1018
        // Functions
628 geraldo 1019
 
1259 geraldo 1020
        $functions[] = array('content' => strip_tags($jobDescription->functions));
708 geraldo 1021
        $pdf->borderTable('Funciones principales:', $functions);
628 geraldo 1022
 
749 geraldo 1023
        // add section signature
709 geraldo 1024
        $pdf->sectionSignature();
1025
 
654 geraldo 1026
        //Competencies
628 geraldo 1027
 
658 geraldo 1028
        $jobDescriptionCompetencyMapper = JobDescriptionCompetencyMapper::getInstance($this->adapter);
667 geraldo 1029
        $jobDescriptionCompetency = $jobDescriptionCompetencyMapper->fetchByJobDescriptionId($jobDescription->id);
649 geraldo 1030
 
672 geraldo 1031
        $competencyMapper = CompetencyMapper::getInstance($this->adapter);
933 geraldo 1032
        $competenceTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
1213 geraldo 1033
        $behaviorCompetencyMapper = BehaviorCompetencyMapper::getInstance($this->adapter);
1220 geraldo 1034
        $jobDescriptionBehaviorCompetencyMapper = JobDescriptionBehaviorCompetencyMapper::getInstance($this->adapter);
1320 efrain 1035
        $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
842 geraldo 1036
 
939 geraldo 1037
 
751 geraldo 1038
        $countCompetencies = count($jobDescriptionCompetency);
672 geraldo 1039
 
751 geraldo 1040
        if ($countCompetencies != 0) {
842 geraldo 1041
 
748 geraldo 1042
            // add new page
842 geraldo 1043
 
748 geraldo 1044
            $pdf->AddPage();
679 geraldo 1045
 
745 geraldo 1046
            $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 1047
 
745 geraldo 1048
            $pdf->singleTable('Competencias requeridas para el cargo:', $competencies_header);
709 geraldo 1049
 
745 geraldo 1050
 
1051
            // Add scale section
1052
            $pdf->sectionScale();
1053
 
1054
            $i = 0;
1055
            foreach ($jobDescriptionCompetency as $record) {
1056
 
1057
                $i = $i + 1;
1058
 
1214 geraldo 1059
                $behaviorCompetencies = $behaviorCompetencyMapper->fetchByCompetencyId($record->competency_id);
1213 geraldo 1060
                $behaviors = [];
1061
 
1062
                foreach ($behaviorCompetencies as $rows) {
1063
 
1064
                    $behavior = $behaviorMapper->fetchOne($rows->behavior_id);
1065
                    $jobDescriptionBehaviorCompetency = $jobDescriptionBehaviorCompetencyMapper->fetchOneByBehavior($jobDescription->id, $record->competency_id, $rows->behavior_id);
1066
 
1067
                    if ($behavior && $jobDescriptionBehaviorCompetency) {
1068
 
1069
                        array_push($behaviors, [
1070
                            'description' => $behavior->description,
1071
                            'level' => $jobDescriptionBehaviorCompetency->level
1072
                        ]);
1073
                    }
1074
                }
1075
 
745 geraldo 1076
                $competency = $competencyMapper->fetchOne($record->competency_id);
933 geraldo 1077
                $competenceType = $competenceTypeMapper->fetchOne($competency->competency_type_id);
745 geraldo 1078
 
1223 geraldo 1079
                $pdf->competencyTable($i, $competenceType, $competency, $behaviors);
933 geraldo 1080
 
923 geraldo 1081
                if ($i % 3 == 0 && $i < $countCompetencies) {
745 geraldo 1082
                    $pdf->AddPage();
1083
                }
709 geraldo 1084
            }
669 geraldo 1085
        }
658 geraldo 1086
 
1087
 
561 geraldo 1088
        return $pdf->Output();
1089
    }
649 geraldo 1090
 
66 efrain 1091
}