Esempio n. 1
0
def verificar_movil(request, usuario_id):
    usuario = Usuario.objects.detalles_usuario(usuario=Usuario.objects.get(
        id=usuario_id))

    # Lo primero es validar que el usuario pueda continuar haciendo solicitudes de verificación de móvil
    n_solicitud_verificacion = Solicitud_Verificacion.nueva_solicitud_verificacion(
        usuario=usuario,
        movil=usuario.movil,
    )
    if isinstance(n_solicitud_verificacion, dict):
        message = n_solicitud_verificacion['message']
        class_alert = 'alert alert-danger'
        context = {
            'usuario': usuario,
            'message': message,
            'class_alert': class_alert,
        }
        context.update(custom_context(request))
        return render(request, 'usuarios/centro_verificacion_datos.html',
                      context)

    # Llegados a este punto, se genera un nuevo Código de verificación para el usuario
    codigo_verificacion = Codigo_Verificacion.generar_codigo_verificacion_twilio(
    )
    usefull = False
    n_codigo_verificacion = None
    while not usefull:
        n_codigo_verificacion = Codigo_Verificacion.nuevo_codigo_verificacion(
            usuario=usuario,
            codigo=codigo_verificacion,
        )
        if not isinstance(n_codigo_verificacion, dict):
            usefull = True

    # Una vez obtenido el código de verificación y relacionado con el usuario, se envía el SMS
    twilio_client = Twilio_Client.objects.get(en_uso=True)

    twilio_client.send_sms(
        to=usuario.complete_movil,
        message='El código para verificar tu móvil en Ontraveline es: %s' %
        (n_codigo_verificacion.codigo))

    context = {
        'usuario':
        usuario,
        'message':
        'Hemos enviado un SMS con código de confirmación al %s, por favor, introdúzcalo a continuación para que podamos verificar su móvil'
        % (usuario.complete_movil),
        'class_alert':
        'alert alert-success',
    }

    context.update(custom_context(request))
    return redirect('usuarios:centro_verificacion_datos')
Esempio n. 2
0
def forgot_password(request):
    if request.method == 'POST':
        form = Forgot_Password_Form(request.POST)
        if form.is_valid():
            email = form.cleaned_data['email']
            recovery_password = Usuario.recovery_password(
                email, host=request.get_host())
            if isinstance(recovery_password, dict):
                message = recovery_password['message']
                class_alert = 'alert alert-danger'
            else:
                form = Forgot_Password_Form()
                message = 'Hemos enviado un E-Mail a la dirección indicada con las instrucciones que debes seguir para recuperar tu contraseña'
                class_alert = 'alert alert-info'
        else:
            message = 'Hay errores en el Formulario'
            class_alert = 'alert alert-danger'

    else:
        form = Forgot_Password_Form()
        message = None
        class_alert = None

    context = {
        'form': form,
        'message': message,
        'class_alert': class_alert,
    }
    context.update(custom_context(request))
    return render(request, 'usuarios/forgot_password.html', context)
Esempio n. 3
0
def galeria_blog(request):
    galeria = Galeria_Blog.objects.get(en_uso = True)
    context = {
        'galeria': galeria,
    }
    context.update(custom_context(request))
    return render(request, 'blog/galeria.html', context)
Esempio n. 4
0
def ofreces_servicios(request):
    testimonios = Testimonio.objects.filter(mostrar=True,
                                            usuario__proveedor=True)[:3]
    context = {
        'testimonios': testimonios,
    }
    context.update(custom_context(request))
    return render(request, 'website/ofreces_servicios.html', context)
Esempio n. 5
0
def documentos_verificacion_actividad(request, usuario_id):
    usuario = Usuario.objects.get(id=usuario_id)
    documentos_actividad = usuario.foto_licencia_actividad_set.all()
    context = {
        'usuario': usuario,
        'documentos_actividad': documentos_actividad,
    }
    context.update(custom_context(request))
    return render(request, 'usuarios/documentos_verificacion_actividad.html',
                  context)
Esempio n. 6
0
def como_funciona(request):
    testimonios = Testimonio.objects.filter(mostrar=True,
                                            usuario__proveedor=False)[:3]
    # alojamientos_populares = Alojamiento.objects.detalles_alojamientos()[:4]
    context = {
        'testimonios': testimonios,
        # 'alojamientos_populares': alojamientos_populares,
    }

    context.update(custom_context(request))
    return render(request, 'website/como_funciona.html', context)
