revisando cubierta (solapas)

This commit is contained in:
jaimejimenezortega
2024-05-01 16:04:41 +02:00
parent 3650b00175
commit f289baa830
9 changed files with 19223 additions and 245 deletions

View File

@ -18,7 +18,7 @@ use App\Models\Presupuestos\PresupuestoManipuladosModel;
use App\Models\Presupuestos\PresupuestoPreimpresionesModel;
use App\Models\Presupuestos\PresupuestoServiciosExtraModel;
use App\Services\PresupuestoService;
use App\Services\PresupuestoClienteService;
use App\Models\Configuracion\PapelGenericoModel;
use App\Models\Configuracion\PapelImpresionModel;
use App\Models\Configuracion\MaquinaModel;
@ -26,7 +26,7 @@ use App\Models\Configuracion\MaquinaModel;
use Exception;
class Presupuestocliente extends \App\Controllers\GoBaseResourceController
{
{
protected $modelName = "PresupuestoModel";
protected $format = 'json';
@ -146,7 +146,7 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
// Se obtiene el cliente ID a partir del usuario de la sesion
$clienteId = 999; // Fijo hasta desarollar clientes usuarios
$presupuestoEntity = isset($sanitizedData) ? new PresupuestoEntity($sanitizedData) : new PresupuestoEntity();
$presupuestoEntity->clienteId = $clienteId;
@ -155,12 +155,12 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
$datosPresupuesto->POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
$datosPresupuesto->paisList = model('App\Models\Configuracion\PaisModel')->getAllForMenu('id, nombre', 'nombre', true);
$datosPresupuesto->papelFormatoList = $this->getPapelFormatoListItems($presupuestoEntity->papel_formato_id ?? null);
$datosPresupuesto->papelInteriorNegro = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('negro', false, false, false, false, true);
$datosPresupuesto->papelInteriorNegroHq = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('negrohq', false, false, false, false, true);
$datosPresupuesto->papelInteriorColor = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('color', false, false, false, false, true);
$datosPresupuesto->papelInteriorColorHq = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('colorhq', false, false, false, false, true);
$datosPresupuesto->papelCubierta = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('colorhq', true, false, false, false, true);
$datosPresupuesto->papelSobrecubierta = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('colorhq', false, true, false, false, true);
$datosPresupuesto->papelGuardas = model('App\Models\Configuracion\PapelGenericoModel')->getPapelForComparador('colorhq', false, false, false, true, false);
@ -169,7 +169,7 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
$datosPresupuesto->acabadosSobrecubierta = $this->getAcabadosSobrecubierta();
$datosPresupuesto->clienteList = $this->getClienteListItems($presupuestoEntity->cliente_id ?? null);
$this->viewData['formAction'] = route_to('crearPresupuestoCliente');
$this->viewData['presupuestoEntity'] = $presupuestoEntity;
@ -425,27 +425,27 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
public function delete($id = null)
{
if (!empty(static::$pluralObjectNameCc) && !empty(static::$singularObjectNameCc)) {
$objName = mb_strtolower(lang(ucfirst(static::$pluralObjectNameCc).'.'.static::$singularObjectNameCc));
$objName = mb_strtolower(lang(ucfirst(static::$pluralObjectNameCc) . '.' . static::$singularObjectNameCc));
} else {
$objName = lang('Basic.global.record');
}
if (!$this->soft_delete){
if (!$this->soft_delete) {
if (!$this->model->delete($id)) {
return $this->failNotFound(lang('Basic.global.deleteError', [$objName]));
}
}
else{
} else {
$datetime = (new \CodeIgniter\I18n\Time("now"));
$rawResult = $this->model->where('id',$id)
->set(['deleted_at' => $datetime->format('Y-m-d H:i:s'),
'is_deleted' => $this->delete_flag])
$rawResult = $this->model->where('id', $id)
->set([
'deleted_at' => $datetime->format('Y-m-d H:i:s'),
'is_deleted' => $this->delete_flag
])
->update();
if (!$rawResult) {
return $this->failNotFound(lang('Basic.global.deleteError', [$objName]));
}
}
// Se borran las lineas de presupuesto
@ -482,9 +482,10 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
return $response;
}
public function getGramaje(){
public function getGramaje()
{
if ($this->request->isAJAX()) {
$reqData = $this->request->getPost();
try {
@ -547,52 +548,52 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
// por defecto, se deja cosido tapa blanda por ahora JJO
$tipo_impresion_id = $reqData['tipo_impresion_id'] ?? 4;
$searchValues = get_filter_datatables_columns($reqData);
$resourceData = $this->model->getResource($searchValues, $tipo_impresion_id)->orderBy($order1, $dir1)->orderBy($order2, $dir2)
->orderBy($order3, $dir3)->limit($length, $start)->get()->getResultObject();
foreach ($resourceData as $item) :
if (isset($item->comentarios_pdf) && strlen($item->comentarios_pdf) > 100) :
$item->comentarios_pdf = character_limiter($item->comentarios_pdf, 100);
endif;
if (isset($item->causa_cancelacion) && strlen($item->causa_cancelacion) > 100) :
$item->causa_cancelacion = character_limiter($item->causa_cancelacion, 100);
endif;
if (isset($item->comentarios_cliente) && strlen($item->comentarios_cliente) > 100) :
$item->comentarios_cliente = character_limiter($item->comentarios_cliente, 100);
endif;
if (isset($item->comentarios_safekat) && strlen($item->comentarios_safekat) > 100) :
$item->comentarios_safekat = character_limiter($item->comentarios_safekat, 100);
endif;
if (isset($item->comentarios_tarifa) && strlen($item->comentarios_tarifa) > 100) :
$item->comentarios_tarifa = character_limiter($item->comentarios_tarifa, 100);
endif;
if (isset($item->comentarios_produccion) && strlen($item->comentarios_produccion) > 100) :
$item->comentarios_produccion = character_limiter($item->comentarios_produccion, 100);
endif;
if (isset($item->tirada_alternativa_json_data) && strlen($item->tirada_alternativa_json_data) > 100) :
$item->tirada_alternativa_json_data = character_limiter($item->tirada_alternativa_json_data, 100);
endif;
if (isset($item->titulo) && strlen($item->titulo) > 100) :
$item->titulo = character_limiter($item->titulo, 100);
endif;
if (isset($item->paginas_color_posicion) && strlen($item->paginas_color_posicion) > 100) :
$item->paginas_color_posicion = character_limiter($item->paginas_color_posicion, 100);
endif;
if (isset($item->aprobado_json_data) && strlen($item->aprobado_json_data) > 100) :
$item->aprobado_json_data = character_limiter($item->aprobado_json_data, 100);
endif;
if (isset($item->comparador_json_data) && strlen($item->comparador_json_data) > 100) :
$item->comparador_json_data = character_limiter($item->comparador_json_data, 100);
endif;
if (isset($item->ws_externo_json_data) && strlen($item->ws_externo_json_data) > 100) :
$item->ws_externo_json_data = character_limiter($item->ws_externo_json_data, 100);
endif;
endforeach;
$searchValues = get_filter_datatables_columns($reqData);
$resourceData = $this->model->getResource($searchValues, $tipo_impresion_id)->orderBy($order1, $dir1)->orderBy($order2, $dir2)
->orderBy($order3, $dir3)->limit($length, $start)->get()->getResultObject();
foreach ($resourceData as $item) :
if (isset($item->comentarios_pdf) && strlen($item->comentarios_pdf) > 100) :
$item->comentarios_pdf = character_limiter($item->comentarios_pdf, 100);
endif;
if (isset($item->causa_cancelacion) && strlen($item->causa_cancelacion) > 100) :
$item->causa_cancelacion = character_limiter($item->causa_cancelacion, 100);
endif;
if (isset($item->comentarios_cliente) && strlen($item->comentarios_cliente) > 100) :
$item->comentarios_cliente = character_limiter($item->comentarios_cliente, 100);
endif;
if (isset($item->comentarios_safekat) && strlen($item->comentarios_safekat) > 100) :
$item->comentarios_safekat = character_limiter($item->comentarios_safekat, 100);
endif;
if (isset($item->comentarios_tarifa) && strlen($item->comentarios_tarifa) > 100) :
$item->comentarios_tarifa = character_limiter($item->comentarios_tarifa, 100);
endif;
if (isset($item->comentarios_produccion) && strlen($item->comentarios_produccion) > 100) :
$item->comentarios_produccion = character_limiter($item->comentarios_produccion, 100);
endif;
if (isset($item->tirada_alternativa_json_data) && strlen($item->tirada_alternativa_json_data) > 100) :
$item->tirada_alternativa_json_data = character_limiter($item->tirada_alternativa_json_data, 100);
endif;
if (isset($item->titulo) && strlen($item->titulo) > 100) :
$item->titulo = character_limiter($item->titulo, 100);
endif;
if (isset($item->paginas_color_posicion) && strlen($item->paginas_color_posicion) > 100) :
$item->paginas_color_posicion = character_limiter($item->paginas_color_posicion, 100);
endif;
if (isset($item->aprobado_json_data) && strlen($item->aprobado_json_data) > 100) :
$item->aprobado_json_data = character_limiter($item->aprobado_json_data, 100);
endif;
if (isset($item->comparador_json_data) && strlen($item->comparador_json_data) > 100) :
$item->comparador_json_data = character_limiter($item->comparador_json_data, 100);
endif;
if (isset($item->ws_externo_json_data) && strlen($item->ws_externo_json_data) > 100) :
$item->ws_externo_json_data = character_limiter($item->ws_externo_json_data, 100);
endif;
endforeach;
return $this->respond(Collection::datatable(
$resourceData,
@ -607,52 +608,18 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
public function presupuesto()
{
$POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
if ($this->request->isAJAX()) {
$reqData = $this->request->getPost();
$tirada = $reqData['tirada'] ?? 0;
$tamanio = $reqData['tamanio'];
$tipo_impresion_id = $this->getTipoImpresion($reqData['tipo'], $reqData['tapa']);
$paginas_color= intval($reqData['paginasColor']) ?? 0;
$resultado_lineas = $this->getLineasPresupuesto($reqData);
$datosPedido = (object)array(
'paginas' => intval($reqData['paginas']) ?? 0,
'tirada' => $tirada[0],
'merma' => $tirada[0]>$POD ? $this->calcular_merma($tirada[0], $POD) : 0,
'ancho' => intval($tamanio['ancho']) ?? 100000,
'alto' => intval($tamanio['alto']) ?? 100000,
#'a_favor_fibra' => $reqData['a_favor_fibra'] ?? 1,
'isCosido' => (new TipoPresupuestoModel())->get_isCosido($tipo_impresion_id), // JJO esto es custom por cada tipo de presupuesto
);
$papel_generico = [
'id' => $reqData['papelInterior'] ?? 0,
'nombre' => $reqData['papelInteriorNombre'] ?? "",
];
$gramaje = $reqData['gramajeInterior'] ?? 0;
$cliente_id = $reqData['clienteId'] ?? -1;
$input_data = array(
'uso' => 'interior',
'tipo_impresion_id' => $tipo_impresion_id,
'datosPedido' => $datosPedido,
'papel_generico' => $papel_generico,
'gramaje' => $gramaje,
'isColor' => intval($reqData['isColor']) ?? 0,
'isHq' => intval($reqData['isHq']) ?? 0,
'cliente_id' => $cliente_id,
'paginas_color' => $paginas_color,
);
$interiorPlana = PresupuestoService::obtenerPresupuestoClienteInterior($input_data);
return $this->respond($interiorPlana);
}
else{
return $this->respond($resultado_lineas);
} else {
return $this->failUnauthorized('Invalid request', 403);
}
}
@ -661,62 +628,178 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
* Funciones auxiliares
*
**********************/
protected function getTipoImpresion($tipo, $tapa){
protected function getLineasPresupuesto($reqData)
{
$POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD();
$tirada = $reqData['tirada'] ?? 0;
$tamanio = $reqData['tamanio'];
$tipo_impresion_id = $this->getTipoImpresion($reqData['tipo'], $reqData['tapa']);
$paginas_color = intval($reqData['paginasColor']) ?? 0;
$is_cosido = (new TipoPresupuestoModel())->get_isCosido($tipo_impresion_id);
$datosPedido = (object)array(
'paginas' => intval($reqData['paginas']) ?? 0,
'tirada' => $tirada[0],
'merma' => $tirada[0] > $POD ? $this->calcular_merma($tirada[0], $POD) : 0,
'ancho' => intval($tamanio['ancho']) ?? 100000,
'alto' => intval($tamanio['alto']) ?? 100000,
'isCosido' => $is_cosido,
);
$papel_generico = [
'id' => $reqData['papelInterior'] ?? 0,
'nombre' => $reqData['papelInteriorNombre'] ?? "",
];
$gramaje = $reqData['gramajeInterior'] ?? 0;
$cliente_id = $reqData['clienteId'] ?? -1;
$excluirRotativa = $reqData['excluirRotativa'] ?? 0;
$input_data = array(
'uso' => 'interior',
'tipo_impresion_id' => $tipo_impresion_id,
'datosPedido' => $datosPedido,
'papel_generico' => $papel_generico,
'gramaje' => $gramaje,
'isColor' => intval($reqData['isColor']) ?? 0,
'isHq' => intval($reqData['isHq']) ?? 0,
'cliente_id' => $cliente_id,
'paginas_color' => $paginas_color,
'excluirRotativa' => $excluirRotativa,
);
$interior = PresupuestoClienteService::obtenerInterior($input_data);
$costeInterior = 0.0;
foreach ($interior as $linea) {
if (count($linea) > 0) {
$costeInterior += floatval($linea['total_impresion']);
}
}
if ($costeInterior <= 0) {
return [
'error' => lang('Presupuestos.errores.noInterior'),
'precio_u' => 0,
];
}
// Si es POD hay que volver a calcular para incluir la merma correcta
if ($tirada[0] <= $POD) {
$num_formas = [];
foreach ($interior as $linea) {
if (count($linea) > 0) {
$formas_linea = $is_cosido ? intval($linea['num_formas']['value']) / 2 : intval($linea['num_formas']['value']);
array_push($num_formas, $formas_linea);
}
}
$input_data['datosPedido']['merma'] = $this->calcular_merma($tirada[0], $POD, $num_formas);
$interior = PresupuestoClienteService::obtenerInterior($input_data);
}
$costeInterior = 0.0;
foreach ($interior as $linea) {
if (count($linea) > 0) {
$costeInterior += floatval($linea['total_impresion']);
}
}
if ($costeInterior <= 0) {
return [
'error' => lang('Presupuestos.errores.noInterior'),
'precio_u' => 0,
];
}
// Cubierta
$papel_generico = [
'id' => $reqData['papelCubierta'] ?? 0,
'nombre' => $reqData['papelCubiertaNombre'] ?? "",
];
$input_data['papel_generico'] = $papel_generico;
$input_data['gramaje'] = $reqData['gramajeCubierta'] ?? 0;
$input_data['datosPedido']->paginas = intval($reqData['carasCubierta'] ?? 0);
$input_data['paginas_color'] = intval($reqData['carasCubierta'] ?? 0);
$input_data['datosPedido']->solapas_ancho = intval($reqData['solapasCubierta'] ?? 0);
$input_data['datosPedido']->solapas = $input_data['datosPedido']->solapas_ancho>0 ? 1 : 0;
$input_data['datosPedido']->lomo = $this->calcular_lomo($interior, 0);
$input_data['isColor'] = 1;
$input_data['isHq'] = 1;
$input_data['uso'] = 'cubierta';
$cubierta = PresupuestoClienteService::obtenerCubierta($input_data);
return [
'interior' => $interior,
'cubierta' => $cubierta,
];
}
protected function calcular_lomo($lineas, $lomo_inicial){
$lomo = $lomo_inicial;
foreach ($lineas as $linea) {
if (count($linea) > 0) {
$lomo += floatval($linea['mano']);
}
}
return floatval($lomo);
}
protected function getTipoImpresion($tipo, $tapa)
{
$tipo_impresion_id = 0;
if($tipo == 'fresado'){
if($tapa == 'blanda')
$tipo_impresion_id = 2;
if ($tipo == 'fresado') {
if ($tapa == 'blanda')
$tipo_impresion_id = 2;
else
$tipo_impresion_id = 1;
}
else if($tipo == 'cosido'){
} else if ($tipo == 'cosido') {
if($tapa == 'blanda')
$tipo_impresion_id = 4;
if ($tapa == 'blanda')
$tipo_impresion_id = 4;
else
$tipo_impresion_id = 3;
}
else if($tipo == 'espiral'){
$tipo_impresion_id = 3;
} else if ($tipo == 'espiral') {
if($tapa == 'blanda')
$tipo_impresion_id = 6;
if ($tapa == 'blanda')
$tipo_impresion_id = 6;
else
$tipo_impresion_id = 5;
}
else if($tipo == 'wireo'){
$tipo_impresion_id = 5;
} else if ($tipo == 'wireo') {
if($tapa == 'blanda')
$tipo_impresion_id = 8;
if ($tapa == 'blanda')
$tipo_impresion_id = 8;
else
$tipo_impresion_id = 7;
}
else if($tipo == 'grapado'){
$tipo_impresion_id = 7;
} else if ($tipo == 'grapado') {
$tipo_impresion_id = 21;
}
return $tipo_impresion_id;
}
protected function calcular_merma($tirada, $POD, $formas_lineas_interior = []){
protected function calcular_merma($tirada, $POD, $formas_lineas_interior = [])
{
$merma = 0;
if($tirada>$POD){
$merma = $tirada*0.1<=30 ? $tirada*0.1 : 30;
}
else{
if ($tirada > $POD) {
$merma = $tirada * 0.1 <= 30 ? $tirada * 0.1 : 30;
} else {
$merma_lineas = [];
foreach($formas_lineas_interior as $formas_linea){
if($formas_linea > $tirada)
array_push($merma_lineas, $formas_linea-$tirada);
foreach ($formas_lineas_interior as $formas_linea) {
if ($formas_linea > $tirada)
array_push($merma_lineas, $formas_linea - $tirada);
else
array_push($merma_lineas, $tirada%$formas_linea);
array_push($merma_lineas, $tirada % $formas_linea);
}
if(count($merma_lineas)>0)
if (count($merma_lineas) > 0)
$merma = max($merma_lineas);
}
@ -763,4 +846,3 @@ class Presupuestocliente extends \App\Controllers\GoBaseResourceController
return $data;
}
}

View File

@ -298,6 +298,7 @@ return [
'formato_papel' => 'Debe seleccionar un formato de papel',
'tirada_alt_duplicada' => 'Ya existe una tirada alternativa para ese valor',
'tirada_alt_tipo' => 'No se puede calcular una tirada alternativa POD para una presupuesto no POD o viceversa',
'noInterior' => 'No se hay resultados para el interior',
],
];

View File

@ -0,0 +1,287 @@
<?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];
}
/**
* 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;
}
}

View File

@ -33,116 +33,7 @@ class PresupuestoService extends BaseService
const SANGRE_FORMAS = 5.0;
const SANGRE_FORMAS_CUBIERTA = 20.0;
public 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) {
usort($lineas,
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 = $lineas[0]['fields'];
}
}
}
// Color
if($isColor){
$datosPedido->paginas = $paginas_color;
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) {
usort($lineas,
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 = $lineas[0]['fields'];
}
}
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_negro_plana = array_merge($linea_negro_plana, $lineas);
}
}
}
return [$linea_negro_plana, $linea_color_plana];
}
public static function getLineaPresupuestoPlana($data)
{

View File

@ -252,6 +252,8 @@ $('#papelInterior').on('change', function () {
if (valInterior != undefined)
$('#gramajeInterior option[value=' + valInterior + ']').prop('selected', true).trigger('change');
else
$('#gramajeInterior').val('').trigger('change');
}
});
@ -289,6 +291,8 @@ $('#papelCubierta').on('change', function () {
if (valCubierta != undefined)
$('#gramajeCubierta option[value=' + valCubierta + ']').prop('selected', true).trigger('change');
else
$('#gramajeCubierta').val('').trigger('change');
}
});
}
@ -325,6 +329,8 @@ $('#papelSobrecubierta').on('change', function () {
if (valSobrecubierta != undefined)
$('#gramajeSobrecubierta option[value=' + valCubierta + ']').prop('selected', true).trigger('change');
else
$('#gramajeSobrecubierta').val('').trigger('change');
}
});
}
@ -359,7 +365,11 @@ function checkValues() {
const gramajeCubierta = $('#gramajeCubierta option:selected').text();
const papelFormatoAlto = $('#altoLibro').val();
const papelFormatoAncho = $('#anchoLibro').val();
const clienteId = $('#clienteId').val();
if(clienteId == '' || isNaN(clienteId) || parseInt(clienteId) <= 0){
return false;
}
if (tirada == '' || isNaN(tirada) || parseInt(tirada) <= 0) {
return false;
@ -576,7 +586,7 @@ async function calcularPresupuesto() {
papelInterior: $('#papelInterior option:selected').val(),
papelInteriorNombre: $('#papelInterior option:selected').text(),
gramajeInterior: $('#gramajeInterior option:selected').text(),
excluirRotativa: $('#excluirRotativa').is(':checked'),
excluirRotativa: $('#excluirRotativa').is(':checked')? 1 : 0,
papelCubierta: $('#papelCubierta option:selected').val(),
papelCubiertaNombre: $('#papelCubierta option:selected').text(),
gramajeCubierta: $('#gramajeCubierta option:selected').text(),
@ -611,12 +621,19 @@ async function calcularPresupuesto() {
datos = Object.assign(datos, window.token_ajax)
$('#loader').show();
$.ajax({
url: window.routes_disenio_libro.presupuestoCliente,
type: 'POST',
data: datos,
success: function (response) {
console.log(response);
$('#loader').hide();
},
error: function (error) {
$('#loader').hide();
}
});
}

View File

@ -0,0 +1,5 @@
<div id="loader" style="display: none; position: fixed; left: 0; top: 0; width: 100%; height: 100%; z-index: 9999;">
<div style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);">
<img src="<?= site_url("assets/img/loader.gif") ?>" alt="Loading..."/>
</div>
</div>

View File

@ -11,8 +11,10 @@
<h3 class="card-title"><?= $boxTitle ?? $pageTitle ?></h3>
<?= csrf_field() ?>
<?= view("themes/_commonPartialsBs/_alertBoxes") ?>
<?= view("themes/backend/vuexy/form/presupuestos/cliente/loader") ?>
<?= !empty($validation->getErrors()) ? $validation->listErrors("bootstrap_style") : "" ?>
<!-- Create Deal Wizard -->
<div id="wizard-presupuesto-cliente" class="bs-stepper vertical mt-2 linear">
<div class="bs-stepper-header">

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

18693
xdebug.log

File diff suppressed because one or more lines are too long