89 lines
3.2 KiB
PHP
89 lines
3.2 KiB
PHP
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use Illuminate\Database\Seeder;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class UnidadConversionesSeeder extends Seeder
|
|
{
|
|
public function run()
|
|
{
|
|
// Cargar los datos desde el archivo JSON
|
|
$jsonPath = database_path('data/catalogo_sat_unidad_de_conversiones.json');
|
|
|
|
// Comprobar si el archivo JSON existe
|
|
if (!file_exists($jsonPath)) {
|
|
return;
|
|
}
|
|
|
|
$data = json_decode(file_get_contents($jsonPath), true);
|
|
|
|
// Comprobar si el JSON se cargó correctamente
|
|
if (json_last_error() !== JSON_ERROR_NONE) {
|
|
return;
|
|
}
|
|
|
|
// Cargar todas las unidades existentes
|
|
$unidadesExistentes = DB::table('sat_clave_unidad')->get()->keyBy('c_clave_unidad');
|
|
|
|
// Un array para almacenar las nuevas unidades que vamos a insertar
|
|
$nuevasUnidades = [];
|
|
|
|
// Insertar o actualizar las unidades de medida
|
|
foreach ($data['units'] as $unidad) {
|
|
if (!isset($unidad['c_clave_unidad']) || trim($unidad['c_clave_unidad']) == '') {
|
|
continue; // Ignorar si 'c_clave_unidad' es nulo o vacío
|
|
}
|
|
|
|
// Verificamos si la unidad ya existe
|
|
if (!isset($unidadesExistentes[$unidad['c_clave_unidad']])) {
|
|
$nuevasUnidades[] = [
|
|
'c_clave_unidad' => $unidad['c_clave_unidad'],
|
|
'nombre' => $unidad['nombre'],
|
|
'simbolo' => $unidad['simbolo'] ?? null,
|
|
'categoria' => $unidad['categoria'] ?? null,
|
|
'is_base' => false, // Define la lógica para is_base
|
|
'created_at' => now(),
|
|
'updated_at' => now(),
|
|
];
|
|
}
|
|
}
|
|
|
|
// Insertar todas las nuevas unidades en un solo paso
|
|
if (!empty($nuevasUnidades)) {
|
|
DB::table('sat_clave_unidad')->insert($nuevasUnidades);
|
|
}
|
|
|
|
// Volver a cargar las unidades existentes para las conversiones
|
|
$unidadesExistentes = DB::table('sat_clave_unidad')->get()->keyBy('c_clave_unidad');
|
|
|
|
// Preparar un array para las conversiones a insertar
|
|
$nuevasConversiones = [];
|
|
|
|
// Asegúrate de que 'conversions' existe en $data
|
|
if (isset($data['conversions'])) {
|
|
foreach ($data['conversions'] as $conversion) {
|
|
$origen = $unidadesExistentes[$conversion['from_unit']] ?? null;
|
|
$destino = $unidadesExistentes[$conversion['to_unit']] ?? null;
|
|
|
|
// Solo insertar si ambos IDs existen
|
|
if ($origen && $destino) {
|
|
$nuevasConversiones[] = [
|
|
'clave_unidad_origen_id' => $origen->id,
|
|
'clave_unidad_destino_id' => $destino->id,
|
|
'conversion_factor' => $conversion['factor'],
|
|
'created_at' => now(),
|
|
'updated_at' => now(),
|
|
];
|
|
}
|
|
}
|
|
|
|
// Insertar todas las conversiones en un solo paso
|
|
if (!empty($nuevasConversiones)) {
|
|
DB::table('sat_clave_unidad_conversiones')->insert($nuevasConversiones);
|
|
}
|
|
}
|
|
}
|
|
}
|