mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
falta guardar tiradas
This commit is contained in:
@ -17,6 +17,8 @@ use App\Models\Presupuestos\PresupuestoServiciosExtraModel;
|
||||
use App\Services\PresupuestoClienteService;
|
||||
use Exception;
|
||||
|
||||
use function PHPUnit\Framework\containsOnly;
|
||||
|
||||
class Presupuestocliente extends \App\Controllers\BaseResourceController
|
||||
{
|
||||
protected $modelName = "PresupuestoModel";
|
||||
@ -669,7 +671,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
||||
'servicios' => $servicios,
|
||||
);
|
||||
|
||||
$return_data = $this->calcular_presupuesto($datos_presupuesto);
|
||||
$return_data = $this->calcular_presupuesto($datos_presupuesto, true); //TRUE FOR DEBUG
|
||||
array_merge($return_data, [$csrfTokenName => $newTokenHash]);
|
||||
|
||||
return $this->respond($return_data);
|
||||
@ -713,41 +715,8 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
||||
$peso = $reqData['peso'] ?? 0;
|
||||
$unidades = $reqData['unidades'] ?? 0;
|
||||
$entregaPieCalle = $reqData['entregaPieCalle'] ?? 0;
|
||||
$model = model('App\Models\Clientes\ClienteDireccionesModel');
|
||||
$data = $model->getDireccion($direccionId);
|
||||
|
||||
$modelTarifaEnvio = model('App\Models\Tarifas\TarifaEnvioModel');
|
||||
$coste = 0;
|
||||
if ($data > 0) {
|
||||
$tarifas_envio = $modelTarifaEnvio->getTarifaEnvio($data[0]->pais_id, $peso, $unidades, $entregaPieCalle ? 'palets' : 'cajas');
|
||||
for ($i = 0; $i < count($tarifas_envio); $i++) {
|
||||
if ($peso > $tarifas_envio[$i]->peso_max) {
|
||||
$tarifas_envio[$i]->precio = number_format($tarifas_envio[$i]->peso_min + ($peso - $tarifas_envio[$i]->peso_min) * $tarifas_envio[$i]->precio_adicional, 2);
|
||||
}
|
||||
// si no se calcula linealmente
|
||||
else {
|
||||
$m = (($tarifas_envio[$i]->precio_max - $tarifas_envio[$i]->precio_min) / ($tarifas_envio[$i]->peso_max - $tarifas_envio[$i]->peso_min));
|
||||
$b = $tarifas_envio[$i]->precio_max - $m * $tarifas_envio[$i]->peso_max;
|
||||
$tarifas_envio[$i]->precio = number_format($m * $peso + $b, 2);
|
||||
}
|
||||
$tarifas_envio[$i]->margen = $tarifas_envio[$i]->margen;
|
||||
}
|
||||
|
||||
if (count($tarifas_envio) > 1) {
|
||||
$tarifa_final = array_reduce($tarifas_envio, function ($previous, $current) {
|
||||
return $current->precio < $previous->precio ? $current : $previous;
|
||||
});
|
||||
$coste = $tarifa_final->precio;
|
||||
} else {
|
||||
if (count($tarifas_envio) > 0)
|
||||
$coste = $tarifas_envio[0]->precio;
|
||||
}
|
||||
}
|
||||
if (count($data) > 0) {
|
||||
$data[0]->coste = $coste;
|
||||
$data[0]->tipo = $entregaPieCalle ? 'palets' : 'cajas';
|
||||
}
|
||||
|
||||
$data = $this->calcular_coste_envio($direccionId, $peso, $unidades, $entregaPieCalle);
|
||||
|
||||
return $this->respond([
|
||||
'data' => $data,
|
||||
@ -786,7 +755,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
||||
|
||||
$menu = $model->getMenuDirecciones($data['cliente_id']);
|
||||
|
||||
|
||||
return $this->respond([
|
||||
'data' => $menu,
|
||||
$csrfTokenName => $newTokenHash
|
||||
@ -809,6 +777,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
||||
|
||||
$tirada = $reqData['datos_libro']['tirada'] ?? 0;
|
||||
$selected_tirada = $reqData['tirada'] ?? 0;
|
||||
$peso_libro = $reqData['peso'] ?? 0;
|
||||
$tamanio = $reqData['datos_libro']['tamanio'];
|
||||
$tipo_impresion_id = $this->getTipoImpresion($reqData['datos_libro']['tipo'], $reqData['datos_libro']['tapa']);
|
||||
$cliente_id = $reqData['datos_libro']['clienteId'] ?? -1;
|
||||
@ -842,6 +811,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
||||
$datos_guardas = $reqData['datos_libro']['guardas'] ?? 0;
|
||||
|
||||
$servicios = $reqData['datos_libro']['servicios'] ?? [];
|
||||
$iva_reducido = $reqData['iva_reducido'];
|
||||
|
||||
$datos_presupuesto = array(
|
||||
'tirada' => $tirada,
|
||||
@ -890,14 +860,100 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
||||
]);
|
||||
}
|
||||
|
||||
//$model_presupuesto = new PresupuestoModel();
|
||||
//$id = $model_presupuesto->insertarPresupuestoCliente($selected_tirada, $datos_presupuesto, $datosCabecera, $resultado_presupuesto['info']);
|
||||
|
||||
$iva_reducido = $reqData['iva_reducido'];
|
||||
|
||||
foreach ($reqData['direcciones'] as $direccion){
|
||||
$this->guardarLineaEnvio($id, $direccion);
|
||||
for ($i=0; $i<count($tirada); $i++) {
|
||||
|
||||
$resultado_presupuesto['totales'][$i]['coste_envio'] = 0.0;
|
||||
$resultado_presupuesto['totales'][$i]['margen_envio'] = 0.0;
|
||||
|
||||
foreach ($reqData['direcciones'] as $direccion){
|
||||
|
||||
$proporcion = intval($direccion['unidades'])/$selected_tirada*100.0;
|
||||
$unidades_calculo = floor($tirada[$i] * $proporcion / 100.0);
|
||||
$peso_calculo = $peso_libro / $selected_tirada * $unidades_calculo;
|
||||
$coste_envio = $this->calcular_coste_envio(
|
||||
$direccion['id'], $peso_calculo, $unidades_calculo, $direccion['tipo']=='cajas'?0:1);
|
||||
if(count($coste_envio)> 0){
|
||||
$coste = $coste_envio[0]->coste;
|
||||
$margen = ($coste_envio[0]->coste * $coste_envio[0]->margen)/100.0;
|
||||
$coste -= $margen;
|
||||
$resultado_presupuesto['totales'][$i]['coste_envio'] += $coste;
|
||||
$resultado_presupuesto['totales'][$i]['margen_envio'] += $margen;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$model_presupuesto = new PresupuestoModel();
|
||||
$tiradas_alternativas = [];
|
||||
$resumen_totales = [];
|
||||
for ($i=0; $i<count($tirada); $i++) {
|
||||
if($tirada[$i] != $selected_tirada){
|
||||
|
||||
$coste_total = $resultado_presupuesto['totales'][$i]['totalImpresion'] + $resultado_presupuesto['totales'][$i]['totalPapel'] +
|
||||
$resultado_presupuesto['totales'][$i]['margenImpresion'] + $resultado_presupuesto['totales'][$i]['margenPapel'];
|
||||
$coste_envio = $resultado_presupuesto['totales'][$i]['coste_envio'] + $resultado_presupuesto['totales'][$i]['margen_envio'];
|
||||
$margen_total = round(($resultado_presupuesto['totales'][$i]['margenImpresion'] +
|
||||
$resultado_presupuesto['totales'][$i]['margenPapel'] +
|
||||
$resultado_presupuesto['totales'][$i]['margen_envio'])/($coste_total+$coste_envio)*100.0, 2);
|
||||
$total_pedido =round(($coste_total + $resumen_totales['totalServicios']+$resumen_totales['margenServicios'] + $coste_envio), 2);
|
||||
$precio_u = round(($coste_total + $resumen_totales['totalServicios']+$resumen_totales['margenServicios'] + $coste_envio)/$tirada[$i], 4);
|
||||
|
||||
array_push($tiradas_alternativas, (object)array(
|
||||
'tirada' => $tirada[$i],
|
||||
'coste_impresion' => round($coste_total, 2),
|
||||
'coste_envio' => $coste_envio,
|
||||
'margen' => $margen_total,
|
||||
'total_pedido' => $total_pedido,
|
||||
'precio_unidad' => $precio_u,
|
||||
));
|
||||
}
|
||||
else{
|
||||
$resumen_totales = $resultado_presupuesto['totales'][$i];
|
||||
}
|
||||
}
|
||||
|
||||
$id = $model_presupuesto->insertarPresupuestoCliente(
|
||||
$selected_tirada, $datos_presupuesto, $datosCabecera, $resultado_presupuesto['info'],
|
||||
$resumen_totales, $iva_reducido, $tiradas_alternativas);
|
||||
|
||||
|
||||
// Lineas Presupuesto
|
||||
/*
|
||||
foreach ($resultado_presupuesto['info']['interior'] as $linea){
|
||||
|
||||
if(count($linea) > 0)
|
||||
$this->guardarLineaPresupuesto($id, $linea);
|
||||
}
|
||||
if(count($resultado_presupuesto['info']['cubierta']) > 0)
|
||||
$this->guardarLineaPresupuesto($id, $resultado_presupuesto['info']['cubierta']);
|
||||
if(count($resultado_presupuesto['info']['sobrecubierta']) > 0)
|
||||
$this->guardarLineaPresupuesto($id, $resultado_presupuesto['info']['sobrecubierta']);
|
||||
if(count($resultado_presupuesto['info']['guardas']) > 0)
|
||||
$this->guardarLineaPresupuesto($id, $resultado_presupuesto['info']['guardas']);
|
||||
|
||||
// Servicios
|
||||
foreach ($resultado_presupuesto['info']['serviciosDefecto'] as $servicio){
|
||||
$this->guardarServicio($id, $servicio, 'encuadernacion');
|
||||
}
|
||||
foreach ($resultado_presupuesto['info']['servicios_automaticos'] as $servicio){
|
||||
if ($servicio->tarifa_id == 3 || $servicio->tarifa_id == 5 || $servicio->tarifa_id == 16) {
|
||||
// Servicios acabado
|
||||
$this->guardarServicio($id, $servicio, 'acabado');
|
||||
|
||||
} else if ($servicio->tarifa_id == 24 || $servicio->tarifa_id == 9) {
|
||||
// Servicios extra
|
||||
$this->guardarServicio($id, $servicio, 'extra');
|
||||
|
||||
} else if ($servicio->tarifa_id == 62) {
|
||||
// Servicios manipulado
|
||||
$this->guardarServicio($id, $servicio, 'manipulado');
|
||||
}
|
||||
}
|
||||
*/
|
||||
foreach ($reqData['direcciones'] as $direccion){
|
||||
$this->guardarLineaEnvio($id, $direccion, $peso_libro);
|
||||
}
|
||||
|
||||
|
||||
return $this->respond([
|
||||
'value' => $id,
|
||||
@ -915,10 +971,133 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
||||
* Funciones auxiliares
|
||||
*
|
||||
**********************/
|
||||
protected function guardarLineaEnvio($presupuestoId, $direccion){
|
||||
protected function guardarLineaPresupuesto($presupuestoId, $linea){
|
||||
|
||||
$model = new PresupuestoLineaModel();
|
||||
$model->insertLPFromBackend($presupuestoId, $linea);
|
||||
}
|
||||
|
||||
|
||||
protected function guardarLineaEnvio($presupuestoId, $direccion, $peso_libro){
|
||||
|
||||
$data = $this->calcular_coste_envio($direccion['id'], $peso_libro, $direccion['unidades'], $direccion['tipo']=='cajas'?0:1);
|
||||
if(count($data)>0){
|
||||
$data[0]->presupuesto_id = $presupuestoId;
|
||||
$data[0]->tarifa_id = $data[0]->id;
|
||||
unset($data[0]->id);
|
||||
$data[0]->precio = $data[0]->coste;
|
||||
unset($data[0]->coste);
|
||||
$data[0]->entregaPieCalle = $direccion['tipo']=='cajas'?0:1;
|
||||
unset($data[0]->tipo);
|
||||
$model = new PresupuestoDireccionesModel();
|
||||
$model->insert($data[0]);
|
||||
}
|
||||
}
|
||||
|
||||
protected function guardarTiradas($presupuestoId, $direccion){
|
||||
|
||||
}
|
||||
|
||||
protected function guardarServicio($presupuestoId, $servicio, $tipo){
|
||||
|
||||
if($tipo == 'encuadernacion'){
|
||||
$model = new PresupuestoEncuadernacionesModel();
|
||||
|
||||
$data = [
|
||||
'presupuesto_id' => $presupuestoId,
|
||||
'tarifa_encuadernado_id' => $servicio->tarifa_id,
|
||||
'proveedor_id' => $servicio->proveedor_id,
|
||||
'tiempo' => $servicio->tiempo,
|
||||
'precio_total' => $servicio->total,
|
||||
'precio_unidad' => $servicio->precio_unidad,
|
||||
'margen' => $servicio->margen,
|
||||
];
|
||||
$model->insert($data);
|
||||
}
|
||||
else if($tipo == 'extra'){
|
||||
$model = new PresupuestoServiciosExtraModel();
|
||||
|
||||
$data = [
|
||||
'presupuesto_id' => $presupuestoId,
|
||||
'tarifa_extra_id' => $servicio->tarifa_id,
|
||||
'precio_total' => $servicio->total,
|
||||
'precio_unidad' => $servicio->precio_unidad,
|
||||
'margen' => $servicio->margen,
|
||||
];
|
||||
$model->insert($data);
|
||||
}
|
||||
else if($tipo == 'acabado'){
|
||||
$model = new PresupuestoAcabadosModel();
|
||||
|
||||
$data = [
|
||||
'presupuesto_id' => $presupuestoId,
|
||||
'tarifa_acabado_id' => $servicio->tarifa_id,
|
||||
'precio_total' => $servicio->total,
|
||||
'precio_unidad' => $servicio->precio_unidad,
|
||||
'margen' => $servicio->margen,
|
||||
];
|
||||
$model->insert($data);
|
||||
}
|
||||
else if($tipo == 'manipulado'){
|
||||
$model = new PresupuestoManipuladosModel();
|
||||
|
||||
$data = [
|
||||
'presupuesto_id' => $presupuestoId,
|
||||
'tarifa_manipulado_id' => $servicio->tarifa_id,
|
||||
'precio_total' => $servicio->total,
|
||||
'precio_unidad' => $servicio->precio_unidad,
|
||||
'margen' => $servicio->margen,
|
||||
];
|
||||
$model->insert($data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
protected function calcular_coste_envio($direccionId, $peso, $unidades, $entregaPieCalle){
|
||||
|
||||
$model = model('App\Models\Clientes\ClienteDireccionesModel');
|
||||
$data = $model->getDireccion($direccionId);
|
||||
|
||||
$modelTarifaEnvio = model('App\Models\Tarifas\TarifaEnvioModel');
|
||||
$coste = 0;
|
||||
$margen = 0;
|
||||
|
||||
if ($data > 0) {
|
||||
$peso_envio = $peso * $unidades / 1000.0; // peso libro * unidades y se pasa a gramos
|
||||
$tarifas_envio = $modelTarifaEnvio->getTarifaEnvio($data[0]->pais_id, $data[0]->cp, $peso_envio, $entregaPieCalle ? 'palets' : 'cajas');
|
||||
for ($i = 0; $i < count($tarifas_envio); $i++) {
|
||||
if ($peso > $tarifas_envio[$i]->peso_max) {
|
||||
$tarifas_envio[$i]->precio = number_format($tarifas_envio[$i]->peso_min + ($peso - $tarifas_envio[$i]->peso_min) * $tarifas_envio[$i]->precio_adicional, 2);
|
||||
}
|
||||
// si no se calcula linealmente
|
||||
else {
|
||||
$m = (($tarifas_envio[$i]->precio_max - $tarifas_envio[$i]->precio_min) / ($tarifas_envio[$i]->peso_max - $tarifas_envio[$i]->peso_min));
|
||||
$b = $tarifas_envio[$i]->precio_max - $m * $tarifas_envio[$i]->peso_max;
|
||||
$tarifas_envio[$i]->precio = number_format($m * $peso + $b, 2);
|
||||
}
|
||||
$margen = $tarifas_envio[$i]->margen;
|
||||
}
|
||||
|
||||
if (count($tarifas_envio) > 1) {
|
||||
$tarifa_final = array_reduce($tarifas_envio, function ($previous, $current) {
|
||||
return $current->precio < $previous->precio ? $current : $previous;
|
||||
});
|
||||
$coste = $tarifa_final->precio;
|
||||
} else {
|
||||
if (count($tarifas_envio) > 0)
|
||||
$coste = $tarifas_envio[0]->precio;
|
||||
}
|
||||
}
|
||||
if (count($data) > 0) {
|
||||
$data[0]->coste = $coste;
|
||||
$data[0]->tipo = $entregaPieCalle ? 'palets' : 'cajas';
|
||||
$data[0]->margen = $margen;
|
||||
$data[0]->proveedor = $tarifas_envio[0]->proveedor;
|
||||
$data[0]->proveedor_id = $tarifas_envio[0]->proveedor_id;
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
protected function calcular_presupuesto($datos_entrada , $extra_info =false)
|
||||
{
|
||||
@ -1285,7 +1464,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
||||
foreach ($servicios as $servicio) {
|
||||
if (intval($servicio) == 3 || intval($servicio) == 5 || intval($servicio) == 16) {
|
||||
// Servicios acabado
|
||||
$resultado = PresupuestoCLienteService::getServiciosManipulado([
|
||||
$resultado = PresupuestoCLienteService::getServiciosAcabados([
|
||||
'tarifa_id' => $servicio,
|
||||
'tirada' => $datosPedido->tirada,
|
||||
'POD' => $POD,
|
||||
@ -1364,7 +1543,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$return_data = [
|
||||
'errors' => $error,
|
||||
'total_lp' => $costeInterior + $coste_cubierta + $coste_sobrecubierta,
|
||||
@ -1377,20 +1555,20 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController
|
||||
'peso' => $peso,
|
||||
'lomo_cubierta' => $lomo,
|
||||
'lomo_sobrecubierta'=> $lomo_sobrecubierta,
|
||||
'totales' => $totales,
|
||||
|
||||
'interior' => $interior,
|
||||
'cubierta' => $cubierta,
|
||||
'sobrecubierta' => $linea_sobrecubierta,
|
||||
'guardas' => $guardas,
|
||||
'serviciosDefecto' => $servDefecto,
|
||||
'servicios_automaticos' => $serviciosAutomaticos,
|
||||
];
|
||||
|
||||
if($extra_info){
|
||||
$info['lomo_cubierta'] = $lomo;
|
||||
$info['lomo_sobrecubierta'] = $lomo_sobrecubierta;
|
||||
$return_data['info'] = $info;
|
||||
$return_data['info']['interior'] = $interior;
|
||||
$return_data['info']['cubierta'] = $cubierta;
|
||||
$return_data['info']['sobrecubierta'] = $linea_sobrecubierta;
|
||||
$return_data['info']['guardas'] = $guardas;
|
||||
$return_data['info']['serviciosDefecto'] = $servDefecto;
|
||||
$return_data['info']['servicios_automaticos'] = $serviciosAutomaticos;
|
||||
|
||||
$return_data['totales'] = $totales;
|
||||
}
|
||||
return $return_data;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user