diff --git a/ci4/app/Config/Routes.php b/ci4/app/Config/Routes.php index f3ff7612..a8339e44 100644 --- a/ci4/app/Config/Routes.php +++ b/ci4/app/Config/Routes.php @@ -584,6 +584,7 @@ $routes->group('presupuestocliente', ['namespace' => 'App\Controllers\Presupuest $routes->get('cargar/(:num)', 'Presupuestocliente::cargar/$1', ['as' => 'cargarPresupuesto']); $routes->post('duplicarPresupuesto', 'Presupuestocliente::duplicarPresupuesto', ['as' => 'duplicarPresupuesto']); $routes->post('calcular', 'Presupuestocliente::calcular', ['as' => 'calcularPresupuesto']); + $routes->post('calcularsolapas', 'Presupuestocliente::calcularMaxSolapas', ['as' => 'calcularSolapas']); }); $routes->resource('presupuestocliente', ['namespace' => 'App\Controllers\Presupuestos', 'controller' => 'Presupuestocliente', 'except' => 'show,new,create,update']); diff --git a/ci4/app/Controllers/Configuracion/Papelesgenericos.php b/ci4/app/Controllers/Configuracion/Papelesgenericos.php index dfcef7ac..628be5c4 100755 --- a/ci4/app/Controllers/Configuracion/Papelesgenericos.php +++ b/ci4/app/Controllers/Configuracion/Papelesgenericos.php @@ -301,8 +301,10 @@ class Papelesgenericos extends \App\Controllers\BaseResourceController $tipo = goSanitize($this->request->getGet('tipo'))[0]; $selected_papel = goSanitize($this->request->getGet('papel'))[0] ?? null; $cubierta = goSanitize($this->request->getGet('cubierta'))[0] ?? 0; - $menu = $this->model->getPapelCliente($tipo, $cubierta, $selected_papel, false); - $menu2 = $this->model->getPapelCliente($tipo, $cubierta, $selected_papel, true); + $tapa_dura = goSanitize($this->request->getGet('tapa_dura'))[0] ?? null; + + $menu = $this->model->getPapelCliente($tipo, $cubierta, $selected_papel, $tapa_dura, false); + $menu2 = $this->model->getPapelCliente($tipo, $cubierta, $selected_papel, $tapa_dura, true); $newTokenHash = csrf_hash(); $csrfTokenName = csrf_token(); diff --git a/ci4/app/Controllers/Configuracion/Papelesimpresion.php b/ci4/app/Controllers/Configuracion/Papelesimpresion.php index 9b820be4..d3da2fad 100755 --- a/ci4/app/Controllers/Configuracion/Papelesimpresion.php +++ b/ci4/app/Controllers/Configuracion/Papelesimpresion.php @@ -175,7 +175,7 @@ class Papelesimpresion extends \App\Controllers\BaseResourceController if ($this->request->getPost()) : - $nullIfEmpty = true; // !(phpversion() >= '8.1'); + $nullIfEmpty = false; // !(phpversion() >= '8.1'); $postData = $this->request->getPost(); @@ -200,6 +200,9 @@ class Papelesimpresion extends \App\Controllers\BaseResourceController if ($this->request->getPost('cubierta') == null) { $sanitizedData['cubierta'] = false; } + if ($this->request->getPost('use_for_tapa_dura') == null) { + $sanitizedData['use_for_tapa_dura'] = false; + } if ($this->request->getPost('sobrecubierta') == null) { $sanitizedData['sobrecubierta'] = false; } diff --git a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php index 5012bda2..f0ae65af 100755 --- a/ci4/app/Controllers/Presupuestos/Presupuestocliente.php +++ b/ci4/app/Controllers/Presupuestos/Presupuestocliente.php @@ -324,10 +324,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController // Cubierta $cubierta = [ - 'papel_generico_cubierta' => $modelPapelGenerico->getIdFromCode($cubierta['papelCubierta']), + 'papel_generico_cubierta' => $modelPapelGenerico->where('id', $cubierta['papelCubierta'])->first()->toArray(), 'gramajeCubierta' => intval($cubierta['gramajeCubierta']), 'carasCubierta' => intval($cubierta['carasImpresion'] ?? 0), - 'solapasCubierta' => intval($cubierta['solapas'] ?? 0), + 'solapasCubierta' => intval($cubierta['solapas'] ?? 0) == 1 ? intval($cubierta['tamanioSolapas']) : 0, 'acabadosCubierta' => $cubierta['acabados'] ?? 0, 'lomoRedondo' => $lomoRedondo, ]; @@ -471,6 +471,94 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } + + public function calcularMaxSolapas() + { + if ($this->request->isAJAX()) { + + $reqData = $this->request->getPost(); + $modelPapelGenerico = new PapelGenericoModel(); + + $POD = model('App\Models\Configuracion\ConfiguracionSistemaModel')->getPOD(); + + $cliente_id = $reqData['clienteId'] ?? -1; + + $tirada = $reqData['tirada'] ?? 0; + $tamanio = $reqData['tamanio']; + $paginas = $reqData['paginas'] ?? 0; + $paginas_color = $reqData['paginasColor'] ?? 0; + $papelInteriorDiferente = intval($reqData['papelInteriorDiferente']) ?? null; + $excluirRotativa = $reqData['excluirRotativa'] ?? 0; + $excluirRotativa = intval($excluirRotativa); + + $tipo = $reqData['tipo']; + $tipoCubierta = 'blanda'; // solapas sólo tapa blanda y sobre cubierta + + $isColor = intval($reqData['isColor']) ?? 0; + $isHq = intval($reqData['isHq']) ?? 0; + + $tipo_impresion_id = $this->getTipoImpresion($tipo, $tipoCubierta); + $is_cosido = (new TipoPresupuestoModel())->get_isCosido($tipo_impresion_id); + + $interior = $reqData['interior'] ?? []; + + if ($papelInteriorDiferente) { + $papel['negro'] = $modelPapelGenerico->where('id', $interior['papelInterior']['negro'])->first()->toArray(); + $papel['color'] = $modelPapelGenerico->where('id', $interior['papelInterior']['color'])->first()->toArray(); + $gramaje['negro'] = intval($interior['gramajeInterior']['negro']); + $gramaje['color'] = intval($interior['gramajeInterior']['color']); + } else { + $papel = $modelPapelGenerico->where('id', $interior['papelInterior'])->first()->toArray(); + $gramaje = intval($interior['gramajeInterior']); + } + + $datosPedido = (object) array( + 'paginas' => $paginas, + '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, + 'a_favor_fibra' => 1, + ); + + $input_data = array( + 'uso' => 'interior', + 'tipo_impresion_id' => $tipo_impresion_id, + 'datosPedido' => $datosPedido, + 'papel_generico' => $papel, + 'gramaje' => $gramaje, + 'isColor' => $isColor, + 'isHq' => $isHq, + 'cliente_id' => $cliente_id, + 'paginas_color' => $paginas_color, + 'excluirRotativa' => $excluirRotativa, + 'papelInteriorDiferente' => $papelInteriorDiferente + ); + + $interior = PresupuestoClienteService::obtenerInterior($input_data); + if ($interior == null) { + return $this->failServerError('Error al calcular el interior'); + } + $anchoTotal = $interior[0]['mano']; + // le añadimos 2*ancho libro + $anchoTotal += 2 * $datosPedido->ancho; + // le añadimos los dobleces de las solapas + $anchoTotal += 6; + // le añadimos la sangre + $anchoTotal += PresupuestoService::SANGRE_FORMAS; + // 863 es el ancho máximo permitido por las máquinas + $maxSolapa = (865 - floor($anchoTotal)) / 2; + $maxSolapa = min($maxSolapa, 0.75 * $datosPedido->ancho); + return $this->respond($maxSolapa); + + } else { + return $this->failUnauthorized('Invalid request', 403); + } + + } + + public function getDireccionesCliente() { if ($this->request->isAJAX()) { @@ -488,6 +576,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController 'menu' => $data, $csrfTokenName => $newTokenHash ]); + } else { return $this->failUnauthorized('Invalid request', 403); } @@ -696,10 +785,10 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController // Cubierta $cubierta = [ - 'papel_generico_cubierta' => $modelPapelGenerico->getIdFromCode($cubierta['papelCubierta']), + 'papel_generico_cubierta' => $modelPapelGenerico->where('id', $cubierta['papelCubierta'])->first()->toArray(), 'gramajeCubierta' => intval($cubierta['gramajeCubierta']), 'carasCubierta' => intval($cubierta['carasImpresion'] ?? 0), - 'solapasCubierta' => intval($cubierta['solapas'] ?? 0), + 'solapasCubierta' => intval($cubierta['solapas'] ?? 0) == 1 ? intval($cubierta['tamanioSolapas']) : 0, 'acabadosCubierta' => $cubierta['acabados'] ?? 0, 'lomoRedondo' => $cubierta['lomoRedondo'] ?? 0, 'cabezada' => $cubierta['cabezada'] ?? 'WHI', @@ -913,6 +1002,9 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } else if ($servicio->tarifa_id == 62) { // Servicios manipulado $this->guardarServicio($id, $servicio, 'manipulado'); + } else if ($servicio->tarifa_id == 73) { + // Servicios manipulado + $this->guardarServicio($id, $servicio, 'manipulado'); } } @@ -1013,6 +1105,9 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $data['sobrecubierta']['solapas'] = $presupuesto->solapas_sobrecubierta ? 1 : 0; $data['sobrecubierta']['solapas_ancho'] = $presupuesto->solapas_ancho_sobrecubierta; $data['sobrecubierta']['plastificado'] = $modelAcabado->getCodeFromId($presupuesto->acabado_sobrecubierta_id); + if ($data['sobrecubierta']['plastificado'] == '') { + $data['sobrecubierta']['plastificado'] = 'NONE'; + } $data['guardas'] = array_key_exists('guardas', $datos_papel) ? $datos_papel['guardas'] : []; @@ -1796,6 +1891,9 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController 'solapas' => intval($solapasCubierta) > 0 ? 1 : 0, 'paginasCuadernillo' => $paginasCuadernillo, ]); + + + $costeServiciosDefecto = 0.0; foreach ($servDefecto as $servicio) { if ($servicio->total <= 0) { @@ -1829,6 +1927,14 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } // Servicios + + + /* + 'retractilado' => 3, + 'prototipo' => 9, + */ + $serviciosAutomaticos = []; + $servicios = []; // se comprueba si $datos guardas es un array if (is_array($datos_guardas)) { if (count($datos_guardas) > 0) { @@ -1839,13 +1945,6 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController array_push($servicios, 62); // Plegado de guardas } } - - /* - 'retractilado' => 3, - 'prototipo' => 9, - */ - $serviciosAutomaticos = []; - $servicios = []; if ($datos_entrada['servicios']['retractilado']) // acabado array_push($servicios, 3); if ($datos_entrada['servicios']['retractilado5']) // acabado @@ -1873,7 +1972,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $errorModel->insertError( $datos_entrada['id'], auth()->user()->id, - 'No se puede obtener servicio con id ' . ((string)$servicio), + 'No se puede obtener servicio con id ' . ((string) $servicio), $input_data ); $return_data = [ @@ -1901,7 +2000,7 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController $errorModel->insertError( $datos_entrada['id'], auth()->user()->id, - 'No se puede obtener servicio con id ' . ((string)$servicio), + 'No se puede obtener servicio con id ' . ((string) $servicio), $input_data ); $return_data = [ @@ -1921,6 +2020,45 @@ class Presupuestocliente extends \App\Controllers\BaseResourceController } } + // Plegado de solapas grandes + if ( + (intval($solapasCubierta) > 0 && intval($cubierta['dimension_desarrollo']['ancho']) > 630) || + (is_array($sobreCubierta) && ($sobreCubierta['solapas'] > 0 && intval($linea_sobrecubierta['dimension_desarrollo']['ancho']) > 630)) + ) { + + // Servicios acabado + $resultado = PresupuestoCLienteService::getServiciosManipulado([ + 'tarifa_id' => 73, + 'tirada' => $datosPedido->tirada, + 'POD' => $POD, + ]); + array_push($serviciosAutomaticos, $resultado[0]); + + if ($resultado[0]->total <= 0) { + + $errorModel = new ErrorPresupuesto(); + $errorModel->insertError( + $datos_entrada['id'], + auth()->user()->id, + 'No se puede obtener servicio de manupulado con id ' . ((string) $servicio), + $input_data + ); + $return_data = [ + 'errors' => (object) ([ + 'status' => 1 + ]), + ]; + return $return_data; + } + + $coste_servicios += floatval($resultado[0]->total); + if ($extra_info) { + $totalServicios += floatval($resultado[0]->total); + $margenServicios += floatval($resultado[0]->total) * floatval($resultado[0]->margen) / 100.0; + } + + } + array_push($precio_u, round(($costeInterior + $coste_cubierta + $coste_sobrecubierta + $costeServiciosDefecto + $coste_servicios) / $tirada[$t], 4)); array_push($peso, round($peso_interior + $peso_cubierta + $peso_sobrecubierta + $peso_guardas, 2)); diff --git a/ci4/app/Controllers/Utiles.php b/ci4/app/Controllers/Utiles.php new file mode 100644 index 00000000..c44a0aa8 --- /dev/null +++ b/ci4/app/Controllers/Utiles.php @@ -0,0 +1,320 @@ +where(['is_deleted' => 0])->findAll(); + + // Iterar sobre cada entidad + echo '
';
+        foreach ($results as $result) {
+            // Cada $result es una instancia de una entidad
+            print_r($result->toArray());  // Convierte la entidad a un array para imprimir sus valores
+        }
+        echo '
'; + } + + public function get_tarifa_encuadernacion($tarifaEncuadernacionId) + { + // Llamar a los modelos + $modelTE = model('App\Models\Tarifas\TarifaEncuadernacionModel'); + $modelTELineas = model('App\Models\Tarifas\TarifaEncuadernacionLineaModel'); + $modelTELineasHoras = model('App\Models\Tarifas\TarifaEncuadernacionLineaHorasModel'); + $modelTETiradas = model('App\Models\Tarifas\TarifaEncuadernacionTiradaModel'); + + + // Obtener el registro principal de tarifa_encuadernacion + $tarifas_encuadernacion = $modelTE->where([ + 'id' => $tarifaEncuadernacionId, + 'is_deleted' => 0 + ])->findAll(); + + // Verificar si se encontró la tarifa + if (empty($tarifas_encuadernacion)) { + echo "No se encontraron datos para la tarifa de encuadernación con ID: $tarifaEncuadernacionId."; + return; + } + + // Imprimir la tarifa de encuadernación principal + echo "

---------------------- DATO TARIFA ENCUADERNACION ----------------------

"; + foreach ($tarifas_encuadernacion as $tarifa_encuadernacion) { + echo "ID Tarifa: " . $tarifa_encuadernacion->id . "
"; + echo "Nombre: " . $tarifa_encuadernacion->nombre . "
"; + echo "
"; + } + + // Obtener las tiradas asociadas a esta tarifa de encuadernación + $tarifas_encuadernacion_tiradas = $modelTETiradas->where([ + 'tarifa_encuadernacion_id' => $tarifaEncuadernacionId, + 'is_deleted' => 0 + ])->findAll(); + + // Verificar si existen tiradas para la tarifa de encuadernación + if (empty($tarifas_encuadernacion_tiradas)) { + echo "No hay tiradas asociadas a esta tarifa de encuadernación."; + return; + } + + // Imprimir las tiradas asociadas + echo "

---------------------- DATO TARIFA ENCUADERNACION (TIRADAS) -------------

"; + foreach ($tarifas_encuadernacion_tiradas as $tarifa_encuadernacion_tirada) { + echo "ID Tirada: " . $tarifa_encuadernacion_tirada->id . "
"; + echo "Tirada Min: " . $tarifa_encuadernacion_tirada->tirada_min . "
"; + echo "Tirada Max: " . $tarifa_encuadernacion_tirada->tirada_max . "
"; + + // Obtener las líneas asociadas a esta tirada + $tarifas_encuadernacion_lineas = $modelTELineas->where([ + 'tirada_encuadernacion_id' => $tarifa_encuadernacion_tirada->id, + 'is_deleted' => 0 + ])->findAll(); + + // Verificar si existen líneas asociadas a la tirada + if (empty($tarifas_encuadernacion_lineas)) { + echo "No hay líneas asociadas a esta tirada de encuadernación.
"; + } else { + // Imprimir las líneas asociadas + echo ""; + } + + // Obtener las líneas y horas asociadas a esta tirada + $tarifas_encuadernacion_lineas_horas = $modelTELineasHoras->where([ + 'tirada_encuadernacion_id' => $tarifa_encuadernacion_tirada->id, + 'is_deleted' => 0 + ])->findAll(); + + // Verificar si existen líneas y horas asociadas a la tirada + if (empty($tarifas_encuadernacion_lineas_horas)) { + echo "No hay líneas y horas asociadas a esta tirada de encuadernación.
"; + } else { + // Imprimir las líneas asociadas + echo ""; + } + + echo "
"; + } + + echo "

---------------------- FIN DE DATO TARIFA ENCUADERNACION ----------------------

"; + } + + public function delete_tarifa_encuadernacion($tarifaEncuadernacionId) + { + // Llamar a los modelos + $modelTE = model('App\Models\Tarifas\TarifaEncuadernacionModel'); + $modelTELineas = model('App\Models\Tarifas\TarifaEncuadernacionLineaModel'); + $modelTELineasHoras = model('App\Models\Tarifas\TarifaEncuadernacionLineaHorasModel'); + $modelTETiradas = model('App\Models\Tarifas\TarifaEncuadernacionTiradaModel'); + + // Obtener el registro principal de tarifa_encuadernacion + $tarifas_encuadernacion = $modelTE->where([ + 'id' => $tarifaEncuadernacionId, + 'is_deleted' => 0 + ])->findAll(); + + // Verificar si se encontró la tarifa + if (empty($tarifas_encuadernacion)) { + echo "No se encontró la tarifa de encuadernación con ID: $tarifaEncuadernacionId."; + return; + } + + // Iniciar eliminación de datos asociados + echo "Eliminando datos asociados a la tarifa de encuadernación ID: $tarifaEncuadernacionId...
"; + + // Eliminar las tiradas asociadas a la tarifa de encuadernación + $tarifas_encuadernacion_tiradas = $modelTETiradas->where([ + 'tarifa_encuadernacion_id' => $tarifaEncuadernacionId, + 'is_deleted' => 0 + ])->findAll(); + + if (!empty($tarifas_encuadernacion_tiradas)) { + foreach ($tarifas_encuadernacion_tiradas as $tarifa_encuadernacion_tirada) { + // Eliminar las líneas de horas asociadas a cada tirada + $tarifas_encuadernacion_lineas_horas = $modelTELineasHoras->where([ + 'tirada_encuadernacion_id' => $tarifa_encuadernacion_tirada->id, + 'is_deleted' => 0 + ])->findAll(); + + if (!empty($tarifas_encuadernacion_lineas_horas)) { + foreach ($tarifas_encuadernacion_lineas_horas as $tarifa_encuadernacion_linea_hora) { + $modelTELineasHoras->delete($tarifa_encuadernacion_linea_hora->id); // Eliminar la línea/hora + echo "===sk >-Eliminando Línea/Hora ID: " . $tarifa_encuadernacion_linea_hora->id . "
"; + } + } + + // Eliminar las líneas asociadas a cada tirada + $tarifas_encuadernacion_lineas = $modelTELineas->where([ + 'tirada_encuadernacion_id' => $tarifa_encuadernacion_tirada->id, + 'is_deleted' => 0 + ])->findAll(); + + if (!empty($tarifas_encuadernacion_lineas)) { + foreach ($tarifas_encuadernacion_lineas as $tarifa_encuadernacion_linea) { + $modelTELineas->delete($tarifa_encuadernacion_linea->id); // Eliminar la línea + echo "===>-Eliminando Línea ID: " . $tarifa_encuadernacion_linea->id . "
"; + } + } + + // Eliminar la tirada + $modelTETiradas->delete($tarifa_encuadernacion_tirada->id); // Eliminar la tirada + echo "=>-Eliminando Tirada ID: " . $tarifa_encuadernacion_tirada->id . "
"; + } + } + + echo " *** Proceso de eliminación completado. ***

"; + } + + public function clone_tarifa_encuadernacion($origenId, $destinoId) + { + // Llamar a los modelos + $modelTETiradas = model('App\Models\Tarifas\TarifaEncuadernacionTiradaModel'); + $modelTELineas = model('App\Models\Tarifas\TarifaEncuadernacionLineaModel'); + $modelTELineasHoras = model('App\Models\Tarifas\TarifaEncuadernacionLineaHorasModel'); + + // 1. Eliminar el contenido asociado de la tarifa destino + $this->delete_tarifa_encuadernacion($destinoId); + + // 2. Obtener las tiradas asociadas a la tarifa origen + $tiradasOrigen = $modelTETiradas->where([ + 'tarifa_encuadernacion_id' => $origenId, + 'is_deleted' => 0 + ])->findAll(); + + foreach ($tiradasOrigen as $tiradaOrigen) { + // Crear un nuevo registro para la tirada en la tarifa destino + $nuevaTirada = [ + 'tarifa_encuadernacion_id' => (int) $destinoId, + 'proveedor_id' => (int) $tiradaOrigen->proveedor_id, + 'importe_fijo' => (float) $tiradaOrigen->importe_fijo, + 'tirada_min' => (int) $tiradaOrigen->tirada_min, + 'tirada_max' => (int) $tiradaOrigen->tirada_max, + 'user_created_id' => (int) auth()->id(), + 'is_deleted' => 0 + ]; + + try { + $nuevaTiradaId = $modelTETiradas->insert($nuevaTirada); + if (!$nuevaTiradaId) { + throw new \Exception("Error al insertar el registro."); + } + echo "
==>+Tirada creada con ID: " . $nuevaTiradaId; + } catch (\Exception $e) { + echo "Error: " . $e->getMessage(); + } + + // 3. Clonar las líneas asociadas a esta tirada + $lineasOrigen = $modelTELineas->where([ + 'tirada_encuadernacion_id' => $tiradaOrigen->id, + 'is_deleted' => 0 + ])->findAll(); + + foreach ($lineasOrigen as $lineaOrigen) { + $nuevaLinea = [ + 'tirada_encuadernacion_id' => (int) $nuevaTiradaId, + 'paginas_libro_min' => (float) $lineaOrigen->paginas_libro_min, + 'paginas_libro_max' => (float) $lineaOrigen->paginas_libro_max, + 'dimensiones_id' => (int) $lineaOrigen->dimensiones_id, + 'precio_min' => (float) $lineaOrigen->precio_min, + 'precio_max' => (float) $lineaOrigen->precio_max, + 'tirada_min' => (float) $lineaOrigen->tirada_min, + 'tirada_max' => (float) $lineaOrigen->tirada_max, + 'total_min' => (float) $lineaOrigen->total_min, + 'margen' => (float) $lineaOrigen->margen, + 'user_created_id' => (int) auth()->id(), + 'is_deleted' => 0 + ]; + + try { + $nuevaLineaId = $modelTELineas->insert($nuevaLinea); + if (!$nuevaLineaId) { + throw new \Exception("Error al insertar el registro."); + } + echo "
====>+Linea creada con ID: " . $nuevaLineaId; + } catch (\Exception $e) { + echo "Error: " . $e->getMessage(); + } + + } + + // 4. Clonar las líneas y horas asociadas a esta tirada + $lineasHorasOrigen = $modelTELineasHoras->where([ + 'tirada_encuadernacion_id' => $tiradaOrigen->id, + 'is_deleted' => 0 + ])->findAll(); + + foreach ($lineasHorasOrigen as $lineaHoraOrigen) { + $nuevaLineaHora = [ + 'tirada_encuadernacion_id' => (int) $nuevaTiradaId, + 'tiempo_min' => (float) $lineaHoraOrigen->tiempo_min, + 'tiempo_max' => (float) $lineaHoraOrigen->tiempo_max, + 'precio_hora' => (float) $lineaHoraOrigen->precio_hora, + 'total_min' => (float) $lineaHoraOrigen->total_min, + 'margen' => (float) $lineaHoraOrigen->margen, + 'user_created_id' => (int) auth()->id(), + 'is_deleted' => 0 + ]; + + try { + $nuevaLineaHoraId = $modelTELineasHoras->insert($nuevaLineaHora); + if (!$nuevaLineaHoraId) { + throw new \Exception("Error al insertar el registro."); + } + echo "
====>+Linea/Hora creado con ID: " . $nuevaLineaHoraId; + } catch (\Exception $e) { + echo "Error: " . $e->getMessage(); + } + + } + } + + echo "
*** Proceso de clonacion completado. ***

"; + } + + + + + + +} diff --git a/ci4/app/Database/Migrations/2024-11-27-105608_AddTickTapaDuraPapelImp.php b/ci4/app/Database/Migrations/2024-11-27-105608_AddTickTapaDuraPapelImp.php new file mode 100644 index 00000000..e5cc1b91 --- /dev/null +++ b/ci4/app/Database/Migrations/2024-11-27-105608_AddTickTapaDuraPapelImp.php @@ -0,0 +1,27 @@ + [ + 'type' => 'TINYINT', + 'constraint' => 1, + 'null' => false, + 'default' => 0, + ], + ]; + + $this->forge->addColumn('lg_papel_impresion', $fields); + } + + public function down() + { + $this->forge->dropColumn('lg_papel_impresion', 'use_for_tapa_dura'); + } +} diff --git a/ci4/app/Entities/Configuracion/PapelImpresion.php b/ci4/app/Entities/Configuracion/PapelImpresion.php index d2e0b2ff..4d79a06e 100755 --- a/ci4/app/Entities/Configuracion/PapelImpresion.php +++ b/ci4/app/Entities/Configuracion/PapelImpresion.php @@ -25,6 +25,7 @@ class PapelImpresion extends \CodeIgniter\Entity\Entity "rotativa" => false, "isActivo" => true, "use_in_client" => false, + "use_for_tapa_dura" => false, "is_deleted" => 0, "created_at" => null, "updated_at" => null, @@ -45,6 +46,7 @@ class PapelImpresion extends \CodeIgniter\Entity\Entity "rotativa" => "boolean", "isActivo" => "boolean", "use_in_client" => "boolean", + "use_for_tapa_dura" => "boolean", "is_deleted" => "int", ]; } diff --git a/ci4/app/Language/es/PapelImpresion.php b/ci4/app/Language/es/PapelImpresion.php index 780fc979..939442db 100755 --- a/ci4/app/Language/es/PapelImpresion.php +++ b/ci4/app/Language/es/PapelImpresion.php @@ -10,6 +10,7 @@ return [ 'color' => 'Color', 'createdAt' => 'Creado en', 'cubierta' => 'Cubierta', + 'use_for_tapa_dura' => 'Papel tapa dura', 'sobrecubierta' => 'Sobrecubierta', 'guardas' => 'Guardas', 'defecto' => 'Por defecto', diff --git a/ci4/app/Models/Configuracion/PapelGenericoModel.php b/ci4/app/Models/Configuracion/PapelGenericoModel.php index 34dacfe0..63f0403e 100755 --- a/ci4/app/Models/Configuracion/PapelGenericoModel.php +++ b/ci4/app/Models/Configuracion/PapelGenericoModel.php @@ -313,7 +313,7 @@ class PapelGenericoModel extends \App\Models\BaseModel } - public function getPapelCliente($tipo, $is_cubierta = false, $selected_papel_id = null, $papel_especial = false) + public function getPapelCliente($tipo, $is_cubierta = false, $selected_papel_id = null, $tapa_dura = null, $papel_especial = false) { /* 1.-> Tipo impresion @@ -382,6 +382,9 @@ class PapelGenericoModel extends \App\Models\BaseModel if ($is_cubierta == true) { $builder->where("t2.cubierta", 1); $builder->where("t5.uso", 'cubierta'); + if($tapa_dura == true){ + $builder->where("t2.use_for_tapa_dura", 1); + } } else { $builder->where("t2.interior", 1); $builder->where("t5.uso", 'interior'); @@ -394,6 +397,9 @@ class PapelGenericoModel extends \App\Models\BaseModel if ($papel_especial == true) { $builder->where("t1.show_in_client_special", 1); } + else{ + $builder->where("t1.show_in_client_special", 0); + } if ($tipo == 'colorhq' || $tipo == 'negrohq') { $builder->where("t2.rotativa", 0); diff --git a/ci4/app/Models/Configuracion/PapelImpresionModel.php b/ci4/app/Models/Configuracion/PapelImpresionModel.php index 814463f8..de9473b9 100755 --- a/ci4/app/Models/Configuracion/PapelImpresionModel.php +++ b/ci4/app/Models/Configuracion/PapelImpresionModel.php @@ -20,12 +20,13 @@ class PapelImpresionModel extends \App\Models\BaseModel 4 => "t1.bn", 5 => "t1.color", 6 => "t1.cubierta", - 7 => "t1.sobrecubierta", - 8 => "t1.guardas", - 9 => "t1.inkjet", - 10 => "t1.rotativa", - 11 => "t1.isActivo", - 12 => "t1.use_in_client", + 7 => "t1.use_for_tapa_dura", + 8 => "t1.sobrecubierta", + 9 => "t1.guardas", + 10 => "t1.inkjet", + 11 => "t1.rotativa", + 12 => "t1.isActivo", + 13 => "t1.use_in_client", ]; @@ -48,6 +49,7 @@ class PapelImpresionModel extends \App\Models\BaseModel "rotativa", "isActivo", "use_in_client", + "use_for_tapa_dura", "deleted_at", "is_deleted", "user_updated_id", @@ -152,7 +154,8 @@ class PapelImpresionModel extends \App\Models\BaseModel ->select( "t1.id AS id, t1.nombre AS nombre, t1.defecto AS defecto, t1.referencia AS referencia, t1.mano AS mano, t1.espesor AS espesor, t1.gramaje AS gramaje, t1.interior AS interior, t1.precio_tonelada AS precio_tonelada, - t1.bn AS bn, t1.color AS color, t1.cubierta AS cubierta, t1.sobrecubierta AS sobrecubierta, t1.guardas AS guardas, + t1.bn AS bn, t1.color AS color, t1.cubierta AS cubierta, t1.use_for_tapa_dura AS use_for_tapa_dura, + t1.sobrecubierta AS sobrecubierta, t1.guardas AS guardas, t1.inkjet AS inkjet, t1.rotativa AS rotativa, t1.isActivo AS isActivo, t2.nombre AS papel_generico_id, t1.use_in_client AS use_in_client" diff --git a/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php b/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php index 9e78b7a1..7ce6c1c4 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoEncuadernacionesModel.php @@ -248,7 +248,7 @@ class PresupuestoEncuadernacionesModel extends \App\Models\BaseModel return []; } - public function getPrecioTarifaHoras($tarifa_encuadernacion_id, $paginas, $tirada, $proveedor_id, $POD, $paginas_cuadernillo = null){ + public function getPrecioTarifaHoras($tarifa_encuadernacion_id, $paginas, $tirada, $proveedor_id, $POD, $paginas_cuadernillo = 32){ $modelTarifa = model('App\Models\Tarifas\TarifaEncuadernacionModel'); diff --git a/ci4/app/Models/Presupuestos/PresupuestoModel.php b/ci4/app/Models/Presupuestos/PresupuestoModel.php index dc73bd25..974c29fa 100755 --- a/ci4/app/Models/Presupuestos/PresupuestoModel.php +++ b/ci4/app/Models/Presupuestos/PresupuestoModel.php @@ -426,7 +426,7 @@ class PresupuestoModel extends \App\Models\BaseModel 'solapas' => $data['cubierta']['solapasCubierta'] == 0 ? 0 : 1, 'lomo_redondo' => $data['cubierta']['lomoRedondo'] == 0 ? 0 : 1, 'cabezada' => $data['cubierta']['cabezada'] == 0 ? 0 : 1, - 'solapas_ancho' => $data['cubierta']['solapasCubierta'] == 0 ? $data['cubierta']['solapasCubierta'] : 0, + 'solapas_ancho' => $data['cubierta']['solapasCubierta'] > 0 ? $data['cubierta']['solapasCubierta'] : 0, 'solapas_sobrecubierta' => !$data['sobrecubierta'] ? 0 : 1, 'solapas_ancho_sobrecubierta' => !$data['sobrecubierta'] ? 0 : $data['sobrecubierta']['solapas'], 'cosido' => $is_cosido, diff --git a/ci4/app/Models/Presupuestos/TipoPresupuestoServiciosDefectoModel.php b/ci4/app/Models/Presupuestos/TipoPresupuestoServiciosDefectoModel.php index 1cc1f9e9..8979b058 100755 --- a/ci4/app/Models/Presupuestos/TipoPresupuestoServiciosDefectoModel.php +++ b/ci4/app/Models/Presupuestos/TipoPresupuestoServiciosDefectoModel.php @@ -79,6 +79,7 @@ class TipoPresupuestoServiciosDefectoModel extends \App\Models\BaseModel $where = "(t1.solapas IS NULL OR t1.solapas='" . $solapas . "')"; $builder->where($where); + $builder->where("t1.is_deleted", 0); $builder->where("t2.is_deleted", 0); $builder->select("t1.tarifa_id AS tarifa_id, t2.nombre AS tarifa_nombre"); diff --git a/ci4/app/Services/PresupuestoClienteService.php b/ci4/app/Services/PresupuestoClienteService.php index ea59622c..000a27e3 100644 --- a/ci4/app/Services/PresupuestoClienteService.php +++ b/ci4/app/Services/PresupuestoClienteService.php @@ -416,6 +416,17 @@ class PresupuestoClienteService extends BaseService return $values; } + public static function getServiciosManipuladoDefault($data) + { + + $tirada = $data['tirada'] ?? -1; + $anchoDesarrollo = $data['anchoDesarrollo'] ?? -1; + + /*$model = model('App\Models\Presupuestos\PresupuestoEncuadernacionesModel'); + $values = $model->initPresupuesto($tipo_impresion_id, $solapas, $tirada, $paginas, $ancho, $alto, $POD, $paginasCuadernillo);*/ + //return $values; + } + public static function getServiciosManipulado($data) { diff --git a/ci4/app/Services/PresupuestoService.php b/ci4/app/Services/PresupuestoService.php index a6c1074b..1aba14fd 100755 --- a/ci4/app/Services/PresupuestoService.php +++ b/ci4/app/Services/PresupuestoService.php @@ -1479,7 +1479,7 @@ class PresupuestoService extends BaseService // con el mismo proveedor else { if ($tarifaModel->isTarifaPorHoras($servicio->tarifa_encuadernado_id)) { - $paginas_cuadernillo = $servicio->paginas_por_cuadernillo ?? null; + $paginas_cuadernillo = $servicio->paginas_por_cuadernillo ?? 32; $nueva_tarifa = $model->getPrecioTarifaHoras( $servicio->tarifa_encuadernado_id, $input_data['paginas'], @@ -1815,6 +1815,12 @@ class PresupuestoService extends BaseService } } + if ($uso == 'cubierta' || $uso == 'sobrecubierta') { + + $linea['fields']['dimension_desarrollo']['ancho'] = $datosPedido->anchoExteriores; + $linea['fields']['dimension_desarrollo']['alto'] = $datosPedido->altoExteriores; + } + if (!array_key_exists('tipo_linea', $linea['fields'])) { if ($isColor) { if ($isHq) diff --git a/ci4/app/Views/themes/vuexy/form/configuracion/papel/_papelImpresionFormItems.php b/ci4/app/Views/themes/vuexy/form/configuracion/papel/_papelImpresionFormItems.php index b094e35d..5d0473d6 100644 --- a/ci4/app/Views/themes/vuexy/form/configuracion/papel/_papelImpresionFormItems.php +++ b/ci4/app/Views/themes/vuexy/form/configuracion/papel/_papelImpresionFormItems.php @@ -99,6 +99,17 @@ +
+
+ + +
+
+
diff --git a/ci4/app/Views/themes/vuexy/form/configuracion/papel/viewPapelImpresionForm.php b/ci4/app/Views/themes/vuexy/form/configuracion/papel/viewPapelImpresionForm.php index 6e6079b1..9c4c2abc 100644 --- a/ci4/app/Views/themes/vuexy/form/configuracion/papel/viewPapelImpresionForm.php +++ b/ci4/app/Views/themes/vuexy/form/configuracion/papel/viewPapelImpresionForm.php @@ -403,6 +403,16 @@ `; }; + $('#cubierta').on('change', function() { + if($(this).is(':checked')) { + $('#useForTapaDura').prop('disabled', false); + $('#useForTapaDura').prop('checked', false); + } + else{ + $('#useForTapaDura').prop('disabled', true); + } + }); + // Etiquetas para las tipologias const tipoTypes = [ diff --git a/ci4/app/Views/themes/vuexy/form/configuracion/papel/viewPapelImpresionList.php b/ci4/app/Views/themes/vuexy/form/configuracion/papel/viewPapelImpresionList.php index 2ba47b1d..5dcf2c20 100644 --- a/ci4/app/Views/themes/vuexy/form/configuracion/papel/viewPapelImpresionList.php +++ b/ci4/app/Views/themes/vuexy/form/configuracion/papel/viewPapelImpresionList.php @@ -25,6 +25,7 @@ + @@ -104,6 +105,7 @@ { 'data': 'bn' }, { 'data': 'color' }, { 'data': 'cubierta' }, + { 'data': 'use_for_tapa_dura'}, { 'data': 'sobrecubierta' }, { 'data': 'guardas' }, { 'data': 'inkjet' }, @@ -116,7 +118,7 @@ theTable.on( 'draw.dt', function () { - const boolCols = [3, 4, 5, 6, 7, 8, 9, 10, 11]; + const boolCols = [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]; for (let coln of boolCols) { theTable.column(coln, { page: 'current' }).nodes().each( function (cell, i) { cell.innerHTML = cell.innerHTML == '1' ? '' : ''; diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosServiciosItems.js b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosServiciosItems.js index 130adab0..f1871aef 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosServiciosItems.js +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosServiciosItems.js @@ -777,7 +777,7 @@ function convertirTiempo(horas){ // se convierte a formato hh:mm:ss const h = Math.floor(seconds / 3600); const minutos = Math.floor((seconds % 3600) / 60); - const segundos = round(seconds % 60, 0); + const segundos = Math.round(seconds % 60, 0); return h + ':' + minutos + ':' + segundos; } else{ diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosServiciosItems.php b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosServiciosItems.php index 12c35b60..d6fbe850 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosServiciosItems.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/admin/_datosServiciosItems.php @@ -318,6 +318,8 @@ init_servicio_extra() + /* ELIMINADO PARA COMPROBAR EL MAXIMO DE SOLAPAS DESDE EL BACKEND + PENDIENTE $('.solapas_cubierta').on('change', function(){ const ancho_libro = getDimensionLibro().ancho; @@ -337,6 +339,7 @@ } $('#compGramajeCubierta').trigger('change') + }) @@ -360,5 +363,7 @@ $('#compGramajeSobrecubierta').trigger('change') }) + + */ endSection() ?> diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_datosGenerales.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_datosGenerales.php index 37b01331..3f9997af 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_datosGenerales.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_datosGenerales.php @@ -54,7 +54,7 @@ - user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente-editor')) ? " hidden" : "" ?> id="clienteId" name="cliente_id" class="form-control select2bs2 calcular-presupuesto calcular-solapas" style="width: 100%;"> user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente-editor')): ?> @@ -66,7 +66,7 @@
">
- user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente-editor')) ? " hidden" : "" ?> class="calcular-presupuesto form-check-input" type="checkbox" id="excluirRotativa" + user()->inGroup('cliente-admin') || auth()->user()->inGroup('cliente-editor')) ? " hidden" : "" ?> class=" calcular-solapas calcular-presupuesto form-check-input" type="checkbox" id="excluirRotativa" name="excluir_rotativa" value="1">
@@ -78,7 +78,7 @@ -
@@ -86,7 +86,7 @@ -
@@ -94,7 +94,7 @@ -
@@ -102,7 +102,7 @@ - @@ -113,7 +113,7 @@ - @@ -123,20 +123,20 @@
+ class="form-control formato_libro calcular-presupuesto calcular-solapas num-input" min="110" value="110">
+ class="form-control formato_libro calcular-presupuesto calcular-solapas num-input" min="170" value="170">
- @@ -153,7 +153,7 @@ -
@@ -166,7 +166,7 @@ -
@@ -179,7 +179,7 @@ -
@@ -234,28 +234,28 @@
-
+
" alt="Fresado">
Fresado (a partir de 32 páginas)
-
+
" alt="Grapado">
Grapado (entre 12 y 40 páginas)
-
+
" alt="Espiral">
Espiral
-
+
" alt="Cosido">
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_disenioCubierta.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_disenioCubierta.php index 5850e258..5b242bca 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_disenioCubierta.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_disenioCubierta.php @@ -91,7 +91,7 @@ -
+
Entre 60 y 120 mm
@@ -138,101 +138,29 @@
-
+

Papel cubierta

- -
- " - alt="Cartulina estucada"> - -
- -
- " alt="Estucado mate"> - -
+
+
+ + +
+
+
- - -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- -
-
- Recomendado -
-
- -
-
- -
-
-
-
@@ -333,7 +261,7 @@ -
+
Entre 60 y 120 mm
diff --git a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_disenioInterior.php b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_disenioInterior.php index 83e399a6..600e4686 100644 --- a/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_disenioInterior.php +++ b/ci4/app/Views/themes/vuexy/form/presupuestos/cliente/items/_disenioInterior.php @@ -65,7 +65,7 @@ Seleccione el papel especial
@@ -120,7 +120,7 @@ Seleccione el papel especial
diff --git a/httpdocs/assets/js/safekat/pages/presupuestoCliente/disenioCubierta.js b/httpdocs/assets/js/safekat/pages/presupuestoCliente/disenioCubierta.js index 84301d20..0b39cec9 100644 --- a/httpdocs/assets/js/safekat/pages/presupuestoCliente/disenioCubierta.js +++ b/httpdocs/assets/js/safekat/pages/presupuestoCliente/disenioCubierta.js @@ -1,20 +1,44 @@ +import { getToken } from '../../common/common.js'; +import { capitalizeFirstLetter } from '../../common/common.js'; + +import Ajax from '../../components/ajax.js'; +import ClassSelect from '../../components/select2.js'; + + class DisenioCubierta { - constructor(domItem, wizardForm, validatorStepper) { - + constructor(domItem, wizardForm, validatorStepper, presupuestoCliente) { + this.domItem = domItem; this.allowNext = true; + this.presupuestoCliente = presupuestoCliente; + + this.csrf_token = getToken(); + this.csrf_hash = $('#mainContainer').find('input[name="' + this.csrf_token + '"]').val(); + this.wizardStep = wizardForm.querySelector('#cubierta-libro'); this.validatorStepper = validatorStepper; this.disenioCubierta = this.domItem.find(".tipo-cubierta"); this.solapasCubierta = this.domItem.find(".solapas-cubierta"); - this.papelCubierta = this.domItem.find(".papel-cubierta"); + this.textoPapelCubierta = this.domItem.find("#textoPapelCubierta"); + + this.divPapelEspecial = this.domItem.find("#divPapelEspecialCubierta"); + this.papelEspecial = new ClassSelect($("#papelEspecialCubiertaSel"), + '/papelesgenericos/selectpapelespecial', + window.translations["selectPapel"], + false, + { + [this.csrf_token]: this.csrf_hash, + tipo: 'colorhq', + cubierta: 1, + } + ); this.divSolapas = this.domItem.find("#divSolapasCubierta"); this.divCarasImpresion = this.domItem.find("#divCarasImpresion"); - this.divConfigGuardas = this.domItem.find("#divConfigGuardas"); + this.divConfigGuardas = this.domItem.find("#divConfigTapaDura"); this.carasCubierta = this.domItem.find("#carasCubierta"); @@ -25,6 +49,7 @@ class DisenioCubierta { this.sinSolapas = this.domItem.find("#solapasCubiertaNo"); this.conSolapas = this.domItem.find("#solapasCubiertaSi"); this.divTamanioSolapas = this.domItem.find("#divTamanioSolapas"); + this.textoSolapasCubierta = this.domItem.find("#textoSolapasCubierta"); this.tamanioSolapasCubierta = $(this.domItem.find("#solapasCubierta")); this.papelGuardas = this.domItem.find("#papelGuardas"); @@ -35,16 +60,7 @@ class DisenioCubierta { this.estucadoMate = this.domItem.find("#estucadoMate"); this.divPapelCubierta = this.domItem.find("#divPapelCubierta"); - this.divGramajeCubierta = this.domItem.find("#divGramajeCubierta"); - this.gramaje = this.domItem.find(".check-gramaje-cubierta"); - this.gramaje170 = $(this.domItem.find("#divGramaje170Cubierta")); - this.gramaje250 = $(this.domItem.find("#divGramaje250Cubierta")); - this.gramaje270 = $(this.domItem.find("#divGramaje270Cubierta")); - this.gramaje300 = $(this.domItem.find("#divGramaje300Cubierta")); - this.gramaje350 = $(this.domItem.find("#divGramaje350Cubierta")); - - this.checksGramaje = $('.check-gramaje-cubierta'); this.cubiertaPlastificado = this.domItem.find("#plastificado"); this.cubiertaBarniz = this.domItem.find("#barniz"); @@ -60,6 +76,7 @@ class DisenioCubierta { this.faja = this.domItem.find("#addFaja"); this.solapasSobrecubierta = this.domItem.find("#solapasSobrecubierta"); + this.textoSolapasSobrecubierta = this.domItem.find("#textoLimitesSolapasSobrecubierta"); this.solapasFaja = this.domItem.find("#solapasFaja"); this.altoFaja = this.domItem.find("#altoFaja"); @@ -91,12 +108,14 @@ class DisenioCubierta { else if (targetElement.classList.contains('solapas-cubierta')) { this.#handleMenuSolapas(); } - else if (targetElement.classList.contains('papel-cubierta')) { - this.#handleMenuPapel(); - } } }); }); + + this.papelCubierta = null; + this.gramaje = null; + + this.cargando = true; } @@ -104,10 +123,12 @@ class DisenioCubierta { const self = this; + this.papelEspecial.init(); + $('#papelEspecialCubiertaSel').on("change", this.#handlePapelCubiertaEspecial.bind(this)); + // Eventos this.disenioCubierta.on('click', this.#handleDisenioCubierta.bind(this)); this.solapasCubierta.on('click', this.#handleSolapasCubierta.bind(this)); - this.papelCubierta.on('click', this.#handlePapelCubierta.bind(this)); this.tamanioSolapasCubierta.on('change', this.#handleTamanioSolapas.bind(this)); this.altoFaja.on('blur', this.#handleInputs); this.solapasSobrecubierta.on('blur', this.#handleInputs); @@ -129,23 +150,16 @@ class DisenioCubierta { this.observer.observe(this.tapaBlanda[0], { attributes: true }); this.observer.observe(this.tapaDuraLomoRecto[0], { attributes: true }); this.observer.observe(this.tapaDuraLomoRedondo[0], { attributes: true }); - this.observer.observe(this.cartulinaEstucada[0], { attributes: true }); - this.observer.observe(this.estucadoMate[0], { attributes: true }); this.observer.observe(this.conSolapas[0], { attributes: true }); this.observer.observe(this.sinSolapas[0], { attributes: true }); - - this.checksGramaje.each(function () { - - const customOptionEL = $(this); - customOptionEL.on('click', function () { - self.#handleClickGramaje(customOptionEL); - }); - }); } cargarDatos(datosCubierta, datosGuardas, datosSobrecubierta) { + this.papelCubierta = datosCubierta.papel.id; + this.gramaje = datosCubierta.gramaje; + if (datosCubierta.lomoRedondo) { this.tapaDuraLomoRedondo.trigger('click'); } @@ -259,17 +273,19 @@ class DisenioCubierta { validators: { callback: { callback: function (input) { - const div = $('#divPapelCubierta'); - if (div.hasClass("d-none")) return true; - div.find('.fv-plugins-message-container').remove(); - if ($('.papel-cubierta.selected').length > 0) { + $('#divPapelCubierta').find('.fv-plugins-message-container').remove(); + $('#divPapelEspecialCubierta').find('.fv-plugins-message-container').remove(); + + const papelSeleccionado = $('.custom-selector-papel-cubierta input[type="radio"]:checked'); + if (papelSeleccionado.length > 0) { return true; + } else { - div.append(` + $('#divPapelCubierta').append(`
-
+
${window.translations["validation"].papel_interior}
@@ -280,20 +296,48 @@ class DisenioCubierta { } } }, + div_papel_especial_cubierta: { + validators: { + callback: { + callback: function (input) { + + $('#divPapelEspecialCubierta').find('.fv-plugins-message-container').remove(); + if ($('#divPapelEspecialCubierta').hasClass("d-none")) return true; + + if ($('#papelEspecialCubiertaSel').select2('data').length > 0) + return true; + else { + $('#divPapelEspecialCubierta').append(` +
+
+ ${window.translations["validation"].papel_interior} +
+
+ `); + return false; + } + + } + } + } + }, div_gramaje_cubierta: { validators: { callback: { callback: function (input) { - const div = $('#divGramajeCubierta'); // Selecciona el div - div.find('.fv-plugins-message-container').remove(); - if ($('.check-gramaje-cubierta:checked').length > 0) { + const divGramajeInterior = $('#divGramajeCubierta'); // Selecciona el div + divGramajeInterior.find('.fv-plugins-message-container').remove(); + + const gramajeSeleccionado = $('.custom-selector-gramaje-cubierta input[type="radio"]:checked'); + if (gramajeSeleccionado.length > 0) { return true; + } else { - div.append(` + divGramajeInterior.append(`
-
+
${window.translations["validation"].gramaje_interior}
@@ -319,6 +363,7 @@ class DisenioCubierta { case 'div_solapas_cubierta': case 'div_papel_cubierta': case 'div_gramaje_cubierta': + case 'div_papel_especial_cubierta': return '.col-sm-10'; default: return '.col-sm-3'; @@ -338,45 +383,48 @@ class DisenioCubierta { processMenuLateral() { let menu_off = true; - - if($('.papel-cubierta.selected').length>0 && this.getGramaje() != null){ - this.rl_papel_cubierta.text($($('.papel-cubierta.selected').find('.form-label')).text() + " " + - this.getGramaje() + " gr"); + + const papel = this.getPapel(true); + const gramaje = this.getGramaje(); + + if (papel != null && gramaje != null) { + + this.rl_papel_cubierta.text(papel + " " + gramaje + " gr"); this.rl_acabado_cubierta.text(this.domItem.find("#plastificado").children("option:selected").text()); this.rl_papel_cubierta.removeClass('d-none'); this.rl_acabado_cubierta.removeClass('d-none'); - if(this.carasCubierta.find('option:selected').length>0){ + if (this.carasCubierta.find('option:selected').length > 0) { this.rl_caras_cubierta.text("Impresa " + this.carasCubierta.find('option:selected').text()); this.rl_caras_cubierta.removeClass('d-none'); menu_off = false; } - else{ + else { this.rl_caras_cubierta.addClass('d-none'); } - + menu_off = false; } - else{ + else { this.rl_papel_cubierta.addClass('d-none'); this.rl_acabado_cubierta.addClass('d-none'); } - + if (!menu_off) this.rl_cubierta.removeClass('d-none'); else this.rl_cubierta.addClass('d-none'); // Sobrecubierta solo se muestra si cubierta ok - if(!this.rl_cubierta.hasClass('d-none')){ + if (!this.rl_cubierta.hasClass('d-none')) { this.rl_sobrecubierta.removeClass('d-none'); - if(!this.sobrecubierta.is(":checked")){ + if (!this.sobrecubierta.is(":checked")) { this.rl_no_sobrecubierta.removeClass('d-none'); this.rl_papel_sobrecubierta.addClass('d-none'); this.rl_tamanio_sobrecubierta.addClass('d-none'); this.rl_acabado_sobrecubierta.addClass('d-none'); } - else{ + else { this.rl_no_sobrecubierta.addClass('d-none'); this.rl_papel_sobrecubierta.removeClass('d-none'); this.rl_tamanio_sobrecubierta.removeClass('d-none'); @@ -386,12 +434,12 @@ class DisenioCubierta { this.rl_papel_sobrecubierta.text(sobrecubierta.papel + " " + sobrecubierta.gramaje + " gr") this.rl_tamanio_sobrecubierta.text("Solapas: " + sobrecubierta.solapas + " mm") let acabado_text = sobrecubierta.plastificado; - if(acabado_text.includes("Sin plastificar")) + if (acabado_text.includes("Sin plastificar")) acabado_text = "Sin plastificar"; this.rl_acabado_sobrecubierta.text(acabado_text); } } - else{ + else { this.rl_sobrecubierta.addClass('d-none'); } @@ -419,11 +467,30 @@ class DisenioCubierta { } - getPapel() { + getPapel(forResumen = false) { try { - if (this.papelCubierta.filter('.selected').length > 0) { - return this.papelCubierta.filter('.selected').attr('cod'); + let checkedPapel = $('.custom-selector-papel-cubierta input[type="radio"]:checked'); + if (this.papelCubierta != null && checkedPapel != null && checkedPapel.length > 0) { + if (forResumen) { + + if (checkedPapel.length == 0) + return null; + let radioButtonId = checkedPapel[0].id; + if (radioButtonId == 'papelEspecialCubierta') + return capitalizeFirstLetter(this.papelEspecial.getText()); + else { + let associatedLabel = $('label[for="' + radioButtonId + '"]'); + return capitalizeFirstLetter($(associatedLabel[0]).text().toLocaleLowerCase()); + } + } + else { + if (this.divPapelEspecial.hasClass('d-none')) + return this.papelCubierta; + else { + return this.papelEspecial.getVal(); + } + } } return null; } @@ -435,17 +502,13 @@ class DisenioCubierta { getGramaje() { + let checkedGramaje = $('.custom-selector-gramaje-cubierta input[type="radio"]:checked'); + try { - if (this.divGramajeCubierta.hasClass("d-none")) - return null; - - if (this.gramaje.filter(':checked').length > 0) - return this.gramaje.filter(':checked').attr('data-value'); - - else - return null; - + if (checkedGramaje.length == 0) + return null; + return checkedGramaje[0].id.split('_')[1]; } catch (e) { return null; } @@ -606,8 +669,6 @@ class DisenioCubierta { element.closest(class2Find).toggleClass('selected'); element.closest('.image-presupuesto').toggleClass('selected'); - $(".papel-cubierta").removeClass("selected"); - if (this.tapaBlanda.hasClass("selected")) { if (this.carasCubierta.val() == 2) { this.cartulinaEstucada.removeClass("d-none"); @@ -618,12 +679,6 @@ class DisenioCubierta { this.cartulinaEstucada.addClass("d-none"); this.estucadoMate.addClass("selected"); this.divGramajeCubierta.removeClass("d-none"); - this.gramaje170.removeClass("d-none"); - this.gramaje170.closest(".checkbox-presupuesto-container").addClass("checked"); - this.gramaje250.addClass("d-none"); - this.gramaje270.addClass("d-none"); - this.gramaje300.addClass("d-none"); - this.gramaje350.addClass("d-none"); } element.trigger('change'); @@ -651,30 +706,10 @@ class DisenioCubierta { } - #handlePapelCubierta(event) { - // Accede al ID del elemento que disparó el evento - const element = $(event.target); - - let class2Find = '.papel-cubierta'; - - let containers = element.closest(class2Find).parent().find(class2Find); - for (let container of containers) { - if (container != element.closest(class2Find)[0]) { - $(container).removeClass('selected'); - $(container).find('.image-presupuesto').removeClass('selected'); - } - } - - element.closest(class2Find).toggleClass('selected'); - element.closest('.image-presupuesto').toggleClass('selected'); - - element.trigger('change'); - } - #handleMenuTipoCubierta() { if (this.tapaBlanda.hasClass("selected")) { - + this.divSolapas.removeClass("d-none"); this.divCarasImpresion.removeClass("d-none"); this.divConfigGuardas.addClass("d-none"); @@ -684,15 +719,14 @@ class DisenioCubierta { this.divSolapas.addClass("d-none"); this.divCarasImpresion.addClass("d-none"); this.divConfigGuardas.removeClass("d-none"); - this.#handleMenuPapel(); - } else { this.divSolapas.addClass("d-none"); this.divCarasImpresion.addClass("d-none"); this.divConfigGuardas.addClass("d-none"); - this.#handleMenuPapel(); } + + this.#handleMenuPapel(); } @@ -708,42 +742,234 @@ class DisenioCubierta { #handleMenuPapel() { - $(".check-gramaje-cubierta").prop("checked", false); + this.divGramajeCubierta.empty(); + const tapa_dura = this.tapaBlanda.hasClass("selected") ? 0 : 1; + new Ajax('/papelesgenericos/getpapelcliente', + { + [this.csrf_token]: this.csrf_hash, + tipo: 'colorhq', + cubierta: 1, + tapa_dura: tapa_dura + }, + {}, + (response) => { this.fillPapeles(response); }, + (response) => { console.log(response); } + ).get(); + } - if (!this.tapaBlanda.hasClass("selected") && !this.tapaDuraLomoRecto.hasClass("selected") && !this.tapaDuraLomoRedondo.hasClass("selected")) { - this.divGramajeCubierta.addClass("d-none"); - this.estucadoMate.removeClass("selected"); - this.cartulinaEstucada.removeClass("selected"); + + #handlePapelCubiertaEspecial() { + + const context = this; + + this.papelCubierta = this.papelEspecial.getVal(); + const tapa_dura = this.tapaBlanda.hasClass("selected") ? 0 : 1; + + new Ajax('/papelesgenericos/getpapelcliente', + { + [this.csrf_token]: this.csrf_hash, + papel: this.papelCubierta, + tipo: 'colorhq', + cubierta: 1, + tapa_dura: tapa_dura, + }, + {}, + this.fillGramajes.bind(context), + (response) => { console.log(response); } + ).get(); + + } + + + fillPapeles(response) { + + this.divPapelCubierta.empty(); + this.divGramajeCubierta.empty(); + + if (response.papeles.length > 0) { + this.textoPapelCubierta.removeClass('d-none'); + } + else { + this.textoPapelCubierta.addClass("d-none"); + } + + response.papeles.forEach(papel => { + var container = $('
', { + class: 'custom-selector custom-selector-papel-cubierta d-flex flex-column align-items-center justify-content-center' + }); + + var radioButton = $('', { + type: 'radio', // Tipo de input + name: 'calcular-presupuesto papel-cubierta', + id: 'papelCubierta_' + papel.id, // ID único + value: 'option1' // Valor del radio button + }); + + // Crear una etiqueta para el radio button + var label = $('