Esempio n. 7
0
def pdf_reserva_alojamiento_completo(request, reserva_id):
    reserva = Reserva.objects.detalles_reserva(id=reserva_id)
    alojamiento = Alojamiento.objects.detalles_alojamiento(
        id_alojamiento=reserva.servicio.alojamiento.id)

    context = {
        'alojamiento': alojamiento,
        'reserva': reserva,
    }

    context.update(custom_context(request))
    return render(request,
                  'emails/plantillas/reserva_alojamiento_completo.html',
                  context)
Esempio n. 8
0
def pdf_reserva_alojamiento_por_habitacion(request, reserva_id):
    reserva = Reserva.objects.detalles_reserva(id=reserva_id)
    alojamiento = Alojamiento.objects.detalles_alojamiento(
        id_alojamiento=reserva.servicio.alojamiento.id)

    context = {
        'alojamiento': alojamiento,
        'reserva': reserva,
        'reservas_habitaciones': reserva.reserva_habitacion_set.all(),
    }

    context.update(custom_context(request))
    return render(request,
                  'emails/plantillas/reserva_alojamiento_por_habitacion.html',
                  context)
Esempio n. 9
0
def datos_prueba(request):
    # Todos los usuarios registrados en el sistema (Se obtiene más información con el Object Manager)
    usuarios = Usuario.objects.detalles_usuarios()

    # Objeto Usuario del Administrador que está accediendo a la vista. Se utilizará para comparar con los demás usuarios en el template
    # y así poder diferenciar algunos comportamientos y opciones disponibles
    myself = Usuario.objects.get(user__id=request.user.id)

    context = {
        'usuarios': usuarios,
        'myself': myself,
    }

    context.update(custom_context(request))
    return render(request, 'administracion/datos_prueba.html', context)
Esempio n. 10
0
def destino(request, destino_id):
    # Se identifica el destino que se ha seleccionado por el usuario
    destino = Destino.objects.get(id=destino_id)

    # Se obtiene un alista de Destinos Populares
    destinos_populares = Destino.get_destinos_populares()[:4]

    # Se obtiene una lista de alojamientos cerca del destino
    alojamientos_cercanos = destino.get_alojamientos_cercanos()[:4]

    context = {
        'destino': destino,
        'destinos_populares': destinos_populares,
        'alojamientos_cercanos': alojamientos_cercanos,
    }

    context.update(custom_context(request))
    return render(request, 'website/destino.html', context)
Esempio n. 11
0
def search(request, elemento):
    if request.method == 'POST':
        if 'flight' in request.POST:
            aeropuerto_salida = request.POST['aeropuerto_salida'].split(' ')[0]
            aeropuerto_cuba = Aeropuerto.objects.get(
                id=request.POST['aeropuerto_cuba']).codigo_iata

            fecha_ida = request.POST['start'].split('-')
            fecha_ida = '%s/%s/%s' % (fecha_ida[2], fecha_ida[1], fecha_ida[0])

            fecha_regreso = request.POST['end'].split('-')
            fecha_regreso = '%s/%s/%s' % (fecha_regreso[2], fecha_regreso[1],
                                          fecha_regreso[0])

            adultos = request.POST['adultos']
            ninnos = request.POST['ninnos']
            bebes = request.POST['bebes']

            onlinetravel_url = 'http://booking.ontraveline.com/air/index.php?goal=direct_search&action=listAvailableAirports&search=true' \
                               '&airsearchhtmlformview_incluir_vuelos=true&airsearchhtmlformview_lowcost=true' \
                               '&airsearchhtmlformview_vuelos_regulares=true&language_code=es&airsearchhtmlformview_flight_type=roundtrip' \
                               '&s_0_airsearchhtmlformview_airsearchflighthtmlformview_from=%s' \
                               '&s_0_airsearchhtmlformview_airsearchflighthtmlformview_to=%s' \
                               '&s_0_airsearchhtmlformview_airsearchflighthtmlformview_depart_date=%s' \
                               '&s_1_airsearchhtmlformview_airsearchflighthtmlformview_depart_date=%s' \
                               '&airsearchhtmlformview_adults=%s' \
                               '&airsearchhtmlformview_children=%s' \
                               '&airsearchhtmlformview_babies=%s' \
                               '&airsearchhtmlformview_residente=false' %(aeropuerto_salida, aeropuerto_cuba, fecha_ida, fecha_regreso, adultos, ninnos, bebes)

            request.session['onlinetravel_url'] = onlinetravel_url
            # return redirect('website:search', 'flights')

        else:
            return redirect('website:index')

    else:
        return redirect('website:index')

    if elemento == 'flights':
        context = {'elemento': 'vuelos'}
        context.update(custom_context(request))
        return render(request, 'website/loading.html', context)
