mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
205 lines
7.7 KiB
PHP
205 lines
7.7 KiB
PHP
<?php
|
|
|
|
namespace App\Commands;
|
|
|
|
use CodeIgniter\CLI\BaseCommand;
|
|
use CodeIgniter\CLI\CLI;
|
|
|
|
class CatalogoLibroImportar extends BaseCommand
|
|
{
|
|
protected $group = 'Safekat';
|
|
protected $name = 'catalogo:libro-importar';
|
|
protected $description = 'Importa los registros de catalogo_libro a catalogo_libros para un customer_id dado';
|
|
|
|
public function run(array $params)
|
|
{
|
|
$db = \Config\Database::connect();
|
|
$totalImportados = 0;
|
|
|
|
// Al inicio del método run()
|
|
$papeles = $db->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);
|
|
}
|
|
|
|
}
|