Proyectos de Subversion LeadersLinked - Backend

Rev

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