From 91819052336710837ad3e9cb6665fccd9814aaab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaime=20Jim=C3=A9nez?= Date: Wed, 30 Apr 2025 20:23:45 +0200 Subject: [PATCH] terminado --- .../Importadores/ImportadorCatalogo.php | 10 +++- .../Presupuestos/Presupuestoadmin.php | 39 +++++++++++++++ .../Presupuestos/Presupuestocliente.php | 35 ++----------- ci4/app/Services/PresupuestoService.php | 49 +++++++++++++++++-- .../importadores/catalogo/catalogo_tool.js | 6 +-- .../sections/lineasPresupuesto.js | 6 +++ 6 files changed, 106 insertions(+), 39 deletions(-) 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; }