diff --git a/.vscode/sftp.json b/.vscode/sftp.json
index 89ef7722..e3778a2f 100755
--- a/.vscode/sftp.json
+++ b/.vscode/sftp.json
@@ -24,10 +24,15 @@
"username": "sk-dev",
"password": "KXvYsubai9v*g61~"
},
- "prod":{
+ "sk-prod":{
"host": "erp.safekat.es",
"username": "erp-demo",
"password": "lNkEyukTc1~*3yy9"
+ },
+ "sk-dev":{
+ "host": "erp-dev.safekat.es",
+ "username": "erp-dev",
+ "password": "snqyxNZIhg8m3!9~"
}
}
diff --git a/ci4/app/Controllers/Importadores/ImportadorCatalogo.php b/ci4/app/Controllers/Importadores/ImportadorCatalogo.php
index c77b0fea..8e196f83 100644
--- a/ci4/app/Controllers/Importadores/ImportadorCatalogo.php
+++ b/ci4/app/Controllers/Importadores/ImportadorCatalogo.php
@@ -132,12 +132,10 @@ class ImportadorCatalogo extends BaseResourceController
]);
}
- // Mapear cada columna a una variable
+ // Mapear cada columna a una variable (debe coincidir con catalogo_tool.js)
$isbn = isset($json->fila[0]) ? trim($json->fila[0]) : null;
$refCliente = isset($json->fila[1]) ? trim($json->fila[1]) : null;
- //$descripcion = isset($json->fila[2]) ? trim($json->fila[2]) : null;
$tirada = isset($json->fila[3]) ? (float) $json->fila[3] : null;
- $precio_compra = isset($json->fila[4]) ? (float) $json->fila[4] : null;
if (empty($isbn)) {
return $this->response->setJSON([
@@ -146,6 +144,17 @@ class ImportadorCatalogo extends BaseResourceController
]);
}
+ // 0. Comprobar duplicado en tabla de presupuestos
+ $presupuestoModel = new PresupuestoModel(); // Usa el modelo real que corresponda
+ $yaExiste = $presupuestoModel->where('referencia_cliente', $refCliente)->first();
+
+ if ($yaExiste) {
+ return $this->response->setJSON([
+ 'success' => false,
+ 'message' => 'Referencia ya importada'
+ ]);
+ }
+
$catalogoModel = new CatalogoLibroModel();
// 1. Buscar por ISBN exacto
@@ -270,6 +279,32 @@ class ImportadorCatalogo extends BaseResourceController
'data' => $dataToImport
]);*/
+ $tarifas = $this->obtenerTarifas();
+ $precioDesdeTarifa = $this->calcularPrecioDesdeTarifa(
+ $dataToImport['isColor'],
+ $libro->encuadernacion_id,
+ $libro->ancho,
+ $libro->alto,
+ $libro->paginas,
+ $tarifas
+ );
+
+ if (is_null($precioDesdeTarifa)) {
+ return $this->response->setJSON([
+ 'success' => false,
+ 'message' => 'No se pudo calcular el precio desde las tarifas disponibles.',
+ 'detalle' => [
+ 'tinta' => $dataToImport['isColor'] ? 'color' : 'negro',
+ 'encuadernacion_id' => $libro->encuadernacion_id,
+ 'ancho' => $libro->ancho,
+ 'alto' => $libro->alto,
+ 'paginas' => $libro->paginas
+ ]
+ ]);
+ }
+
+ // Usar precio calculado
+ $precio_compra = $precioDesdeTarifa;
// Procedemos a intentar guardar el presupuesto
// Instancia de presupuesto cliente
@@ -332,6 +367,78 @@ class ImportadorCatalogo extends BaseResourceController
}
+ private function calcularPrecioDesdeTarifa($isColor, $encuadernacionId, $ancho, $alto, $paginas, $tarifas)
+ {
+ // Solo aplicamos tarifa si la encuadernación es Rústica Fresada (id = 2)
+ if ((int) $encuadernacionId !== 2) {
+ return null;
+ }
+
+ $tinta = $isColor ? 'color' : 'negro';
+
+ foreach ($tarifas as $tarifa) {
+ if (
+ strtolower($tarifa['tinta']) === $tinta &&
+ strtolower($tarifa['manipulado']) === 'rústica fresada' &&
+ (int) $tarifa['ancho'] === (int) $ancho &&
+ (int) $tarifa['alto'] === (int) $alto
+ ) {
+ return round($tarifa['precio_fijo'] + ($tarifa['precio_variable'] * $paginas), 4);
+ }
+ }
+
+ return null; // No se encontró tarifa válida
+ }
+
+
+ private function obtenerTarifas()
+ {
+ return [
+ [
+ 'tinta' => 'color',
+ 'manipulado' => 'Rústica Fresada',
+ 'ancho' => 200,
+ 'alto' => 245,
+ 'precio_fijo' => 1.15,
+ 'precio_variable' => 0.076
+ ],
+ [
+ 'tinta' => 'negro',
+ 'manipulado' => 'Rústica Fresada',
+ 'ancho' => 200,
+ 'alto' => 245,
+ 'precio_fijo' => 1.15,
+ 'precio_variable' => 0.009724
+ ],
+ [
+ 'tinta' => 'color',
+ 'manipulado' => 'Rústica Fresada',
+ 'ancho' => 150,
+ 'alto' => 210,
+ 'precio_fijo' => 1.15,
+ 'precio_variable' => 0.03217
+ ],
+ [
+ 'tinta' => 'negro',
+ 'manipulado' => 'Rústica Fresada',
+ 'ancho' => 150,
+ 'alto' => 210,
+ 'precio_fijo' => 1.15,
+ 'precio_variable' => 0.00572
+ ],
+ [
+ 'tinta' => 'negro',
+ 'manipulado' => 'Rústica Fresada',
+ 'ancho' => 170,
+ 'alto' => 240,
+ 'precio_fijo' => 1.15,
+ 'precio_variable' => 0.008
+ ]
+ ];
+ }
+
+
+
diff --git a/httpdocs/assets/js/safekat/pages/importadores/catalogo/catalogo_tool.js b/httpdocs/assets/js/safekat/pages/importadores/catalogo/catalogo_tool.js
index 4423e5c5..cf169fce 100644
--- a/httpdocs/assets/js/safekat/pages/importadores/catalogo/catalogo_tool.js
+++ b/httpdocs/assets/js/safekat/pages/importadores/catalogo/catalogo_tool.js
@@ -173,10 +173,10 @@ document.addEventListener('DOMContentLoaded', function () {
if (response.ok && result.status === 200) {
const skUrl = result.data?.sk_url?.replace('presupuestocliente', 'presupuestoadmin') ?? null;
+ const skId = result.data?.sk_id ?? '';
// Actualizar campo "Notas" con el enlace
- if (skUrl) {
- const skId = result.data?.sk_id ?? '';
+ if (skUrl) {
const notasHtml = `Ver presupuesto (${skId})`;
// La columna de notas es la posición 6 (índice 6)
rowData[6] = notasHtml;
@@ -184,7 +184,7 @@ document.addEventListener('DOMContentLoaded', function () {
}
let html = skUrl
- ? `La fila se importó exitosamente.
Ver presupuesto`
+ ? `La fila se importó exitosamente.
Ver presupuesto (${skId})`
: 'La fila se importó exitosamente.';
let icon = 'success';