trabajando en generar la tabla bn interior

This commit is contained in:
Jaime Jimenez
2023-09-26 09:25:40 +02:00
parent 834ba3488d
commit 991a27286b
4 changed files with 263 additions and 156 deletions

View File

@ -12,13 +12,24 @@ class PresupuestoService extends BaseService
public static function test()
{
$tarifa = (new \App\Models\Configuracion\MaquinasTarifasImpresionModel())->getTarifa(8, "interior", "negro");
var_dump($tarifa);
}
public static function test2()
{
$uso = 'interior';
$tipo = 'negro';
$cantidad = (object)array(
$datosPedido = (object)array(
'paginas' => 200,
'tirada' => 500,
'merma' => 10,
'merma_portada' => 10,
'ancho' => 165,
'alto' => 148,
'isCosido' => true,
);
@ -32,9 +43,6 @@ class PresupuestoService extends BaseService
'rotativa' => 0,
);
$papelimpresionmodel = new \App\Models\Configuracion\PapelImpresionModel();
echo 'Papeles impresion con gramaje=90';
$papeles = $papelimpresionmodel->getIdPapelesImpresionForPresupuesto(
papel_generico_id: 4,
gramaje: 90,
@ -45,93 +53,32 @@ class PresupuestoService extends BaseService
$maquinas = $maquina_model->getMaquinaImpresionForPresupuesto(
is_rotativa: $papel->rotativa,
tarifa_tipo: 'negro',
tirada: $datosPedido->tirada + $datosPedido->merma,
papel_impresion_id: $papel->id,
tirada: $cantidad->tirada+$cantidad->merma
);
echo '<pre>';
echo '<p>Para papel impresion: ' . $papel->nombre . '</p>';
echo '';
var_dump($maquinas);
echo '</pre>';
}
}
/*public static function test2()
{
$uso = 'interior';
$tipo = 'negro';
$cantidad = (object)array(
'paginas' => 100,
'tirada' => 50,
'merma' => 5,
'merma_portada' => 1,
);
$maquina_model = new \App\Models\Configuracion\MaquinaModel();
$opciones_papel = array(
'bn' => 1,
'cubierta' => 0,
'sobrecubierta' => 0,
'rotativa' => 0,
);
$papelimpresionmodel = new \App\Models\Configuracion\PapelImpresionModel();
$papeles = $papelimpresionmodel->getIdPapelesImpresionForPresupuesto(
papel_generico_id: 4,
gramaje: 70,
options: $opciones_papel
);
foreach ($papeles as $papel) {
echo '-------------------------------';
$maquinas = $maquina_model->getMaquinaImpresionForPresupuesto(
is_rotativa: $papel->rotativa,
tarifa_tipo: 'negro',
papel_impresion_id: $papel->id
);
foreach ($maquinas as $maquina) {
if ($maquina->maquina == 'C1100-ByN') {
$formas = PresupuestoService::getNumFormasPlanaInterior(
maquina: $maquina,
ancho: 165.0,
alto: 148.0,
isCosido: true
);
$precio_pliego = PresupuestoService::getPrecioPliego($maquina, $papel);
echo '<pre>';
echo '<p>Para papel impresion: ' . $papel->nombre . '</p>';
echo '';
var_dump($maquina);
var_dump($formas);
var_dump($precio_pliego);
echo '</pre>';
}
echo '----------------------------<br>';
var_dump($maquina->maquina);
var_dump($papel->nombre);
$tarifa = (new \App\Models\Configuracion\MaquinasTarifasImpresionModel())->getTarifa($maquina->maquina_id, $uso, $tipo);
$linea = PresupuestoService::getCostesLinea($uso, $tipo, $datosPedido, $maquina, $papel, $opciones_papel, $tarifa);
echo '<pre>';
var_dump($linea);
echo '</pre>';
}
}
}*/
public static function test2(){
$papel = (object) array('id' => 201, 'gramaje'=>70, "precio_tonelada"=>1750);
$maquina = (object) array('alto' => 120, 'ancho'=>200);
echo PresupuestoService::getPrecioPliego($maquina, $papel,2);
}
/**
* @param mixed $uso
* contiene algun parametro de la lista ['interior,'cubierta','sobrecubierta']
* @param mixed $tipo
* contiene algun parametro de la lista ['negro','color','negrohq','bicolor','colorhq']
* @param mixed $datos_cantidad
* @param mixed $datosPedido
* objeto con la siguiente extructura:
* -> paginas: numero de paginas por libro
* -> tirada: numero de unidades a imprimir
@ -141,33 +88,101 @@ class PresupuestoService extends BaseService
* objeto con la siguiente estructura:
* -> id: el id de la maquina
* -> nombre: nombre de la maquina
* -> calles: objeto con la configuracion de las calles de la maquina
* -> formas: numero de formas
* -> calle_interna: valor de las calles internas de la maquina
* -> calle_externa: valor de las calles externas de la maquina
* -> ancho_impresion: valor maximo del ancho para imprimir
* -> alto_impresion: valor maximo del alto para imprimir
* @param mixed $papel_impresion
* @param mixed $tarifa
*
* @return [type]
*/
public function getCostesLinea($uso, $tipo, $datos_cantidad, $maquina, $temp)
public static function getCostesLinea($uso, $tipo, $datosPedido, $maquina, $papel_impresion, $opciones_papel, $tarifa)
{
$response['fields'] = [];
$tipo = array_get($args, 'tipo');
$tirada = array_get($args, 'tirada');
$merma = array_get($args, 'merma');
$merma_portada = array_get($args, 'merma_portada');
$ancho = array_get($args, 'ancho');
$alto = array_get($args, 'alto');
$paginas = array_get($args, 'paginas');
$papel = array_get($args, 'papel');
$papel_compra = array_get($args, 'papel_compra');
$gramaje = array_get($args, 'gramaje');
$maquina = array_get($args, 'maquina');
$tarifa = array_get($args, 'tarifa');
$cosido = array_get($args, 'cosido', false);
switch ($uso) {
case 'interior':
$formas = PresupuestoService::getNumFormasPlanaInterior($maquina, $datosPedido->ancho, $datosPedido->alto, $datosPedido->isCosido);
$response['fields'] = $formas;
break;
case 'cubierta':
case 'sobrecubierta':
break;
case 'rotativa':
default:
break;
}
if ($response['fields']['num_formas']['posicion_formas'] == 'n/a') {
$response['error']['value'] = true;
$response['error']['message'] = 'no_formas_disponibles';
return response;
}
// precio del pliego de impresion
$precio_pliego_impresion = PresupuestoService::getPrecioPliego($maquina, $papel_impresion, $datosPedido->paginas);
$precio_click = 0;
$precio_click_pedido = 0;
$pliegos_libro = 0;
$cubierta = array_key_exists('cubierta', $opciones_papel) ? $opciones_papel['cubierta'] : 0;
$sobrecubierta = array_key_exists('sobrecubierta', $opciones_papel) ? $opciones_papel['sobrecubierta'] : 0;
$rotativa = array_key_exists('rotativa', $opciones_papel) ? $opciones_papel['rotativa'] : 0;
//interior (bn o color)
if ($cubierta == 0 && $sobrecubierta == 0 && $rotativa == 0) {
// precio papel
$pliegos_libro = ($datosPedido->paginas / 2.0) / $response['fields']['num_formas']['value'];
$pliegos_pedido = $pliegos_libro * ($datosPedido->tirada + $datosPedido->merma);
$precio_libro = $pliegos_libro * $precio_pliego_impresion;
$precio_pedido = $precio_libro * ($datosPedido->tirada + $datosPedido->merma);
$mano = PresupuestoService::computeLomoInterior($datosPedido->paginas, $papel_impresion->espesor);
// peso
$peso = PresupuestoService::computePeso(
ancho: $datosPedido->isCosido ? $datosPedido->ancho / 2.0 : $datosPedido->ancho,
alto: $datosPedido->alto,
gramaje: $papel_impresion->gramaje,
paginas: $datosPedido->paginas
);
// impresion
$precio_click = $tarifa;
$precio_click_pedido = $pliegos_pedido * 2 * $precio_click;
}
// cubierta o sobrecubierta (siempre a color)
else if (($cubierta == 1 || $sobrecubierta == 1) && $rotativa == 0) {
}
// rotativa
else if ($rotativa == 1) {
}
// response
$response['fields']['pliegos_libro'] = $pliegos_libro;
$response['fields']['pliegos_pedido'] = $pliegos_pedido;
$response['fields']['precios_pliegos'] = $precio_pliego_impresion;
$response['fields']['precio_libro'] = $precio_libro;
$response['fields']['precio_pedido'] = $precio_pedido;
$response['fields']['mano'] = $mano;
$response['fields']['peso'] = $peso;
$response['fields']['precio_click'] = $precio_click;
$response['fields']['precio_click_pedido'] = $precio_click_pedido;
$response['fields']['dimensiones_maquina'] = [$maquina->ancho, $maquina->alto];
$response['fields']['dimensiones_maquina_impresion'] = [$maquina->ancho_impresion, $maquina->alto_impresion];
$response['fields']['dimensiones_maquina_click'] = [$maquina->ancho_impresion, $maquina->alto_click];
$response['fields']['dimensiones_libro'] = [$datosPedido->ancho, $datosPedido->alto];
//$response['fields']['datos_rotativa'] = $datos_rotativa;
return $response;
}
private static function getNumFormasPlanaInterior($maquina, $ancho, $alto, $isCosido)
{
$anchoForCalculo = $isCosido ? $ancho * 2 : $ancho;
@ -193,10 +208,6 @@ class PresupuestoService extends BaseService
// solo hay calles para 2 formas o mas
if ((($formas_h > $formas_v) ? $h1 : $h2) > 1) {
var_dump($formas_v);
var_dump($formas_h);
var_dump($h1);
var_dump(($formas_h > $formas_v));
$calles = (new \App\Models\Configuracion\MaquinasCallesModel())->getCallesForMaquina($maquina->maquina_id, ($formas_h > $formas_v) ? $h1 : $h2)[0];
// se calcula el tamaño necesario para el numero de formas + el numero de calles internas
$size_needed = (($formas_h > $formas_v) ? $anchoForCalculo : $alto) * (($formas_h > $formas_v) ? $h1 : $h2) +
@ -213,7 +224,7 @@ class PresupuestoService extends BaseService
$formas_v = ($formas_v - 1 > 0) ? $formas_v - 1 : 0;
}
}
}
}
// Si solo hay una forma, tiene que entrar en el ancho de impresion
else if ((($formas_h > $formas_v) ? $h1 : $h2) == 1) {
if ((($formas_h > $formas_v) ? $h1 : $h2) < $maquina->ancho_impresion) {
@ -225,15 +236,16 @@ class PresupuestoService extends BaseService
// si no hay formas se devuelve n/a
if ($num_formas == 0) {
$response['num_formas']['posicion_formas'] = 'n/a'; // not available
}
else if ($formas_h > $formas_v) {
} else if ($formas_h > $formas_v) {
$response['num_formas']['posicion_formas'] = 'h';
$response['num_formas']['num_formas_horizontales'] = $h1;
$response['num_formas']['num_formas_verticales'] = $v1;
$response['num_formas']['value'] = $num_formas;
} else {
$response['num_formas']['posicion_formas'] = 'v';
$response['num_formas']['num_formas_horizontales'] = $h2;
$response['num_formas']['num_formas_verticales'] = $v2;
$response['num_formas']['value'] = $num_formas;
}
return $response;
@ -243,12 +255,43 @@ class PresupuestoService extends BaseService
private static function getPrecioPliego($maquina, $papel_impresion, $paginas)
{
$margen = (new \App\Models\Configuracion\PapelImpresionMargenModel())->getMargenFormPags($papel_impresion->id, $paginas);
if(count($margen)>0){
if (count($margen) > 0) {
$peso_por_pliego = $maquina->alto * $maquina->ancho * $papel_impresion->gramaje / 1000000;
$precio_pliego = $papel_impresion->precio_tonelada*(1+(floatval($margen[0]['margen'])/100.0)) / 1000000 * $peso_por_pliego;
$precio_pliego = $papel_impresion->precio_tonelada * (1 + (floatval($margen[0]['margen']) / 100.0)) / 1000000 * $peso_por_pliego;
return round($precio_pliego, 6);
}
return -1;
}
/**
* Devuelve la dimensión del lomo interior.
*/
private static function computeLomoInterior($paginas = null, $espesor = null)
{
$lomo = 0;
if (!is_null($paginas) && !is_null($espesor)) {
$lomo += (($espesor * $paginas / 2.0) + 1) / 1000.0;
}
return $lomo;
}
/**
* Devuelve el peso de un pedido.
*/
private static function computePeso($ancho, $alto, $gramaje, $paginas = null)
{
$peso = ($ancho / 1000.0) * ($alto / 1000.0) * $gramaje;
if (!is_null($paginas)) {
if ($paginas > 0) {
$peso *= ($paginas / 2.0);
}
}
return $peso;
}
}