Proyectos de Subversion LeadersLinked - Services

Rev

Rev 541 | Rev 543 | Ir a la última revisión | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 541 Rev 542
Línea 332... Línea 332...
332
                'message' => 'ID de descripción inválido',
332
                'message' => 'ID de descripción inválido',
333
                'data' => []
333
                'data' => []
334
            ];
334
            ];
335
        }
335
        }
Línea 336... Línea -...
336
 
-
 
337
        // 🔹 Validar que $aiCompetencies sea un array no vacío y de objetos/datos
-
 
338
        if (empty($aiCompetencies) || !is_array($aiCompetencies) || count($aiCompetencies) === 0) {
-
 
339
            return [
-
 
340
                'success' => false,
-
 
341
                'message' => 'No se proporcionaron competencias para procesar.',
-
 
342
                'data' => []
-
 
343
            ];
-
 
344
        }
-
 
345
 
-
 
346
        $adapter = $this->adapter;
-
 
347
        $sql = new Sql($adapter);
-
 
348
        $results = [];
-
 
349
 
336
 
350
        foreach ($aiCompetencies as $comp) {
-
 
351
            // 🔹 Validar que cada elemento sea un array
-
 
352
            if (!is_array($comp)) {
-
 
353
                continue; // Ignoramos elementos inválidos
-
 
354
            }
-
 
355
 
-
 
356
            // 🔹 Preparar datos
-
 
357
            $name = trim($comp['name'] ?? '');
-
 
358
            $description = trim($comp['description'] ?? '');
-
 
359
            $hasIdRaw = str_replace("'", '"', $comp['has_id'] ?? '{"bool": false, "nro": 0}');
-
 
360
            $hasIdData = json_decode($hasIdRaw, true);
-
 
361
 
-
 
362
            if (!$name || !$description || !is_array($hasIdData)) {
-
 
363
                continue; // Datos incompletos o corruptos, ignoramos
-
 
364
            }
-
 
365
 
-
 
366
            $competencyId = null;
-
 
367
            $status = '';
-
 
368
 
-
 
369
            // 🔹 Crear nueva competencia si nro == 0
-
 
370
            if ((int) ($hasIdData['nro'] ?? 0) === 0) {
-
 
371
                $uuid = $this->generateUuid();
-
 
372
 
-
 
373
                $insert = $sql->insert(CompetencyMapper::_TABLE)
-
 
374
                    ->values([
-
 
375
                        'uuid' => $uuid,
-
 
376
                        'name' => $name,
-
 
377
                        'description' => $description,
-
 
378
                        'competency_type_id' => $competencyTypeId,
-
 
379
                        'status' => CompetencyMapper::STATUS_ACTIVE,
-
 
380
                        'added_on' => date('Y-m-d H:i:s'),
-
 
381
                        'updated_on' => date('Y-m-d H:i:s')
-
 
382
                    ]);
-
 
383
                $stmt = $sql->prepareStatementForSqlObject($insert)->execute();
-
 
384
 
-
 
385
                if ($stmt->getAffectedRows() === 0) {
-
 
386
                    return [
-
 
387
                        'success' => false,
-
 
388
                        'message' => "Error al insertar la competencia '{$name}'",
-
 
389
                        'data' => []
-
 
390
                    ];
-
 
391
                }
-
 
392
 
-
 
393
                $competencyId = $adapter->getDriver()->getLastGeneratedValue();
-
 
394
                $status = 'created';
-
 
395
            }
-
 
396
            // 🔹 Actualizar competencia existente si nro > 0
-
 
397
            else {
-
 
398
                $competencyId = (int) $hasIdData['nro'];
-
 
399
 
-
 
400
                $select = $sql->select(CompetencyMapper::_TABLE)
-
 
401
                    ->where(['id' => $competencyId]);
-
 
402
                $existing = $sql->prepareStatementForSqlObject($select)->execute()->current();
-
 
403
 
-
 
404
                if (!$existing) {
-
 
405
                    return [
-
 
406
                        'success' => false,
-
 
407
                        'message' => "ID de competencia {$competencyId} no encontrado",
-
 
408
                        'data' => []
-
 
409
                    ];
-
 
410
                }
-
 
411
 
-
 
412
                // Solo actualizar si cambia el nombre o la descripción
-
 
413
                if ($existing['name'] !== $name || $existing['description'] !== $description) {
-
 
414
                    $update = $sql->update(CompetencyMapper::_TABLE)
-
 
415
                        ->set([
-
 
416
                            'name' => $name,
-
 
417
                            'description' => $description,
-
 
418
                            'updated_on' => date('Y-m-d H:i:s')
-
 
419
                        ])
-
 
420
                        ->where(['id' => $competencyId]);
-
 
421
                    $stmt = $sql->prepareStatementForSqlObject($update)->execute();
-
 
422
 
-
 
423
                    if ($stmt->getAffectedRows() === 0) {
-
 
424
                        return [
-
 
425
                            'success' => false,
-
 
426
                            'message' => "Error al actualizar la competencia '{$name}' (ID {$competencyId})",
-
 
427
                            'data' => []
-
 
428
                        ];
-
 
429
                    }
-
 
430
                }
-
 
431
 
-
 
432
                $status = 'updated';
-
 
433
            }
-
 
434
 
-
 
435
            // 🔹 Vincular competencia con job description
-
 
436
            $linkCheck = $sql->select(JobDescriptionCompetencyMapper::_TABLE)
-
 
437
                ->where([
-
 
438
                    'job_description_id' => $jobDescriptionId,
-
 
439
                    'competency_id' => $competencyId
-
 
440
                ]);
-
 
441
            $existsLink = $sql->prepareStatementForSqlObject($linkCheck)->execute()->current();
-
 
442
 
-
 
443
            if (!$existsLink) {
-
 
444
                $linkInsert = $sql->insert(JobDescriptionCompetencyMapper::_TABLE)
-
 
445
                    ->values([
-
 
446
                        'job_description_id' => $jobDescriptionId,
-
 
447
                        'competency_id' => $competencyId
-
 
448
                    ]);
-
 
449
                $stmt = $sql->prepareStatementForSqlObject($linkInsert)->execute();
-
 
450
 
-
 
451
                if ($stmt->getAffectedRows() === 0) {
-
 
452
                    return [
-
 
453
                        'success' => false,
-
 
454
                        'message' => "Error al vincular competencia '{$name}' con la descripción {$jobDescriptionId}",
-
 
455
                        'data' => []
-
 
456
                    ];
-
 
457
                }
-
 
458
            }
-
 
459
 
-
 
460
            // 🔹 Guardar resultado exitoso
-
 
461
            $results[] = [
-
 
462
                'name' => $name,
-
 
463
                'competency_id' => $competencyId,
-
 
464
                'status' => $status
-
 
465
            ];
-
 
466
        }
-
 
467
 
-
 
468
        return [
-
 
469
            'success' => true,
-
 
470
            'message' => 'Procesamiento completado exitosamente.',
-
 
471
            'data' => $results
-
 
472
        ];
337
        return $aiCompetencies;
Línea 473... Línea 338...
473
    }
338
    }
474
 
339