Esempio n. 12
0
def contacto(request):
    if request.method == 'POST':
        form = Contacto_Form(request.POST)
        if form.is_valid():
            nombre = form.cleaned_data['nombre']
            email = form.cleaned_data['email']
            message = form.cleaned_data['message']

            n_mensaje = Mensaje_Contacto.nuevo_mensaje_contacto(
                nombre=nombre,
                email=email,
                message=message,
            )

            if n_mensaje:
                context = {
                    'form': Contacto_Form(),
                    'message':
                    'Gracias por ponerse en contacto con nosotros. En breve le responderemos a la dirección de correo que nos ha indicado',
                    'class_alert': 'alert alert-success',
                }
            else:
                context = {
                    'form': Contacto_Form(request.POST),
                    'message':
                    'No ha sido posible procesar su solicitud en este momento, inténtelo más tarde por favor.',
                    'class_alert': 'alert alert-danger',
                }
        else:
            context = {
                'form': Contacto_Form(request.POST),
                'message':
                'Hay errores en el formulario, por favor revise los datos introducidos',
                'class_alert': 'alert alert-danger',
            }
    else:
        context = {
            'form': Contacto_Form(),
        }

    context['GMaps_APIKey'] = GMaps_APIKey
    context.update(custom_context(request))
    return render(request, 'website/contacto.html', context)
Esempio n. 13
0
def reserva_confirmada(request, pago_id):
    # Esta vista procesa la información del pago recibido de Paypal y la muestra en el template
    pago = Pago.objects.get(id=pago_id)
    reserva = Reserva.objects.detalles_reserva(id=pago.reserva.id)
    servicio = reserva.servicio
    if servicio.alojamiento:
        # Se trata de un Alojamiento
        alojamiento = Alojamiento.objects.detalles_alojamiento(
            id_alojamiento=servicio.alojamiento.id)

        context = {
            'pago': pago,
            'reserva': reserva,
            'alojamiento': alojamiento,
        }
        context.update(custom_context(request))

        # Lo próximo es ver si el Alojamiento se alquila completo o por habitaciones
        if servicio.alojamiento.por_habitacion:
            # Si el Alojamiento se alquila por habitaciones, añadimos la información de las reservas de habitaciones
            context[
                'reservas_habitaciones'] = reserva.reserva_habitacion_set.all(
                ),
            # Se llama a una vista preparada para mostrar la confirmación del pago para reservas de Alojamientos por habitación
            return render(
                request,
                'pagos/pago_exitoso_reserva_alojamiento_por_habitacion.html',
                context)
        else:
            # Se llama a una vista preparada para mostrar la confirmación del pago para reservas de Alojamientos completos
            return render(
                request,
                'pagos/pago_exitoso_reserva_alojamiento_completo.html',
                context)
    else:
        # todo: Escenario de reservas de otros servicios que no sean alojamientos
        pass
Esempio n. 14
0
def buscar_destinos(request):
    context = {}
    context.update(custom_context(request))
    return render(request, 'website/buscar_destinos.html', context)
Esempio n. 15
0
def buscar_excursiones(request):
    context = {}
    context.update(custom_context(request))
    return render(request, 'website/buscar_excursiones.html', context)
Esempio n. 16
0
def buscar_alojamientos_completos(request):
    # Por defecto se mostrarán todos los Alojamientos Completos que cumplan con las condiciones de indexado
    # Estas condiciones son: que el servicio se encuentre activo

    # 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_completos' in request.session:
        lugar = request.session['criterio_alojamientos_completos']['lugar']
        fecha_desde = request.session['criterio_alojamientos_completos'][
            'fecha_desde']
        fecha_hasta = request.session['criterio_alojamientos_completos'][
            'fecha_hasta']
        huespedes = request.session['criterio_alojamientos_completos'][
            '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(
        activos=True,
        por_modalidad=True,
        con_habitaciones=True,
        por_habitacion=False,
        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_completos' in request.session:
            del request.session['criterio_alojamientos_completos']
        form = Buscar_Alojamientos_Completos(request.POST)
        if form.is_valid():
            # Se aplican los filtros del Formulario
            alojamientos = Alojamiento.objects.detalles_alojamientos(
                activos=True,
                por_modalidad=True,
                con_habitaciones=True,
                por_habitacion=False,
                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'],
                cantidad_habitaciones=form.
                cleaned_data['cantidad_habitaciones'],
                cocina=form.cleaned_data['cocina'],
                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'],
                lavadora=form.cleaned_data['lavadora'],
            )

            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'],
                'lavadora':
                alojamientos_agrupados_caracteristicas['lavadora'],
                'cocina':
                alojamientos_agrupados_caracteristicas['cocina'],
                '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'],
            }
        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': [],
            }
    else:
        context = {
            'form':
            Buscar_Alojamientos_Completos(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'],
            'lavadora':
            alojamientos_agrupados_caracteristicas['lavadora'],
            'cocina':
            alojamientos_agrupados_caracteristicas['cocina'],
            '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'],
        }
    context.update(custom_context(request))
    return render(request, 'website/buscar_alojamientos_completos.html',
                  context)
