Proyectos de Subversion LeadersLinked - Backend

Rev

Rev 16768 | | Comparar con el anterior | Ultima modificación | Ver Log |

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