Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15133 | Rev 15369 | 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
 
15133 stevensc 26
class CompetencyController extends AbstractActionController {
1 www 27
 
28
    /**
29
     *
30
     * @var AdapterInterface
31
     */
32
    private $adapter;
1098 geraldo 33
 
1 www 34
    /**
35
     *
36
     * @var AbstractAdapter
37
     */
38
    private $cache;
1098 geraldo 39
 
1 www 40
    /**
41
     *
42
     * @var  LoggerInterface
43
     */
44
    private $logger;
45
 
46
    /**
47
     *
48
     * @var array
49
     */
50
    private $config;
1098 geraldo 51
 
1 www 52
    /**
53
     *
54
     * @param AdapterInterface $adapter
55
     * @param AbstractAdapter $cache
56
     * @param LoggerInterface $logger
57
     * @param array $config
58
     */
15133 stevensc 59
    public function __construct($adapter, $cache, $logger, $config) {
1098 geraldo 60
        $this->adapter = $adapter;
61
        $this->cache = $cache;
62
        $this->logger = $logger;
63
        $this->config = $config;
1 www 64
    }
1098 geraldo 65
 
15133 stevensc 66
    public function indexAction() {
28 efrain 67
        $currentUserPlugin = $this->plugin('currentUserPlugin');
68
        $currentUser = $currentUserPlugin->getUser();
69
        $currentCompany = $currentUserPlugin->getCompany();
1098 geraldo 70
 
1 www 71
        $request = $this->getRequest();
1098 geraldo 72
 
73
        $headers = $request->getHeaders();
74
 
1 www 75
        $request = $this->getRequest();
1098 geraldo 76
        if ($request->isGet()) {
77
 
78
 
79
            $headers = $request->getHeaders();
80
 
1 www 81
            $isJson = false;
1098 geraldo 82
            if ($headers->has('Accept')) {
1 www 83
                $accept = $headers->get('Accept');
1098 geraldo 84
 
1 www 85
                $prioritized = $accept->getPrioritized();
1098 geraldo 86
 
87
                foreach ($prioritized as $key => $value) {
1 www 88
                    $raw = trim($value->getRaw());
1098 geraldo 89
 
90
                    if (!$isJson) {
1 www 91
                        $isJson = strpos($raw, 'json');
92
                    }
93
                }
94
            }
1098 geraldo 95
 
96
            if ($isJson) {
15133 stevensc 97
                $search = $this->params()->fromQuery('search', []);
98
                $search = empty($search['value']) ? '' : filter_var($search['value'], FILTER_SANITIZE_STRING);
1098 geraldo 99
 
100
                $page = intval($this->params()->fromQuery('start', 1), 10);
101
                $records_x_page = intval($this->params()->fromQuery('length', 10), 10);
102
                $order = $this->params()->fromQuery('order', []);
103
                $order_field = empty($order[0]['column']) ? 99 : intval($order[0]['column'], 10);
104
                $order_direction = empty($order[0]['dir']) ? 'ASC' : strtoupper(filter_var($order[0]['dir'], FILTER_SANITIZE_STRING));
105
 
106
                $fields = ['type', 'name'];
1 www 107
                $order_field = isset($fields[$order_field]) ? $fields[$order_field] : 'name';
1098 geraldo 108
 
109
                if (!in_array($order_direction, ['ASC', 'DESC'])) {
1 www 110
                    $order_direction = 'ASC';
111
                }
1098 geraldo 112
 
14989 efrain 113
                $competencyMapper = CompetencyMapper::getInstance($this->adapter);
1098 geraldo 114
 
115
                if ($currentCompany) {
14989 efrain 116
                    $paginator = $competencyMapper->fetchAllDataTableByCompanyId($currentCompany->id, $search, $page, $records_x_page, $order_field, $order_direction);
28 efrain 117
                } else {
14989 efrain 118
                    $paginator = $competencyMapper->fetchAllDataTable($search, $page, $records_x_page, $order_field, $order_direction);
28 efrain 119
                }
1 www 120
                $items = [];
121
                $records = $paginator->getCurrentItems();
1098 geraldo 122
                foreach ($records as $record) {
1 www 123
                    $item = [
124
                        'type' => $record['type'],
125
                        'name' => $record['name'],
126
                        'status' => $record['status'],
127
                        'actions' => [
1098 geraldo 128
                            'link_edit' => $this->url()->fromRoute('settings/competencies/edit', ['id' => $record['uuid']]),
129
                            'link_delete' => $this->url()->fromRoute('settings/competencies/delete', ['id' => $record['uuid']])
130
                        ]
1 www 131
                    ];
1098 geraldo 132
 
1 www 133
                    array_push($items, $item);
134
                }
1098 geraldo 135
 
1 www 136
                return new JsonModel([
137
                    'success' => true,
138
                    'data' => [
139
                        'items' => $items,
140
                        'total' => $paginator->getTotalItemCount(),
141
                    ]
142
                ]);
1098 geraldo 143
            } else {
144
                if ($currentCompany) {
66 efrain 145
                    $form = new CompetencyForm($this->adapter, $currentCompany->id);
146
                } else {
147
                    $form = new CompetencyForm($this->adapter);
148
                }
15133 stevensc 149
 
150
 
1 www 151
                $this->layout()->setTemplate('layout/layout-backend');
152
                $viewModel = new ViewModel();
153
                $viewModel->setTemplate('leaders-linked/competencies/index.phtml');
14989 efrain 154
                $viewModel->setVariables([
155
                    'form' =>  $form,
156
                ]);
1098 geraldo 157
                return $viewModel;
158
            }
1 www 159
        } else {
160
            return new JsonModel([
161
                'success' => false,
162
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
1098 geraldo 163
            ]);
1 www 164
        }
165
    }
1098 geraldo 166
 
15133 stevensc 167
    public function addAction() {
1 www 168
        $currentUserPlugin = $this->plugin('currentUserPlugin');
169
        $currentUser = $currentUserPlugin->getUser();
28 efrain 170
        $currentCompany = $currentUserPlugin->getCompany();
1098 geraldo 171
 
1 www 172
        $request = $this->getRequest();
1098 geraldo 173
 
14989 efrain 174
        if ($request->isGet()) {
15133 stevensc 175
 
176
 
14989 efrain 177
            $behaviors = [];
15133 stevensc 178
 
14989 efrain 179
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
15087 efrain 180
            $records = $behaviorMapper->fetchAllActiveByCompanyId($currentCompany->id);
15133 stevensc 181
 
182
 
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);
15087 efrain 348
            $records = $behaviorMapper->fetchAllActiveByCompanyId($currentCompany->id);
15133 stevensc 349
 
350
 
14989 efrain 351
            $behaviors = [];
15133 stevensc 352
            foreach($records as $record)
353
            {
14989 efrain 354
                $competencyBehavior = $competencyBehaviorMapper->fetchOneByBehaviorIdAndCompetencyId($record->id, $competency->id);
15133 stevensc 355
 
356
 
14989 efrain 357
                array_push($behaviors, [
358
                    'id' => $record->uuid,
359
                    'description' => $record->description,
360
                    'checked' => $competencyBehavior ? 1 : 0
15133 stevensc 361
 
14989 efrain 362
                ]);
15133 stevensc 363
 
14989 efrain 364
            }
15133 stevensc 365
 
14989 efrain 366
            $response = [
367
                'success' => true,
15133 stevensc 368
                'data' =>[
14989 efrain 369
                    'competency_type_id' => $competencyType->uuid,
370
                    'name' => $competency->name,
371
                    'description' => $competency->description,
372
                    'status' => $competency->status,
373
                    'behaviors' =>  $behaviors,
15133 stevensc 374
               ]
14989 efrain 375
            ];
1098 geraldo 376
 
14989 efrain 377
 
378
            return new JsonModel($response);
15133 stevensc 379
        }
380
        else  if ($request->isPost()) {
1098 geraldo 381
            if ($currentCompany) {
66 efrain 382
                $form = new CompetencyForm($this->adapter, $currentCompany->id);
383
            } else {
384
                $form = new CompetencyForm($this->adapter);
385
            }
1 www 386
            $dataPost = $request->getPost()->toArray();
1098 geraldo 387
 
388
 
1 www 389
            $form->setData($dataPost);
1098 geraldo 390
 
391
            if ($form->isValid()) {
1 www 392
                $dataPost = (array) $form->getData();
14989 efrain 393
                $dataPost['status'] = empty($dataPost['status']) ? Competency::STATUS_INACTIVE : $dataPost['status'];
1098 geraldo 394
 
14989 efrain 395
                $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
396
                $competencyType = $competencyTypeMapper->fetchOneByUuid($dataPost['competency_type_id']);
397
                $dataPost['competency_type_id'] = $competencyType->id;
1098 geraldo 398
 
1 www 399
                $hydrator = new ObjectPropertyHydrator();
14989 efrain 400
                $hydrator->hydrate($dataPost, $competency);
28 efrain 401
 
14989 efrain 402
                $result = $competencyMapper->update($competency);
1098 geraldo 403
 
404
                if ($result) {
1151 geraldo 405
 
14989 efrain 406
                    $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
1320 efrain 407
                    $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
1147 geraldo 408
 
14989 efrain 409
                    $competencyBehaviorMapper->deleteAllBCompetencyId($competency->id);
1144 geraldo 410
 
14989 efrain 411
                    $behavior_ids = $dataPost['behavior_id'];
15133 stevensc 412
 
14989 efrain 413
                    foreach ($behavior_ids as $behavior_id) {
414
                        $behavior = $behaviorMapper->fetchOneByUuid($behavior_id);
1147 geraldo 415
                        if ($behavior) {
14989 efrain 416
                            $behaviorCompetency = new CompetencyBehavior();
417
                            $behaviorCompetency->competency_id = $competency->id;
1151 geraldo 418
                            $behaviorCompetency->behavior_id = $behavior->id;
14989 efrain 419
                            $competencyBehaviorMapper->insert($behaviorCompetency);
1147 geraldo 420
                        }
1144 geraldo 421
                    }
1151 geraldo 422
 
14989 efrain 423
                    $this->logger->info('Se actualizo la competencia ' . $competencyType->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1098 geraldo 424
 
1 www 425
                    $data = [
426
                        'success' => true,
427
                        'data' => 'LABEL_RECORD_UPDATED'
428
                    ];
429
                } else {
430
                    $data = [
1098 geraldo 431
                        'success' => false,
14989 efrain 432
                        'data' => $competencyMapper->getError()
1 www 433
                    ];
434
                }
1098 geraldo 435
 
1 www 436
                return new JsonModel($data);
437
            } else {
438
                $messages = [];
439
                $form_messages = (array) $form->getMessages();
1098 geraldo 440
                foreach ($form_messages as $fieldname => $field_messages) {
1 www 441
                    $messages[$fieldname] = array_values($field_messages);
442
                }
1098 geraldo 443
 
1 www 444
                return new JsonModel([
1098 geraldo 445
                    'success' => false,
446
                    'data' => $messages
1 www 447
                ]);
448
            }
449
        } else {
450
            $data = [
451
                'success' => false,
452
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
453
            ];
1098 geraldo 454
 
1 www 455
            return new JsonModel($data);
456
        }
1098 geraldo 457
 
1 www 458
        return new JsonModel($data);
459
    }
1098 geraldo 460
 
15133 stevensc 461
    public function deleteAction() {
1 www 462
        $currentUserPlugin = $this->plugin('currentUserPlugin');
463
        $currentUser = $currentUserPlugin->getUser();
28 efrain 464
        $currentCompany = $currentUserPlugin->getCompany();
1098 geraldo 465
 
1 www 466
        $request = $this->getRequest();
467
        $uuid = $this->params()->fromRoute('id');
1098 geraldo 468
 
469
        if (!$uuid) {
1 www 470
            $data = [
1098 geraldo 471
                'success' => false,
472
                'data' => 'ERROR_INVALID_PARAMETER'
1 www 473
            ];
1098 geraldo 474
 
1 www 475
            return new JsonModel($data);
476
        }
1098 geraldo 477
 
478
 
14989 efrain 479
        $competencyMapper = CompetencyMapper::getInstance($this->adapter);
480
        $competency = $competencyMapper->fetchOneByUuid($uuid);
481
        if (!$competency) {
1 www 482
            $data = [
1098 geraldo 483
                'success' => false,
484
                'data' => 'ERROR_RECORD_NOT_FOUND'
1 www 485
            ];
1098 geraldo 486
 
1 www 487
            return new JsonModel($data);
488
        }
1098 geraldo 489
 
490
        if ($currentCompany) {
14989 efrain 491
            if ($competency->company_id != $currentCompany->id) {
28 efrain 492
                $data = [
1098 geraldo 493
                    'success' => false,
494
                    'data' => 'ERROR_UNAUTHORIZED'
28 efrain 495
                ];
1098 geraldo 496
 
28 efrain 497
                return new JsonModel($data);
498
            }
499
        } else {
14989 efrain 500
            if ($competency->company_id) {
28 efrain 501
                $data = [
1098 geraldo 502
                    'success' => false,
503
                    'data' => 'ERROR_UNAUTHORIZED'
28 efrain 504
                ];
1098 geraldo 505
 
28 efrain 506
                return new JsonModel($data);
507
            }
508
        }
1098 geraldo 509
 
510
        if ($request->isPost()) {
14989 efrain 511
            $result = $competencyMapper->delete($competency);
1098 geraldo 512
            if ($result) {
14989 efrain 513
                $this->logger->info('Se borro la competencia ' . $competency->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1098 geraldo 514
 
1 www 515
                $data = [
516
                    'success' => true,
517
                    'data' => 'LABEL_RECORD_DELETED'
518
                ];
519
            } else {
520
 
521
                $data = [
1098 geraldo 522
                    'success' => false,
14989 efrain 523
                    'data' => $competencyMapper->getError()
1 www 524
                ];
525
 
526
                return new JsonModel($data);
527
            }
528
        } else {
529
            $data = [
530
                'success' => false,
531
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
532
            ];
1098 geraldo 533
 
1 www 534
            return new JsonModel($data);
535
        }
1098 geraldo 536
 
1 www 537
        return new JsonModel($data);
538
    }
1098 geraldo 539
 
15133 stevensc 540
    public function importAction() {
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,
15355 efrain 633
                            'data' => $competencyMapper->getError()
28 efrain 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
    }
15133 stevensc 677
 
678
 
679
 
1 www 680
}