Esempio n. 17
0
def politica_de_privacidad_de_datos(request):
    context = {}
    context.update(custom_context(request))
    return render(request, 'website/politica_de_privacidad_de_datos.html',
                  context)
Esempio n. 18
0
def perfil_usuario(request):

    # Se determina el usuario para poder obtener sus servicios asociados
    cstm_context = custom_context(request)
    usuario = cstm_context['usuario']
    fixed_message = None
    message = None
    fixed_class_alert = None
    class_alert = None
    allow_resend_verification_mail = False

    # Si el usuario no ha verificado su email, debe mostrarse de manera permanente un aviso en su perfil
    if not usuario.verificado_email:
        fixed_message = 'Hemos enviado un email de confirmación a la cuenta que nos ha facilitado cuando se registró. Por favor siga las instrucciones en el mismo para verificar su email'
        fixed_class_alert = 'alert alert-info'
        allow_resend_verification_mail = True

    if request.method == 'POST':
        # Variante si se trata del formulario de los datos personales del usuario
        if 'datos_personales' in request.POST:
            datos_usuario_form = Datos_Usuario_Form(request.POST,
                                                    request.FILES)
            if datos_usuario_form.is_valid():

                # Definiendo si el usuario ha subido una foto en el formulario
                if request.FILES:
                    foto = request.FILES['foto']
                else:
                    foto = None

                m_usuario = usuario.modificar_usuario(
                    nombre=datos_usuario_form.cleaned_data['nombre'],
                    apellidos=datos_usuario_form.cleaned_data['apellidos'],
                    email=datos_usuario_form.cleaned_data['email'],
                    movil=datos_usuario_form.cleaned_data['movil'],
                    pais=datos_usuario_form.cleaned_data['pais'],
                    direccion=datos_usuario_form.cleaned_data['direccion'],
                    provincia=datos_usuario_form.cleaned_data['provincia'],
                    ciudad=datos_usuario_form.cleaned_data['ciudad'],
                    codigo_postal=datos_usuario_form.
                    cleaned_data['codigo_postal'],
                    proveedor=datos_usuario_form.cleaned_data['proveedor'],
                    foto=foto,
                )
                context = {
                    'datos_usuario_form':
                    Datos_Usuario_Form(request.POST, request.FILES),
                    'password_form':
                    Cambiar_Password_Form(),
                    'message':
                    'Se han modificado correctamente sus datos del perfil',
                    'class_alert':
                    'alert alert-success',
                    'usuario':
                    usuario,
                    'fixed_message':
                    fixed_message,
                    'fixed_class_alert':
                    fixed_class_alert,
                    'allow_resend_verification_mail':
                    allow_resend_verification_mail,
                }
            else:
                context = {
                    'datos_usuario_form':
                    Datos_Usuario_Form(request.POST, request.FILES),
                    'password_form':
                    Cambiar_Password_Form(),
                    'message':
                    'Hay errores en el Formulario',
                    'class_alert':
                    'alert alert-danger',
                    'usuario':
                    usuario,
                    'fixed_message':
                    fixed_message,
                    'fixed_class_alert':
                    fixed_class_alert,
                    'allow_resend_verification_mail':
                    allow_resend_verification_mail,
                }
        # Variante si se trata del formulari para cambiar la contraseña del usuario
        elif 'contraseña' in request.POST:
            # Se definen los datos que se mostrarán siempre en el formulario superior
            datos_usuario = usuario.get_datos()
            password_form = Cambiar_Password_Form(request.POST)
            if password_form.is_valid():
                # Se extraen los datos introducidos por el usuario
                new_password = password_form.cleaned_data['new_password']
                new_password_2 = password_form.cleaned_data['new_password_2']
                old_password = password_form.cleaned_data['old_password']

                # La primera comprobación es que el password actual introducido sea el correcto
                if usuario.user.check_password(old_password):
                    # Si se supera esta prueba lo próximo es comprobar que los dos passwords nuevos coincidan
                    if new_password == new_password_2:
                        # Si son iguales entonces se procede a realizar el cambio de contraseña
                        usuario.user.set_password(new_password)
                        usuario.user.save()

                        # Autenticando al usuario de nuevo tras el cambio de password, para que no tenga que volver a iniciar su sesion
                        user = authenticate(username=datos_usuario['usuario'],
                                            password=new_password)
                        login(request, user)

                        context = {
                            'datos_usuario_form':
                            Datos_Usuario_Form(datos_usuario),
                            'password_form':
                            Cambiar_Password_Form(),
                            'message':
                            'Se ha cambiado correctamente su contraseña',
                            'class_alert':
                            'alert alert-success',
                            'usuario':
                            usuario,
                            'fixed_message':
                            fixed_message,
                            'fixed_class_alert':
                            fixed_class_alert,
                            'allow_resend_verification_mail':
                            allow_resend_verification_mail,
                        }
                    else:
                        context = {
                            'datos_usuario_form':
                            Datos_Usuario_Form(datos_usuario),
                            'password_form':
                            Cambiar_Password_Form(),
                            'message':
                            'Las dos nuevas contraseñas introducidas no coinciden',
                            'class_alert':
                            'alert alert-danger',
                            'usuario':
                            usuario,
                            'fixed_message':
                            fixed_message,
                            'fixed_class_alert':
                            fixed_class_alert,
                            'allow_resend_verification_mail':
                            allow_resend_verification_mail,
                        }
                else:
                    context = {
                        'datos_usuario_form':
                        Datos_Usuario_Form(datos_usuario),
                        'password_form':
                        Cambiar_Password_Form(),
                        'message':
                        'Su contraseña Actual y la introducida no coinciden',
                        'class_alert':
                        'alert alert-danger',
                        'usuario':
                        usuario,
                        'fixed_message':
                        fixed_message,
                        'fixed_class_alert':
                        fixed_class_alert,
                        'allow_resend_verification_mail':
                        allow_resend_verification_mail,
                    }
            else:
                context = {
                    'datos_usuario_form':
                    Datos_Usuario_Form(datos_usuario),
                    'password_form':
                    Cambiar_Password_Form(),
                    'message':
                    'Hay valores incorrectos en el formulario',
                    'class_alert':
                    'alert alert-danger',
                    'usuario':
                    usuario,
                    'fixed_message':
                    fixed_message,
                    'fixed_class_alert':
                    fixed_class_alert,
                    'allow_resend_verification_mail':
                    allow_resend_verification_mail,
                }
        else:
            context = {
                'datos_usuario_form': Datos_Usuario_Form(usuario.get_datos()),
                'password_form': Cambiar_Password_Form(),
                'message':
                'Ha habido un error al leer el origen de la petición POST por generada',
                'class_alert': 'alert alert-danger',
                'usuario': usuario,
                'fixed_message': fixed_message,
                'fixed_class_alert': fixed_class_alert,
                'allow_resend_verification_mail':
                allow_resend_verification_mail,
            }
    else:
        # Se obtiene un diccionario con los datos del usuario para rellenar el Formulario
        datos_usuario_form = Datos_Usuario_Form(usuario.get_datos())
        context = {
            'datos_usuario_form': datos_usuario_form,
            'password_form': Cambiar_Password_Form(),
            'message': message,
            'class_alert': class_alert,
            'usuario': usuario,
            'fixed_message': fixed_message,
            'fixed_class_alert': fixed_class_alert,
            'allow_resend_verification_mail': allow_resend_verification_mail,
        }

    context.update(custom_context(request))
    return render(request, 'usuarios/perfil_usuario.html', context)
