diff --git a/ci4/app/Config/Routes/PresupuestosRoutes.php b/ci4/app/Config/Routes/PresupuestosRoutes.php
index 4097a69e..16929334 100755
--- a/ci4/app/Config/Routes/PresupuestosRoutes.php
+++ b/ci4/app/Config/Routes/PresupuestosRoutes.php
@@ -17,6 +17,8 @@ $routes->group('presupuestoadmin', ['namespace' => 'App\Controllers\Presupuestos
$routes->post('allmenuitems', 'Presupuestoadmin::allItemsSelect', ['as' => 'select2ItemsOfPresupuestoAdmin']);
$routes->post('menuitems', 'Presupuestoadmin::menuItems', ['as' => 'menuItemsOfPresupuestoAdmin']);
+ $routes->get('checklomointerior', 'Presupuestoadmin::checkLomo');
+
$routes->get('cargar/(:any)', 'Presupuestoadmin::cargar/$1');
$routes->post('comparadorinterior', 'Presupuestoadmin::obtenerComparadorInterior');
$routes->post('comparadorexteriores', 'Presupuestoadmin::obtenerComparadorExteriores');
diff --git a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php
index a69fad38..11a5668f 100755
--- a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php
+++ b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php
@@ -1841,6 +1841,18 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController
}
}
+ public function checkLomo()
+ {
+ if ($this->request->isAJAX()) {
+ $tipo_impresion_id = $this->request->getGet('tipo_impresion_id');
+ $lomo = $this->request->getGet('lomo') ?? 0;
+ $response = PresupuestoService::check_lomo_interior($tipo_impresion_id, $lomo);
+ return $this->respond($response);
+ } else {
+ return $this->failUnauthorized('Invalid request', 403);
+ }
+ }
+
public function reprintPresupuesto()
{
diff --git a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php
index 99f809a6..a06f93a9 100755
--- a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php
+++ b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php
@@ -130,7 +130,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$this->viewData['paisList'] = model('App\Models\Configuracion\PaisModel')->getAllForMenu('id, nombre', 'nombre', true);
$this->viewData['clienteId'] = $clienteId;
$this->viewData['POD'] = $POD;
- $this->viewData['lomo_maximo'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo')->value;
+ $this->viewData['lomo_maximo_fresado_cosido'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_fresado_cosido')->value;
$this->viewData['lomo_minimo_fresado_cosido'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_minimo_fresado_cosido')->value;
$this->viewData['eb'] = 0;
@@ -175,7 +175,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$this->viewData['clienteId'] = $clienteId;
$this->viewData['POD'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('POD')->value;
- $this->viewData['lomo_maximo'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo')->value;
+ $this->viewData['lomo_maximo_fresado_cosido'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_fresado_cosido')->value;
$this->viewData['lomo_minimo_fresado_cosido'] = model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_minimo_fresado_cosido')->value;
$this->viewData['eb'] = $presupuestoEntity->envio_base;
@@ -418,21 +418,53 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'value' => ""
];
$lomo_minimo_fresado_cosido = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_minimo_fresado_cosido')->value);
- $lomo_maximo = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo')->value);
+ $lomo_maximo_fresado_cosido = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_fresado_cosido')->value);
+ $lomo_maximo_espiral = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_espiral')->value);
+ $lomo_maximo_wireo = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_wireo')->value);
if ($tipo == 'cosido' || $tipo == 'fresado') {
if ($lomo < $lomo_minimo_fresado_cosido) {
$errors['status'] = 1;
- $errors['value'] = 'No se pueden encuadernar libros cosidos o fresados con lomo inferior a '
- . $lomo_minimo_fresado_cosido . ' mm. El lomo actual es de ' . $lomo . ' mm. ' .
- "Por favor, aumente el número de páginas o el gramaje del papel para que sea encuadernable.";
+ $errors['value'] = lang(
+ 'Presupuestos.errores.error_lomo_minimo',
+ [
+ lang('Presupuestos.cosido') . "/" . lang('Presupuestos.fresado'),
+ $lomo_minimo_fresado_cosido,
+ $lomo,
+ ]
+ );
}
- if ($lomo > $lomo_maximo) {
+ if ($lomo > $lomo_maximo_fresado_cosido) {
$errors['status'] = 1;
- $errors['value'] = 'No se pueden encuadernar con un lomo superior a '
- . $lomo_maximo . ' mm. El lomo actual es de ' . $lomo . ' mm. ' .
- "Por favor, disminuya el número de páginas o el gramaje del papel para que sea encuadernable.";
+ $errors['value'] = lang(
+ 'Presupuestos.errores.error_lomo_maximo',
+ [
+ lang('Presupuestos.cosido') . "/" . lang('Presupuestos.fresado'),
+ $lomo_maximo_fresado_cosido,
+ $lomo,
+ ]
+ );
}
+ } else if ($tipo == 'espiral' && $lomo > $lomo_maximo_espiral) {
+ $errors['status'] = 1;
+ $errors['value'] = lang(
+ 'Presupuestos.errores.error_lomo_maximo',
+ [
+ lang('Presupuestos.espiral'),
+ $lomo_maximo_espiral,
+ $lomo,
+ ]
+ );
+ } else if ($tipo == 'wireo' && $lomo > $lomo_maximo_wireo) {
+ $errors['status'] = 1;
+ $errors['value'] = lang(
+ 'Presupuestos.errores.error_lomo_maximo',
+ [
+ lang('Presupuestos.wireo'),
+ $lomo_maximo_wireo,
+ $lomo,
+ ]
+ );
}
$data = (object) array(
@@ -469,7 +501,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$noEnvioBase = model('App\Models\Clientes\ClienteModel')->find($cliente_id)->no_envio_base ?? false;
$tirada = $reqData['tirada'] ?? 0;
- $selectedTirada = $reqData['selectedTirada'] ?? -1;
+ $selectedTirada = $reqData['selectedTirada'] ?? (is_array($tirada) ? $tirada[0] : $tirada);
$tamanio = $reqData['tamanio'];
$paginas = $reqData['paginas'] ?? 0;
$paginas_color = $reqData['paginasColor'] ?? 0;
@@ -565,7 +597,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'servicios' => $reqData['servicios'] ?? [],
);
- $return_data = $this->calcular_presupuesto($datos_presupuesto, 0, false); //TRUE FOR DEBUG
+ $develoment_mode = getenv('SK_ENVIRONMENT') !== 'production';
+ $return_data = $this->calcular_presupuesto($datos_presupuesto, $selectedTirada, $develoment_mode); //TRUE FOR DEBUG
if (array_key_exists('errors', $return_data)) {
if ($return_data['errors']->status == 1) {
$return_data = [
@@ -631,13 +664,13 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$return_data['precio_u'][$i] = round(floatval($return_data['precio_u'][$i]) + $coste_envio, 4);
}
- $envio_base = true;
$coste_envio = 0.0; // se inicializa para calcular los costes de envíos restantes si es que hay
$return_data['coste_envio'] = [];
if (count($direcciones) > 0) {
for ($i = 0; $i < count($tirada); $i++) {
$coste_envio = 0.0;
+ $envio_base = true;
foreach ($direcciones as $direccion) {
// El primer envio no se calcula ya que se añade el base
if ($envio_base) {
@@ -1200,12 +1233,14 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
// para el calculo del precio unidad, sólo se tiene en cuenta el envío base
for ($i = 0; $i < count($tirada); $i++) {
- $coste_envio = 0.0;
- $coste_envio += ($resultado_presupuesto['eb'][$i] / $tirada[$i]);
+
$resultado_presupuesto['info']['totales'][$i]['envio_base_margen'] =
floatval($resultado_presupuesto['eb'][$i]) * (floatval($resultado_presupuesto['eb_margen'][$i]) / 100.0);
$resultado_presupuesto['info']['totales'][$i]['envio_base_coste'] = $resultado_presupuesto['eb'][$i];
+ $coste_envio = round(round($resultado_presupuesto['info']['totales'][$i]['envio_base_margen'] +
+ $resultado_presupuesto['info']['totales'][$i]['envio_base_coste'], 2) / 50, 4);
+
$resultado_presupuesto['precio_u'][$i] = round(floatval($resultado_presupuesto['precio_u'][$i]) + $coste_envio, 4);
}
@@ -2125,9 +2160,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
foreach ($interior as $linea) {
if (count($linea) > 0) {
$costeInterior += round(floatval($linea['total_impresion']), 2);
- $peso_interior += floatval($linea['peso']);
- $lomo += floatval($linea['mano']);
- $info['lomo_interior'] += floatval($linea['mano']);
+ $peso_interior += round(floatval($linea['peso']), 2);
+ if (intval($tirada[$t]) == intval($selected_tirada)) {
+ $lomo += floatval($linea['mano']);
+ $info['lomo_interior'] += floatval($linea['mano']);
+ }
if ($extra_info) {
$this->calcular_coste_linea(
$linea,
@@ -2186,8 +2223,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
foreach ($interior as $linea) {
if (count($linea) > 0) {
$costeInterior += round(floatval($linea['total_impresion']), 2);
+ if (intval($tirada[$t]) == intval($selected_tirada)) {
+ $info['lomo_interior'] += floatval($linea['mano']);
+ $lomo += floatval($linea['mano']);
+ }
$peso_interior += floatval($linea['peso']);
- $lomo += floatval($linea['mano']);
if ($extra_info) {
$this->calcular_coste_linea(
@@ -2238,8 +2278,11 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$peso_cubierta = 0.0;
if (count($cubierta) > 0) {
$coste_cubierta += round(floatval($cubierta['total_impresion']), 2);
- $peso_cubierta += floatval($cubierta['peso']);
- $lomo += floatval($cubierta['mano']);
+ $peso_cubierta += round(floatval($cubierta['peso']), 2);
+ if (intval($tirada[$t]) == intval($selected_tirada)) {
+ $lomo += floatval($cubierta['mano']);
+ }
+
if ($extra_info) {
$this->calcular_coste_linea(
@@ -2302,9 +2345,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
$coste_servicios += round(floatval($acabadoCubierta[0]->total), 2);
if ($extra_info) {
- $totalServicios += round(floatval($acabadoCubierta[0]->total), 2);
+ //$totalServicios += round(floatval($acabadoCubierta[0]->total), 2);
$base = round(floatval($acabadoCubierta[0]->total / (1 + $acabadoCubierta[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
+ $totalServicios += $base;
$margenServicios += round(floatval($acabadoCubierta[0]->total - $base), 2);
}
}
@@ -2341,9 +2385,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
$coste_servicios += round(floatval($resultado[0]->total), 2);
if ($extra_info) {
- $totalServicios += round(floatval($resultado[0]->total), 2);
+ //$totalServicios += round(floatval($resultado[0]->total), 2);
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
+ $totalServicios += $base;
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
}
@@ -2374,7 +2419,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
if (count($linea_sobrecubierta) > 0) {
$coste_sobrecubierta += round(floatval($linea_sobrecubierta['total_impresion']), 2);
- $peso_sobrecubierta += floatval($linea_sobrecubierta['peso']);
+ $peso_sobrecubierta += round(floatval($linea_sobrecubierta['peso']), 2);
if ($extra_info) {
$this->calcular_coste_linea(
@@ -2437,9 +2482,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$coste_servicios += round(floatval($acabadoSobrecubierta[0]->total), 2);
if ($extra_info) {
- $totalServicios += round(floatval($acabadoSobrecubierta[0]->total), 2);
+ //$totalServicios += round(floatval($acabadoSobrecubierta[0]->total), 2);
$base = round(floatval($acabadoSobrecubierta[0]->total / (1 + $acabadoSobrecubierta[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
+ $totalServicios += $base;
$margenServicios += round(floatval($acabadoSobrecubierta[0]->total - $base), 2);
}
}
@@ -2479,7 +2525,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
if (count($guardas) > 0) {
$coste_guardas += round(floatval($guardas['total_impresion']), 2);
- $peso_guardas += floatval($guardas['peso']);
+ $peso_guardas += round(floatval($guardas['peso']), 2);
+ if (intval($tirada[$t]) == intval($selected_tirada)) {
+ $lomo += floatval($guardas['mano']);
+ }
if ($extra_info) {
$this->calcular_coste_linea(
@@ -2595,9 +2644,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$coste_servicios += round(floatval($acabadoFaja[0]->total), 2);
if ($extra_info) {
- $totalServicios += round(floatval($acabadoFaja[0]->total), 2);
+ //$totalServicios += round(floatval($acabadoFaja[0]->total), 2);
$base = round(floatval($acabadoFaja[0]->total / (1 + $acabadoFaja[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
+ $totalServicios += $base;
$margenServicios += round(floatval($acabadoFaja[0]->total - $base), 2);
}
}
@@ -2649,9 +2699,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$costeServiciosDefecto += round(floatval($servicio->total), 2);
if ($extra_info) {
- $totalServicios += round(floatval($servicio->total), 2);
+ //$totalServicios += round(floatval($servicio->total), 2);
$base = round(floatval($servicio->total / (1 + $servicio->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
+ $totalServicios += $base;
$margenServicios += round(floatval($servicio->total - $base), 2);
}
}
@@ -2686,9 +2737,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$costeServiciosDefecto += round(floatval($servicio->total), 2);
if ($extra_info) {
- $totalServicios += round(floatval($servicio->total), 2);
+ //$totalServicios += round(floatval($servicio->total), 2);
$base = round(floatval($servicio->total / (1 + $servicio->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
+ $totalServicios += $base;
$margenServicios += round(floatval($servicio->total - $base), 2);
}
}
@@ -2791,9 +2843,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$coste_servicios += round(floatval($resultado[0]->total), 2);
if ($extra_info) {
- $totalServicios += round(floatval($resultado[0]->total), 2);
+ //$totalServicios += round(floatval($resultado[0]->total), 2);
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
+ $totalServicios += $base;
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
}
} else if ($servicio->nombre == "ferro" || $servicio->nombre == "prototipo") {
@@ -2823,9 +2876,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$coste_servicios += round(floatval($resultado[0]->precio), 2);
if ($extra_info) {
- $totalServicios += round(floatval($resultado[0]->precio), 2);
+ //$totalServicios += round(floatval($resultado[0]->precio), 2);
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
+ $totalServicios += $base;
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
}
} else if ($servicio->nombre == 'solapas_cubierta' || $servicio->nombre == 'solapas_sobrecubierta' || $servicio->nombre == 'solapas_faja') {
@@ -2857,9 +2911,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$coste_servicios += round(floatval($resultado[0]->total), 2);
if ($extra_info) {
- $totalServicios += round(floatval($resultado[0]->total), 2);
+ //$totalServicios += round(floatval($resultado[0]->total), 2);
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
+ $totalServicios += $base;
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
}
}
@@ -2898,9 +2953,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$coste_servicios += round(floatval($resultado[0]->precio), 2);
if ($extra_info) {
- $totalServicios += round(floatval($resultado[0]->precio), 2);
+ //$totalServicios += round(floatval($resultado[0]->precio), 2);
$base = round(floatval($resultado[0]->precio / (1 + $resultado[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
+ $totalServicios += $base;
$margenServicios += round(floatval($resultado[0]->precio - $base), 2);
}
}
@@ -2937,9 +2993,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$coste_servicios += round(floatval($resultado[0]->total), 2);
if ($extra_info) {
- $totalServicios += round(floatval($resultado[0]->total), 2);
+ //$totalServicios += round(floatval($resultado[0]->total), 2);
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
+ $totalServicios += $base;
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
}
}
@@ -2974,9 +3031,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$coste_servicios += round(floatval($resultado[0]->total), 2);
if ($extra_info) {
- $totalServicios += round(floatval($resultado[0]->total), 2);
+ //$totalServicios += round(floatval($resultado[0]->total), 2);
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
+ $totalServicios += $base;
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
}
}
@@ -3011,19 +3069,23 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$coste_servicios += round(floatval($resultado[0]->total), 2);
if ($extra_info) {
- $totalServicios += round(floatval($resultado[0]->total), 2);
+ //$totalServicios += round(floatval($resultado[0]->total), 2);
$base = round(floatval($resultado[0]->total / (1 + $resultado[0]->margen / 100.0)), 2);
$base = round(floatval($base / $cantidad_total), 2) * $cantidad_total;
+ $totalServicios += $base;
$margenServicios += round(floatval($resultado[0]->total - $base), 2);
}
}
- $total_por_tirada = $costeInterior +
+ /*$total_por_tirada = $costeInterior +
$coste_cubierta +
$coste_sobrecubierta +
$coste_guardas +
$coste_faja +
- $costeServiciosDefecto + $coste_servicios;
+ $costeServiciosDefecto + $coste_servicios;*/
+ $total_por_tirada = $totalPapel + $margenPapel +
+ $totalImpresion + $margenImpresion +
+ $totalServicios + $margenServicios;
array_push(
$precio_u,
round(($total_por_tirada) / $tirada[$t], 4)
@@ -3031,7 +3093,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
array_push($peso, round($peso_interior + $peso_cubierta + $peso_sobrecubierta + $peso_guardas + $peso_faja, 2));
if ($extra_info) {
- $totalServicios -= $margenServicios;
+ //$totalServicios -= $margenServicios;
if (($margenServicios + $totalServicios) > 0) {
$porcentajeMargenServicios = $margenServicios / ($totalServicios) * 100;
} else {
@@ -3047,20 +3109,26 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
'totalImpresion' => $totalImpresion,
'margenImpresion' => $margenImpresion,
- 'sumForFactor' => $sumForFactor,
- 'sumForFactorPonderado' => $sumForFactorPonderado,
-
'totalServicios' => $totalServicios,
'margenServicios' => $margenServicios,
- 'porcentajeMargenPapel' => $porcentajeMargenPapel,
- 'porcentajeMargenImpresion' => $porcentajeMargenImpresion,
- 'porcentajeMargenServicios' => $porcentajeMargenServicios
+ 'porcentajeMargenPapel' => round($porcentajeMargenPapel, 0),
+ 'porcentajeMargenImpresion' => round($porcentajeMargenImpresion, 0),
+ 'porcentajeMargenServicios' => round($porcentajeMargenServicios, 0),
+
+ 'sumForFactor' => $sumForFactor,
+ 'sumForFactorPonderado' => $sumForFactorPonderado,
+
+ 'total' => round($total_por_tirada, 2),
+ 'precio_u' => round(($total_por_tirada) / $tirada[$t], 4),
));
}
- $info['lomo_cubierta'] = round(floatval($lomo), 2);
- $info['lomo_sobrecubierta'] = round(floatval($lomo_sobrecubierta), 2);
+ if (intval($tirada[$t]) == intval($selected_tirada)) {
+ $info['lomo_cubierta'] = round(floatval($lomo), 2);
+ $info['lomo_sobrecubierta'] = round(floatval($lomo_sobrecubierta), 2);
+ }
+
$return_data['info'] = $info;
@@ -3112,12 +3180,14 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
return;
$totalPapel += round($linea['precio_pedido'], 2);
$totalPapel -= round($linea['margen_papel_pedido'], 2);
+ $totalPapel = round($totalPapel, 2);
$sumForFactor += round($linea['precio_pedido'], 2)
- round($linea['margen_papel_pedido'], 2);
$margenPapel += round($linea['margen_papel_pedido'], 2);
$totalImpresion += round($linea['precio_click_pedido'], 2);
$totalImpresion -= round($linea['margen_click_pedido'], 2);
+ $totalImpresion = round($totalImpresion, 2);
$sumForFactor += round($linea['precio_click_pedido'], 2)
- round($linea['margen_click_pedido'], 2);
@@ -3132,6 +3202,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$margenImpresion += round($linea['precio_impresion_horas'], 2); // coste de maquina y magen son MARGEN, no COSTE
$margenImpresion += round($linea['margen_impresion_horas'], 2);
$margenImpresion += round($linea['margen_click_pedido'], 2);
+ $margenImpresion = round($margenImpresion, 2);
}
diff --git a/ci4/app/Controllers/Tarifas/Acabados/ServiciosAcabado.php b/ci4/app/Controllers/Tarifas/Acabados/ServiciosAcabado.php
index 9f22e809..340d9793 100755
--- a/ci4/app/Controllers/Tarifas/Acabados/ServiciosAcabado.php
+++ b/ci4/app/Controllers/Tarifas/Acabados/ServiciosAcabado.php
@@ -80,7 +80,7 @@ class ServiciosAcabado extends BaseResourceController
$sanitizedData['user_updated_id'] = auth()->user()->id;
if ($this->request->getPost('mostrar_en_presupuesto_cliente') == null) {
- $sanitizedData['mostrar_en_presupuesto'] = false;
+ $sanitizedData['mostrar_en_presupuesto_cliente'] = false;
}
if ($this->request->getPost('acabado_cubierta') == null) {
@@ -174,7 +174,7 @@ class ServiciosAcabado extends BaseResourceController
$sanitizedData['user_updated_id'] = auth()->user()->id;
if ($this->request->getPost('mostrar_en_presupuesto_cliente') == null) {
- $sanitizedData['mostrar_en_presupuesto'] = false;
+ $sanitizedData['mostrar_en_presupuesto_cliente'] = false;
}
if ($this->request->getPost('acabado_cubierta') == null) {
diff --git a/ci4/app/Database/Migrations/2025-06-20-184500_LomoMaximoLibros.php b/ci4/app/Database/Migrations/2025-06-20-184500_LomoMaximoLibros.php
new file mode 100644
index 00000000..8391e21f
--- /dev/null
+++ b/ci4/app/Database/Migrations/2025-06-20-184500_LomoMaximoLibros.php
@@ -0,0 +1,47 @@
+db->table('config_variables_app')
+ ->where('name', 'lomo_maximo')
+ ->set('name', 'lomo_maximo_fresado_cosido')
+ ->update();
+
+ // Insertar nuevo campo: lomo_maximo_espiral
+ $this->db->table('config_variables_app')->insert([
+ 'name' => 'lomo_maximo_espiral',
+ 'value' => '45',
+ 'description' => 'Tamaño máximo (mm) para el lomo de los libros espiral',
+ 'created_at' => date('Y-m-d H:i:s')
+ ]);
+
+ // Insertar nuevo campo: lomo_maximo_wireo
+ $this->db->table('config_variables_app')->insert([
+ 'name' => 'lomo_maximo_wireo',
+ 'value' => '26',
+ 'description' => 'Tamaño máximo (mm) para el lomo de los libros wire-O',
+ 'created_at' => date('Y-m-d H:i:s')
+ ]);
+ }
+
+ public function down()
+ {
+ // Revertir nombre
+ $this->db->table('config_variables_app')
+ ->where('name', 'lomo_maximo_fresado_cosido')
+ ->set('name', 'lomo_maximo')
+ ->update();
+
+ // Borrar los nuevos campos
+ $this->db->table('config_variables_app')->whereIn('name', [
+ 'lomo_maximo_espiral',
+ 'lomo_maximo_wireo'
+ ])->delete();
+ }
+}
diff --git a/ci4/app/Language/es/Presupuestos.php b/ci4/app/Language/es/Presupuestos.php
index dde98be6..c5d50698 100755
--- a/ci4/app/Language/es/Presupuestos.php
+++ b/ci4/app/Language/es/Presupuestos.php
@@ -31,6 +31,12 @@ return [
'libroWireoTapaBlanda' => "Wire-o Tapa Blanda",
'libroGrapado' => "Grapado",
+ 'cosido' => 'Cosido',
+ 'fresado' => 'Fresado',
+ 'espiral' => 'Espiral',
+ 'wireo' => 'Wire-o',
+ 'grapado' => 'Grapado',
+
'datosPresupuesto' => 'Datos generales del presupuesto',
'datosLibro' => 'Datos del libro',
'datosServicios' => 'Otros Servicios',
@@ -380,6 +386,18 @@ return [
],
'validation' => [
+ 'fix_errors' => 'Corrija los siguientes errores antes de continuar:',
+ 'titulo_requerido' => 'El campo "Título" es obligatorio.',
+ 'tirada_integer_greatherThan_0' => 'Los valores de las tiradas deben ser enteros mayores que 0.',
+ 'tirada_pod_nopod' => 'No se pueden mezclar tiradas POD (menor o igual que 30 unidades) con tiradas no POD (mayor que 30 unidades).',
+ 'papelFormatoAncho' => 'Seleccione un ancho de libro válido.',
+ 'papelFormatoAlto' => 'Seleccione un alto de libro válido.',
+ 'papelFormato' => 'Seleccione un formato de libro válido.',
+ 'paginasColor' => 'El número de páginas a color debe ser un número entero mayor o igual que 0.',
+ 'paginasNegro' => 'El número de páginas en negro debe ser un número entero mayor o igual que 0.',
+ 'paginas' => 'El total de páginas tiene que ser mayor que 0.',
+ 'paginas_pares' => 'El número de páginas debe ser par.',
+ 'tipo_libro' => 'Seleccione el tipo de libro que desea para el presupuesto.',
'decimal' => 'El campo {field} debe contener un número decimal.',
'integer' => 'El campo {field} debe contener un número entero.',
'requerido' => 'El campo {field} es obligatorio.',
@@ -388,19 +406,34 @@ return [
'no_lp_for_merma' => 'Inserte líneas de presupuesto para calcular la merma',
'ejemplares_envio' => 'El número de ejemplares enviados no coincide con la tirada',
'cliente' => 'Debe seleccionar un cliente',
- 'papelFormato' => 'Seleccione un formato',
- 'tipo_libro' => 'Seleccione un tipo de libro',
- 'disenio_interior' => 'Seleccione el diseño del interior',
- 'papel_interior' => 'Seleccione el tipo de papel',
- 'gramaje_interior' => 'Seleccione el gramaje',
+
+ 'disenio_interior' => 'Seleccione el tipo de impresión del interior',
+ 'papel_interior' => 'Seleccione el tipo de papel para el interior',
+ 'papel_interior_especial' => 'Seleccione el papel especial en el desplegable para el interior',
+ 'gramaje_interior' => 'Seleccione el gramaje para el interior',
+
+ 'tipo_cubierta' => 'Seleccione el tipo de cubierta',
+ 'papel_guardas' => 'Seleccione el tipo de papel para las guardas',
+ 'gramaje_guardas' => 'Seleccione el gramaje para las guardas',
+ 'papel_cubierta' => 'Seleccione el tipo de papel para la cubierta',
+ 'papel_cubierta_especial' => 'Seleccione el papel especial en el desplegable para la cubierta',
+ 'gramaje_cubierta' => 'Seleccione el gramaje para la cubierta',
+
+ 'papel_sobrecubierta' => 'Seleccione el tipo de papel para la sobrecubierta',
+ 'gramaje_sobrecubierta' => 'Seleccione el gramaje para la sobrecubierta',
+ 'papel_faja' => 'Seleccione el tipo de papel para la faja',
+ 'gramaje_faja' => 'Seleccione el gramaje para la faja',
+
+ 'unidades_envio_mayor_tirada' => 'El número de unidades enviadas debe ser igual a {field} unidades.',
+
'pais' => 'Debe seleccionar un país',
'integer_greatherThan_0' => 'Número entero > 0 requerido',
'greater_than_0' => 'El campo {field} debe ser mayor que 0',
'tirada_no_valida' => "Tirada no valida",
'sin_gramaje' => "Seleccione gramaje",
- 'tipo_cubierta' => 'Seleccione tipo de cubierta',
+
'opcion_solapas' => 'Seleccione la opción para las solapas',
- 'paginas_multiplo_4' => 'El número de páginas para cosido o grapado debe ser múltiplo de 4',
+ 'paginas_multiplo_4' => 'El número total de páginas para cosido y grapado debe ser múltiplo de 4',
'paginas_pares' => 'El número de páginas debe ser par',
'extras_cubierta' => 'Rellene todos los campos',
],
@@ -425,7 +458,11 @@ return [
'noCubiertaSobrecubierta' => 'No se hay resultados para cubierta/sobrecubierta',
'errorPresupuesto' => 'Se ha producido un error al calcular el presupuesto. Póngase en contacto con el administrador',
'error_sobrecubierta_sin_solapas' => 'Debe seleccionar "sobrecubierta" en los datos del libro para introducir el ancho de solapa',
- 'error_faja_sin_solapas' => 'Debe seleccionar "faja" en los datos del libro para introducir el ancho de solapa'
+ 'error_faja_sin_solapas' => 'Debe seleccionar "faja" en los datos del libro para introducir el ancho de solapa',
+ 'error_lomo_maximo' => "No se pueden encuadernar libros {0} con un lomo interior superior a {1} mm. El lomo actual es de {2} mm.
+ Por favor, disminuya el número de páginas o el gramaje del papel para que sea encuadernable.",
+ 'error_lomo_minimo' => "No se pueden encuadernar libros {0} con un lomo interior inferior a {1} mm. El lomo actual es de {2} mm.
+ Por favor, aumente el número de páginas o el gramaje del papel para que sea encuadernable.",
],
'resize_preview' => 'Refrescar vista esquema'
diff --git a/ci4/app/Models/Pedidos/PedidoLineaModel.php b/ci4/app/Models/Pedidos/PedidoLineaModel.php
index 1e19c4cf..76f90d5e 100755
--- a/ci4/app/Models/Pedidos/PedidoLineaModel.php
+++ b/ci4/app/Models/Pedidos/PedidoLineaModel.php
@@ -241,6 +241,8 @@ class PedidoLineaModel extends \App\Models\BaseModel
// Ejecutar la consulta y devolver resultados
$query = $builder->get();
$data = $query->getResult();
+
+ $query_text = $this->db->getLastQuery();
foreach($data as $register) {
$item = (object)[
diff --git a/ci4/app/Models/Presupuestos/PresupuestoModel.php b/ci4/app/Models/Presupuestos/PresupuestoModel.php
index 69c2a034..d4689b02 100755
--- a/ci4/app/Models/Presupuestos/PresupuestoModel.php
+++ b/ci4/app/Models/Presupuestos/PresupuestoModel.php
@@ -509,7 +509,11 @@ class PresupuestoModel extends \App\Models\BaseModel
$totalCostes + $totalMargenes +
$resumen_totales['coste_envio']+$resumen_totales['margen_envio'] +
$data['envio_base'], 2),
- 'total_aceptado' => round($totalCostes + $totalMargenes + $resumen_totales['coste_envio']+$resumen_totales['margen_envio'], 2),
+ 'total_aceptado' => round(
+ $totalCostes + $totalMargenes +
+ $resumen_totales['coste_envio']+$resumen_totales['margen_envio'] +
+ $data['envio_base'], 2
+ ),
'total_factor' => round(
($totalCostes + $totalMargenes ) /
diff --git a/ci4/app/Services/PresupuestoService.php b/ci4/app/Services/PresupuestoService.php
index a4294cf4..b4d6b89f 100755
--- a/ci4/app/Services/PresupuestoService.php
+++ b/ci4/app/Services/PresupuestoService.php
@@ -2077,18 +2077,20 @@ class PresupuestoService extends BaseService
$merma = 0;
- if ($tirada == 0) {
+ if ($tirada == 1) {
$merma = 0;
- }
- else if ($tirada > $POD) {
+ } else if ($tirada > intval($POD)) {
$merma = $tirada * 0.1;
} else {
$merma_lineas = [];
foreach ($formas_lineas_interior as $formas_linea) {
if ($formas_linea > $tirada)
array_push($merma_lineas, $formas_linea - $tirada);
- else
- array_push($merma_lineas, $tirada % $formas_linea);
+ else {
+ $total_pliegos = ceil($tirada / $formas_linea);
+ $total_formas = $total_pliegos * $formas_linea;
+ array_push($merma_lineas, $total_formas - $tirada);
+ }
}
if (count($merma_lineas) > 0)
$merma = max($merma_lineas);
@@ -2124,27 +2126,25 @@ class PresupuestoService extends BaseService
$presupuesto->titulo = $presupuesto->titulo . ' - ' . lang('Presupuestos.duplicado');
$presupuesto->is_duplicado = 1;
$presupuesto->estado_id = 1;
- if($is_reimpresion && boolval($copy_files)){
+ if ($is_reimpresion && boolval($copy_files)) {
$presupuesto->inc_rei = "reimpresion";
$modelPedidoLinea = model('App\Models\Pedidos\PedidoLineaModel');
$pedido_linea = $modelPedidoLinea->where('presupuesto_id', $id)->first();
- if($pedido_linea){
- $text = "REIMPRESION [" . date('Y-m-d H:i:s') . "] - PEDIDO: " . $pedido_linea->pedido_id .
- "\n================================================\n";
- $presupuesto->comentarios_safekat = $text . $presupuesto->comentarios_safekat ;
- }
- }
- else if($is_reimpresion){
- $presupuesto->inc_rei = null;
- $modelPedidoLinea = model('App\Models\Pedidos\PedidoLineaModel');
- $pedido_linea = $modelPedidoLinea->where('presupuesto_id', $id)->first();
- if($pedido_linea){
- $text = "DUPLICADO [" . date('Y-m-d H:i:s') . "] - PEDIDO: " . $pedido_linea->pedido_id .
+ if ($pedido_linea) {
+ $text = "REIMPRESION [" . date('Y-m-d H:i:s') . "] - PEDIDO: " . $pedido_linea->pedido_id .
"\n================================================\n";
$presupuesto->comentarios_safekat = $text . $presupuesto->comentarios_safekat;
}
- }
- else{
+ } else if ($is_reimpresion) {
+ $presupuesto->inc_rei = null;
+ $modelPedidoLinea = model('App\Models\Pedidos\PedidoLineaModel');
+ $pedido_linea = $modelPedidoLinea->where('presupuesto_id', $id)->first();
+ if ($pedido_linea) {
+ $text = "DUPLICADO [" . date('Y-m-d H:i:s') . "] - PEDIDO: " . $pedido_linea->pedido_id .
+ "\n================================================\n";
+ $presupuesto->comentarios_safekat = $text . $presupuesto->comentarios_safekat;
+ }
+ } else {
$presupuesto->inc_rei = null;
}
$new_id = $modelPresupuesto->insert($presupuesto);
@@ -2189,7 +2189,7 @@ class PresupuestoService extends BaseService
$presupuestoLineaModel->duplicateLineasPresupuesto($presupuesto->id, $new_id);
- if (boolval($copy_files)== true) {
+ if (boolval($copy_files) == true) {
$presupuestoFilesModel = model('App\Models\Presupuestos\PresupuestoFicheroModel');
$presupuestoFilesModel->copyFiles($presupuesto->id, $new_id);
}
@@ -2197,7 +2197,7 @@ class PresupuestoService extends BaseService
return [
'success' => true,
'id' => $new_id,
- 'message' => lang('Presupuestos.presupuestoGenerado'),
+ 'message' => lang('Presupuestos.presupuestoGenerado'),
];
} catch (\Exception $e) {
@@ -2207,4 +2207,96 @@ class PresupuestoService extends BaseService
];
}
}
+
+ public static function check_lomo_interior($tipo_impresion_id, $lomo = 0)
+ {
+ $lomo_maximo = 0;
+ $lomo_minimo = 0;
+ if ($lomo == 0) {
+ return [
+ 'status' => true,
+ 'message' => 'Lomo interior 0'
+ ];
+ }
+ switch ($tipo_impresion_id) {
+ case 1: // Fresado
+ case 2:
+ case 3: // Cosido
+ case 4:
+ $lomo_minimo = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_minimo_fresado_cosido')->value);
+ $lomo_maximo = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_fresado_cosido')->value);
+ if ($lomo != 0 && $lomo < $lomo_minimo) {
+ return [
+ 'status' => false,
+ 'message' => lang(
+ 'Presupuestos.errores.error_lomo_minimo',
+ [
+ lang('Presupuestos.cosido') . "/" . lang('Presupuestos.fresado'),
+ $lomo_minimo,
+ $lomo,
+ ]
+ )
+ ];
+ } else if ($lomo != 0 && $lomo > $lomo_maximo) {
+ return [
+ 'status' => false,
+ 'message' => lang(
+ 'Presupuestos.errores.error_lomo_maximo',
+ [
+ lang('Presupuestos.cosido') . "/" . lang('Presupuestos.fresado'),
+ $lomo_maximo,
+ $lomo,
+ ]
+ )
+ ];
+
+ }
+ break;
+ case 5: // Espiral
+ case 6:
+ $lomo_maximo = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_espiral')->value);
+ if ($lomo != 0 && $lomo > $lomo_maximo) {
+ return [
+ 'status' => false,
+ 'message' => lang(
+ 'Presupuestos.errores.error_lomo_maximo',
+ [
+ lang('Presupuestos.espiral'),
+ $lomo_maximo,
+ $lomo,
+ ]
+ )
+ ];
+ }
+ break;
+ case 7: // Wire-O
+ case 8:
+ $lomo_maximo = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_wireo')->value);
+ $lomo_maximo = intval(model('App\Models\Configuracion\ConfigVariableModel')->getVariable('lomo_maximo_espiral')->value);
+ if ($lomo != 0 && $lomo > $lomo_maximo) {
+ return [
+ 'status' => false,
+ 'message' => lang(
+ 'Presupuestos.errores.error_lomo_maximo',
+ [
+ lang('Presupuestos.wireo'),
+ $lomo_maximo,
+ $lomo,
+ ]
+ )
+ ];
+ }
+ break;
+ default:
+ return [
+ 'status' => true,
+ 'message' => 'Lomo valido'
+ ];
+ }
+
+ return [
+ 'status' => true,
+ 'message' => 'Lomo valido'
+ ];
+ }
}
diff --git a/ci4/app/Views/themes/vuexy/form/pedidos/_facturasItems.php b/ci4/app/Views/themes/vuexy/form/pedidos/_facturasItems.php
index 75d792a8..80a75c50 100755
--- a/ci4/app/Views/themes/vuexy/form/pedidos/_facturasItems.php
+++ b/ci4/app/Views/themes/vuexy/form/pedidos/_facturasItems.php
@@ -10,7 +10,7 @@
@@ -113,8 +117,8 @@
-