def buscar_alojamientos_por_habitacion(request): # Por defecto se mostrarán todos los Alojamientos por Habitación que cumplan con las condiciones de indexado # Estas condiciones son: # 1 - Que el usuario propietario esté activo y validado como proveedor # 2 - Que el servicio esté activo y tenga al menos una habitación registrada y esta tenga fotos # Debe comprobarse si hay criterios de búsqueda almacenadas en la session para inicializar el Formulario y realizar la primera búsqueda if 'criterio_alojamientos_por_habitacion' in request.session: lugar = request.session['criterio_alojamientos_por_habitacion'][ 'lugar'] fecha_desde = request.session['criterio_alojamientos_por_habitacion'][ 'fecha_desde'] fecha_hasta = request.session['criterio_alojamientos_por_habitacion'][ 'fecha_hasta'] huespedes = request.session['criterio_alojamientos_por_habitacion'][ 'huespedes'] else: lugar, fecha_desde, fecha_hasta, huespedes = None, None, None, None busqueda = { 'lugar': lugar, 'fecha_entrada': fecha_desde, 'fecha_salida': fecha_hasta, } # Si se pasan algunos valores iniciales de búsqueda debe inicializarse el formulario con estos valores y realizar una primera búsqueda if fecha_desde or fecha_hasta or huespedes: fechas_huespedes = [fecha_desde, fecha_hasta, int(huespedes)] else: fechas_huespedes = None alojamientos = Alojamiento.objects.detalles_alojamientos( # Se definen los criterios de filtrado para los Alojamientos que deseamos listar usuarios=Usuario.get_proveedores_validados(), activos=True, con_habitaciones=True, por_modalidad=True, por_habitacion=True, lugar=lugar, fechas_huespedes=fechas_huespedes) # Se obtiene la lista de todas las habitaciones registradas para los Alojamientos anteriormente definidos habitaciones = Habitacion.get_habitaciones_alojamientos(alojamientos) # Se obtienen los Alojamientos agrupados por Evaluación alojamientos_agrupados_evaluacion = Alojamiento.get_agrupados_evaluacion( alojamientos) # Se obtienen los Alojamientos agrupados por Características alojamientos_agrupados_caracteristicas = Alojamiento.get_agrupados_caracteristicas( alojamientos) if request.method == 'POST': # Si se realiza un POST es porque se están pasando los criterios de búsqueda desde esta misma vitsa, así que debemos eliminar # los criterios que estaban almacenados en la session para que no interfieran con los actuales criterios de búsqueda if 'criterio_alojamientos_por_habitacion' in request.session: del request.session['criterio_alojamientos_por_habitacion'] form = Buscar_Alojamientos_Por_Habitacion(request.POST) if form.is_valid(): # Se aplican los filtros del Formulario alojamientos = Alojamiento.objects.detalles_alojamientos( activos=True, con_habitaciones=True, por_modalidad=True, por_habitacion=True, lugar=form.cleaned_data['lugar'], fechas_huespedes=[ form.cleaned_data['fecha_entrada'], form.cleaned_data['fecha_salida'], int(form.cleaned_data['huespedes']) ], ordered=form.cleaned_data['ordenar_por'], rango_precio=form.cleaned_data['rango_precio'], rating_1_estrella=form.cleaned_data['rating_1_estrella'], rating_2_estrellas=form.cleaned_data['rating_2_estrellas'], rating_3_estrellas=form.cleaned_data['rating_3_estrellas'], rating_4_estrellas=form.cleaned_data['rating_4_estrellas'], rating_5_estrellas=form.cleaned_data['rating_5_estrellas'], acceso_discapacitados=form. cleaned_data['acceso_discapacitados'], desayuno_cena=form.cleaned_data['desayuno_cena'], internet=form.cleaned_data['internet'], parqueo=form.cleaned_data['parqueo'], patio_terraza_balcon=form.cleaned_data['patio_terraza_balcon'], permitido_fumar=form.cleaned_data['permitido_fumar'], permitido_mascotas=form.cleaned_data['permitido_mascotas'], permitido_ninnos=form.cleaned_data['permitido_ninnos'], piscina=form.cleaned_data['piscina'], transporte_aeropuerto=form. cleaned_data['transporte_aeropuerto'], apartamento=form.cleaned_data['apartamento'], casa=form.cleaned_data['casa'], mansion=form.cleaned_data['mansion'], aire_acondicionado=form.cleaned_data['aire_acondicionado'], agua_caliente=form.cleaned_data['agua_caliente'], nevera_bar=form.cleaned_data['nevera_bar'], balcon=form.cleaned_data['balcon'], caja_fuerte=form.cleaned_data['caja_fuerte'], tv=form.cleaned_data['tv'], estereo=form.cleaned_data['estereo'], ventanas=form.cleaned_data['ventanas'], banno_independiente=form.cleaned_data['banno_independiente'], ) context = { 'form': form, 'alojamientos': alojamientos, 'habitaciones': habitaciones, 'alojamientos_5_estrellas': alojamientos_agrupados_evaluacion['5_estrellas'], 'alojamientos_4_estrellas': alojamientos_agrupados_evaluacion['4_estrellas'], 'alojamientos_3_estrellas': alojamientos_agrupados_evaluacion['3_estrellas'], 'alojamientos_2_estrellas': alojamientos_agrupados_evaluacion['2_estrellas'], 'alojamientos_1_estrellas': alojamientos_agrupados_evaluacion['1_estrellas'], 'acceso_discapacitados': alojamientos_agrupados_caracteristicas[ 'acceso_discapacitados'], 'desayuno_cena': alojamientos_agrupados_caracteristicas['desayuno_cena'], 'internet': alojamientos_agrupados_caracteristicas['internet'], 'parqueo': alojamientos_agrupados_caracteristicas['parqueo'], 'patio_terraza_balcon': alojamientos_agrupados_caracteristicas['patio_terraza_balcon'], 'permitido_fumar': alojamientos_agrupados_caracteristicas['permitido_fumar'], 'permitido_mascotas': alojamientos_agrupados_caracteristicas['permitido_mascotas'], 'permitido_ninnos': alojamientos_agrupados_caracteristicas['permitido_ninnos'], 'piscina': alojamientos_agrupados_caracteristicas['piscina'], 'transporte_aeropuerto': alojamientos_agrupados_caracteristicas[ 'transporte_aeropuerto'], 'apartamento': alojamientos_agrupados_caracteristicas['apartamento'], 'casa': alojamientos_agrupados_caracteristicas['casa'], 'mansion': alojamientos_agrupados_caracteristicas['mansion'], 'aire_acondicionado': alojamientos_agrupados_caracteristicas['aire_acondicionado'], 'agua_caliente': alojamientos_agrupados_caracteristicas['agua_caliente'], 'nevera_bar': alojamientos_agrupados_caracteristicas['nevera_bar'], 'balcon': alojamientos_agrupados_caracteristicas['balcon'], 'caja_fuerte': alojamientos_agrupados_caracteristicas['caja_fuerte'], 'tv': alojamientos_agrupados_caracteristicas['tv'], 'estereo': alojamientos_agrupados_caracteristicas['estereo'], 'ventanas': alojamientos_agrupados_caracteristicas['ventanas'], 'banno_independiente': alojamientos_agrupados_caracteristicas['banno_independiente'], } else: print('El formulario es inválido') context = { 'form': form, 'message': 'Hay errores en el Formulario', 'class_alert': 'alert alert-danger', 'alojamientos': None, 'habitaciones': None, 'alojamientos_5_estrellas': [], 'alojamientos_4_estrellas': [], 'alojamientos_3_estrellas': [], 'alojamientos_2_estrellas': [], 'alojamientos_1_estrellas': [], 'acceso_discapacitados': [], 'desayuno_cena': [], 'internet': [], 'parqueo': [], 'patio_terraza_balcon': [], 'permitido_fumar': [], 'permitido_mascotas': [], 'permitido_ninnos': [], 'piscina': [], 'transporte_aeropuerto': [], 'apartamento': [], 'casa': [], 'mansion': [], 'aire_acondicionado': [], 'agua_caliente': [], 'nevera_bar': [], 'balcon': [], 'caja_fuerte': [], 'tv': [], 'estereo': [], 'ventanas': [], 'banno_independiente': [], } else: context = { 'form': Buscar_Alojamientos_Por_Habitacion(busqueda), 'alojamientos': alojamientos, 'habitaciones': habitaciones, 'alojamientos_5_estrellas': alojamientos_agrupados_evaluacion['5_estrellas'], 'alojamientos_4_estrellas': alojamientos_agrupados_evaluacion['4_estrellas'], 'alojamientos_3_estrellas': alojamientos_agrupados_evaluacion['3_estrellas'], 'alojamientos_2_estrellas': alojamientos_agrupados_evaluacion['2_estrellas'], 'alojamientos_1_estrellas': alojamientos_agrupados_evaluacion['1_estrellas'], 'acceso_discapacitados': alojamientos_agrupados_caracteristicas['acceso_discapacitados'], 'desayuno_cena': alojamientos_agrupados_caracteristicas['desayuno_cena'], 'internet': alojamientos_agrupados_caracteristicas['internet'], 'parqueo': alojamientos_agrupados_caracteristicas['parqueo'], 'patio_terraza_balcon': alojamientos_agrupados_caracteristicas['patio_terraza_balcon'], 'permitido_fumar': alojamientos_agrupados_caracteristicas['permitido_fumar'], 'permitido_mascotas': alojamientos_agrupados_caracteristicas['permitido_mascotas'], 'permitido_ninnos': alojamientos_agrupados_caracteristicas['permitido_ninnos'], 'piscina': alojamientos_agrupados_caracteristicas['piscina'], 'transporte_aeropuerto': alojamientos_agrupados_caracteristicas['transporte_aeropuerto'], 'apartamento': alojamientos_agrupados_caracteristicas['apartamento'], 'casa': alojamientos_agrupados_caracteristicas['casa'], 'mansion': alojamientos_agrupados_caracteristicas['mansion'], 'aire_acondicionado': alojamientos_agrupados_caracteristicas['aire_acondicionado'], 'agua_caliente': alojamientos_agrupados_caracteristicas['agua_caliente'], 'nevera_bar': alojamientos_agrupados_caracteristicas['nevera_bar'], 'balcon': alojamientos_agrupados_caracteristicas['balcon'], 'caja_fuerte': alojamientos_agrupados_caracteristicas['caja_fuerte'], 'tv': alojamientos_agrupados_caracteristicas['tv'], 'estereo': alojamientos_agrupados_caracteristicas['estereo'], 'ventanas': alojamientos_agrupados_caracteristicas['ventanas'], 'banno_independiente': alojamientos_agrupados_caracteristicas['banno_independiente'], } context.update(custom_context(request)) return render(request, 'website/buscar_alojamientos_por_habitacion.html', context)
def index(request): if request.method == 'POST': if 'flight' in request.POST: pass # Esta variante estáprogramada en la vista "website/search" a donde se llega con la información del formulario a través del "action" del mismo elif 'habitaciones' in request.POST: destino = request.POST['destino_habitacion'] lugar = None if 'Destino' in destino: lugar = destino.split(' (Destino)')[0] elif 'Provincia' in destino: lugar = destino.split(' (Provincia)')[0] elif 'Municipio' in destino: lugar = destino.split(' (Municipio)')[0] else: print('Escenario no previsto hasta ahora') # Ahora obtengo las fechas del Formulario y la cantidad de huéspedes fecha_desde = request.POST['start'] fecha_hasta = request.POST['end'] huespedes = request.POST['huespedes'] # Se almacenan los criterios de búsqueda en la session para recuperarlos luego desde la otra vista request.session['criterio_alojamientos_por_habitacion'] = { 'lugar': lugar, 'fecha_desde': fecha_desde, 'fecha_hasta': fecha_hasta, 'huespedes': huespedes, } # En este punto tengo el lugar en el que deben estar los Alojamientos que muestre al Usuario, las fechas y la cantidad de huéspedes return redirect('website:buscar_alojamientos_por_habitacion') elif 'alojamientos' in request.POST: destino = request.POST['destino_alojamiento'] lugar = None if 'Destino' in destino: lugar = destino.split(' (Destino)')[0] elif 'Provincia' in destino: lugar = destino.split(' (Provincia)')[0] elif 'Municipio' in destino: lugar = destino.split(' (Municipio)')[0] else: print('Escenario no previsto hasta ahora') # Ahora obtengo las fechas del Formulario y la cantidad de huéspedes fecha_desde = request.POST['start'] fecha_hasta = request.POST['end'] huespedes = request.POST['huespedes'] # Se almacenan los criterios de búsqueda en la session para recuperarlos luego desde la otra vista request.session['criterio_alojamientos_completos'] = { 'lugar': lugar, 'fecha_desde': fecha_desde, 'fecha_hasta': fecha_hasta, 'huespedes': huespedes, } # En este punto tengo el lugar en el que deben estar los Alojamientos que muestre al Usuario, las fechas y la cantidad de huéspedes return redirect('website:buscar_alojamientos_completos') else: return redirect('website:index') else: # Se definen las listas vacías para almacenar los elementos que serán mostrados en el index alojamientos_por_habitacion = [] alojamientos_completos = [] # Servicios destacados alojamientos_destacados = [] # Se definen los Alojamientos que pueden ser mostrados alojamientos = Alojamiento.objects.detalles_alojamientos( # Se definen los criterios de filtrado para los Alojamientos que deseamos listar usuarios=Usuario.get_proveedores_validados( ), # Solo Alojamientos de usuarios activos y verificados como proveedores activos=True, # Solo Alojamientos asociados a Servicios Activos )[: 12] # Solo se muestra una cantidad limitada de Alojamientos establecida en la Configuración # Se agrupan los Alojamientos según su tipo de alquiler for alojamiento in alojamientos: if alojamiento.por_habitacion: if alojamiento.cantidad_habitaciones > 0 and alojamiento.fotos: alojamientos_por_habitacion.append(alojamiento) elif alojamiento.fotos: alojamientos_completos.append(alojamiento) # Destacados if alojamiento.servicio.destacado: alojamientos_destacados.append(alojamiento) # De momento se selecciona un Alojamiento destacado al azar if alojamientos_destacados: alojamiento_destacado = alojamientos_destacados[random.randint( 0, len(alojamientos_destacados) - 1)] else: alojamiento_destacado = None # Se hace un bucle luego de la consulta para realizar una sola consulta a la BD # En este punto tenemos listas con los tipos de elementos que deben ser mostrados en el index # Se pasa el listado de Aeropuertos de Cuba, para el selector del buscador de Inicio aeropuertos_cuba = Aeropuerto.objects.filter( cuba=True).order_by('codigo_iata') context = { 'alojamientos_por_habitacion': alojamientos_por_habitacion, 'alojamientos_completos': alojamientos_completos, 'alojamiento_destacado': alojamiento_destacado, # Si hay más de uno, varía cuál se muestra entre una vista y otra 'aeropuertos_cuba': aeropuertos_cuba, 'GMaps_APIKey': GMaps_APIKey, } context.update(custom_context(request)) return render(request, 'website/index.html', context)