mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
trabajando en añadir tiradas alternativas
This commit is contained in:
@ -82,7 +82,12 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro
|
||||
$newTokenHash = csrf_hash();
|
||||
$csrfTokenName = csrf_token();
|
||||
|
||||
$id = $reqData['id'] ?? 0;
|
||||
|
||||
$json_data = $reqData['json_tiradas'] ?? null;
|
||||
$json_data_acabados = $reqData['json_acabados'] ?? null;
|
||||
$json_data_encuadernacion = $reqData['json_encuadernaciones'] ?? null;
|
||||
$json_data_manipulado = $reqData['json_manipulado'] ?? null;
|
||||
$cliente_id = $reqData['cliente_id'] ?? 0;
|
||||
|
||||
$tipo_impresion_id = $reqData['tipo_impresion_id'] ?? 4;
|
||||
@ -95,7 +100,7 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro
|
||||
|
||||
foreach ($data as $linea) {
|
||||
// Se obtienen los valores de cada linea para el calculo del precio
|
||||
$datosPedido = (object)array(
|
||||
$datosPedido = (object) array(
|
||||
'paginas' => intval($linea['paginas']) ?? 0,
|
||||
'tirada' => intval($reqData['tirada']) ?? 0,
|
||||
'merma' => intval($reqData['merma']) ?? 0,
|
||||
@ -144,24 +149,24 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro
|
||||
$uso = 'interior';
|
||||
$tipo = strpos($linea['row_id'], "_bn") !== false ? 'negro' : 'color';
|
||||
$paginas_negro = isset($linea['numPagColor']) ? intval($datosPedido->paginas) - intval($linea['numPagColor']) : 0;
|
||||
$paginas_color = $linea['numPagColor'] ?? 0;
|
||||
$paginas = (object)array(
|
||||
$paginas_color = $linea['numPagColor'] ?? 0;
|
||||
$paginas = (object) array(
|
||||
'negro' => $paginas_negro,
|
||||
'color' => $paginas_color,
|
||||
);
|
||||
$parametrosRotativa = (object)array(
|
||||
$parametrosRotativa = (object) array(
|
||||
'a_favor_fibra' => $datosPedido->a_favor_fibra,
|
||||
'bnPages' => $paginas->negro,
|
||||
'colorPages' => $paginas->color,
|
||||
'bnPages' => $paginas->negro,
|
||||
'colorPages' => $paginas->color,
|
||||
'rotativa_gota_negro' => 0,
|
||||
'rotativa_gota_color' => 0,
|
||||
);
|
||||
$parametrosRotativa->rotativa_gota_negro = floatval($linea['gotaNegro']?? 0);
|
||||
$parametrosRotativa->rotativa_gota_color = floatval($linea['gotaColor']?? 0);
|
||||
$parametrosRotativa->rotativa_negro = floatval($linea['cobNegro'] ?? 0);
|
||||
$parametrosRotativa->rotativa_cyan = floatval($linea['cobCyan'] ?? 0);
|
||||
$parametrosRotativa->rotativa_magenta = floatval($linea['cobMagenta']?? 0);
|
||||
$parametrosRotativa->rotativa_amarillo = floatval($linea['cobAmarillo']?? 0);
|
||||
$parametrosRotativa->rotativa_gota_negro = floatval($linea['gotaNegro'] ?? 0);
|
||||
$parametrosRotativa->rotativa_gota_color = floatval($linea['gotaColor'] ?? 0);
|
||||
$parametrosRotativa->rotativa_negro = floatval($linea['cobNegro'] ?? 0);
|
||||
$parametrosRotativa->rotativa_cyan = floatval($linea['cobCyan'] ?? 0);
|
||||
$parametrosRotativa->rotativa_magenta = floatval($linea['cobMagenta'] ?? 0);
|
||||
$parametrosRotativa->rotativa_amarillo = floatval($linea['cobAmarillo'] ?? 0);
|
||||
break;
|
||||
case 'lp_cubierta':
|
||||
$uso = 'cubierta';
|
||||
@ -194,14 +199,14 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro
|
||||
$datosTipolog = $linea['gotaNegro'] ?? null;
|
||||
if (!is_null($datosTipolog)) {
|
||||
$datosTipolog = [];
|
||||
$data_temp = (object)array(
|
||||
$data_temp = (object) array(
|
||||
'negro' => floatval($linea['cobNegro'] ?? 0),
|
||||
'cyan' => floatval($linea['cobCyan'] ?? 0),
|
||||
'magenta' => floatval($linea['cobMagenta']?? 0),
|
||||
'amarillo' => floatval($linea['cobAmarillo']?? 0),
|
||||
'magenta' => floatval($linea['cobMagenta'] ?? 0),
|
||||
'amarillo' => floatval($linea['cobAmarillo'] ?? 0),
|
||||
'cg' => floatval($linea['cobCG'] ?? 0),
|
||||
'gota_negro' => floatval($linea['gotaNegro']?? 0),
|
||||
'gota_color' => floatval($linea['gotaColor']?? 0),
|
||||
'gota_negro' => floatval($linea['gotaNegro'] ?? 0),
|
||||
'gota_color' => floatval($linea['gotaColor'] ?? 0),
|
||||
);
|
||||
array_push($datosTipolog, $data_temp);
|
||||
}
|
||||
@ -213,13 +218,13 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro
|
||||
$datosLinea['datosPedido'] = $datosPedido;
|
||||
$datosLinea['cliente_id'] = $cliente_id;
|
||||
$datosLinea['papel'] = $papel;
|
||||
if(isset($isColor))
|
||||
$datosLinea['isColor'] = $isColor;
|
||||
if(isset($opciones_papel))
|
||||
if (isset($isColor))
|
||||
$datosLinea['isColor'] = $isColor;
|
||||
if (isset($opciones_papel))
|
||||
$datosLinea['opciones_papel'] = $opciones_papel;
|
||||
if(isset($parametrosRotativa))
|
||||
if (isset($parametrosRotativa))
|
||||
$datosLinea['parametrosRotativa'] = $parametrosRotativa;
|
||||
if(isset($paginas))
|
||||
if (isset($paginas))
|
||||
$datosLinea['paginas'] = $paginas;
|
||||
$datosLinea['maquina'] = $maquina;
|
||||
$datosLinea['papel_generico'] = $papel_generico;
|
||||
@ -257,19 +262,113 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro
|
||||
$linea_coste['total_coste'] +=
|
||||
$linea_coste['fields']['precio_tinta'];
|
||||
if (strpos($linea['row_id'], 'lp_rot') === 0) {
|
||||
$linea_coste['total_coste'] +=
|
||||
$linea_coste['fields']['total_corte'];
|
||||
}
|
||||
$linea_coste['total_coste'] +=
|
||||
$linea_coste['fields']['total_corte'];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
$linea_coste['total_margen'] = $linea_coste['fields']['margen_papel_pedido'] +
|
||||
$linea_coste['fields']['margen_impresion_horas'] +
|
||||
$linea_coste['fields']['margen_click_pedido'];
|
||||
|
||||
|
||||
unset($linea_coste['fields']);
|
||||
array_push($values, $linea_coste);
|
||||
}
|
||||
|
||||
// Calculo de los servicios (presimpresion y extra no dependen de nada)
|
||||
$servicios = (object) (['coste' => 0.0, 'margen' => 0.0]);
|
||||
|
||||
if ($json_data_acabados) {
|
||||
$json_data_acabados = json_decode($json_data_acabados, true);
|
||||
if (count($json_data_acabados) > 0) {
|
||||
|
||||
$acabados = new Presupuestoacabados();
|
||||
$POD = (new \App\Models\Configuracion\ConfigVariableModel())->getVariable('POD')->value;
|
||||
$result = $acabados->getServiciosAcabados($json_data_acabados, $reqData['tirada'], $POD);
|
||||
if (count($result) > 0) {
|
||||
foreach ($result as $servicio) {
|
||||
$coste = round($servicio->total / (1 + $servicio->margen / 100), 2);
|
||||
$margen = round($servicio->total - $coste, 2);
|
||||
$servicios->coste += $coste;
|
||||
$servicios->margen += $margen;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($json_data_encuadernacion) {
|
||||
$json_data_encuadernacion = json_decode($json_data_encuadernacion, true);
|
||||
if (count($json_data_encuadernacion) > 0) {
|
||||
|
||||
$encuadernacion = new Presupuestoencuadernaciones();
|
||||
$POD = (new \App\Models\Configuracion\ConfigVariableModel())->getVariable('POD')->value;
|
||||
$result = $encuadernacion->getServiciosEncuadernacion($json_data_encuadernacion, $reqData['tirada'], $reqData['paginas'], $reqData['ancho'], $reqData['alto'], $POD);
|
||||
if (count($result) > 0) {
|
||||
foreach ($result as $servicio) {
|
||||
$coste = round($servicio->total / (1 + $servicio->margen / 100), 2);
|
||||
$margen = round($servicio->total - $coste, 2);
|
||||
$servicios->coste += $coste;
|
||||
$servicios->margen += $margen;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($json_data_manipulado) {
|
||||
$json_data_manipulado = json_decode($json_data_manipulado, true);
|
||||
if (count($json_data_manipulado) > 0) {
|
||||
$manipulados = new Presupuestomanipulados();
|
||||
$POD = (new \App\Models\Configuracion\ConfigVariableModel())->getVariable('POD')->value;
|
||||
$result = $manipulados->getServiciosManipulado($json_data_manipulado, $reqData['tirada'], $POD);
|
||||
if (count($result) > 0) {
|
||||
foreach ($result as $servicio) {
|
||||
$coste = round($servicio->total / (1 + $servicio->margen / 100), 2);
|
||||
$margen = round($servicio->total - $coste, 2);
|
||||
$servicios->coste += $coste;
|
||||
$servicios->margen += $margen;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$json_envios = $reqData['json_envios'] ?? null;
|
||||
$coste_envio = 0.0;
|
||||
$margen_envio = 0.0;
|
||||
$tirada_base = floatval($reqData['tirada_base']);
|
||||
$peso_libro = floatval($reqData['peso_libro']);
|
||||
// el primer envio con la tirada base
|
||||
$model = model('App\Models\Tarifas\TarifaEnvioModel');
|
||||
$envios = $model->getTarifaEnvio(1, 18000, $tirada_base * $peso_libro/1000.0, "cajas");
|
||||
$resultado = $this->calcular_envio($envios, $tirada_base * $peso_libro/1000.0);
|
||||
$coste_envio += $resultado->coste;
|
||||
$margen_envio += $resultado->margen;
|
||||
|
||||
if ($json_envios) {
|
||||
$json_envios = json_decode($json_envios, true);
|
||||
if (count($json_envios) > 0) {
|
||||
//la primera linea es el envio base
|
||||
for($i = 1; $i < count($json_envios); $i++) {
|
||||
|
||||
$porcentaje = ($json_envios[$i]['cantidad']) / $tirada_base * 100.0;
|
||||
$cantidad = floor($reqData['tirada'] * $porcentaje / 100.0);
|
||||
$peso_envio = $cantidad * $peso_libro / 1000.0;
|
||||
|
||||
$paisId = $json_envios[$i]['pais_id'];
|
||||
$cp = $json_envios[$i]['cp'];
|
||||
$tipo_envio = $json_envios[$i]['entregaPieCalle'] == 1 ? 'palets' : 'cajas';
|
||||
|
||||
$model = model('App\Models\Tarifas\TarifaEnvioModel');
|
||||
$envios = $model->getTarifaEnvio($paisId, $cp, $peso_envio, $tipo_envio);
|
||||
|
||||
$resultado = $this->calcular_envio($envios, $peso_envio);
|
||||
$coste_envio += $resultado->coste;
|
||||
$margen_envio += $resultado->margen;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
$values = [];
|
||||
}
|
||||
@ -279,8 +378,36 @@ class Presupuestotiradasalternativas extends \App\Controllers\BaseResourceContro
|
||||
|
||||
$response[$csrfTokenName] = $newTokenHash;
|
||||
$response['lineas'] = $values;
|
||||
$response['servicios'] = $servicios;
|
||||
$response['envios'] = (object) (['coste' => $coste_envio, 'margen' => $margen_envio]);
|
||||
|
||||
return $this->respond($response);
|
||||
|
||||
|
||||
}
|
||||
|
||||
private function calcular_envio($envio, $peso_envio)
|
||||
{
|
||||
$coste_envio = 0.0;
|
||||
$margen_envio = 0.0;
|
||||
if (count(value: $envio) > 0) {
|
||||
$envio = $envio[0];
|
||||
if ($envio->id != null) {
|
||||
|
||||
if ($peso_envio > $envio->peso_max || floatval($envio->precio_max) == 0) {
|
||||
$coste_envio += number_format(floatval($envio->precio_min) + ($peso_envio - floatval($envio->peso_min)) * floatval($envio->precio_adicional), 2);
|
||||
}
|
||||
// si no se calcula linealmente
|
||||
else {
|
||||
$m = (($envio->precio_max - $envio->precio_min) / ($envio->peso_max - $envio->peso_min));
|
||||
$b = $envio->precio_max - $m * $envio->peso_max;
|
||||
$coste_envio = number_format($m * $peso_envio + $b, 2);
|
||||
|
||||
}
|
||||
|
||||
$margen_envio += $coste_envio * $envio->margen / 100.0;
|
||||
}
|
||||
}
|
||||
|
||||
return (object) (['coste' => $coste_envio, 'margen' => $margen_envio]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user