diff --git a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php index 6d9c8102..c005a050 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php @@ -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; } } - \ No newline at end of file diff --git a/ci4/app/Language/es/Presupuestos.php b/ci4/app/Language/es/Presupuestos.php index 59c8a82d..088898b2 100755 --- a/ci4/app/Language/es/Presupuestos.php +++ b/ci4/app/Language/es/Presupuestos.php @@ -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', ], ]; diff --git a/ci4/app/Services/PresupuestoClienteService.php b/ci4/app/Services/PresupuestoClienteService.php new file mode 100644 index 00000000..d336ee5b --- /dev/null +++ b/ci4/app/Services/PresupuestoClienteService.php @@ -0,0 +1,287 @@ + 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; + } +} diff --git a/ci4/app/Services/PresupuestoService.php b/ci4/app/Services/PresupuestoService.php index 0a755a5a..b703558b 100755 --- a/ci4/app/Services/PresupuestoService.php +++ b/ci4/app/Services/PresupuestoService.php @@ -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) { diff --git a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cliente/disenioLibro.js b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cliente/disenioLibro.js index 7465bcea..7c285eb5 100644 --- a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cliente/disenioLibro.js +++ b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cliente/disenioLibro.js @@ -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(); } }); } \ No newline at end of file diff --git a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cliente/loader.php b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cliente/loader.php new file mode 100644 index 00000000..85f03b08 --- /dev/null +++ b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cliente/loader.php @@ -0,0 +1,5 @@ +
diff --git a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cliente/viewPresupuestoclienteForm.php b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cliente/viewPresupuestoclienteForm.php index 6091e42e..b68770fb 100644 --- a/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cliente/viewPresupuestoclienteForm.php +++ b/ci4/app/Views/themes/backend/vuexy/form/presupuestos/cliente/viewPresupuestoclienteForm.php @@ -11,8 +11,10 @@