Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16766 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
<?php
1098 geraldo 2
 
1 www 3
declare(strict_types=1);
4
 
5
namespace LeadersLinked\Controller;
6
 
7
use Laminas\Db\Adapter\AdapterInterface;
16768 efrain 8
 
1 www 9
use Laminas\Mvc\Controller\AbstractActionController;
10
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
11
use Laminas\Log\LoggerInterface;
12
use Laminas\View\Model\ViewModel;
13
use Laminas\View\Model\JsonModel;
14
use LeadersLinked\Library\Functions;
15
use LeadersLinked\Mapper\CompetencyMapper;
16
use LeadersLinked\Model\Competency;
15444 efrain 17
use LeadersLinked\Form\Competency\CompetencyForm;
1 www 18
use LeadersLinked\Mapper\CompetencyTypeMapper;
1142 geraldo 19
use LeadersLinked\Model\CompetencyType;
14989 efrain 20
use LeadersLinked\Mapper\CompetencyBehaviorMapper;
21
use LeadersLinked\Model\CompetencyBehavior;
1320 efrain 22
use LeadersLinked\Mapper\BehaviorMapper;
1 www 23
 
15133 stevensc 24
class CompetencyController extends AbstractActionController {
1 www 25
 
26
    /**
27
     *
28
     * @var AdapterInterface
29
     */
30
    private $adapter;
16768 efrain 31
 
1 www 32
    /**
33
     *
34
     * @var  LoggerInterface
35
     */
36
    private $logger;
16768 efrain 37
 
1 www 38
    /**
39
     *
40
     * @var array
41
     */
42
    private $config;
16768 efrain 43
 
1 www 44
    /**
45
     *
46
     * @param AdapterInterface $adapter
47
     * @param LoggerInterface $logger
48
     * @param array $config
49
     */
16768 efrain 50
    public function __construct($adapter, $logger, $config)
51
    {
1098 geraldo 52
        $this->adapter = $adapter;
53
        $this->logger = $logger;
54
        $this->config = $config;
1 www 55
    }
1098 geraldo 56
 
15133 stevensc 57
    public function indexAction() {
28 efrain 58
        $currentUserPlugin = $this->plugin('currentUserPlugin');
59
        $currentUser = $currentUserPlugin->getUser();
60
        $currentCompany = $currentUserPlugin->getCompany();
1098 geraldo 61
 
1 www 62
        $request = $this->getRequest();
1098 geraldo 63
 
64
        $headers = $request->getHeaders();
65
 
1 www 66
        $request = $this->getRequest();
1098 geraldo 67
        if ($request->isGet()) {
68
 
69
 
70
            $headers = $request->getHeaders();
71
 
1 www 72
            $isJson = false;
1098 geraldo 73
            if ($headers->has('Accept')) {
1 www 74
                $accept = $headers->get('Accept');
1098 geraldo 75
 
1 www 76
                $prioritized = $accept->getPrioritized();
1098 geraldo 77
 
78
                foreach ($prioritized as $key => $value) {
1 www 79
                    $raw = trim($value->getRaw());
1098 geraldo 80
 
81
                    if (!$isJson) {
1 www 82
                        $isJson = strpos($raw, 'json');
83
                    }
84
                }
85
            }
1098 geraldo 86
 
87
            if ($isJson) {
15133 stevensc 88
                $search = $this->params()->fromQuery('search', []);
16766 efrain 89
                $search = empty($search['value']) ? '' :  Functions::sanitizeFilterString($search['value']);
1098 geraldo 90
 
15371 efrain 91
                $start = intval($this->params()->fromQuery('start', 0), 10);
1098 geraldo 92
                $records_x_page = intval($this->params()->fromQuery('length', 10), 10);
15371 efrain 93
                $page =  intval($start / $records_x_page);
94
                $page++;
95
 
1098 geraldo 96
                $order = $this->params()->fromQuery('order', []);
97
                $order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);
16766 efrain 98
                $order_direction = empty($order[0]['dir']) ? 'ASC' : Functions::sanitizeFilterString(filter_var($order[0]['dir']));
1098 geraldo 99
 
100
                $fields = ['type', 'name'];
1 www 101
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
1098 geraldo 102
 
103
                if (!in_array($order_direction, ['ASC', 'DESC'])) {
1 www 104
                    $order_direction = 'ASC';
105
                }
1098 geraldo 106
 
14989 efrain 107
                $competencyMapper = CompetencyMapper::getInstance($this->adapter);
1098 geraldo 108
 
15444 efrain 109
 
1098 geraldo 110
                if ($currentCompany) {
14989 efrain 111
                    $paginator = $competencyMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);
28 efrain 112
                } else {
15444 efrain 113
                    $paginator = $competencyMapper->fetchAllDataTableDefault($search, $page, $records_x_page, $order_field, $order_direction);
28 efrain 114
                }
1 www 115
                $items = [];
116
                $records = $paginator->getCurrentItems();
1098 geraldo 117
                foreach ($records as $record) {
1 www 118
                    $item = [
119
                        'type' => $record['type'],
120
                        'name' => $record['name'],
121
                        'status' => $record['status'],
122
                        'actions' => [
15444 efrain 123
                            'link_edit' => $this->url()->fromRoute('jobs-description/competencies/edit', ['id' => $record['uuid']]),
124
                            'link_delete' => $this->url()->fromRoute('jobs-description/competencies/delete', ['id' => $record['uuid']])
1098 geraldo 125
                        ]
1 www 126
                    ];
1098 geraldo 127
 
1 www 128
                    array_push($items, $item);
129
                }
1098 geraldo 130
 
1 www 131
                return new JsonModel([
132
                    'success' => true,
133
                    'data' => [
134
                        'items' => $items,
135
                        'total' => $paginator->getTotalItemCount(),
136
                    ]
137
                ]);
1098 geraldo 138
            } else {
139
                if ($currentCompany) {
66 efrain 140
                    $form = new CompetencyForm($this->adapter, $currentCompany->id);
141
                } else {
142
                    $form = new CompetencyForm($this->adapter);
143
                }
15133 stevensc 144
 
145
 
1 www 146
                $this->layout()->setTemplate('layout/layout-backend');
147
                $viewModel = new ViewModel();
148
                $viewModel->setTemplate('leaders-linked/competencies/index.phtml');
14989 efrain 149
                $viewModel->setVariables([
150
                    'form' =>  $form,
151
                ]);
1098 geraldo 152
                return $viewModel;
153
            }
1 www 154
        } else {
155
            return new JsonModel([
156
                'success' => false,
157
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1098 geraldo 158
            ]);
1 www 159
        }
