mirror of
https://git.imnavajas.es/jjimenez/safekat.git
synced 2025-07-25 22:52:08 +00:00
trabajando en el back de las tiradas
This commit is contained in:
@ -18,6 +18,162 @@ class PresupuestoService extends BaseService
|
||||
const SANGRE_FORMAS_CUBIERTA = 20.0;
|
||||
|
||||
|
||||
public static function getLineaPresupuestoPlana($data)
|
||||
{
|
||||
|
||||
$uso = $data['uso'];
|
||||
$tipo = $data['tipo'];
|
||||
$datosPedido = $data['datosPedido'];
|
||||
$cliente_id = $data['cliente_id'];
|
||||
$papel = $data['papel'];
|
||||
$opciones_papel = $data['opciones_papel'];
|
||||
$maquina = $data['maquina'];
|
||||
$papel_generico = $data['papel_generico'];
|
||||
$isColor = $data['isColor'];
|
||||
$a_favor_fibra = $data['a_favor_fibra'];
|
||||
$datosTipolog = $data['datosTipolog'];
|
||||
$gramaje = $data['gramaje'];
|
||||
|
||||
|
||||
if ($maquina->is_inkjet) {
|
||||
$parametrosInkjet = (object)array(
|
||||
'a_favor_fibra' => $a_favor_fibra, // este parametro se cambia para comprobar
|
||||
// en las dos direcciones (menos en rustica fresada que es siempre 1)
|
||||
'bnPages' => $isColor ? 0 : $datosPedido->paginas,
|
||||
'colorPages' => ($uso == 'guardas') ? $datosPedido->paginas_impresion : ($isColor ? $datosPedido->paginas : 0),
|
||||
'rotativa_gota_negro' => 0,
|
||||
'rotativa_gota_color' => 0,
|
||||
);
|
||||
|
||||
$papelImpresionTipologiaModel = new \App\Models\Configuracion\PapelImpresionTipologiaModel();
|
||||
if (is_null($datosTipolog)) {
|
||||
$datosTipologias = $papelImpresionTipologiaModel
|
||||
->findTipologiasForPapelImpresion($papel->id, $parametrosInkjet->colorPages > 0 ? 'color' : 'negro')
|
||||
->get()->getResultObject();
|
||||
|
||||
|
||||
if (count($datosTipologias) == 0) {
|
||||
return [];
|
||||
}
|
||||
} else {
|
||||
$datosTipologias = $datosTipolog;
|
||||
}
|
||||
$parametrosInkjet->rotativa_gota_negro = $datosTipologias[0]->gota_negro;
|
||||
$parametrosInkjet->rotativa_gota_color = $datosTipologias[0]->gota_color;
|
||||
$parametrosInkjet->rotativa_negro = $datosTipologias[0]->negro;
|
||||
$parametrosInkjet->rotativa_cyan = $datosTipologias[0]->cyan;
|
||||
$parametrosInkjet->rotativa_magenta = $datosTipologias[0]->magenta;
|
||||
$parametrosInkjet->rotativa_amarillo = $datosTipologias[0]->amarillo;
|
||||
$parametrosInkjet->rotativa_cg = $datosTipologias[0]->cg;
|
||||
}
|
||||
|
||||
$tarifamodel = new \App\Models\Configuracion\MaquinasTarifasImpresionModel();
|
||||
$datos_tarifa = $tarifamodel->getTarifa($maquina->maquina_id, ($uso == 'guardas') ? 'interior' : $uso, $tipo);
|
||||
if (count($datos_tarifa) > 0) {
|
||||
$tarifaId = $datos_tarifa[0];
|
||||
$tarifa = $datos_tarifa[1];
|
||||
$tarifa_margen = $datos_tarifa[2];
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
|
||||
if ($maquina->is_inkjet) {
|
||||
$linea = PresupuestoService::getCostesLinea($uso, $datosPedido, $maquina, $papel, $opciones_papel, $tarifa, $tarifa_margen, $parametrosInkjet->a_favor_fibra);
|
||||
} else {
|
||||
$linea = PresupuestoService::getCostesLinea($uso, $datosPedido, $maquina, $papel, $opciones_papel, $tarifa, $tarifa_margen);
|
||||
}
|
||||
|
||||
if (array_key_exists('error', $linea)) {
|
||||
//array_push($lineas, $linea); for debug
|
||||
return [];
|
||||
}
|
||||
|
||||
if ($maquina->is_inkjet) {
|
||||
// calculo de tintas
|
||||
$linea['fields'] = array_merge($linea['fields'], PresupuestoService::calculoCosteTintas($maquina, $datosPedido, $parametrosInkjet));
|
||||
}
|
||||
|
||||
$linea['fields']['tarifa_impresion_id'] = $tarifaId;
|
||||
$linea['fields']['maquina'] = $maquina->maquina;
|
||||
$linea['fields']['maquina_id'] = $maquina->maquina_id;
|
||||
$linea['fields']['maquina_velocidad'] = $maquina->velocidad;
|
||||
$linea['fields']['papel_impresion'] = $papel->nombre;
|
||||
$linea['fields']['papel_impresion_id'] = $papel->id;
|
||||
$linea['fields']['paginas'] = $datosPedido->paginas;
|
||||
$linea['fields']['gramaje'] = $gramaje;
|
||||
$linea['fields']['papel_generico_id'] = $papel_generico['id'];
|
||||
$linea['fields']['papel_generico'] = $papel_generico['nombre'];
|
||||
|
||||
$linea['fields']['tiempo_maquina'] = PresupuestoService::getTiempoMaquina(
|
||||
$linea['fields']['precio_click_pedido'],
|
||||
$linea['fields']['precio_click'],
|
||||
$maquina->velocidad
|
||||
);
|
||||
|
||||
$clientePreciosModel = new \App\Models\Clientes\ClientePreciosModel();
|
||||
$config = (object)[
|
||||
"tipo" => ($uso == 'guardas') ? 'interior' : $uso,
|
||||
"tipo_maquina" => $maquina->is_inkjet ? 'inkjet' : 'toner',
|
||||
"tipo_impresion" => $tipo
|
||||
];
|
||||
$tiempo = PresupuestoService::getHorasMaquina(
|
||||
$linea['fields']['precio_click_pedido'],
|
||||
$linea['fields']['precio_click'],
|
||||
$maquina->velocidad
|
||||
);
|
||||
[$precio_hora, $margen_precio_hora] = $clientePreciosModel->get_precio_hora($cliente_id, $config, $tiempo);
|
||||
|
||||
|
||||
if (is_null($precio_hora)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$linea['fields']['tipo_maquina'] = $maquina->is_inkjet ? 'inkjet' : 'toner';
|
||||
$linea['fields']['precio_hora'] = $precio_hora * (1 + $margen_precio_hora / 100.0);
|
||||
$linea['fields']['precio_hora_margen'] = $precio_hora * ($margen_precio_hora / 100.0);
|
||||
$linea['fields']['horas_maquina'] = $tiempo;
|
||||
$linea['fields']['precio_impresion_horas'] = $linea['fields']['precio_hora'] * $tiempo;
|
||||
$linea['fields']['margen_impresion_horas'] = $linea['fields']['precio_hora_margen'] * $tiempo;
|
||||
|
||||
// para guardas
|
||||
if (\property_exists($datosPedido, 'paginas_impresion')) {
|
||||
$linea['fields']['paginas_impresion'] = $datosPedido->paginas_impresion;
|
||||
}
|
||||
|
||||
if ($maquina->is_inkjet) {
|
||||
$linea['fields']['a_favor_fibra'] = $parametrosInkjet->a_favor_fibra;
|
||||
$linea['fields']['paginas_color'] = $isColor ? $datosPedido->paginas : 0;
|
||||
$linea['fields']['totalClicksPedido'] = $linea['fields']['precio_click_pedido'];
|
||||
if ($uso != 'guardas') {
|
||||
$linea['fields']['clicks_libro'] = round(ceil($linea['fields']['pliegos_libro']) * 2, 2);
|
||||
} else {
|
||||
if ($datosPedido->paginas_impresion == 4)
|
||||
$linea['fields']['clicks_libro'] = round(ceil($linea['fields']['pliegos_libro']), 2);
|
||||
else if ($datosPedido->paginas_impresion == 8)
|
||||
$linea['fields']['clicks_libro'] = round(ceil($linea['fields']['pliegos_libro']) * 2, 2);
|
||||
else
|
||||
$linea['fields']['clicks_libro'] = 0;
|
||||
}
|
||||
$linea['fields']['clicks_pedido'] = round($linea['fields']['clicks_libro'] * ($datosPedido->tirada + $datosPedido->merma), 2);
|
||||
[$ancho, $alto] = PresupuestoService::calculoDimForma($datosPedido, $parametrosInkjet);
|
||||
$linea['fields']['factor_anchura'] = round($maquina->ancho_impresion / $ancho, 2);
|
||||
$linea['fields']['factor_altura'] = round($maquina->alto_impresion / ($alto + PresupuestoService::MARGEN_PAGINAS_ROTATIVA), 2);
|
||||
$linea['fields']['paginas_por_pliego'] = ($datosPedido->isCosido) ? $linea['fields']['num_formas']['value'] * 2 : $linea['fields']['num_formas']['value'] * 2; // Se multiplica *2 porque es doble cara
|
||||
$linea['fields']['datosTipologias'] = $datosTipologias[0];
|
||||
$linea['fields']['total_impresion'] =
|
||||
floatval($linea['fields']['precio_pedido']) + // papel
|
||||
floatval($linea['fields']['precio_impresion_horas']) + // horas de maquina
|
||||
floatval($linea['fields']['precio_click_pedido']) + // precio clicks del pedido
|
||||
floatval($linea['fields']['precio_tinta']); // tinta
|
||||
} else {
|
||||
$linea['fields']['total_impresion'] = floatval($linea['fields']['precio_pedido']) + // papel
|
||||
floatval($linea['fields']['precio_click_pedido']) + // precio clicks del pedido
|
||||
floatval($linea['fields']['precio_impresion_horas']); // horas de maquina
|
||||
}
|
||||
|
||||
|
||||
return $linea;
|
||||
}
|
||||
/**
|
||||
* @param mixed $uso
|
||||
* contiene algun parametro de la lista ['interior,'cubierta','sobrecubierta']
|
||||
@ -44,14 +200,14 @@ class PresupuestoService extends BaseService
|
||||
{
|
||||
$response['fields'] = [];
|
||||
|
||||
if ($uso!='rotativa') {
|
||||
if ($uso != 'rotativa') {
|
||||
|
||||
$ancho_calculo = ($uso=='cubierta' || $uso=='sobrecubierta') ? $datosPedido->anchoExteriores : $datosPedido->ancho;
|
||||
$alto_calculo = ($uso=='cubierta' || $uso=='sobrecubierta') ? $datosPedido->altoExteriores : $datosPedido->alto;
|
||||
$ancho_calculo = ($uso == 'cubierta' || $uso == 'sobrecubierta') ? $datosPedido->anchoExteriores : $datosPedido->ancho;
|
||||
$alto_calculo = ($uso == 'cubierta' || $uso == 'sobrecubierta') ? $datosPedido->altoExteriores : $datosPedido->alto;
|
||||
$formas = PresupuestoService::getNumFormasPlana($uso, $maquina, $ancho_calculo, $alto_calculo, $datosPedido->isCosido, $forzar_a_favor_fibra);
|
||||
$response['fields'] = $formas;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if ($response['fields']['num_formas']['posicion_formas'] == 'n/a') {
|
||||
$response['error']['value'] = true;
|
||||
@ -61,7 +217,7 @@ class PresupuestoService extends BaseService
|
||||
|
||||
// precio del pliego de impresion
|
||||
[$precio_pliego_impresion, $margen_pliego_impresion] = PresupuestoService::getPrecioPliego($maquina, $papel_impresion, $datosPedido->paginas);
|
||||
|
||||
|
||||
$precio_click = 0;
|
||||
$precio_click_pedido = 0;
|
||||
$margen_click_pedido = 0;
|
||||
@ -79,10 +235,10 @@ class PresupuestoService extends BaseService
|
||||
if ($cubierta == 0 && $sobrecubierta == 0 && $rotativa == 0) {
|
||||
// precio papel
|
||||
$pliegos_libro = ceil(($datosPedido->paginas / 2.0) / $response['fields']['num_formas']['value']);
|
||||
if($pliegos_libro<1)
|
||||
if ($pliegos_libro < 1)
|
||||
$pliegos_libro = 1;
|
||||
$pliegos_pedido = $pliegos_libro * ($datosPedido->tirada + $datosPedido->merma);
|
||||
$precio_libro = $pliegos_libro * ($precio_pliego_impresion+$margen_pliego_impresion);
|
||||
$precio_libro = $pliegos_libro * ($precio_pliego_impresion + $margen_pliego_impresion);
|
||||
$margen_papel_pedido = $pliegos_libro * $margen_pliego_impresion * ($datosPedido->tirada + $datosPedido->merma);
|
||||
$precio_pedido = $precio_libro * ($datosPedido->tirada + $datosPedido->merma);
|
||||
|
||||
@ -94,38 +250,35 @@ class PresupuestoService extends BaseService
|
||||
alto: $datosPedido->alto,
|
||||
gramaje: $papel_impresion->gramaje,
|
||||
paginas: $datosPedido->paginas
|
||||
);
|
||||
);
|
||||
|
||||
// impresion
|
||||
if($uso=='guardas'){
|
||||
if(floatval($datosPedido->paginas_impresion)==0)
|
||||
if ($uso == 'guardas') {
|
||||
if (floatval($datosPedido->paginas_impresion) == 0)
|
||||
$precio_click_pedido = 0;
|
||||
elseif (floatval($datosPedido->paginas_impresion)==4){ // Una cara
|
||||
elseif (floatval($datosPedido->paginas_impresion) == 4) { // Una cara
|
||||
$precio_click_pedido = $pliegos_pedido * $precio_click;
|
||||
$margen_click_pedido = $pliegos_pedido * $margen_click;
|
||||
} else { // dos caras (impresion normal)
|
||||
$precio_click_pedido = $pliegos_pedido * 2 * $precio_click;
|
||||
$margen_click_pedido = $pliegos_pedido * 2 * $margen_click;
|
||||
}
|
||||
else{ // dos caras (impresion normal)
|
||||
$precio_click_pedido = $pliegos_pedido * 2 * $precio_click;
|
||||
$margen_click_pedido = $pliegos_pedido * 2 * $margen_click;
|
||||
}
|
||||
}
|
||||
else {
|
||||
$precio_click_pedido = $pliegos_pedido * 2 * $precio_click;
|
||||
$margen_click_pedido = $pliegos_pedido * 2 * $margen_click;
|
||||
} else {
|
||||
$precio_click_pedido = $pliegos_pedido * 2 * $precio_click;
|
||||
$margen_click_pedido = $pliegos_pedido * 2 * $margen_click;
|
||||
}
|
||||
|
||||
}
|
||||
// cubierta o sobrecubierta (siempre a color)
|
||||
else if (($cubierta == 1 || $sobrecubierta == 1) && $rotativa == 0) {
|
||||
// precio papel
|
||||
$pliegos_libro = 1.0 / $response['fields']['num_formas']['value'];
|
||||
// En cubierta y sobrecubierta siempre el mínimo pliego es 1
|
||||
$pliegos_libro = $pliegos_libro<1?1:$pliegos_libro;
|
||||
$pliegos_libro = $pliegos_libro < 1 ? 1 : $pliegos_libro;
|
||||
$pliegos_pedido = $pliegos_libro * ($datosPedido->tirada + $datosPedido->merma);
|
||||
$precio_libro = $pliegos_libro * ($precio_pliego_impresion + $margen_pliego_impresion);
|
||||
$margen_papel_pedido = $pliegos_libro * $margen_pliego_impresion * ($datosPedido->tirada + $datosPedido->merma);
|
||||
$precio_pedido = $precio_libro * ($datosPedido->tirada + $datosPedido->merma);
|
||||
|
||||
|
||||
$mano = PresupuestoService::computeLomoPortada($papel_impresion->espesor);
|
||||
|
||||
// peso
|
||||
@ -138,9 +291,9 @@ class PresupuestoService extends BaseService
|
||||
$margen_click_pedido = $pliegos_pedido * $margen_click;
|
||||
|
||||
// dos caras
|
||||
if($datosPedido->paginas > 2) {
|
||||
$precio_click_pedido *= 2.0;
|
||||
$margen_click_pedido *= 2.0;
|
||||
if ($datosPedido->paginas > 2) {
|
||||
$precio_click_pedido *= 2.0;
|
||||
$margen_click_pedido *= 2.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -149,7 +302,7 @@ class PresupuestoService extends BaseService
|
||||
// response
|
||||
$response['fields']['pliegos_libro'] = $pliegos_libro;
|
||||
$response['fields']['pliegos_pedido'] = $pliegos_pedido;
|
||||
$response['fields']['precios_pliegos'] = $precio_pliego_impresion+$margen_pliego_impresion;
|
||||
$response['fields']['precios_pliegos'] = $precio_pliego_impresion + $margen_pliego_impresion;
|
||||
$response['fields']['precio_libro'] = $precio_libro;
|
||||
$response['fields']['margen_papel_pedido'] = $margen_papel_pedido;
|
||||
$response['fields']['precio_pedido'] = $precio_pedido;
|
||||
@ -168,7 +321,7 @@ class PresupuestoService extends BaseService
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Devuelve los calculos para la linea de rotativa.
|
||||
*/
|
||||
@ -206,7 +359,7 @@ class PresupuestoService extends BaseService
|
||||
|
||||
// calculo de tintas
|
||||
$data = array_merge($data, PresupuestoService::calculoCosteTintas($maquina, $datosPedido, $parametrosRotativa));
|
||||
|
||||
|
||||
// calculo de corte
|
||||
$data['velocidad_corte'] = $maquina->velocidad_corte;
|
||||
$data['precio_hora_corte'] = $maquina->precio_hora_corte;
|
||||
@ -219,11 +372,11 @@ class PresupuestoService extends BaseService
|
||||
// peso
|
||||
$data['peso'] = PresupuestoService::computePeso(
|
||||
ancho: $datosPedido->isCosido ? $datosPedido->ancho / 2.0 : $datosPedido->ancho,
|
||||
alto: $datosPedido->alto,
|
||||
gramaje: $papel_impresion->gramaje,
|
||||
paginas: $datosPedido->paginas
|
||||
);
|
||||
|
||||
alto: $datosPedido->alto,
|
||||
gramaje: $papel_impresion->gramaje,
|
||||
paginas: $datosPedido->paginas
|
||||
);
|
||||
|
||||
$data['dimensiones_maquina'] = [$maquina->ancho, $maquina->alto];
|
||||
$data['dimensiones_maquina_impresion'] = [$maquina->ancho_impresion, $maquina->alto_impresion];
|
||||
$data['dimensiones_maquina_click'] = [$maquina->ancho_impresion, $maquina->alto_click];
|
||||
@ -232,11 +385,12 @@ class PresupuestoService extends BaseService
|
||||
$data['alto_click'] = $maquina->alto_click;
|
||||
|
||||
$formas = PresupuestoService::getNumFormasRot(
|
||||
$maquina,
|
||||
$datosPedido->ancho,
|
||||
$datosPedido->alto,
|
||||
$datosPedido->isCosido,
|
||||
$parametrosRotativa->a_favor_fibra);
|
||||
$maquina,
|
||||
$datosPedido->ancho,
|
||||
$datosPedido->alto,
|
||||
$datosPedido->isCosido,
|
||||
$parametrosRotativa->a_favor_fibra
|
||||
);
|
||||
$data['num_formas'] = $formas;
|
||||
|
||||
return $data;
|
||||
@ -246,13 +400,13 @@ class PresupuestoService extends BaseService
|
||||
/**
|
||||
* Devuelve los calculos de las dimensiones de la forma
|
||||
*/
|
||||
public static function calculoDimForma($datosPedido, $parametros){
|
||||
public static function calculoDimForma($datosPedido, $parametros)
|
||||
{
|
||||
// posicionamos paginas en función de a favor de fibra o no
|
||||
if (!$parametros->a_favor_fibra) {
|
||||
$anchoLibro = $datosPedido->alto;
|
||||
$altoLibro = $datosPedido->ancho;
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
$anchoLibro = $datosPedido->ancho;
|
||||
$altoLibro = $datosPedido->alto;
|
||||
}
|
||||
@ -288,7 +442,7 @@ class PresupuestoService extends BaseService
|
||||
|
||||
$pag_negro = $parametros->bnPages;
|
||||
$pag_color = 0;
|
||||
if ($parametros->colorPages>0) {
|
||||
if ($parametros->colorPages > 0) {
|
||||
$pag_color = $parametros->colorPages;
|
||||
}
|
||||
|
||||
@ -308,16 +462,17 @@ class PresupuestoService extends BaseService
|
||||
// precio tinta
|
||||
$data['precio_tinta'] = round(
|
||||
round(($data['peso_gotas_negro_pedido'] / 1000.0) * $maquina->precio_tinta_negro, 2) +
|
||||
round(($data['peso_gotas_cyan_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2) +
|
||||
round(($data['peso_gotas_magenta_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2) +
|
||||
round(($data['peso_gotas_amarillo_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2)
|
||||
, 2);
|
||||
|
||||
|
||||
if($maquina->is_inkjet){
|
||||
round(($data['peso_gotas_cyan_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2) +
|
||||
round(($data['peso_gotas_magenta_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2) +
|
||||
round(($data['peso_gotas_amarillo_pedido'] / 1000.0) * $maquina->precio_tinta_color, 2),
|
||||
2
|
||||
);
|
||||
|
||||
|
||||
if ($maquina->is_inkjet) {
|
||||
$data['num_gotas_cg'] = round($data['superficie'] * $data['resolucion'] * $data['resolucion'] * ($parametros->rotativa_cg / 100.0), 0);
|
||||
$data['peso_gotas_cg'] = round((($data['num_gotas_cg'] * $parametros->rotativa_gota_color * $data['pulgada']) / (17.65 / 20.0)) * $pag_color * 1000, 6) +
|
||||
round((($data['num_gotas_cg'] * $parametros->rotativa_gota_negro * $data['pulgada']) / (17.65 / 20.0)) * $pag_negro * 1000, 6);
|
||||
$data['peso_gotas_cg'] = round((($data['num_gotas_cg'] * $parametros->rotativa_gota_color * $data['pulgada']) / (17.65 / 20.0)) * $pag_color * 1000, 6) +
|
||||
round((($data['num_gotas_cg'] * $parametros->rotativa_gota_negro * $data['pulgada']) / (17.65 / 20.0)) * $pag_negro * 1000, 6);
|
||||
$data['peso_gotas_cg_pedido'] = round($data['peso_gotas_cg'], 2) * ($datosPedido->tirada + $datosPedido->merma);
|
||||
|
||||
$data['precio_tinta'] += round(($data['peso_gotas_cg_pedido'] / 1000.0) * $maquina->precio_tinta_cg, 2);
|
||||
@ -329,24 +484,24 @@ class PresupuestoService extends BaseService
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static function getNumFormasRot($maquina, $ancho, $alto, $isCosido, $a_favor_fibra = true)
|
||||
{
|
||||
// El ancho si es cosido es el doble
|
||||
$anchoForCalculo = $isCosido ? $ancho * 2 : $ancho;
|
||||
|
||||
|
||||
$altoForCalculo = $alto;
|
||||
|
||||
$h1_temp = floor($maquina->ancho_impresion / $anchoForCalculo);
|
||||
|
||||
$h1_temp = floor($maquina->ancho_impresion / $anchoForCalculo);
|
||||
$h2_temp = floor($maquina->ancho_impresion / $altoForCalculo);
|
||||
|
||||
|
||||
// horizontales
|
||||
if($a_favor_fibra){
|
||||
if ($a_favor_fibra) {
|
||||
|
||||
$calles = (new \App\Models\Configuracion\MaquinasCallesModel())->getCallesForMaquina($maquina->maquina_id, $h1_temp);
|
||||
// Si son mas de 2 formas
|
||||
if(count($calles)>0)
|
||||
if (count($calles) > 0)
|
||||
$h1 = ($h1_temp * $anchoForCalculo + 2 * $calles[0]->externas + ($h1_temp - 1) * $calles[0]->internas < ($maquina->ancho)) ? $h1_temp : $h1_temp - 1;
|
||||
else
|
||||
$h1 = $h1_temp;
|
||||
@ -355,10 +510,10 @@ class PresupuestoService extends BaseService
|
||||
$formas_h = $h1 * $v1; //p1
|
||||
}
|
||||
// verticales
|
||||
else{
|
||||
|
||||
else {
|
||||
|
||||
$calles = (new \App\Models\Configuracion\MaquinasCallesModel())->getCallesForMaquina($maquina->maquina_id, $h2_temp);
|
||||
if(count($calles)>0)
|
||||
if (count($calles) > 0)
|
||||
$h2 = ($h2_temp * $altoForCalculo + 2 * $calles[0]->externas + ($h2_temp - 1) * $calles[0]->internas < ($maquina->ancho)) ? $h2_temp : $h2_temp - 1;
|
||||
else
|
||||
$h2 = $h2_temp;
|
||||
@ -368,8 +523,8 @@ class PresupuestoService extends BaseService
|
||||
|
||||
$num_formas = $a_favor_fibra ? $formas_h : $formas_v;
|
||||
$num_formas = $isCosido ? $num_formas * 2 : $num_formas;
|
||||
|
||||
|
||||
|
||||
|
||||
// si no hay formas se devuelve n/a
|
||||
if ($num_formas == 0) {
|
||||
$response['posicion_formas'] = 'n/a'; // not available
|
||||
@ -394,16 +549,16 @@ class PresupuestoService extends BaseService
|
||||
$h2_temp = 0;
|
||||
|
||||
// El ancho si es cosido es el doble
|
||||
if($uso != 'cubierta' && $uso != 'sobrecubierta'){
|
||||
if ($uso != 'cubierta' && $uso != 'sobrecubierta') {
|
||||
$anchoForCalculo = $isCosido ? $ancho * 2 : $ancho;
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
$anchoForCalculo = $ancho;
|
||||
}
|
||||
|
||||
$altoForCalculo = $alto;
|
||||
|
||||
/*
|
||||
Log ancho y alto de impresion y libro
|
||||
//Log ancho y alto de impresion y libro
|
||||
$info = [
|
||||
'ancho' => $anchoForCalculo,
|
||||
'alto' => $altoForCalculo,
|
||||
@ -411,104 +566,117 @@ class PresupuestoService extends BaseService
|
||||
'maquina_alto' => $maquina->alto_impresion,
|
||||
];
|
||||
|
||||
if($uso == 'cubierta' )
|
||||
log_message('error', 'ancho:{ancho} --- alto:{alto} --- ancho2:{maquina_ancho} --- alto2:{maquina_alto} ---', $info);*/
|
||||
if ($uso == 'cubierta')
|
||||
log_message('error', 'ancho:{ancho} --- alto:{alto} --- ancho_m:{maquina_ancho} --- alto_m:{maquina_alto} ---', $info);
|
||||
*/
|
||||
|
||||
if($uso == 'cubierta' || $uso == 'sobrecubierta') {
|
||||
if(property_exists($maquina, 'forzar_num_formas_horizontales_cubierta') &&
|
||||
property_exists($maquina, 'forzar_num_formas_verticales_cubierta')){
|
||||
if ($uso == 'cubierta' || $uso == 'sobrecubierta') {
|
||||
if (
|
||||
!is_null($maquina->forzar_num_formas_horizontales_cubierta) &&
|
||||
!is_null($maquina->forzar_num_formas_verticales_cubierta)
|
||||
|
||||
) {
|
||||
|
||||
if (
|
||||
$maquina->forzar_num_formas_horizontales_cubierta > 0 &&
|
||||
$maquina->forzar_num_formas_verticales_cubierta > 0
|
||||
) {
|
||||
|
||||
if($maquina->forzar_num_formas_horizontales_cubierta > 0 &&
|
||||
$maquina->forzar_num_formas_verticales_cubierta > 0){
|
||||
|
||||
// Hay que comprobar que entran
|
||||
$h1_temp = $maquina->forzar_num_formas_horizontales_cubierta;
|
||||
$h2_temp = $maquina->forzar_num_formas_verticales_cubierta;
|
||||
//$num_formas = $h1_temp * $h2_temp;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// No es cubierta ni sobrecubierta
|
||||
else{
|
||||
else {
|
||||
// horizontales
|
||||
$h1_temp = floor(floatval($maquina->ancho_impresion) / $anchoForCalculo);
|
||||
$h1_temp = floor(floatval($maquina->ancho_impresion) / $anchoForCalculo);
|
||||
$h2_temp = floor(floatval($maquina->ancho_impresion) / $altoForCalculo);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// horizontales
|
||||
$calles = (new \App\Models\Configuracion\MaquinasCallesModel())->getCallesForMaquina($maquina->maquina_id, $h1_temp);
|
||||
// Si son mas de 2 formas
|
||||
if(count($calles)>0)
|
||||
if (count($calles) > 0)
|
||||
$h1 = ($h1_temp * $anchoForCalculo + 2 * $calles[0]->externas + ($h1_temp - 1) * $calles[0]->internas < ($maquina->ancho)) ? $h1_temp : $h1_temp - 1;
|
||||
else{
|
||||
$h1 = $anchoForCalculo<=$maquina->ancho_impresion?$h1_temp:0;
|
||||
else {
|
||||
$h1 = $anchoForCalculo <= $maquina->ancho_impresion ? $h1_temp : 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
$v1 = floor($maquina->alto_impresion / $altoForCalculo);
|
||||
$formas_h = $h1 * $v1; //p1
|
||||
|
||||
/*
|
||||
//Log ancho y alto de impresion y libro
|
||||
$info = [
|
||||
'h1' => $h1,
|
||||
'v1' => $v1,
|
||||
'num_formas' => $formas_h,
|
||||
'h1_temp' => $h1_temp,
|
||||
|
||||
];
|
||||
|
||||
if($uso == 'cubierta' )
|
||||
log_message('error', 'h1:{h1} --- v1:{v1} --- num_formas:{num_formas} --- h1_temp:{h1_temp}', $info);
|
||||
*/
|
||||
|
||||
// verticales
|
||||
$calles = (new \App\Models\Configuracion\MaquinasCallesModel())->getCallesForMaquina($maquina->maquina_id, $h2_temp);
|
||||
if(count($calles)>0)
|
||||
if (count($calles) > 0)
|
||||
$h2 = ($h2_temp * $altoForCalculo + 2 * $calles[0]->externas + ($h2_temp - 1) * $calles[0]->internas < ($maquina->ancho)) ? $h2_temp : $h2_temp - 1;
|
||||
else{
|
||||
$h2 = $altoForCalculo<=$maquina->ancho_impresion?$h2_temp:0;
|
||||
else {
|
||||
$h2 = $altoForCalculo <= $maquina->ancho_impresion ? $h2_temp : 0;
|
||||
}
|
||||
|
||||
|
||||
$v2 = floor($maquina->alto_impresion / $anchoForCalculo);
|
||||
$formas_v = $h2 * $v2; //p2
|
||||
|
||||
|
||||
|
||||
// Se calcula el numero de formas
|
||||
if($uso != 'cubierta' && $uso != 'sobrecubierta' && !$forzar_a_favor_fibra){
|
||||
if ($uso != 'cubierta' && $uso != 'sobrecubierta' && !$forzar_a_favor_fibra) {
|
||||
$num_formas = ($formas_h > $formas_v) ? $formas_h : $formas_v;
|
||||
$num_formas = $isCosido ? $num_formas * 2 : $num_formas;
|
||||
}
|
||||
else if ($forzar_a_favor_fibra){
|
||||
} else if ($forzar_a_favor_fibra) {
|
||||
|
||||
$num_formas = $formas_h;
|
||||
$num_formas = $isCosido ? $num_formas * 2 : $num_formas;
|
||||
} else {
|
||||
|
||||
}
|
||||
else{
|
||||
|
||||
$num_formas = $h1*$v1;
|
||||
$num_formas = $h1 * $v1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// si no hay formas se devuelve n/a
|
||||
if ($num_formas == 0) {
|
||||
$response['num_formas']['posicion_formas'] = 'n/a'; // not available
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
if ($formas_h > $formas_v || $forzar_a_favor_fibra && $formas_h != 0) {
|
||||
$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 {
|
||||
if($formas_v != 0){
|
||||
} else {
|
||||
if ($formas_v != 0) {
|
||||
$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;
|
||||
}
|
||||
}
|
||||
|
||||
if(($uso == 'cubierta' || $uso == 'sobrecubierta') && $num_formas>0) {
|
||||
if(property_exists($maquina, 'forzar_num_formas_horizontales_cubierta') &&
|
||||
property_exists($maquina, 'forzar_num_formas_horizontales_cubierta')){
|
||||
|
||||
if (($uso == 'cubierta' || $uso == 'sobrecubierta') && $num_formas > 0) {
|
||||
if (
|
||||
property_exists($maquina, 'forzar_num_formas_horizontales_cubierta') &&
|
||||
property_exists($maquina, 'forzar_num_formas_horizontales_cubierta')
|
||||
) {
|
||||
$response['num_formas']['num_formas_verticales'] = $h2_temp;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
return $response;
|
||||
@ -520,38 +688,38 @@ class PresupuestoService extends BaseService
|
||||
$margen = (new \App\Models\Configuracion\PapelImpresionMargenModel())->getMargenFormPags($papel_impresion->id, $paginas);
|
||||
if (count($margen) > 0) {
|
||||
$peso_por_pliego = $maquina->alto * $maquina->ancho * $papel_impresion->gramaje / 1000000;
|
||||
$precio_pliego = ($peso_por_pliego * $papel_impresion->precio_tonelada / 1000000.0) ;
|
||||
$precio_pliego = ($peso_por_pliego * $papel_impresion->precio_tonelada / 1000000.0);
|
||||
$margen_pliego = ($peso_por_pliego * $papel_impresion->precio_tonelada / 1000000.0) * (floatval($margen[0]['margen']) / 100.0);
|
||||
return [round($precio_pliego, 6), round($margen_pliego, 6)];
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
public static function getTiempoMaquina($totalClicks, $precioClick, $velocidadMaquina) {
|
||||
public static function getTiempoMaquina($totalClicks, $precioClick, $velocidadMaquina)
|
||||
{
|
||||
try {
|
||||
|
||||
if($precioClick>0 && $velocidadMaquina>0)
|
||||
$minutos = (1.0*$totalClicks/$precioClick)/$velocidadMaquina;
|
||||
|
||||
if ($precioClick > 0 && $velocidadMaquina > 0)
|
||||
$minutos = (1.0 * $totalClicks / $precioClick) / $velocidadMaquina;
|
||||
else
|
||||
$minutos = 0;
|
||||
|
||||
return gmdate("H:i:s", round($minutos*60,0));
|
||||
|
||||
|
||||
return gmdate("H:i:s", round($minutos * 60, 0));
|
||||
} catch (Exception $e) {
|
||||
return gmdate("H:i:s", round(0,0));
|
||||
return gmdate("H:i:s", round(0, 0));
|
||||
}
|
||||
}
|
||||
|
||||
public static function getHorasMaquina($totalClicks, $precioClick, $velocidadMaquina) {
|
||||
public static function getHorasMaquina($totalClicks, $precioClick, $velocidadMaquina)
|
||||
{
|
||||
try {
|
||||
|
||||
if($precioClick>0 && $velocidadMaquina>0)
|
||||
$horas = (1.0*$totalClicks/$precioClick)/$velocidadMaquina/60.0;
|
||||
|
||||
if ($precioClick > 0 && $velocidadMaquina > 0)
|
||||
$horas = (1.0 * $totalClicks / $precioClick) / $velocidadMaquina / 60.0;
|
||||
else
|
||||
$horas = 0;
|
||||
|
||||
|
||||
return $horas;
|
||||
|
||||
} catch (Exception $e) {
|
||||
return 0;
|
||||
}
|
||||
@ -562,39 +730,38 @@ class PresupuestoService extends BaseService
|
||||
* Devuelve el ancho de la cubierta/sobrecubierta, incluido el lomo.
|
||||
* El $uso tiene que ser "cubierta" o "sobrecubierta"
|
||||
*/
|
||||
public static function getAnchoTotalExteriores($uso="cubierta", $tipo_impresion_id, $datosPedido=null)
|
||||
public static function getAnchoTotalExteriores($uso = "cubierta", $tipo_impresion_id = 1, $datosPedido = null)
|
||||
{
|
||||
$ancho_total = 0;
|
||||
|
||||
if ($datosPedido) {
|
||||
// Tapa blanda (cosido y fresado)
|
||||
if($tipo_impresion_id == 2 || $tipo_impresion_id == 4){
|
||||
$ancho_total = floatval($datosPedido->ancho)*2 + floatval($datosPedido->lomo);
|
||||
|
||||
if ($tipo_impresion_id == 2 || $tipo_impresion_id == 4) {
|
||||
$ancho_total = floatval($datosPedido->ancho) * 2 + floatval($datosPedido->lomo);
|
||||
|
||||
// añadimos ancho de las solapas
|
||||
// si se añaden solapas hay que sumar 3mm de los dobleces
|
||||
if ($datosPedido->solapas) {
|
||||
$ancho_total += (floatval($datosPedido->solapas_ancho) * 2) + 6;
|
||||
}
|
||||
// En cualquier otro caso se le suma 5mm de sangre por cada lado
|
||||
$ancho_total += (2*self::SANGRE_FORMAS);
|
||||
$ancho_total += (2 * self::SANGRE_FORMAS);
|
||||
}
|
||||
// Tapa dura cosido y fresado
|
||||
else if($tipo_impresion_id == 1 || $tipo_impresion_id == 3){
|
||||
$ancho_total = floatval($datosPedido->ancho)*2 + floatval($datosPedido->lomo);
|
||||
else if ($tipo_impresion_id == 1 || $tipo_impresion_id == 3) {
|
||||
$ancho_total = floatval($datosPedido->ancho) * 2 + floatval($datosPedido->lomo);
|
||||
// si es cubierta
|
||||
// Se añaden 20mm de sangre por cada lado + 2 * 7mm de vuelo portada y contraportada -> total 52
|
||||
// por último se añaden 7mm para tener en cuenta el ancho del carton
|
||||
if($uso=="cubierta")
|
||||
$ancho_total += (2*7 + 2*self::SANGRE_FORMAS_CUBIERTA + 7);
|
||||
if ($uso == "cubierta")
|
||||
$ancho_total += (2 * 7 + 2 * self::SANGRE_FORMAS_CUBIERTA + 7);
|
||||
// si es sobrecubierta
|
||||
// Se añaden 5mm de sangre por cada lado + 2 * 7mm de vuelo portada y contraportada -> total 52
|
||||
else
|
||||
$ancho_total += (2*7 + 2*self::SANGRE_FORMAS) + 7;
|
||||
}
|
||||
else{
|
||||
$ancho_total += (2 * 7 + 2 * self::SANGRE_FORMAS) + 7;
|
||||
} else {
|
||||
// En cualquier otro caso se le suma 5mm de sangre por cada lado
|
||||
$ancho_total += (2*self::SANGRE_FORMAS);
|
||||
$ancho_total += (2 * self::SANGRE_FORMAS);
|
||||
}
|
||||
}
|
||||
return $ancho_total;
|
||||
@ -603,31 +770,69 @@ class PresupuestoService extends BaseService
|
||||
/**
|
||||
* Devuelve el alto de la cubierta/sobrecubierta
|
||||
*/
|
||||
public static function getAltoTotalExteriores($uso="cubierta", $tipo_impresion_id, $datosPedido=null)
|
||||
public static function getAltoTotalExteriores($uso = "cubierta", $tipo_impresion_id = 1, $datosPedido = null)
|
||||
{
|
||||
$alto_total = 0;
|
||||
|
||||
if ($datosPedido) {
|
||||
$alto_total = floatval($datosPedido->alto);
|
||||
// Tapa dura (cosido y fresado)
|
||||
if($tipo_impresion_id == 1 || $tipo_impresion_id == 3){
|
||||
if ($tipo_impresion_id == 1 || $tipo_impresion_id == 3) {
|
||||
// Se añaden 20mm de sangre por cada lado + 7mm extra que sobresale -> total 47
|
||||
if($uso=="cubierta")
|
||||
$alto_total += (7+2*self::SANGRE_FORMAS_CUBIERTA);
|
||||
if ($uso == "cubierta")
|
||||
$alto_total += (7 + 2 * self::SANGRE_FORMAS_CUBIERTA);
|
||||
// si es sobrecubierta
|
||||
// Se añaden 5mm de sangre por cada lado + 7mm de vuelo -> total 52
|
||||
else
|
||||
$alto_total += (7+2*self::SANGRE_FORMAS);
|
||||
|
||||
$alto_total += (7 + 2 * self::SANGRE_FORMAS);
|
||||
}
|
||||
// En cualquier otro caso se le suma 5mm de sangre por cada lado
|
||||
else{
|
||||
$alto_total += (2*self::SANGRE_FORMAS);
|
||||
else {
|
||||
$alto_total += (2 * self::SANGRE_FORMAS);
|
||||
}
|
||||
}
|
||||
return $alto_total;
|
||||
}
|
||||
|
||||
|
||||
public static function get_opciones_papel($uso, $isColor)
|
||||
{
|
||||
|
||||
$opciones_papel = [];
|
||||
|
||||
if ($uso == 'cubierta') {
|
||||
$opciones_papel = array(
|
||||
'cubierta' => 1,
|
||||
//'color' => 1,
|
||||
'rotativa' => 0,
|
||||
);
|
||||
} else if ($uso == 'sobrecubierta') {
|
||||
$opciones_papel = array(
|
||||
'sobrecubierta' => 1,
|
||||
//'color' => 1,
|
||||
'rotativa' => 0,
|
||||
);
|
||||
} else if ($uso == 'guardas') {
|
||||
$opciones_papel = array(
|
||||
'guardas' => 1,
|
||||
//'color' => 1,
|
||||
'rotativa' => 0,
|
||||
);
|
||||
} else if ($isColor) {
|
||||
$opciones_papel = array(
|
||||
'color' => 1,
|
||||
'rotativa' => 0,
|
||||
);
|
||||
} else {
|
||||
$opciones_papel = array(
|
||||
'bn' => 1,
|
||||
'rotativa' => 0,
|
||||
);
|
||||
}
|
||||
|
||||
return $opciones_papel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Devuelve la dimensión del lomo interior.
|
||||
*/
|
||||
@ -666,6 +871,4 @@ class PresupuestoService extends BaseService
|
||||
|
||||
return $peso;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user