diff --git a/ci4/app/Controllers/Importadores/ImportadorCatalogo.php b/ci4/app/Controllers/Importadores/ImportadorCatalogo.php
index c2e7eefc..e2ebb080 100644
--- a/ci4/app/Controllers/Importadores/ImportadorCatalogo.php
+++ b/ci4/app/Controllers/Importadores/ImportadorCatalogo.php
@@ -239,6 +239,8 @@ class ImportadorCatalogo extends BaseResourceController
'lomoRedondo' => 0
],
+ 'ivaReducido' => 1,
+
'guardas' => [],
'sobrecubierta' => $sobrecubierta,
//'faja' => null,
@@ -284,7 +286,9 @@ class ImportadorCatalogo extends BaseResourceController
$respuesta_ajuste = PresupuestoService::ajustarPresupuesto(
$response['data']['sk_id'],
$precio_compra,
- $tirada
+ $tirada,
+ null,
+ true
);
if ($respuesta_ajuste['warning'] == true) {
$response['price_warning'] = [
@@ -293,6 +297,10 @@ class ImportadorCatalogo extends BaseResourceController
];
}
+ // confirmar y crear pedido y ot
+ model('App\Models\Presupuestos\PresupuestoModel')->confirmarPresupuesto($response['data']['sk_id']);
+ PresupuestoService::crearPedido($response['data']['sk_id']);
+
return $this->respond($response);
} catch (\Exception $e) {
diff --git a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php
index 5fe536da..28e87c50 100755
--- a/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php
+++ b/ci4/app/Controllers/Presupuestos/Presupuestoadmin.php
@@ -993,6 +993,8 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController
$reqData = $this->request->getPost();
+ $calcular_merma = $reqData['calcular_merma'] ?? 0;
+
$type = $reqData['type'] ?? null;
// por defecto, se deja cosido tapa blanda por ahora JJO
$tipo_impresion_id = $reqData['tipo_impresion_id'] ?? 4;
@@ -1071,8 +1073,27 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController
'a_favor_fibra' => $a_favor_fibra
);
+
$resourceData = PresupuestoService::obtenerComparadorPlana($input_data);
+ if($calcular_merma == 1 && count($resourceData) > 0 &&
+ count($resourceData[0]['fields']) >0 && $resourceData[0]['fields']['num_formas'] > 0) {
+
+ usort($resourceData, function ($a, $b) {
+ return $b['fields']['total_impresion'] <=> $a['fields']['total_impresion'];
+ });
+
+ $num_formas = [];
+ $formas_linea = $datosPedido->isCosido ? intval($resourceData[0]['fields']['num_formas']['value']) / 2 :
+ intval($resourceData[0]['fields']['num_formas']['value']);
+ array_push($num_formas, $formas_linea);
+
+ $POD = $this->getPOD();
+ $datosPedido->merma = PresupuestoService::calcular_merma($datosPedido->tirada,$POD, $num_formas);
+
+ $resourceData = PresupuestoService::obtenerComparadorPlana($input_data);
+ }
+
} else if ($type == 'interior_rot') {
$paginas = (object) array(
@@ -1105,6 +1126,24 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController
$resourceData = PresupuestoService::obtenerComparadorRotativa($input_data);
+ if($calcular_merma == 1 && count($resourceData) > 0 &&
+ count($resourceData[0]['fields']) >0 && $resourceData[0]['fields']['num_formas'] > 0) {
+
+ usort($resourceData, function ($a, $b) {
+ return $b['fields']['total_impresion'] <=> $a['fields']['total_impresion'];
+ });
+
+ $num_formas = [];
+ $formas_linea = $datosPedido->isCosido ? intval($resourceData[0]['fields']['num_formas']['value']) / 2 :
+ intval($resourceData[0]['fields']['num_formas']['value']);
+ array_push($num_formas, $formas_linea);
+
+ $POD = $this->getPOD();
+ $datosPedido->merma = PresupuestoService::calcular_merma($datosPedido->tirada,$POD, $num_formas);
+
+ $resourceData = PresupuestoService::obtenerComparadorRotativa($input_data);
+ }
+
} else if ($type == 'cubierta' || $type == 'sobrecubierta' || $type == 'faja') {
$datosPedido->solapas = $reqData['solapas'];
diff --git a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php
index 4ce82823..6c0babdc 100755
--- a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php
+++ b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php
@@ -323,7 +323,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$datosPedido = (object) array(
'paginas' => $paginas,
'tirada' => $tirada[0],
- 'merma' => $this->calcular_merma($tirada[0], $POD),
+ 'merma' => PresupuestoService::calcular_merma($tirada[0], $POD),
'ancho' => intval($tamanio['ancho']) ?? 100000,
'alto' => intval($tamanio['alto']) ?? 100000,
'isCosido' => $is_cosido,
@@ -751,7 +751,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$datosPedido = (object) array(
'paginas' => $paginas,
'tirada' => $tirada[0],
- 'merma' => $tirada[0] > $POD ? $this->calcular_merma($tirada[0], $POD) : 0,
+ 'merma' => $tirada[0] > $POD ? PresupuestoService::calcular_merma($tirada[0], $POD) : 0,
'ancho' => intval($tamanio['ancho']) ?? 100000,
'alto' => intval($tamanio['alto']) ?? 100000,
'isCosido' => $is_cosido,
@@ -1340,7 +1340,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$datos_presupuesto['entrega_taller'] = $reqData['entrega_taller'] ?? 0;
- $resultado_presupuesto['info']['merma'] = $this->calcular_merma($selected_tirada, $POD);
+ $resultado_presupuesto['info']['merma'] = PresupuestoService::calcular_merma($selected_tirada, $POD);
$datos_presupuesto['faja'] = $faja;
@@ -2067,7 +2067,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
$datosPedido = (object) array(
'paginas' => $paginas,
'tirada' => $tirada[$t],
- 'merma' => $this->calcular_merma($tirada[$t], $POD),
+ 'merma' => PresupuestoService::calcular_merma($tirada[$t], $POD),
'ancho' => intval($tamanio['ancho']) ?? 100000,
'alto' => intval($tamanio['alto']) ?? 100000,
'isCosido' => $is_cosido,
@@ -2152,7 +2152,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
array_push($num_formas, $formas_linea);
}
}
- $input_data['datosPedido']->merma = $this->calcular_merma($tirada[$t], $POD, $num_formas);
+ $input_data['datosPedido']->merma = PresupuestoService::calcular_merma($tirada[$t], $POD, $num_formas);
if ($extra_info) {
$info['merma'] = max($info['merma'], $input_data['datosPedido']->merma);
}
@@ -3187,31 +3187,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
}
}
-
- protected function calcular_merma($tirada, $POD, $formas_lineas_interior = [])
- {
-
- $merma = 0;
-
- if ($tirada > $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);
- }
- if (count($merma_lineas) > 0)
- $merma = max($merma_lineas);
- }
-
-
- return round($merma, 0);
- }
-
-
protected function getPapelFormatoListItems($selId = null)
{
$papelFormatoModel = model('App\Models\Configuracion\PapelFormatoModel');
diff --git a/ci4/app/Services/PresupuestoService.php b/ci4/app/Services/PresupuestoService.php
index 11393cfd..6feb5b4f 100755
--- a/ci4/app/Services/PresupuestoService.php
+++ b/ci4/app/Services/PresupuestoService.php
@@ -1984,7 +1984,7 @@ class PresupuestoService extends BaseService
return $peso;
}
- public static function ajustarPresupuesto($id, $precio_unidad = null, $unidades = null, $precio_total = null){
+ public static function ajustarPresupuesto($id, $precio_unidad = null, $unidades = null, $precio_total = null, $forzar_descuento = false){
$precio_total_asignado = 0;
$precio_unidad_asignado = $precio_unidad;
@@ -2000,12 +2000,24 @@ class PresupuestoService extends BaseService
$presupuesto = $model->find($id);
$costes = floatval($presupuesto->total_costes);
$envio_base = floatval($presupuesto->envio_base);
+
+ $total_descuento = 0;
+ $total_descuentoPercent = 0;
if($costes + $envio_base > $precio_total_asignado){
- $precio_total_asignado = round($costes + $envio_base, 2);
- $precio_unidad_asignado = round($precio_total_asignado / intval($unidades), 4);
+
+ if($forzar_descuento){
+ $total_descuento = $costes + $envio_base - $precio_total_asignado;
+ $total_descuentoPercent = round($total_descuento / ($costes + $envio_base) * 100, 2);
+ }
+ else{
+ $precio_total_asignado = round($costes + $envio_base, 2);
+ $precio_unidad_asignado = round($precio_total_asignado / intval($unidades), 4);
+ }
$warning = true;
}
- $total_margenes = $precio_total_asignado - $costes - $envio_base;
+ $total_margenes = $precio_total_asignado - $costes - $envio_base < 0 ?
+ 0 :
+ $precio_total_asignado - $costes - $envio_base;
$sumForFactor = floatval($presupuesto->total_coste_papel) + floatval($presupuesto->total_coste_impresion);
$sumForFactorPonderado = $sumForFactor + floatval($presupuesto->total_coste_servicios);
@@ -2022,8 +2034,12 @@ class PresupuestoService extends BaseService
$presupuesto->total_aceptado = $precio_total_asignado;
$presupuesto->total_aceptado_revisado = $precio_total_asignado;
$presupuesto->total_presupuesto = $precio_total_asignado;
- $presupuesto->total_antes_descuento = $precio_total_asignado;
+ $presupuesto->total_antes_descuento = $precio_total_asignado - $costes - $envio_base < 0 ?
+ $costes + $envio_base :
+ $precio_total_asignado;
$presupuesto->total_precio_unidad = $precio_unidad_asignado;
+ $presupuesto->total_descuento = $total_descuento;
+ $presupuesto->total_descuentoPercent = $total_descuentoPercent;
$presupuesto->total_factor = round($factor, 2);
$presupuesto->total_factor_ponderado = round($factorPonderado, 2);
$model->update($id, $presupuesto);
@@ -2035,4 +2051,27 @@ class PresupuestoService extends BaseService
"new_precio_unidad" => $precio_unidad_asignado,
];
}
+
+ public static function calcular_merma($tirada, $POD, $formas_lineas_interior = [])
+ {
+
+ $merma = 0;
+
+ if ($tirada > $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);
+ }
+ if (count($merma_lineas) > 0)
+ $merma = max($merma_lineas);
+ }
+
+
+ return round($merma, 0);
+ }
}
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 7ed47bf2..5b9e19c8 100644
--- a/httpdocs/assets/js/safekat/pages/importadores/catalogo/catalogo_tool.js
+++ b/httpdocs/assets/js/safekat/pages/importadores/catalogo/catalogo_tool.js
@@ -175,8 +175,8 @@ document.addEventListener('DOMContentLoaded', function () {
let icon = 'success';
if (result.price_warning) {
- html = skUrl ? `La fila se importó exitosamente, pero el precio no se ha podido ajustar (debajo de costes).
Ver presupuesto`
- : 'La fila se importó exitosamente, pero el precio no se ha podido ajustar (debajo de costes).';
+ html = skUrl ? `La fila se importó exitosamente, pero el precio se ha ajustado debajo de costes.
Ver presupuesto`
+ : 'La fila se importó exitosamente, pero el precio se ha ajustado debajo de costes.';
icon = 'warning';
}
@@ -305,7 +305,7 @@ document.addEventListener('DOMContentLoaded', function () {
let text = 'Se han procesado todas las filas seleccionadas.';
let icon = 'success';
if (idsNoAjustados.length > 0) {
- text = 'Se han procesado todas las filas seleccionadas, pero no se han podido ajustar los precios de los siguientes presupuestos: ' + idsNoAjustados.join(', ');
+ text = 'Se han procesado todas las filas seleccionadas, pero se han ajustado los siguientes presupuestos por debajo de costes: ' + idsNoAjustados.join(', ');
icon = 'warning';
}
Swal.fire({
diff --git a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/lineasPresupuesto.js b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/lineasPresupuesto.js
index 6f991a0e..2944ff79 100644
--- a/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/lineasPresupuesto.js
+++ b/httpdocs/assets/js/safekat/pages/presupuestoAdmin/sections/lineasPresupuesto.js
@@ -1540,6 +1540,12 @@ class LineasPresupuesto {
cliente_id: $('#clienteId').find(":selected").val(),
};
+ if($('#alert-datosLibro').html().includes(window.language.Presupuestos.validation.no_lp_for_merma) &&
+ (uso == 'interior' || uso == 'interior_rot')){
+
+ datos.calcular_merma = 1;
+ }
+
if (datos.ancho == 0 || datos.alto == 0 || datos.ancho == '' || datos.alto == '' || isNaN(datos.ancho) || isNaN(datos.alto)) {
return;
}