0 || count($plana[1]) > 0) { $total_plana = 0.0; foreach ($plana as $linea) { if (count($linea) > 0) $total_plana += floatval($linea['total_impresion']); } } $total_rotativa = -1; if (!$data['excluirRotativa'] && count($rotativa) > 0) { $total_rotativa = floatval($rotativa['total_impresion']); } if ($total_plana < 0 && $total_rotativa < 0) return []; else { if ($total_plana > $total_rotativa) return $plana; else return [$rotativa]; } } public static function obtenerCubierta($data) { $uso = $data['uso']; $tipo_impresion_id = $data['tipo_impresion_id']; $datosPedido = $data['datosPedido']; $papel_generico = $data['papel_generico']; $gramaje = $data['gramaje']; $isColor = $data['isColor']; $isHq = $data['isHq']; $cliente_id = $data['cliente_id']; $paginas_color = $data['paginas_color']; $lineas_cubierta = []; for ($i = 0; $i < 2; $i++) { $lineas = PresupuestoService::obtenerComparadorPlana([ 'uso' => $uso, 'tipo_impresion_id' => $tipo_impresion_id, 'datosPedido' => $datosPedido, 'papel_generico' => $papel_generico, 'gramaje' => $gramaje, 'isColor' => $isColor, 'isHq' => $isHq, 'cliente_id' => $cliente_id, 'a_favor_fibra' => $i ]); if (count($lineas) > 0) { $lineas_cubierta = array_merge($lineas_cubierta, $lineas); } } if (count($lineas_cubierta) > 0) { usort( $lineas_cubierta, function ($a, $b) { $result = 0; if (floatval($a['fields']['total_impresion']) > floatval($b['fields']['total_impresion'])) $result = 1; else if (floatval($a['fields']['total_impresion']) < floatval($b['fields']['total_impresion'])) $result = -1; return $result; } ); $lineas_cubierta = $lineas_cubierta[0]['fields']; $lineas_cubierta['tipo_linea'] = 'lp_cubierta'; } return $lineas_cubierta; } public static function obtenerSobrecubierta($data) { $uso = $data['uso']; $tipo_impresion_id = $data['tipo_impresion_id']; $datosPedido = $data['datosPedido']; $papel_generico = $data['papel_generico']; $gramaje = $data['gramaje']; $isColor = $data['isColor']; $isHq = $data['isHq']; $cliente_id = $data['cliente_id']; $paginas_color = $data['paginas_color']; $lineas_sobrecubierta = []; for ($i = 0; $i < 2; $i++) { $lineas = PresupuestoService::obtenerComparadorPlana([ 'uso' => $uso, 'tipo_impresion_id' => $tipo_impresion_id, 'datosPedido' => $datosPedido, 'papel_generico' => $papel_generico, 'gramaje' => $gramaje, 'isColor' => $isColor, 'isHq' => $isHq, 'cliente_id' => $cliente_id, 'a_favor_fibra' => $i ]); if (count($lineas) > 0) { $lineas_sobrecubierta = array_merge($lineas_sobrecubierta, $lineas); } } if (count($lineas_sobrecubierta) > 0) { usort( $lineas_sobrecubierta, function ($a, $b) { $result = 0; if (floatval($a['fields']['total_impresion']) > floatval($b['fields']['total_impresion'])) $result = 1; else if (floatval($a['fields']['total_impresion']) < floatval($b['fields']['total_impresion'])) $result = -1; return $result; } ); $lineas_sobrecubierta = $lineas_sobrecubierta[0]['fields']; $lineas_sobrecubierta['tipo_linea'] = 'lp_sobrecubierta'; } return $lineas_sobrecubierta; } public static function obtenerGuardas($data) { $uso = $data['uso']; $tipo_impresion_id = $data['tipo_impresion_id']; $datosPedido = $data['datosPedido']; $papel_generico = $data['papel_generico']; $gramaje = $data['gramaje']; $isColor = $data['isColor']; $isHq = $data['isHq']; $cliente_id = $data['cliente_id']; $lineas_guardas = []; for ($i = 0; $i < 2; $i++) { $lineas = PresupuestoService::obtenerComparadorPlana([ 'uso' => $uso, 'tipo_impresion_id' => $tipo_impresion_id, 'datosPedido' => $datosPedido, 'papel_generico' => $papel_generico, 'gramaje' => $gramaje, 'isColor' => $isColor, 'isHq' => $isHq, 'cliente_id' => $cliente_id, 'a_favor_fibra' => $i ]); if (count($lineas) > 0) { $lineas_guardas = array_merge($lineas_guardas, $lineas); } } if (count($lineas_guardas) > 0) { usort( $lineas_guardas, function ($a, $b) { $result = 0; if (floatval($a['fields']['total_impresion']) > floatval($b['fields']['total_impresion'])) $result = 1; else if (floatval($a['fields']['total_impresion']) < floatval($b['fields']['total_impresion'])) $result = -1; return $result; } ); $lineas_guardas = $lineas_guardas[0]['fields']; $lineas_guardas['tipo_linea'] = 'lp_guardas'; } return $lineas_guardas; } /** * Obtiene las lineas de plana en el presupuesto de cliente * Selecciona entre las más económicas * Parámetros: * - uso: en este caso esta variable está fija a 'interior' * - tipo: tipo de impresión * - datosPedido: datos del pedido * * paginas: número de páginas * * tirada: número de ejemplares * * merma: merma * * ancho: ancho del libro * * alto: alto del libro * * isCosido: si está cosido * - cliente_id: id del cliente * - papel_generico: papel genérico (array con id y nombre) * - isColor: si es a color * - isHq: si es alta calidad * - paginas_color: número de páginas a color */ private static function obtenerPresupuestoClienteInterior($data) { $uso = $data['uso']; $tipo_impresion_id = $data['tipo_impresion_id']; $datosPedido = $data['datosPedido']; $papel_generico = $data['papel_generico']; $gramaje = $data['gramaje']; $isColor = $data['isColor']; $isHq = $data['isHq']; $cliente_id = $data['cliente_id']; $paginas_color = $data['paginas_color']; $paginas_negro = $datosPedido->paginas - $paginas_color; $linea_negro_plana = []; $linea_color_plana = []; // Negro if ($datosPedido->paginas > $paginas_color) { $datosPedido->paginas = $paginas_negro; for ($i = 0; $i < 2; $i++) { $lineas = PresupuestoService::obtenerComparadorPlana([ 'uso' => $uso, 'tipo_impresion_id' => $tipo_impresion_id, 'datosPedido' => $datosPedido, 'papel_generico' => $papel_generico, 'gramaje' => $gramaje, 'isColor' => false, 'isHq' => $isHq, 'cliente_id' => $cliente_id, 'a_favor_fibra' => $i ]); if (count($lineas) > 0) { $linea_negro_plana = array_merge($linea_color_plana, $lineas); } } if (count($linea_negro_plana) > 0) { usort( $linea_negro_plana, function ($a, $b) { $result = 0; if (floatval($a['fields']['total_impresion']) > floatval($b['fields']['total_impresion'])) $result = 1; else if (floatval($a['fields']['total_impresion']) < floatval($b['fields']['total_impresion'])) $result = -1; return $result; } ); $linea_negro_plana = $linea_negro_plana[0]['fields']; $linea_negro_plana['tipo_linea'] = $isHq ? 'lp_bnhq' : 'lp_bn'; } } // Color if ($paginas_color > 0) { for ($i = 0; $i < 2; $i++) { $lineas = PresupuestoService::obtenerComparadorPlana([ 'uso' => $uso, 'tipo_impresion_id' => $tipo_impresion_id, 'datosPedido' => $datosPedido, 'papel_generico' => $papel_generico, 'gramaje' => $gramaje, 'isColor' => true, 'isHq' => $isHq, 'cliente_id' => $cliente_id, 'a_favor_fibra' => $i ]); if (count($lineas) > 0) { $linea_color_plana = array_merge($linea_color_plana, $lineas); } } if (count($linea_color_plana) > 0) { usort( $linea_color_plana, function ($a, $b) { $result = 0; if (floatval($a['fields']['total_impresion']) > floatval($b['fields']['total_impresion'])) $result = 1; else if (floatval($a['fields']['total_impresion']) < floatval($b['fields']['total_impresion'])) $result = -1; return $result; } ); $linea_color_plana = $linea_color_plana[0]['fields']; $linea_negro_plana['tipo_linea'] = $isHq ? 'lp_colorhq' : 'lp_color'; } } return [$linea_negro_plana, $linea_color_plana]; } public static function getServiciosEncuadernacionDefault($data){ $tipo_impresion_id = $data['tipo_impresion_id'] ?? -1; $tirada = $data['tirada'] ?? -1; $paginas = $data['paginas'] ?? -1; $ancho = $data['ancho'] ?? -1; $alto = $data['alto'] ?? -1; $POD = $data['POD'] ?? -1; $solapas = $data['solapas'] ?? -1; $model = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel'); $values = $model->initPresupuesto($tipo_impresion_id, $solapas, $tirada, $paginas, $ancho, $alto, $POD); return $values; } /** * Obtiene las lineas de rotativa en el presupuesto de cliente * Selecciona entre las más económicas * Parámetros: * - uso: en este caso esta variable está fija a 'interior' * - tipo: tipo de impresión * - datosPedido: datos del pedido * * paginas: número de páginas * * tirada: número de ejemplares * * merma: merma * * ancho: ancho del libro * * alto: alto del libro * * isCosido: si está cosido * - cliente_id: id del cliente * - papel_generico: papel genérico (array con id y nombre) * - isColor: si es a color * - isHq: si es alta calidad * - paginas_color: número de páginas a color */ private static function obtenerPresupuestoClienteInteriorRotativa($data) { $datosPedido = $data['datosPedido']; $papel_generico = $data['papel_generico']; $gramaje = $data['gramaje']; $cliente_id = $data['cliente_id']; $paginas_color = $data['paginas_color']; $paginas = (object) array( 'negro' => $datosPedido->paginas - $paginas_color, 'color' => $paginas_color ); $linea_rotativa = []; for ($i = 0; $i < 2; $i++) { $datosPedido->a_favor_fibra = $i; $lineas = PresupuestoService::obtenerComparadorRotativa([ 'paginas' => $paginas, 'datosPedido' => $datosPedido, 'papel_generico' => $papel_generico, 'gramaje' => $gramaje, 'cliente_id' => $cliente_id, 'datosTipolog' => null ]); if (count($lineas) > 0) { $linea_rotativa = array_merge($linea_rotativa, $lineas); } } if (count($linea_rotativa) > 0) { usort( $linea_rotativa, function ($a, $b) { $result = 0; if (floatval($a['fields']['total_impresion']) > floatval($b['fields']['total_impresion'])) $result = 1; else if (floatval($a['fields']['total_impresion']) < floatval($b['fields']['total_impresion'])) $result = -1; return $result; } ); $linea_rotativa = $linea_rotativa[0]['fields']; $linea_rotativa['tipo_linea'] = $paginas_color > 0 ? 'lp_rot_color' : 'lp_rot_bn'; } return $linea_rotativa; } }