Esempio n. 19
0
def transaccion_error(request):
    context = {}

    context.update(custom_context(request))
    return render(request, 'pagos/pago_erroneo.html', context)
Esempio n. 20
0
def login_view(request):
    if request.user.is_authenticated():
        return redirect('website:index')

    if request.method == 'POST':
        # Caso en que el POST venga del formulario de Login de usuario
        if 'login' in request.POST:  # Esto debe aparecer en el name del submit
            login_form = Login_Form(request.POST)
            register_form = Registro_Usuario()
            if login_form.is_valid():
                username = login_form.cleaned_data['username']
                password = login_form.cleaned_data['password']

                # Comprueba que existe un usuario con ese username o con ese email
                if User.objects.filter(username=username):
                    user = authenticate(username=username, password=password)
                elif User.objects.filter(email=username):
                    usuario = User.objects.get(email=username)
                    user = authenticate(username=usuario.username,
                                        password=password)
                else:
                    # Si no existe ningún usuario registrado con un username o un email igual al valor pasado por el usuario, user = None
                    user = None

                # Realiza las acciones correspondientes si se ha encontrado un usuario con las credenciales adquiridas
                if user:
                    # Comprueba que el usuario no está desactivado
                    if user.is_active:
                        # Realiza el login del usuario
                        login(request, user)
                        # Redirecciona a la página que se desee
                        return redirect('/index/')
                    else:
                        class_alert = 'alert alert-danger'
                        message = 'Este usuario se encuentra inactivo'
                        login_form = Login_Form(request.POST)
                else:
                    class_alert = 'alert alert-danger'
                    message = 'El usuario o password introducido es incorrecto'
                    login_form = Login_Form(request.POST)
            else:
                class_alert = 'alert alert-danger'
                message = 'Hay errores en el formulario'
                login_form = Login_Form(request.POST)

        # Caso en que el POST venga del formulario de Registro de nuevo usuario
        elif 'register' in request.POST:  # Esto debe aparecer en el name del submit
            register_form = Registro_Usuario(request.POST)
            login_form = Login_Form()
            if register_form.is_valid():
                username = register_form.cleaned_data['username']
                email = register_form.cleaned_data['email']
                password = register_form.cleaned_data['password']
                password2 = register_form.cleaned_data['password2']

                # Comprueba que el username no exista en la BD
                if register_form.check_username(username):
                    # Comprueba que el email no exista en la BD
                    if register_form.check_email(email):
                        # Comprueba que los dos passwords introducidos coinciden
                        if register_form.check_password(password, password2):
                            # Crea el nuevo usuario
                            user_model = User.objects.create(
                                username=username,
                                email=email,
                            )

                            # Se le asigna el password
                            user_model.set_password(password)
                            user_model.save()

                            # Intentamos determinar el País a partir de la IP para añadir el dato en la creación del Usuario
                            pais, provincia = None, None
                            if 'user_data' in request.session:
                                user_data = request.session['user_data']
                                if 'country_code' in user_data:
                                    country_code = user_data['country_code']
                                    if Pais.objects.filter(
                                            codigo_iso_alfa2__exact=country_code
                                    ):
                                        pais = Pais.objects.get(
                                            codigo_iso_alfa2=country_code)
                                    else:
                                        pais = None
                                if 'region_name' in user_data:
                                    provincia_name = user_data['region_name']
                                    provincia = Provincia.get_provincia_from_name(
                                        provincia_name)

                            # Crea el objeto Usuario asociado al Usuario creado.
                            n_usuario = Usuario.nuevo_usuario(
                                user=user_model,
                                raw_password=password,
                                pais=pais,
                                provincia=provincia,
                            )

                            # Se envía el email con el link de Activación del Usuario
                            # 1 - Se crea el Email de Registro de Usuario
                            Email.enviar_correo_registro_usuario(
                                n_usuario, request.get_host())

                            # Se define el mensaje a mostrar en la página
                            # TODO: Definir mensaje a mostrar en el Index que indique al usuario que se ha creado la cuenta y que se ha enviado un mail para su validación

                            # Realiza el login del usuario
                            # login(request, user_model)

                            # Se definen los parámetros a pasar en el template
                            context = {
                                'login_form': Login_Form(),
                                'register_form': Registro_Usuario(),
                            }

                            # Se añade el mensaje de acción exitosa
                            context['class_alert'] = 'alert alert-success'
                            context[
                                'message'] = 'Hemos enviado un email con un enlcace de confirmación a la dirección que nos ha indicado. Por favor, siga las instrucciones para poder validar su cuenta'

                            # Se renderiza el template con la información correspondiente
                            context.update(custom_context(request))
                            return render(request, 'usuarios/login.html',
                                          context)

                        else:
                            class_alert = 'alert alert-danger'
                            message = 'Las contraseñas no coinciden'
                            register_form = Registro_Usuario(request.POST)
                    else:
                        class_alert = 'alert alert-danger'
                        message = 'Ya existe un usuario registrado con este E-Mail'
                        register_form = Registro_Usuario(request.POST)
                else:
                    class_alert = 'alert alert-danger'
                    message = 'Ya existe un usuario registrado con este username(%s)' % (
                        username)
                    register_form = Registro_Usuario(request.POST)
            else:
                class_alert = 'alert alert-danger'
                message = 'El formulario de registro contiene errores'
                register_form = Registro_Usuario(request.POST)

        else:
            print(
                'Se ha recibido un POST que no viene ni de Login ni de Registro'
            )
            class_alert = None
            message = None
            login_form = Login_Form()
            register_form = Registro_Usuario()
    else:
        class_alert = None
        message = None
        login_form = Login_Form()
        register_form = Registro_Usuario()

    # Se definen los parámetros a pasar en el template
    context = {
        'login_form': login_form,
        'register_form': register_form,
    }

    # Se añade un mensaje si es necesario
    if class_alert and message:
        context['class_alert'] = class_alert
        context['message'] = message

    # Se renderiza el template con la información correspondiente
    context.update(custom_context(request))
    return render(request, 'usuarios/login.html', context)
