diff --git a/ci4/app/Commands/CatalogoLibroImportar.php b/ci4/app/Commands/CatalogoLibroImportar.php new file mode 100644 index 00000000..31a23e96 --- /dev/null +++ b/ci4/app/Commands/CatalogoLibroImportar.php @@ -0,0 +1,199 @@ +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') + ->where('customer_id', $customerId) + ->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'], + 'isk' => null, + ]; + + $exists = $db->table('catalogo_libros_test') + ->where('id', $libro['id']) + ->countAllResults(); + + if ($exists == 0) { + $db->table('catalogo_libros_test')->insert($nuevoLibro); + } + } + + CLI::write("Importación finalizada. Se insertaron " . count($libros) . " registros.", 'green'); + } + + private function mapTipoImpresion($tipo) + { + switch ($tipo) { + case 'bn': + return 'negro'; + case 'color': + return 'color'; + case 'colorfoto': + return 'colorhq'; + case 'bicolor': + return 'negrohq'; + 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); + } + +}