Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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)