table('lg_papel_generico') ->select('id, code') ->where('is_deleted', 0) ->get() ->getResultArray(); // Mapa code => id $papelMap = []; foreach ($papeles as $p) { if (!empty($p['code'])) { $papelMap[trim($p['code'])] = $p['id']; } } // Mapa de acabados => id $acabadosMap = [ 'plastificado_brillo' => 1, 'plastificado_mate' => 5, ]; // Mapa de encuadernaciones => id $encuadernacionMap = [ 'RCHV' => 4, // cosido tapa blanda 'RCHVS' => 20, // cosido tapa blanda solapas 'RDF' => 1, // fresado tapa dura 'RF' => 2, // fresado tapa blanda 'RFS' => 2, // fresado tapa blanda solapas 'TDC' => 3, // cosido tapa dura ]; if (empty($params[0]) || !is_numeric($params[0])) { CLI::error('Debes proporcionar un customer_id válido como parámetro.'); return; } $customerId = (int) $params[0]; CLI::write("Iniciando importación para customer_id = $customerId ...", 'yellow'); $libros = $db->table('catalogo_libro_antiguo_erp') ->where('customer_id', $customerId) ->where('deleted_at', null) ->get() ->getResultArray(); if (empty($libros)) { CLI::write('No se encontraron registros para importar.', 'red'); return; } foreach ($libros as $libro) { $nuevoLibro = [ 'id' => $libro['id'], 'cliente_id' => $libro['customer_id'], 'proveedor_id' => null, 'user_created_id' => 1, 'user_update_id' => 1, 'cubierta_archivo' => $libro['cover_file'], 'cubierta_url' => $libro['cover_url'], 'ancho' => $libro['ancho'], 'alto' => $libro['alto'], 'peso' => $libro['peso'], 'titulo' => $libro['titulo'], 'autor' => $libro['autor'] ?? null, 'autor_entidad' => $libro['autor_entidad'], 'traductor' => $libro['traductor'], 'ilustrador' => $libro['ilustrador'], 'idioma' => $libro['idioma'], 'num_edic' => $libro['num_edic'], 'fecha_disponibilidad' => $libro['fecha_disponibilidad'], 'fecha_public' => $libro['fecha_public'], 'num_fotos' => $libro['num_fotos'], 'num_ilustr' => $libro['num_ilustr'], 'num_ilustr_color' => $libro['num_ilustr_color'], 'num_ilustr_bn' => $libro['num_ilustr_bn'], 'coleccion' => $libro['coleccion'] ?? null, 'isbn' => $libro['isbn'], 'ean' => $this->generarEAN($libro['isbn']), 'editorial' => $libro['editorial'], 'resumen' => $libro['resumen'], 'resumen_breve' => $libro['resumen_breve'], 'sello' => $libro['sello'], 'paginas' => $libro['paginas'], 'tipo_impresion' => $this->mapTipoImpresion($libro['tipo_impresion']), 'comentarios' => $libro['comentarios'], 'negro_paginas' => $libro['negro_paginas'], 'negro_papel_id' => $this->getPapelId($libro['negro_papel'], $papelMap), 'negro_gramaje' => $libro['negro_gramaje'], 'negro_pod_papel_id' => $this->getPapelId($libro['negro_papel'], $papelMap), 'negro_pod_gramaje' => $libro['negro_gramaje'], 'color_paginas' => $libro['color_paginas'], 'color_papel_id' => $this->getPapelId($libro['color_papel'], $papelMap), 'color_gramaje' => $libro['color_gramaje'], 'color_pod_papel_id' => $this->getPapelId($libro['color_papel'], $papelMap), 'color_pod_gramaje' => $libro['color_gramaje'], 'cubierta_paginas' => $libro['portada_paginas'], 'cubierta_papel_id' => $this->getPapelId($libro['portada_papel'], $papelMap), 'cubierta_gramaje' => $libro['portada_gramaje'], 'cubierta_pod_papel_id' => $this->getPapelId($libro['portada_papel'], $papelMap), 'cubierta_pod_gramaje' => $libro['portada_gramaje'], 'cubierta_acabado_id' => $this->getAcabadoId($libro['portada_acabado'], $acabadosMap), 'cubierta_ancho_solapas' => $libro['solapas_ancho'], 'sobrecubierta_paginas' => $libro['cubierta_paginas'], 'sobrecubierta_papel_id' => $this->getPapelId($libro['cubierta_papel'], $papelMap), 'sobrecubierta_gramaje' => $libro['cubierta_gramaje'], 'sobrecubierta_pod_papel_id' => $this->getPapelId($libro['cubierta_papel'], $papelMap), 'sobrecubierta_pod_gramaje' => $libro['cubierta_gramaje'], 'sobrecubierta_acabado_id' => $this->getAcabadoId($libro['cubierta_acabado'], $acabadosMap), 'sobrecubierta_ancho_solapas' => 0, 'encuadernacion_id' => $this->getEncuadernacionId($libro['encuardenacion'], $encuadernacionMap), 'ubicacion' => $libro['ubicacion'], 'created_at' => date('Y-m-d H:i:s'), 'updated_at' => date('Y-m-d H:i:s'), 'deleted_at' => $libro['deleted_at'], 'iskn' => null, ]; $exists = $db->table('catalogo_libros') ->where('id', $libro['id']) ->countAllResults(); if ($exists == 0) { $db->table('catalogo_libros')->insert($nuevoLibro); $totalImportados++; }else{ CLI::write("El libro con ISBN " . $libro['isbn'] . " ya existe para el cliente con id " . $customerId . ".", 'yellow'); } } CLI::write("Importación finalizada. Se insertaron " . $totalImportados . " registros.", 'green'); } private function mapTipoImpresion($tipo) { switch ($tipo) { case 'bn': return 'negro'; case 'color': return 'color'; case 'colorfoto': return 'colorhq'; case 'bicolor': return 'color'; default: return null; } } private function getPapelId(?string $code, array $map): ?int { if ($code === null) return null; $code = trim($code); return $map[$code] ?? null; } private function getAcabadoId(?string $nombre, array $map): ?int { if ($nombre === null) return null; $nombre = trim($nombre); return $map[$nombre] ?? null; } private function getEncuadernacionId(?string $codigo, array $map): ?int { if ($codigo === null) return null; $codigo = trim($codigo); return $map[$codigo] ?? null; } private function generarEAN(?string $isbn): ?string { if ($isbn === null) return null; return str_replace('-', '', $isbn); } }