Esempio n. 21
0
def sobre_nosotros(request):
    context = {}
    context.update(custom_context(request))
    return render(request, 'website/sobre_nosotros.html', context)
Esempio n. 22
0
def servicios(request):
    context = {}
    context.update(custom_context(request))
    return render(request, 'website/servicios.html', context)
Esempio n. 23
0
def blog(request, categoria_id = None, post_id = None):

    posts = Post.objects.order_by('fecha_post')
    post, categoria = None, None

    # Validamos el escenario de búsqueda a través del buscador del blog
    if request.method == 'POST':
        form = Blog_Form(request.POST)
        if form.is_valid():
            # Obtenemos el criterio de búsqueda del usuario
            buscar = form.cleaned_data['search']

            # Obtenemos una de los Posts que responden al criterio de búsqueda
            posts = Post.objects.filter(titulo__contains = buscar)

    else:
        form = Blog_Form()
        if post_id:
            posts = posts.filter(id = post_id)
            post = posts[0]
        if categoria_id:
            categoria = Categoria.objects.get(id = categoria_id)
            p = []
            for i in posts:
                if categoria in i.categorias.all():
                    p.append(i)
            posts = p

    # Categorías
    categorias = Categoria.objects.order_by('nombre')

    # Posts populares
    posts_populares = Post.get_posts_populares(cantidad = 4)

    # Últimos comentarios
    ultimos_comentarios = Comentario_Post.get_ultimos_comentarios(cantidad = 4)

    # Meses para otras publicaciones
    today = datetime.date.today()
    month = today.month
    year = today.year
    fechas_otras_publicaciones = []
    for i in range(10):
        if month > 1:
            month -= 1
        else:
            year -= 1
            month = 12
        if Post.get_posts_mes(year, month):
            fechas_otras_publicaciones.append([year, month])

    # Galería del Blog
    if Galeria_Blog.objects.filter(en_uso = True):
        galeria_blog = Galeria_Blog.objects.get(en_uso = True)
    else:
        galeria_blog = []

    context = {
        'posts': posts,
        'categorias': categorias,
        'posts_populares': posts_populares,
        'ultimos_comentarios': ultimos_comentarios,
        'fechas_otras_publicaciones': fechas_otras_publicaciones,
        'galeria_blog': galeria_blog,
        'post_': post,
        'categoria_': categoria,
        'form': form,
    }
    context.update(custom_context(request))
    return render(request, 'blog/index.html', context)
