laravel-vuexy-admin-mexico-.../database/seeders/UnidadConversionesSeeder.php
2025-03-06 12:21:17 -06:00

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);
}
}
}
}