160
    }
1098 geraldo 161
 
15133 stevensc 162
    public function addAction() {
1 www 163
        $currentUserPlugin = $this->plugin('currentUserPlugin');
164
        $currentUser = $currentUserPlugin->getUser();
28 efrain 165
        $currentCompany = $currentUserPlugin->getCompany();
1098 geraldo 166
 
1 www 167
        $request = $this->getRequest();
1098 geraldo 168
 
14989 efrain 169
        if ($request->isGet()) {
15133 stevensc 170
 
171
 
14989 efrain 172
            $behaviors = [];
15133 stevensc 173
 
14989 efrain 174
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
15133 stevensc 175
 
15369 efrain 176
            if($currentCompany) {
177
                $records = $behaviorMapper->fetchAllActiveByCompanyId($currentCompany->id);
178
            } else {
179
                $records = $behaviorMapper->fetchAllActiveByDefault();
180
            }
15133 stevensc 181
 
15369 efrain 182
 
15133 stevensc 183
            foreach($records as $record)
184
            {
14989 efrain 185
                array_push($behaviors, [
186
                    'id' => $record->uuid,
187
                    'description' => $record->description,
188
                    'checked' => 0
15133 stevensc 189
 
14989 efrain 190
                ]);
191
            }
15133 stevensc 192
 
14989 efrain 193
            return new JsonModel([
194
                'success' => true,
195
                'data' => [
196
                    'behaviors' => $behaviors
197
                ]
198
            ]);
15133 stevensc 199
 
200
 
201
 
14989 efrain 202
        } else   if ($request->isPost()) {
1098 geraldo 203
            if ($currentCompany) {
66 efrain 204
                $form = new CompetencyForm($this->adapter, $currentCompany->id);
205
            } else {
206
                $form = new CompetencyForm($this->adapter);
207
            }
1 www 208
            $dataPost = $request->getPost()->toArray();
1098 geraldo 209
 
1 www 210
            $form->setData($dataPost);
1098 geraldo 211
 
212
            if ($form->isValid()) {
1 www 213
                $dataPost = (array) $form->getData();
214
                $dataPost['status'] = $dataPost['status'] ? $dataPost['status'] : Competency::STATUS_INACTIVE;
1098 geraldo 215
 
14989 efrain 216
                $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
217
                $competencyType = $competencyTypeMapper->fetchOneByUuid($dataPost['competency_type_id']);
218
                $dataPost['competency_type_id'] = $competencyType->id;
1 www 219
 
28 efrain 220
 
1 www 221
                $hydrator = new ObjectPropertyHydrator();
14989 efrain 222
                $competency = new Competency();
1098 geraldo 223
 
14989 efrain 224
                $hydrator->hydrate($dataPost, $competency);
1098 geraldo 225
 
226
                if ($currentCompany) {
14989 efrain 227
                    $competency->company_id = $currentCompany->id;
28 efrain 228
                }
1 www 229
 
14989 efrain 230
                $competencyMapper = CompetencyMapper::getInstance($this->adapter);
231
                $result = $competencyMapper->insert($competency);
1098 geraldo 232
 
233
                if ($result) {
1151 geraldo 234
 
14989 efrain 235
                    $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
1320 efrain 236
                    $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
1147 geraldo 237
 
14989 efrain 238
                    $competencyBehaviorMapper->deleteAllBCompetencyId($competency->id);
1140 geraldo 239
 
14989 efrain 240
                    $behavior_ids = $dataPost['behavior_id'];
1140 geraldo 241
 
14989 efrain 242
                    foreach ($behavior_ids as $behavior_id) {
1140 geraldo 243
 
14989 efrain 244
                        $behavior = $behaviorMapper->fetchOneByUuid($behavior_id);
1147 geraldo 245
                        if ($behavior) {
14989 efrain 246
                            $behaviorCompetency = new CompetencyBehavior();
247
                            $behaviorCompetency->competency_id = $competency->id;
1151 geraldo 248
                            $behaviorCompetency->behavior_id = $behavior->id;
14989 efrain 249
                            $competencyBehaviorMapper->insert($behaviorCompetency);
1147 geraldo 250
                        }
1140 geraldo 251
                    }
1151 geraldo 252
 
14989 efrain 253
                    $this->logger->info('Se agrego la competencia ' . $competency->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1140 geraldo 254
 
1 www 255
                    $data = [
1098 geraldo 256
                        'success' => true,
257
                        'data' => 'LABEL_RECORD_ADDED'
1 www 258
                    ];
259
                } else {
260
                    $data = [
1098 geraldo 261
                        'success' => false,
14989 efrain 262
                        'data' => $competencyMapper->getError()
1 www 263
                    ];
264
                }
1098 geraldo 265
 
1 www 266
                return new JsonModel($data);
267
            } else {
268
                $messages = [];
269
                $form_messages = (array) $form->getMessages();
1098 geraldo 270
                foreach ($form_messages as $fieldname => $field_messages) {
271
 
1 www 272
                    $messages[$fieldname] = array_values($field_messages);
273
                }
1098 geraldo 274
 
1 www 275
                return new JsonModel([
1098 geraldo 276
                    'success' => false,
277
                    'data' => $messages
1 www 278
                ]);
279
            }
280
        } else {
281
            $data = [
282
                'success' => false,
283
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
284
            ];
1098 geraldo 285
 
1 www 286
            return new JsonModel($data);
287
        }
1098 geraldo 288
 
1 www 289
        return new JsonModel($data);
290
    }
1098 geraldo 291
 
15133 stevensc 292
    public function editAction() {
1 www 293
        $currentUserPlugin = $this->plugin('currentUserPlugin');
294
        $currentUser = $currentUserPlugin->getUser();
28 efrain 295
        $currentCompany = $currentUserPlugin->getCompany();
1098 geraldo 296
 
1 www 297
        $request = $this->getRequest();
298
        $uuid = $this->params()->fromRoute('id');
299
 
1098 geraldo 300
 
301
        if (!$uuid) {
1 www 302
            $data = [
1098 geraldo 303
                'success' => false,
304
                'data' => 'ERROR_INVALID_PARAMETER'
1 www 305
            ];
1098 geraldo 306
 
1 www 307
            return new JsonModel($data);
308
        }
309
 
14989 efrain 310
        $competencyMapper = CompetencyMapper::getInstance($this->adapter);
311
        $competency = $competencyMapper->fetchOneByUuid($uuid);
312
        if (!$competency) {
1 www 313
            $data = [
1098 geraldo 314
                'success' => false,
315
                'data' => 'ERROR_RECORD_NOT_FOUND'
1 www 316
            ];
1098 geraldo 317
 
1 www 318
            return new JsonModel($data);
319
        }
1098 geraldo 320
 
321
        if ($currentCompany) {
14989 efrain 322
            if ($competency->company_id != $currentCompany->id) {
28 efrain 323
                $data = [
1098 geraldo 324
                    'success' => false,
325
                    'data' => 'ERROR_UNAUTHORIZED'
28 efrain 326
                ];
1098 geraldo 327
 
28 efrain 328
                return new JsonModel($data);
329
            }
330
        } else {
14989 efrain 331
            if ($competency->company_id) {
28 efrain 332
                $data = [
1098 geraldo 333
                    'success' => false,
334
                    'data' => 'ERROR_UNAUTHORIZED'
28 efrain 335
                ];
1098 geraldo 336
 
28 efrain 337
                return new JsonModel($data);
338
            }
339
        }
14989 efrain 340
        if ($request->isGet()) {
15133 stevensc 341
 
14989 efrain 342
            $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
343
            $competencyType = $competencyTypeMapper->fetchOne($competency->competency_type_id);
15133 stevensc 344
 
14989 efrain 345
            $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
15133 stevensc 346
 
14989 efrain 347
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
15133 stevensc 348
 
15369 efrain 349
            if($currentCompany) {
15133 stevensc 350
 
15369 efrain 351
                $records = $behaviorMapper->fetchAllActiveByCompanyId($currentCompany->id);
352
            } else {
353
                $records = $behaviorMapper->fetchAllActiveByDefault();
354
            }
355
 
356
 
14989 efrain 357
            $behaviors = [];
15133 stevensc 358
            foreach($records as $record)
359
            {
14989 efrain 360
                $competencyBehavior = $competencyBehaviorMapper->fetchOneByBehaviorIdAndCompetencyId($record->id, $competency->id);
15133 stevensc 361
 
362
 
14989 efrain 363
                array_push($behaviors, [
364
                    'id' => $record->uuid,
365
                    'description' => $record->description,
366
                    'checked' => $competencyBehavior ? 1 : 0
15133 stevensc 367
 
14989 efrain 368
                ]);
15133 stevensc 369
 
14989 efrain 370
            }
15133 stevensc 371
 
14989 efrain 372
            $response = [
373
                'success' => true,
15133 stevensc 374
                'data' =>[
14989 efrain 375
                    'competency_type_id' => $competencyType->uuid,
376
                    'name' => $competency->name,
377
                    'description' => $competency->description,
378
                    'status' => $competency->status,
379
                    'behaviors' =>  $behaviors,
15133 stevensc 380
               ]
14989 efrain 381
            ];
1098 geraldo 382
 
14989 efrain 383
 
384
            return new JsonModel($response);
15133 stevensc 385
        }
386
        else  if ($request->isPost()) {
1098 geraldo 387
            if ($currentCompany) {
66 efrain 388
                $form = new CompetencyForm($this->adapter, $currentCompany->id);
389
            } else {
390
                $form = new CompetencyForm($this->adapter);
391
            }
1 www 392
            $dataPost = $request->getPost()->toArray();
1098 geraldo 393
 
394
 
1 www 395
            $form->setData($dataPost);
1098 geraldo 396
 
397
            if ($form->isValid()) {
1 www 398
                $dataPost = (array) $form->getData();
14989 efrain 399
                $dataPost['status'] = empty($dataPost['status']) ? Competency::STATUS_INACTIVE : $dataPost['status'];
1098 geraldo 400
 
14989 efrain 401
                $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
402
                $competencyType = $competencyTypeMapper->fetchOneByUuid($dataPost['competency_type_id']);
403
                $dataPost['competency_type_id'] = $competencyType->id;
1098 geraldo 404
 
1 www 405
                $hydrator = new ObjectPropertyHydrator();
14989 efrain 406
                $hydrator->hydrate($dataPost, $competency);
28 efrain 407
 
14989 efrain 408
                $result = $competencyMapper->update($competency);
1098 geraldo 409
 
410
                if ($result) {
1151 geraldo 411
 
14989 efrain 412
                    $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
1320 efrain 413
                    $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
1147 geraldo 414
 
14989 efrain 415
                    $competencyBehaviorMapper->deleteAllBCompetencyId($competency->id);
1144 geraldo 416
 
14989 efrain 417
                    $behavior_ids = $dataPost['behavior_id'];
15133 stevensc 418
 
14989 efrain 419
                    foreach ($behavior_ids as $behavior_id) {
420
                        $behavior = $behaviorMapper->fetchOneByUuid($behavior_id);
1147 geraldo 421
                        if ($behavior) {
14989 efrain 422
                            $behaviorCompetency = new CompetencyBehavior();
423
                            $behaviorCompetency->competency_id = $competency->id;
1151 geraldo 424
                            $behaviorCompetency->behavior_id = $behavior->id;
14989 efrain 425
                            $competencyBehaviorMapper->insert($behaviorCompetency);
1147 geraldo 426
                        }
1144 geraldo 427
                    }
1151 geraldo 428
 
14989 efrain 429
                    $this->logger->info('Se actualizo la competencia ' . $competencyType->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1098 geraldo 430
 
1 www 431
                    $data = [
432
                        'success' => true,
433
                        'data' => 'LABEL_RECORD_UPDATED'
434
                    ];
435
                } else {
436
                    $data = [
1098 geraldo 437
                        'success' => false,
14989 efrain 438
                        'data' => $competencyMapper->getError()
1 www 439
                    ];
440
                }
1098 geraldo 441
 
1 www 442
                return new JsonModel($data);
443
            } else {
444
                $messages = [];
445
                $form_messages = (array) $form->getMessages();
1098 geraldo 446
                foreach ($form_messages as $fieldname => $field_messages) {
1 www 447
                    $messages[$fieldname] = array_values($field_messages);
448
                }
1098 geraldo 449
 
1 www 450
                return new JsonModel([
1098 geraldo 451
                    'success' => false,
452
                    'data' => $messages
1 www 453
                ]);
454
            }
455
        } else {
456
            $data = [
457
                'success' => false,
458
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
459
            ];
1098 geraldo 460
 
1 www 461
            return new JsonModel($data);
462
        }
1098 geraldo 463
 
1 www 464
        return new JsonModel($data);
465
    }
1098 geraldo 466
 
15133 stevensc 467
    public function deleteAction() {
1 www 468
        $currentUserPlugin = $this->plugin('currentUserPlugin');
469
        $currentUser = $currentUserPlugin->getUser();
28 efrain 470
        $currentCompany = $currentUserPlugin->getCompany();
1098 geraldo 471
 
1 www 472
        $request = $this->getRequest();
473
        $uuid = $this->params()->fromRoute('id');
1098 geraldo 474
 
475
        if (!$uuid) {
1 www 476
            $data = [
1098 geraldo 477
                'success' => false,
478
                'data' => 'ERROR_INVALID_PARAMETER'
1 www 479
            ];
1098 geraldo 480
 
1 www 481
            return new JsonModel($data);
482
        }
1098 geraldo 483
 
484
 
14989 efrain 485
        $competencyMapper = CompetencyMapper::getInstance($this->adapter);
486
        $competency = $competencyMapper->fetchOneByUuid($uuid);
487
        if (!$competency) {
1 www 488
            $data = [
1098 geraldo 489
                'success' => false,
490
                'data' => 'ERROR_RECORD_NOT_FOUND'
1 www 491
            ];
1098 geraldo 492
 
1 www 493
            return new JsonModel($data);
494
        }
1098 geraldo 495
 
496
        if ($currentCompany) {
14989 efrain 497
            if ($competency->company_id != $currentCompany->id) {
28 efrain 498
                $data = [
1098 geraldo 499
                    'success' => false,
500
                    'data' => 'ERROR_UNAUTHORIZED'
28 efrain 501
                ];
1098 geraldo 502
 
28 efrain 503
                return new JsonModel($data);
504
            }
505
        } else {
14989 efrain 506
            if ($competency->company_id) {
28 efrain 507
                $data = [
1098 geraldo 508
                    'success' => false,
509
                    'data' => 'ERROR_UNAUTHORIZED'
28 efrain 510
                ];
1098 geraldo 511
 
28 efrain 512
                return new JsonModel($data);
513
            }
514
        }
1098 geraldo 515
 
516
        if ($request->isPost()) {
14989 efrain 517
            $result = $competencyMapper->delete($competency);
1098 geraldo 518
            if ($result) {
14989 efrain 519
                $this->logger->info('Se borro la competencia ' . $competency->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1098 geraldo 520
 
1 www 521
                $data = [
522
                    'success' => true,
523
                    'data' => 'LABEL_RECORD_DELETED'
524
                ];
525
            } else {
526
 
527
                $data = [
1098 geraldo 528
                    'success' => false,
14989 efrain 529
                    'data' => $competencyMapper->getError()
1 www 530
                ];
531
 
532
                return new JsonModel($data);
533
            }
534
        } else {
535
            $data = [
536
                'success' => false,
537
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
538
            ];
1098 geraldo 539
 
1 www 540
            return new JsonModel($data);
541
        }
1098 geraldo 542
 
1 www 543
        return new JsonModel($data);
544
    }
1098 geraldo 545
 
15133 stevensc 546
    public function importAction() {
28 efrain 547
        $currentUserPlugin = $this->plugin('currentUserPlugin');
548
        $currentUser = $currentUserPlugin->getUser();
549
        $currentCompany = $currentUserPlugin->getCompany();
1098 geraldo 550
 
551
        if (!$currentCompany) {
28 efrain 552
            $data = [
553
                'success' => false,
554
                'data' => 'ERROR_UNAUTHORIZED'
555
            ];
1098 geraldo 556
 
28 efrain 557
            return new JsonModel($data);
558
        }
1098 geraldo 559
 
28 efrain 560
        $request = $this->getRequest();
1098 geraldo 561
 
562
        if ($request->isPost()) {
563
 
28 efrain 564
            $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
14989 efrain 565
            $competencyMapper = CompetencyMapper::getInstance($this->adapter);
566
            $competenciesDefault = $competencyMapper->fetchAllByDefault();
1098 geraldo 567
 
28 efrain 568
            $new_records = 0;
1098 geraldo 569
            foreach ($competenciesDefault as $competencyDefault) {
28 efrain 570
 
1098 geraldo 571
                if ($competencyDefault->status == Competency::STATUS_INACTIVE) {
28 efrain 572
                    continue;
573
                }
1098 geraldo 574
 
14989 efrain 575
                $competency = $competencyMapper->fetchOneByCompanyIdAndCompetencyIdDefault($currentCompany->id, $competencyDefault->id);
1098 geraldo 576
                if (!$competency) {
577
 
578
 
28 efrain 579
                    $competencyType = $competencyTypeMapper->fetchOneByCompanyId($currentCompany->id, $competencyDefault->competency_type_id);
1098 geraldo 580
                    if (!$competencyType) {
581
 
582
 
28 efrain 583
                        $competencyTypeDefault = $competencyTypeMapper->fetchOne($competencyDefault->competency_type_id);
1098 geraldo 584
                        if (!$competencyTypeDefault) {
28 efrain 585
                            continue;
586
                        }
1098 geraldo 587
 
28 efrain 588
                        $competencyType = new CompetencyType();
589
                        $competencyType->company_id = $currentCompany->id;
590
                        $competencyType->competency_type_id_default = $competencyTypeDefault->id;
591
                        $competencyType->description = $competencyTypeDefault->description;
592
                        $competencyType->name = $competencyTypeDefault->name;
593
                        $competencyType->status = CompetencyType::STATUS_ACTIVE;
1098 geraldo 594
 
595
 
596
                        if (!$competencyTypeMapper->insert($competencyType)) {
597
 
28 efrain 598
                            $data = [
599
                                'success' => false,
600
                                'data' => 'ERROR_CANT_ADD_COMPETENCY_TYPE'
601
                            ];
1098 geraldo 602
 
28 efrain 603
                            return new JsonModel($data);
1098 geraldo 604
                        }
28 efrain 605
                    }
1098 geraldo 606
 
607
 
28 efrain 608
                    $competency = new Competency();
609
                    $competency->competency_id_default = $competencyDefault->id;
610
                    $competency->company_id = $currentCompany->id;
611
                    $competency->competency_type_id = $competencyType->id;
612
                    $competency->description = $competencyDefault->description;
613
                    $competency->name = $competencyDefault->name;
614
                    $competency->status = Competency::STATUS_ACTIVE;
1098 geraldo 615
 
5450 efrain 616
                    $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
14989 efrain 617
                    $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
15030 efrain 618
                    $competencyBehaviors = $competencyBehaviorMapper->fetchAllByCompetencyId($competency->id);
1154 geraldo 619
 
14989 efrain 620
                    foreach ($competencyBehaviors as $record) {
1152 geraldo 621
                        $behavior = $behaviorMapper->fetchOne($record->behavior_id);
1098 geraldo 622
 
1152 geraldo 623
                        $behavior = $behaviorMapper->fetchOneByCompanyIdAndBehaviorIdDefault($currentCompany->id, $record->behavior_id);
624
                        if ($behavior) {
14989 efrain 625
                            $behaviorCompetency = new CompetencyBehavior();
1152 geraldo 626
                            $behaviorCompetency->competency_id = $competency->id;
627
                            $behaviorCompetency->behavior_id = $behavior->id;
14989 efrain 628
                            $competencyBehaviorMapper->insert($behaviorCompetency);
1152 geraldo 629
                        }
630
                    }
1098 geraldo 631
 
1152 geraldo 632
 
633
 
14989 efrain 634
                    if ($competencyMapper->insert($competency)) {
28 efrain 635
                        $new_records++;
636
                    } else {
637
                        $data = [
638
                            'success' => false,
15355 efrain 639
                            'data' => $competencyMapper->getError()
28 efrain 640
                        ];
1098 geraldo 641
 
28 efrain 642
                        return new JsonModel($data);
643
                    }
644
                }
645
            }
1098 geraldo 646
 
647
            if ($new_records) {
648
 
649
                if (1 == $new_records) {
28 efrain 650
                    $data = [
651
                        'success' => true,
652
                        'data' => 'LABEL_1_COMPETENCY_IMPORTED'
653
                    ];
1098 geraldo 654
 
28 efrain 655
                    return new JsonModel($data);
656
                } else {
657
                    $data = [
658
                        'success' => true,
1098 geraldo 659
                        'data' => $new_records . ' LABEL_MULTI_COMPETENCIES_IMPORTED'
28 efrain 660
                    ];
1098 geraldo 661
 
28 efrain 662
                    return new JsonModel($data);
663
                }
664
            } else {
665
                $data = [
666
                    'success' => true,
667
                    'data' => 'LABEL_NO_COMPETENCY_IMPORTED'
668
                ];
1098 geraldo 669
 
28 efrain 670
                return new JsonModel($data);
671
            }
672
        } else {
673
            $data = [
674
                'success' => false,
675
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
676
            ];
1098 geraldo 677
 
28 efrain 678
            return new JsonModel($data);
679
        }
1098 geraldo 680
 
28 efrain 681
        return new JsonModel($data);
682
    }
15133 stevensc 683
 
684
 
685
 
1 www 686
}