Esempio n. 24
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)
Esempio n. 25
0
def recovery_password(request, code):
    codigo_recovery_password = Codigo_Recovery_Password.objects.filter(
        codigo=code)
    if codigo_recovery_password:
        codigo_recovery_password = Codigo_Recovery_Password.objects.get(
            codigo=code)
        if request.method == 'POST':
            form = Recovery_Password_Form(request.POST)
            if form.is_valid():
                new_password = form.cleaned_data['new_password']
                new_password_2 = form.cleaned_data['new_password_2']
                if new_password == new_password_2:
                    # Si las dos contraseñas indicadas por el usuario coinciden se realiza el cambio de contraseña
                    codigo_recovery_password.usuario.change_password(
                        new_password)

                    # Se actualiza el Código para que no pueda volver a ser reutilizado
                    codigo_recovery_password.valido = False
                    codigo_recovery_password.save()

                    message = 'Se ha modificado correctamente su Contraseña'
                    class_alert = 'alert alert-success'
                    form = Recovery_Password_Form()

                else:
                    message = 'Las contraseñas deben coincidir. Por favor inténtelo de nuevo'
                    class_alert = 'alert alert-danger'
                    form = Recovery_Password_Form()

            else:
                message = 'Hay errores en el formulario'
                class_alert = 'alert alert-danger'
                form = Recovery_Password_Form(request.POST)

            context = {
                'form': form,
                'message': message,
                'class_alert': class_alert,
            }

        else:
            form = Recovery_Password_Form()
            context = {
                'form': form,
                'message': None,
                'class_alert': None,
            }

        context.update(custom_context(request))
        return render(request, 'usuarios/recovery_password.html', context)

    else:
        message = 'Ups! parece que el link que has seguido ya no es válido. Por favor, vuelve a solicitar un enlace para recuperar tu contraseña en la página de Ingreso'
        context = {
            'message': message,
            'class_alert': 'alert alert-danger',
        }

        context.update(custom_context(request))
        return render(request, 'usuarios/error_recovery_password.html',
                      context)
