Proyectos de Subversion LeadersLinked - Backend

Rev

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