Files
safekat/ci4/app/Services/PresupuestoClienteService.php
jaimejimenezortega c6f365e122 sobrecubierta
2024-05-02 22:53:54 +02:00

303 lines
10 KiB
PHP

<?php
namespace App\Services;
use CodeIgniter\Config\BaseService;
use App\Services\PresupuestoService;
class PresupuestoClienteService extends BaseService
{
public static function obtenerInterior($data)
{
$rotativa = [];
$plana = PresupuestoClienteService::obtenerPresupuestoClienteInterior($data);
if (!$data['excluirRotativa'] && !$data['isHq'])
$rotativa = PresupuestoClienteService::obtenerPresupuestoClienteInteriorRotativa($data);
$total_plana = -1;
if (count($plana[0]) > 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;
}
/**
* 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;
}
}