Esempio n. 26
0
def blog(request):

    context = {}
    context.update(custom_context(request))
    return render(request, 'website/blog.html', context)
Esempio n. 27
0
def pruebas_html(request):
    context = {}

    context.update(custom_context(request))
    return render(request, 'website/pruebas_html.html', context)
Esempio n. 28
0
def terminos_de_uso(request):
    context = {}
    context.update(custom_context(request))
    return render(request, 'website/terminos_de_uso.html', context)
Esempio n. 29
0
def condiciones_legales(request):
    context = {}
    context.update(custom_context(request))
    return render(request, 'website/condiciones_legales.html', context)
Esempio n. 30
0
def centro_verificacion_datos(request):
    # Definición del usuario y de los formularios para los posibles escenarios de Validación previstos
    usuario = Usuario.objects.detalles_usuario(usuario=Usuario.objects.get(
        user=request.user))
    form_movil = Verificar_Movil()
    form_identidad = Verificar_Identidad()
    form_actividad = Verificar_Actividad()

    # Conectores a redes sociales
    twitter_conector = usuario.get_conector_twitter()

    if request.method == 'POST':
        # Escenario de Verificación del número móvil del usuario
        if 'verificar_movil' in request.POST:
            form_movil = Verificar_Movil(request.POST)
            if form_movil.is_valid():
                codigo_verificacion = form_movil.cleaned_data[
                    'codigo_verificacion']
                if Codigo_Verificacion.validate_codigo_usuario(
                        codigo_verificacion, usuario):
                    usuario.verificar_movil()
                    message = 'Se ha verificado correctamente el móvil %s %s' % (
                        usuario.pais.prefijo_movil, usuario.movil)
                    class_alert = 'alert alert-success'
                else:
                    message = 'El código es incorrecto, vuelve a intentarlo nuevamente'
                    class_alert = 'alert alert-danger'
            else:
                message = 'Hay errores en el formulario'
                class_alert = 'alert alert-danger'

        # Escenario de Verificación de Documentos de Permiso de Actividad del Proveedor
        elif 'verificar_actividad' in request.POST:
            form_actividad = Verificar_Actividad(request.POST)
            if form_actividad.is_valid():
                # Definiendo si el usuario ha subido una foto en el formulario
                if request.FILES:
                    foto = request.FILES['foto']
                    n_foto_licencia_actividad = Foto_Licencia_Actividad.nueva_foto_licencia_actividad(
                        foto=foto,
                        usuario=usuario,
                    )
                    message = 'Se ha enviado correctamente el documento para su revisión. Por favor, deje pasar hasta 48 horas para su validación'
                    class_alert = 'alert alert-success'
                else:
                    message = 'Debe seleccionar un Documento primero para poder enviarlo'
                    class_alert = 'alert alert-danger'
            else:
                message = 'Hay errores en el Formulario'
                class_alert = 'alert alert-danger'
        else:
            message = None
            class_alert = None
    else:
        message = None
        class_alert = None

    context = {
        'usuario': usuario,
        'form_movil': form_movil,
        'form_identidad': form_identidad,
        'form_actividad': form_actividad,
        'message': message,
        'class_alert': class_alert,
        'confirmaciones_agotadas': usuario.
        confirmaciones_agotadas,  # Determina si el usuario puede seguir solicitando confirmar su móvil
    }

    context.update(custom_context(request))
    return render(request, 'usuarios/centro_verificacion_datos.html', context)