Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 15369 | Rev 15444 | 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
 
15371 efrain 100
                $start = intval($this->params()->fromQuery('start', 0), 10);
1098 geraldo 101
                $records_x_page = intval($this->params()->fromQuery('length', 10), 10);
15371 efrain 102
                $page =  intval($start / $records_x_page);
103
                $page++;
104
 
1098 geraldo 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
                }
15133 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
 
15133 stevensc 170
    public function addAction() {
1 www 171
        $currentUserPlugin = $this->plugin('currentUserPlugin');
172
        $currentUser = $currentUserPlugin->getUser();
28 efrain 173
        $currentCompany = $currentUserPlugin->getCompany();
1098 geraldo 174
 
1 www 175
        $request = $this->getRequest();
1098 geraldo 176
 
14989 efrain 177
        if ($request->isGet()) {
15133 stevensc 178
 
179
 
14989 efrain 180
            $behaviors = [];
15133 stevensc 181
 
14989 efrain 182
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
15133 stevensc 183
 
15369 efrain 184
            if($currentCompany) {
185
                $records = $behaviorMapper->fetchAllActiveByCompanyId($currentCompany->id);
186
            } else {
187
                $records = $behaviorMapper->fetchAllActiveByDefault();
188
            }
15133 stevensc 189
 
15369 efrain 190
 
15133 stevensc 191
            foreach($records as $record)
192
            {
14989 efrain 193
                array_push($behaviors, [
194
                    'id' => $record->uuid,
195
                    'description' => $record->description,
196
                    'checked' => 0
15133 stevensc 197
 
14989 efrain 198
                ]);
199
            }
15133 stevensc 200
 
14989 efrain 201
            return new JsonModel([
202
                'success' => true,
203
                'data' => [
204
                    'behaviors' => $behaviors
205
                ]
206
            ]);
15133 stevensc 207
 
208
 
209
 
14989 efrain 210
        } else   if ($request->isPost()) {
1098 geraldo 211
            if ($currentCompany) {
66 efrain 212
                $form = new CompetencyForm($this->adapter, $currentCompany->id);
213
            } else {
214
                $form = new CompetencyForm($this->adapter);
215
            }
1 www 216
            $dataPost = $request->getPost()->toArray();
1098 geraldo 217
 
1 www 218
            $form->setData($dataPost);
1098 geraldo 219
 
220
            if ($form->isValid()) {
1 www 221
                $dataPost = (array) $form->getData();
222
                $dataPost['status'] = $dataPost['status'] ? $dataPost['status'] : Competency::STATUS_INACTIVE;
1098 geraldo 223
 
14989 efrain 224
                $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
225
                $competencyType = $competencyTypeMapper->fetchOneByUuid($dataPost['competency_type_id']);
226
                $dataPost['competency_type_id'] = $competencyType->id;
1 www 227
 
28 efrain 228
 
1 www 229
                $hydrator = new ObjectPropertyHydrator();
14989 efrain 230
                $competency = new Competency();
1098 geraldo 231
 
14989 efrain 232
                $hydrator->hydrate($dataPost, $competency);
1098 geraldo 233
 
234
                if ($currentCompany) {
14989 efrain 235
                    $competency->company_id = $currentCompany->id;
28 efrain 236
                }
1 www 237
 
14989 efrain 238
                $competencyMapper = CompetencyMapper::getInstance($this->adapter);
239
                $result = $competencyMapper->insert($competency);
1098 geraldo 240
 
241
                if ($result) {
1151 geraldo 242
 
14989 efrain 243
                    $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
1320 efrain 244
                    $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
1147 geraldo 245
 
14989 efrain 246
                    $competencyBehaviorMapper->deleteAllBCompetencyId($competency->id);
1140 geraldo 247
 
14989 efrain 248
                    $behavior_ids = $dataPost['behavior_id'];
1140 geraldo 249
 
14989 efrain 250
                    foreach ($behavior_ids as $behavior_id) {
1140 geraldo 251
 
14989 efrain 252
                        $behavior = $behaviorMapper->fetchOneByUuid($behavior_id);
1147 geraldo 253
                        if ($behavior) {
14989 efrain 254
                            $behaviorCompetency = new CompetencyBehavior();
255
                            $behaviorCompetency->competency_id = $competency->id;
1151 geraldo 256
                            $behaviorCompetency->behavior_id = $behavior->id;
14989 efrain 257
                            $competencyBehaviorMapper->insert($behaviorCompetency);
1147 geraldo 258
                        }
1140 geraldo 259
                    }
1151 geraldo 260
 
14989 efrain 261
                    $this->logger->info('Se agrego la competencia ' . $competency->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1140 geraldo 262
 
1 www 263
                    $data = [
1098 geraldo 264
                        'success' => true,
265
                        'data' => 'LABEL_RECORD_ADDED'
1 www 266
                    ];
267
                } else {
268
                    $data = [
1098 geraldo 269
                        'success' => false,
14989 efrain 270
                        'data' => $competencyMapper->getError()
1 www 271
                    ];
272
                }
1098 geraldo 273
 
1 www 274
                return new JsonModel($data);
275
            } else {
276
                $messages = [];
277
                $form_messages = (array) $form->getMessages();
1098 geraldo 278
                foreach ($form_messages as $fieldname => $field_messages) {
279
 
1 www 280
                    $messages[$fieldname] = array_values($field_messages);
281
                }
1098 geraldo 282
 
1 www 283
                return new JsonModel([
1098 geraldo 284
                    'success' => false,
285
                    'data' => $messages
1 www 286
                ]);
287
            }
288
        } else {
289
            $data = [
290
                'success' => false,
291
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
292
            ];
1098 geraldo 293
 
1 www 294
            return new JsonModel($data);
295
        }
1098 geraldo 296
 
1 www 297
        return new JsonModel($data);
298
    }
1098 geraldo 299
 
15133 stevensc 300
    public function editAction() {
1 www 301
        $currentUserPlugin = $this->plugin('currentUserPlugin');
302
        $currentUser = $currentUserPlugin->getUser();
28 efrain 303
        $currentCompany = $currentUserPlugin->getCompany();
1098 geraldo 304
 
1 www 305
        $request = $this->getRequest();
306
        $uuid = $this->params()->fromRoute('id');
307
 
1098 geraldo 308
 
309
        if (!$uuid) {
1 www 310
            $data = [
1098 geraldo 311
                'success' => false,
312
                'data' => 'ERROR_INVALID_PARAMETER'
1 www 313
            ];
1098 geraldo 314
 
1 www 315
            return new JsonModel($data);
316
        }
317
 
14989 efrain 318
        $competencyMapper = CompetencyMapper::getInstance($this->adapter);
319
        $competency = $competencyMapper->fetchOneByUuid($uuid);
320
        if (!$competency) {
1 www 321
            $data = [
1098 geraldo 322
                'success' => false,
323
                'data' => 'ERROR_RECORD_NOT_FOUND'
1 www 324
            ];
1098 geraldo 325
 
1 www 326
            return new JsonModel($data);
327
        }
1098 geraldo 328
 
329
        if ($currentCompany) {
14989 efrain 330
            if ($competency->company_id != $currentCompany->id) {
28 efrain 331
                $data = [
1098 geraldo 332
                    'success' => false,
333
                    'data' => 'ERROR_UNAUTHORIZED'
28 efrain 334
                ];
1098 geraldo 335
 
28 efrain 336
                return new JsonModel($data);
337
            }
338
        } else {
14989 efrain 339
            if ($competency->company_id) {
28 efrain 340
                $data = [
1098 geraldo 341
                    'success' => false,
342
                    'data' => 'ERROR_UNAUTHORIZED'
28 efrain 343
                ];
1098 geraldo 344
 
28 efrain 345
                return new JsonModel($data);
346
            }
347
        }
14989 efrain 348
        if ($request->isGet()) {
15133 stevensc 349
 
14989 efrain 350
            $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
351
            $competencyType = $competencyTypeMapper->fetchOne($competency->competency_type_id);
15133 stevensc 352
 
14989 efrain 353
            $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
15133 stevensc 354
 
14989 efrain 355
            $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
15133 stevensc 356
 
15369 efrain 357
            if($currentCompany) {
15133 stevensc 358
 
15369 efrain 359
                $records = $behaviorMapper->fetchAllActiveByCompanyId($currentCompany->id);
360
            } else {
361
                $records = $behaviorMapper->fetchAllActiveByDefault();
362
            }
363
 
364
 
14989 efrain 365
            $behaviors = [];
15133 stevensc 366
            foreach($records as $record)
367
            {
14989 efrain 368
                $competencyBehavior = $competencyBehaviorMapper->fetchOneByBehaviorIdAndCompetencyId($record->id, $competency->id);
15133 stevensc 369
 
370
 
14989 efrain 371
                array_push($behaviors, [
372
                    'id' => $record->uuid,
373
                    'description' => $record->description,
374
                    'checked' => $competencyBehavior ? 1 : 0
15133 stevensc 375
 
14989 efrain 376
                ]);
15133 stevensc 377
 
14989 efrain 378
            }
15133 stevensc 379
 
14989 efrain 380
            $response = [
381
                'success' => true,
15133 stevensc 382
                'data' =>[
14989 efrain 383
                    'competency_type_id' => $competencyType->uuid,
384
                    'name' => $competency->name,
385
                    'description' => $competency->description,
386
                    'status' => $competency->status,
387
                    'behaviors' =>  $behaviors,
15133 stevensc 388
               ]
14989 efrain 389
            ];
1098 geraldo 390
 
14989 efrain 391
 
392
            return new JsonModel($response);
15133 stevensc 393
        }
394
        else  if ($request->isPost()) {
1098 geraldo 395
            if ($currentCompany) {
66 efrain 396
                $form = new CompetencyForm($this->adapter, $currentCompany->id);
397
            } else {
398
                $form = new CompetencyForm($this->adapter);
399
            }
1 www 400
            $dataPost = $request->getPost()->toArray();
1098 geraldo 401
 
402
 
1 www 403
            $form->setData($dataPost);
1098 geraldo 404
 
405
            if ($form->isValid()) {
1 www 406
                $dataPost = (array) $form->getData();
14989 efrain 407
                $dataPost['status'] = empty($dataPost['status']) ? Competency::STATUS_INACTIVE : $dataPost['status'];
1098 geraldo 408
 
14989 efrain 409
                $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
410
                $competencyType = $competencyTypeMapper->fetchOneByUuid($dataPost['competency_type_id']);
411
                $dataPost['competency_type_id'] = $competencyType->id;
1098 geraldo 412
 
1 www 413
                $hydrator = new ObjectPropertyHydrator();
14989 efrain 414
                $hydrator->hydrate($dataPost, $competency);
28 efrain 415
 
14989 efrain 416
                $result = $competencyMapper->update($competency);
1098 geraldo 417
 
418
                if ($result) {
1151 geraldo 419
 
14989 efrain 420
                    $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
1320 efrain 421
                    $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
1147 geraldo 422
 
14989 efrain 423
                    $competencyBehaviorMapper->deleteAllBCompetencyId($competency->id);
1144 geraldo 424
 
14989 efrain 425
                    $behavior_ids = $dataPost['behavior_id'];
15133 stevensc 426
 
14989 efrain 427
                    foreach ($behavior_ids as $behavior_id) {
428
                        $behavior = $behaviorMapper->fetchOneByUuid($behavior_id);
1147 geraldo 429
                        if ($behavior) {
14989 efrain 430
                            $behaviorCompetency = new CompetencyBehavior();
431
                            $behaviorCompetency->competency_id = $competency->id;
1151 geraldo 432
                            $behaviorCompetency->behavior_id = $behavior->id;
14989 efrain 433
                            $competencyBehaviorMapper->insert($behaviorCompetency);
1147 geraldo 434
                        }
1144 geraldo 435
                    }
1151 geraldo 436
 
14989 efrain 437
                    $this->logger->info('Se actualizo la competencia ' . $competencyType->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1098 geraldo 438
 
1 www 439
                    $data = [
440
                        'success' => true,
441
                        'data' => 'LABEL_RECORD_UPDATED'
442
                    ];
443
                } else {
444
                    $data = [
1098 geraldo 445
                        'success' => false,
14989 efrain 446
                        'data' => $competencyMapper->getError()
1 www 447
                    ];
448
                }
1098 geraldo 449
 
1 www 450
                return new JsonModel($data);
451
            } else {
452
                $messages = [];
453
                $form_messages = (array) $form->getMessages();
1098 geraldo 454
                foreach ($form_messages as $fieldname => $field_messages) {
1 www 455
                    $messages[$fieldname] = array_values($field_messages);
456
                }
1098 geraldo 457
 
1 www 458
                return new JsonModel([
1098 geraldo 459
                    'success' => false,
460
                    'data' => $messages
1 www 461
                ]);
462
            }
463
        } else {
464
            $data = [
465
                'success' => false,
466
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
467
            ];
1098 geraldo 468
 
1 www 469
            return new JsonModel($data);
470
        }
1098 geraldo 471
 
1 www 472
        return new JsonModel($data);
473
    }
1098 geraldo 474
 
15133 stevensc 475
    public function deleteAction() {
1 www 476
        $currentUserPlugin = $this->plugin('currentUserPlugin');
477
        $currentUser = $currentUserPlugin->getUser();
28 efrain 478
        $currentCompany = $currentUserPlugin->getCompany();
1098 geraldo 479
 
1 www 480
        $request = $this->getRequest();
481
        $uuid = $this->params()->fromRoute('id');
1098 geraldo 482
 
483
        if (!$uuid) {
1 www 484
            $data = [
1098 geraldo 485
                'success' => false,
486
                'data' => 'ERROR_INVALID_PARAMETER'
1 www 487
            ];
1098 geraldo 488
 
1 www 489
            return new JsonModel($data);
490
        }
1098 geraldo 491
 
492
 
14989 efrain 493
        $competencyMapper = CompetencyMapper::getInstance($this->adapter);
494
        $competency = $competencyMapper->fetchOneByUuid($uuid);
495
        if (!$competency) {
1 www 496
            $data = [
1098 geraldo 497
                'success' => false,
498
                'data' => 'ERROR_RECORD_NOT_FOUND'
1 www 499
            ];
1098 geraldo 500
 
1 www 501
            return new JsonModel($data);
502
        }
1098 geraldo 503
 
504
        if ($currentCompany) {
14989 efrain 505
            if ($competency->company_id != $currentCompany->id) {
28 efrain 506
                $data = [
1098 geraldo 507
                    'success' => false,
508
                    'data' => 'ERROR_UNAUTHORIZED'
28 efrain 509
                ];
1098 geraldo 510
 
28 efrain 511
                return new JsonModel($data);
512
            }
513
        } else {
14989 efrain 514
            if ($competency->company_id) {
28 efrain 515
                $data = [
1098 geraldo 516
                    'success' => false,
517
                    'data' => 'ERROR_UNAUTHORIZED'
28 efrain 518
                ];
1098 geraldo 519
 
28 efrain 520
                return new JsonModel($data);
521
            }
522
        }
1098 geraldo 523
 
524
        if ($request->isPost()) {
14989 efrain 525
            $result = $competencyMapper->delete($competency);
1098 geraldo 526
            if ($result) {
14989 efrain 527
                $this->logger->info('Se borro la competencia ' . $competency->name, ['user_id' => $currentUser->id, 'ip' => Functions::getUserIP()]);
1098 geraldo 528
 
1 www 529
                $data = [
530
                    'success' => true,
531
                    'data' => 'LABEL_RECORD_DELETED'
532
                ];
533
            } else {
534
 
535
                $data = [
1098 geraldo 536
                    'success' => false,
14989 efrain 537
                    'data' => $competencyMapper->getError()
1 www 538
                ];
539
 
540
                return new JsonModel($data);
541
            }
542
        } else {
543
            $data = [
544
                'success' => false,
545
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
546
            ];
1098 geraldo 547
 
1 www 548
            return new JsonModel($data);
549
        }
1098 geraldo 550
 
1 www 551
        return new JsonModel($data);
552
    }
1098 geraldo 553
 
15133 stevensc 554
    public function importAction() {
28 efrain 555
        $currentUserPlugin = $this->plugin('currentUserPlugin');
556
        $currentUser = $currentUserPlugin->getUser();
557
        $currentCompany = $currentUserPlugin->getCompany();
1098 geraldo 558
 
559
        if (!$currentCompany) {
28 efrain 560
            $data = [
561
                'success' => false,
562
                'data' => 'ERROR_UNAUTHORIZED'
563
            ];
1098 geraldo 564
 
28 efrain 565
            return new JsonModel($data);
566
        }
1098 geraldo 567
 
28 efrain 568
        $request = $this->getRequest();
1098 geraldo 569
 
570
        if ($request->isPost()) {
571
 
28 efrain 572
            $competencyTypeMapper = CompetencyTypeMapper::getInstance($this->adapter);
14989 efrain 573
            $competencyMapper = CompetencyMapper::getInstance($this->adapter);
574
            $competenciesDefault = $competencyMapper->fetchAllByDefault();
1098 geraldo 575
 
28 efrain 576
            $new_records = 0;
1098 geraldo 577
            foreach ($competenciesDefault as $competencyDefault) {
28 efrain 578
 
1098 geraldo 579
                if ($competencyDefault->status == Competency::STATUS_INACTIVE) {
28 efrain 580
                    continue;
581
                }
1098 geraldo 582
 
14989 efrain 583
                $competency = $competencyMapper->fetchOneByCompanyIdAndCompetencyIdDefault($currentCompany->id, $competencyDefault->id);
1098 geraldo 584
                if (!$competency) {
585
 
586
 
28 efrain 587
                    $competencyType = $competencyTypeMapper->fetchOneByCompanyId($currentCompany->id, $competencyDefault->competency_type_id);
1098 geraldo 588
                    if (!$competencyType) {
589
 
590
 
28 efrain 591
                        $competencyTypeDefault = $competencyTypeMapper->fetchOne($competencyDefault->competency_type_id);
1098 geraldo 592
                        if (!$competencyTypeDefault) {
28 efrain 593
                            continue;
594
                        }
1098 geraldo 595
 
28 efrain 596
                        $competencyType = new CompetencyType();
597
                        $competencyType->company_id = $currentCompany->id;
598
                        $competencyType->competency_type_id_default = $competencyTypeDefault->id;
599
                        $competencyType->description = $competencyTypeDefault->description;
600
                        $competencyType->name = $competencyTypeDefault->name;
601
                        $competencyType->status = CompetencyType::STATUS_ACTIVE;
1098 geraldo 602
 
603
 
604
                        if (!$competencyTypeMapper->insert($competencyType)) {
605
 
28 efrain 606
                            $data = [
607
                                'success' => false,
608
                                'data' => 'ERROR_CANT_ADD_COMPETENCY_TYPE'
609
                            ];
1098 geraldo 610
 
28 efrain 611
                            return new JsonModel($data);
1098 geraldo 612
                        }
28 efrain 613
                    }
1098 geraldo 614
 
615
 
28 efrain 616
                    $competency = new Competency();
617
                    $competency->competency_id_default = $competencyDefault->id;
618
                    $competency->company_id = $currentCompany->id;
619
                    $competency->competency_type_id = $competencyType->id;
620
                    $competency->description = $competencyDefault->description;
621
                    $competency->name = $competencyDefault->name;
622
                    $competency->status = Competency::STATUS_ACTIVE;
1098 geraldo 623
 
5450 efrain 624
                    $behaviorMapper = BehaviorMapper::getInstance($this->adapter);
14989 efrain 625
                    $competencyBehaviorMapper = CompetencyBehaviorMapper::getInstance($this->adapter);
15030 efrain 626
                    $competencyBehaviors = $competencyBehaviorMapper->fetchAllByCompetencyId($competency->id);
1154 geraldo 627
 
14989 efrain 628
                    foreach ($competencyBehaviors as $record) {
1152 geraldo 629
                        $behavior = $behaviorMapper->fetchOne($record->behavior_id);
1098 geraldo 630
 
1152 geraldo 631
                        $behavior = $behaviorMapper->fetchOneByCompanyIdAndBehaviorIdDefault($currentCompany->id, $record->behavior_id);
632
                        if ($behavior) {
14989 efrain 633
                            $behaviorCompetency = new CompetencyBehavior();
1152 geraldo 634
                            $behaviorCompetency->competency_id = $competency->id;
635
                            $behaviorCompetency->behavior_id = $behavior->id;
14989 efrain 636
                            $competencyBehaviorMapper->insert($behaviorCompetency);
1152 geraldo 637
                        }
638
                    }
1098 geraldo 639
 
1152 geraldo 640
 
641
 
14989 efrain 642
                    if ($competencyMapper->insert($competency)) {
28 efrain 643
                        $new_records++;
644
                    } else {
645
                        $data = [
646
                            'success' => false,
15355 efrain 647
                            'data' => $competencyMapper->getError()
28 efrain 648
                        ];
1098 geraldo 649
 
28 efrain 650
                        return new JsonModel($data);
651
                    }
652
                }
653
            }
1098 geraldo 654
 
655
            if ($new_records) {
656
 
657
                if (1 == $new_records) {
28 efrain 658
                    $data = [
659
                        'success' => true,
660
                        'data' => 'LABEL_1_COMPETENCY_IMPORTED'
661
                    ];
1098 geraldo 662
 
28 efrain 663
                    return new JsonModel($data);
664
                } else {
665
                    $data = [
666
                        'success' => true,
1098 geraldo 667
                        'data' => $new_records . ' LABEL_MULTI_COMPETENCIES_IMPORTED'
28 efrain 668
                    ];
1098 geraldo 669
 
28 efrain 670
                    return new JsonModel($data);
671
                }
672
            } else {
673
                $data = [
674
                    'success' => true,
675
                    'data' => 'LABEL_NO_COMPETENCY_IMPORTED'
676
                ];
1098 geraldo 677
 
28 efrain 678
                return new JsonModel($data);
679
            }
680
        } else {
681
            $data = [
682
                'success' => false,
683
                'data' => 'ERROR_METHOD_NOT_ALLOWED'
684
            ];
1098 geraldo 685
 
28 efrain 686
            return new JsonModel($data);
687
        }
1098 geraldo 688
 
28 efrain 689
        return new JsonModel($data);
690
    }
15133 stevensc 691
 
692
 
693
 
1 www 694
}