mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
terminado
This commit is contained in:
@ -239,6 +239,8 @@ class ImportadorCatalogo extends BaseResourceController
|
|||||||
'lomoRedondo' => 0
|
'lomoRedondo' => 0
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'ivaReducido' => 1,
|
||||||
|
|
||||||
'guardas' => [],
|
'guardas' => [],
|
||||||
'sobrecubierta' => $sobrecubierta,
|
'sobrecubierta' => $sobrecubierta,
|
||||||
//'faja' => null,
|
//'faja' => null,
|
||||||
@ -284,7 +286,9 @@ class ImportadorCatalogo extends BaseResourceController
|
|||||||
$respuesta_ajuste = PresupuestoService::ajustarPresupuesto(
|
$respuesta_ajuste = PresupuestoService::ajustarPresupuesto(
|
||||||
$response['data']['sk_id'],
|
$response['data']['sk_id'],
|
||||||
$precio_compra,
|
$precio_compra,
|
||||||
$tirada
|
$tirada,
|
||||||
|
null,
|
||||||
|
true
|
||||||
);
|
);
|
||||||
if ($respuesta_ajuste['warning'] == true) {
|
if ($respuesta_ajuste['warning'] == true) {
|
||||||
$response['price_warning'] = [
|
$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);
|
return $this->respond($response);
|
||||||
|
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
|
|||||||
@ -993,6 +993,8 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
$reqData = $this->request->getPost();
|
$reqData = $this->request->getPost();
|
||||||
|
|
||||||
|
$calcular_merma = $reqData['calcular_merma'] ?? 0;
|
||||||
|
|
||||||
$type = $reqData['type'] ?? null;
|
$type = $reqData['type'] ?? null;
|
||||||
// por defecto, se deja cosido tapa blanda por ahora JJO
|
// por defecto, se deja cosido tapa blanda por ahora JJO
|
||||||
$tipo_impresion_id = $reqData['tipo_impresion_id'] ?? 4;
|
$tipo_impresion_id = $reqData['tipo_impresion_id'] ?? 4;
|
||||||
@ -1071,8 +1073,27 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController
|
|||||||
'a_favor_fibra' => $a_favor_fibra
|
'a_favor_fibra' => $a_favor_fibra
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
$resourceData = PresupuestoService::obtenerComparadorPlana($input_data);
|
$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') {
|
} else if ($type == 'interior_rot') {
|
||||||
|
|
||||||
$paginas = (object) array(
|
$paginas = (object) array(
|
||||||
@ -1105,6 +1126,24 @@ class Presupuestoadmin extends \App\Controllers\BaseResourceController
|
|||||||
|
|
||||||
$resourceData = PresupuestoService::obtenerComparadorRotativa($input_data);
|
$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') {
|
} else if ($type == 'cubierta' || $type == 'sobrecubierta' || $type == 'faja') {
|
||||||
|
|
||||||
$datosPedido->solapas = $reqData['solapas'];
|
$datosPedido->solapas = $reqData['solapas'];
|
||||||
|
|||||||
@ -323,7 +323,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$datosPedido = (object) array(
|
$datosPedido = (object) array(
|
||||||
'paginas' => $paginas,
|
'paginas' => $paginas,
|
||||||
'tirada' => $tirada[0],
|
'tirada' => $tirada[0],
|
||||||
'merma' => $this->calcular_merma($tirada[0], $POD),
|
'merma' => PresupuestoService::calcular_merma($tirada[0], $POD),
|
||||||
'ancho' => intval($tamanio['ancho']) ?? 100000,
|
'ancho' => intval($tamanio['ancho']) ?? 100000,
|
||||||
'alto' => intval($tamanio['alto']) ?? 100000,
|
'alto' => intval($tamanio['alto']) ?? 100000,
|
||||||
'isCosido' => $is_cosido,
|
'isCosido' => $is_cosido,
|
||||||
@ -751,7 +751,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$datosPedido = (object) array(
|
$datosPedido = (object) array(
|
||||||
'paginas' => $paginas,
|
'paginas' => $paginas,
|
||||||
'tirada' => $tirada[0],
|
'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,
|
'ancho' => intval($tamanio['ancho']) ?? 100000,
|
||||||
'alto' => intval($tamanio['alto']) ?? 100000,
|
'alto' => intval($tamanio['alto']) ?? 100000,
|
||||||
'isCosido' => $is_cosido,
|
'isCosido' => $is_cosido,
|
||||||
@ -1340,7 +1340,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$datos_presupuesto['entrega_taller'] = $reqData['entrega_taller'] ?? 0;
|
$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;
|
$datos_presupuesto['faja'] = $faja;
|
||||||
|
|
||||||
@ -2067,7 +2067,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
$datosPedido = (object) array(
|
$datosPedido = (object) array(
|
||||||
'paginas' => $paginas,
|
'paginas' => $paginas,
|
||||||
'tirada' => $tirada[$t],
|
'tirada' => $tirada[$t],
|
||||||
'merma' => $this->calcular_merma($tirada[$t], $POD),
|
'merma' => PresupuestoService::calcular_merma($tirada[$t], $POD),
|
||||||
'ancho' => intval($tamanio['ancho']) ?? 100000,
|
'ancho' => intval($tamanio['ancho']) ?? 100000,
|
||||||
'alto' => intval($tamanio['alto']) ?? 100000,
|
'alto' => intval($tamanio['alto']) ?? 100000,
|
||||||
'isCosido' => $is_cosido,
|
'isCosido' => $is_cosido,
|
||||||
@ -2152,7 +2152,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
|||||||
array_push($num_formas, $formas_linea);
|
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) {
|
if ($extra_info) {
|
||||||
$info['merma'] = max($info['merma'], $input_data['datosPedido']->merma);
|
$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)
|
protected function getPapelFormatoListItems($selId = null)
|
||||||
{
|
{
|
||||||
$papelFormatoModel = model('App\Models\Configuracion\PapelFormatoModel');
|
$papelFormatoModel = model('App\Models\Configuracion\PapelFormatoModel');
|
||||||
|
|||||||
@ -1984,7 +1984,7 @@ class PresupuestoService extends BaseService
|
|||||||
return $peso;
|
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_total_asignado = 0;
|
||||||
$precio_unidad_asignado = $precio_unidad;
|
$precio_unidad_asignado = $precio_unidad;
|
||||||
@ -2000,12 +2000,24 @@ class PresupuestoService extends BaseService
|
|||||||
$presupuesto = $model->find($id);
|
$presupuesto = $model->find($id);
|
||||||
$costes = floatval($presupuesto->total_costes);
|
$costes = floatval($presupuesto->total_costes);
|
||||||
$envio_base = floatval($presupuesto->envio_base);
|
$envio_base = floatval($presupuesto->envio_base);
|
||||||
|
|
||||||
|
$total_descuento = 0;
|
||||||
|
$total_descuentoPercent = 0;
|
||||||
if($costes + $envio_base > $precio_total_asignado){
|
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;
|
$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);
|
$sumForFactor = floatval($presupuesto->total_coste_papel) + floatval($presupuesto->total_coste_impresion);
|
||||||
$sumForFactorPonderado = $sumForFactor + floatval($presupuesto->total_coste_servicios);
|
$sumForFactorPonderado = $sumForFactor + floatval($presupuesto->total_coste_servicios);
|
||||||
@ -2022,8 +2034,12 @@ class PresupuestoService extends BaseService
|
|||||||
$presupuesto->total_aceptado = $precio_total_asignado;
|
$presupuesto->total_aceptado = $precio_total_asignado;
|
||||||
$presupuesto->total_aceptado_revisado = $precio_total_asignado;
|
$presupuesto->total_aceptado_revisado = $precio_total_asignado;
|
||||||
$presupuesto->total_presupuesto = $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_precio_unidad = $precio_unidad_asignado;
|
||||||
|
$presupuesto->total_descuento = $total_descuento;
|
||||||
|
$presupuesto->total_descuentoPercent = $total_descuentoPercent;
|
||||||
$presupuesto->total_factor = round($factor, 2);
|
$presupuesto->total_factor = round($factor, 2);
|
||||||
$presupuesto->total_factor_ponderado = round($factorPonderado, 2);
|
$presupuesto->total_factor_ponderado = round($factorPonderado, 2);
|
||||||
$model->update($id, $presupuesto);
|
$model->update($id, $presupuesto);
|
||||||
@ -2035,4 +2051,27 @@ class PresupuestoService extends BaseService
|
|||||||
"new_precio_unidad" => $precio_unidad_asignado,
|
"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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -175,8 +175,8 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
let icon = 'success';
|
let icon = 'success';
|
||||||
|
|
||||||
if (result.price_warning) {
|
if (result.price_warning) {
|
||||||
html = skUrl ? `La fila se importó exitosamente, pero el precio no se ha podido ajustar (debajo de costes).<br><br><a href="${skUrl}" target="_blank" class="btn btn-primary mt-2">Ver presupuesto</a>`
|
html = skUrl ? `La fila se importó exitosamente, pero el precio se ha ajustado debajo de costes.<br><br><a href="${skUrl}" target="_blank" class="btn btn-primary mt-2">Ver presupuesto</a>`
|
||||||
: 'La fila se importó exitosamente, pero el precio no se ha podido ajustar (debajo de costes).';
|
: 'La fila se importó exitosamente, pero el precio se ha ajustado debajo de costes.';
|
||||||
icon = 'warning';
|
icon = 'warning';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -305,7 +305,7 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
let text = 'Se han procesado todas las filas seleccionadas.';
|
let text = 'Se han procesado todas las filas seleccionadas.';
|
||||||
let icon = 'success';
|
let icon = 'success';
|
||||||
if (idsNoAjustados.length > 0) {
|
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';
|
icon = 'warning';
|
||||||
}
|
}
|
||||||
Swal.fire({
|
Swal.fire({
|
||||||
|
|||||||
@ -1540,6 +1540,12 @@ class LineasPresupuesto {
|
|||||||
cliente_id: $('#clienteId').find(":selected").val(),
|
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)) {
|
if (datos.ancho == 0 || datos.alto == 0 || datos.ancho == '' || datos.alto == '' || isNaN(datos.ancho) || isNaN(datos.alto)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user