Ejemplo n.º 1
0
def facebook_callback(request):
    """
    Una vez el usuario permise o no el acceso a su cuenta de Facebook esta vista revisa si concedio permisos o no
    En caso afirmativo busca a un usuario con ese id de Facebook para crear la sesion, de no existir crea al usuario
    """
    code = None if 'code' not in request.GET else request.GET['code']
    retorno = HttpResponseRedirect('/?error_facebook')
    try:
        if code is not None:
            args = dict(client_id=FACEBOOK["KEY"],
                        redirect_uri=FACEBOOK["CALLBACK"],
                        client_secret=FACEBOOK["SECRET"],
                        code=code)
            response = urlparse.parse_qs(urllib.urlopen("https://graph.facebook.com/oauth/access_token?%s"%urllib.urlencode(args)).read())

            access_token = response["access_token"][-1]

            if access_token is not None:
                fb_user = json.load(urllib.urlopen("https://graph.facebook.com/me?%s"%urllib.urlencode(dict(access_token=access_token))))
                if 'id' in fb_user:
                    try:
                        cliente = Cliente.objects.get(facebook_id=fb_user['id'])
                        cliente.login(request)
                    except Cliente.DoesNotExist:
                        cliente = Cliente(nombre_usuario="%s_fb"%(fb_user['username'] if 'username' in fb_user else fb_user['id']),
                            facebook_id=fb_user['id'],
                            facebook_accesstoken=access_token,
                            facebook_code=code)
                        cliente.save()
                        cliente.login(request)
                        request.session['tipo'] = 'cliente'
                    retorno = HttpResponseRedirect('/app/')
    except:
        pass
    return retorno
Ejemplo n.º 2
0
def resultados(request, rubro_id=None):
    """
    Resultados de la búsqueda de proyectos
    """
    rubro = get_object_or_none(Rubro, id=rubro_id)
    if request.method == "POST":
        form = BusquedaForm(request.POST)
        if form.is_valid():
            resultado = form.save()
            request.session["resultado"] = resultado
    else:
        form = BusquedaForm()
        if "resultado" in request.session:
            resultado = request.session["resultado"]
        else:
            resultado = Proyecto.accepted.all()
        if rubro:
            resultado = resultado.filter(rubro=rubro)

    return direct_response(request, 'proyectos/resultados.html',
                           {'resultado': get_paginated(request, resultado, 3),
                            'resultados_sp': resultado,
                            'form': form,
                            'cliente': Cliente.get_authenticated(request),
                            'rubros': Rubro.objects.all(),
                            'rubro_activo': rubro,
                            'rango_venta': Proyecto.get_rango_precio(u"V"),
                            'rango_renta': Proyecto.get_rango_precio(u"R"),})
Ejemplo n.º 3
0
def perfil_proyecto(request, slug_proyecto):
    """
    Perfil de un proyecto

    Ofertas: 1- se elije aleatoriamente una de las ofertas del proyecto con
                fecha_fin posterior a hoy
             2- se elige aleatoriamente uno de los items(con estado disponible)
                pertenecientes al tipo de item en oferta
             3- si puede realizar los pasos anteriores, pone en blanco 
                la oferta y el item
    """
    proyecto = get_object_or_404(Proyecto, ~Q(estado=u'B'), slug=slug_proyecto)
    etapa_actual, subetapa_actual, avance_actual = proyecto.get_etapa_actual()
    relacionados = Proyecto.accepted.filter(rubro=proyecto.rubro).exclude(
        slug=slug_proyecto)
    if proyecto.latitud:
        CLOSE_CONST = 2
        referencias = Referencia.objects.filter(
            latitud__lte=proyecto.latitud+CLOSE_CONST,
            latitud__gte=proyecto.latitud-CLOSE_CONST,
            longitud__lte=proyecto.longitud+CLOSE_CONST,
            longitud__gte=proyecto.longitud-CLOSE_CONST,
        )
    else:
        referencias = None
    # Ofertas
    try:
        oferta = proyecto.oferta_set.filter(
            fecha_fin__gt=date.today(), fecha_inicio__lte=date.today(),
            item__estado=u'D').order_by('?')[0]
        # random_item_id = oferta.tipo_item.item_set.filter(
        #     estado=u'D').order_by('?')[0].id
        random_item_id = oferta.item.id
    except IndexError:
        oferta = ''
        random_item_id = 0
    #items = Item.objects.filter(plano__proyecto=proyecto)

    return direct_response(
        request, 'proyectos/perfil_proyecto.html',
        {"proyecto": proyecto,
         "caracteristicas": proyecto.caracteristica_set.all(),
         "beneficios": proyecto.beneficio_set.all(),
         "referencias": referencias,
         "items_height": Item.objects.filter(plano__proyecto=proyecto).count()*71,
         "cliente": Cliente.get_authenticated(request),
         "etapa_actual": etapa_actual,
         "subetapa_actual": subetapa_actual,
         "avance_actual": avance_actual,
         "relacionados": relacionados,
         'oferta': oferta,
         'random_item_id': random_item_id})
Ejemplo n.º 4
0
def twitter_callback(request):
    """
    Una vez el usuario permise o no el acceso a su cuenta de Twitter esta vista revisa si concedio permisos o no
    En caso afirmativo busca a un usuario con ese id de Twitter para crear la sesion, de no existir crea al usuario
    """
    retorno = HttpResponseRedirect('/')
    try:
        s = request.session['tw_rt']
        tokens = s.split('::')
        request_token = tokens[0]
        request_secret = tokens[1]

        if 'oauth_token' in request.GET and 'oauth_verifier' in request.GET:
            oauth_verifier = request.GET['oauth_verifier']
            oauth = tweepy.OAuthHandler(TWITTER['KEY'], TWITTER['SECRET'])
            oauth.set_request_token(request_token, request_secret)
            oauth.get_access_token(oauth_verifier)
            api = tweepy.API(oauth)
            tw_user = api.verify_credentials()
            try:
                cliente = Cliente.objects.get(twitter_id=tw_user.id)
                cliente.login(request)
            except Cliente.DoesNotExist:
                accesstoken = oauth.access_token.key
                secret = oauth.access_token.secret
                cliente = Cliente(nombre_usuario="%s_tc"%tw_user.screen_name,
                    twitter_id=tw_user.id,
                    twitter_accesstoken=accesstoken,
                    twitter_secrettoken=secret)
                cliente.save()
                cliente.login(request)
            retorno = HttpResponseRedirect('/app/')
    except:
        retorno = HttpResponseRedirect('/?error_twitter')
    del request.session['tw_rt']
    return retorno
Ejemplo n.º 5
0
def json_registro(request):
    """
    Registra un usuario a traves de la data envíada por ajax, por ejemplo desde
    el login por fb
    """
    if request.method == 'GET':
        if "username" in request.GET and \
           User.objects.filter(username=request.GET["username"]).exists():
            user = authenticate(username=request.GET["username"], password="******")
            data = {"exists": True}
        elif "id" in request.GET and \
            User.objects.filter(username=request.GET["id"]).exists():
            user = authenticate(username=request.GET["id"], password="******")
            data = {"exists": True}
        else:
            if 'username' in request.GET:
                user = User.objects.create_user(request.GET["username"],
                                                request.GET["email"], "fb")
            else:
                if "id" not in request.GET:
                    return json_response({})
                user = User.objects.create_user(request.GET["id"],
                                                request.GET["email"], "fb")
            user.is_active = False
            user.first_name = request.GET["first_name"]
            user.last_name = request.GET["last_name"]
            user.save()
            cliente = Cliente(usuario=user)
            cliente.save()
            data = {"exists": False}
            user = authenticate(username=user.username, password="******")
        login(request, user)

        return json_response(data)
    else:
        return json_response({})
Ejemplo n.º 6
0
def facebook_callback(request):
    """
    Una vez el usuario permise o no el acceso a su cuenta de Facebook esta vista revisa si concedio permisos o no
    En caso afirmativo busca a un usuario con ese id de Facebook para crear la sesion, de no existir crea al usuario
    """
    code = None if 'code' not in request.GET else request.GET['code']
    retorno = HttpResponseRedirect('/?error_facebook')
    try:
        if code is not None:
            args = dict(client_id=FACEBOOK["KEY"],
                        redirect_uri=FACEBOOK["CALLBACK"],
                        client_secret=FACEBOOK["SECRET"],
                        code=code)
            response = urlparse.parse_qs(
                urllib.urlopen(
                    "https://graph.facebook.com/oauth/access_token?%s" %
                    urllib.urlencode(args)).read())

            access_token = response["access_token"][-1]

            if access_token is not None:
                fb_user = json.load(
                    urllib.urlopen(
                        "https://graph.facebook.com/me?%s" %
                        urllib.urlencode(dict(access_token=access_token))))
                if 'id' in fb_user:
                    try:
                        cliente = Cliente.objects.get(
                            facebook_id=fb_user['id'])
                        cliente.login(request)
                    except Cliente.DoesNotExist:
                        cliente = Cliente(nombre_usuario="%s_fb" %
                                          (fb_user['username'] if 'username'
                                           in fb_user else fb_user['id']),
                                          facebook_id=fb_user['id'],
                                          facebook_accesstoken=access_token,
                                          facebook_code=code)
                        cliente.save()
                        cliente.login(request)
                        request.session['tipo'] = 'cliente'
                    retorno = HttpResponseRedirect('/app/')
    except:
        pass
    return retorno
Ejemplo n.º 7
0
def twitter_callback(request):
    """
    Una vez el usuario permise o no el acceso a su cuenta de Twitter esta vista revisa si concedio permisos o no
    En caso afirmativo busca a un usuario con ese id de Twitter para crear la sesion, de no existir crea al usuario
    """
    retorno = HttpResponseRedirect('/')
    try:
        s = request.session['tw_rt']
        tokens = s.split('::')
        request_token = tokens[0]
        request_secret = tokens[1]

        if 'oauth_token' in request.GET and 'oauth_verifier' in request.GET:
            oauth_verifier = request.GET['oauth_verifier']
            oauth = tweepy.OAuthHandler(TWITTER['KEY'], TWITTER['SECRET'])
            oauth.set_request_token(request_token, request_secret)
            oauth.get_access_token(oauth_verifier)
            api = tweepy.API(oauth)
            tw_user = api.verify_credentials()
            try:
                cliente = Cliente.objects.get(twitter_id=tw_user.id)
                cliente.login(request)
            except Cliente.DoesNotExist:
                accesstoken = oauth.access_token.key
                secret = oauth.access_token.secret
                cliente = Cliente(nombre_usuario="%s_tc" % tw_user.screen_name,
                                  twitter_id=tw_user.id,
                                  twitter_accesstoken=accesstoken,
                                  twitter_secrettoken=secret)
                cliente.save()
                cliente.login(request)
            retorno = HttpResponseRedirect('/app/')
    except:
        retorno = HttpResponseRedirect('/?error_twitter')
    del request.session['tw_rt']
    return retorno
Ejemplo n.º 8
0
    def save(self, request, formset_telefonos, formset_areas):
        """
        Guarda al nuevo cliente con sus preferencias y crea un usuario
        ademas envia los mails que correspondan al usuario y a los 
        administradores correspondientes
        """
        # TODO: No está mandando todos los mails, se debe mandar un solo mail al registrrse
        newcli = False
        if request.user.is_authenticated():
            cliente = Cliente.objects.get(usuario=request.user)
        else:
            try:
                cliente = Cliente.objects.get(usuario__username=self.cleaned_data['email'])
            except Cliente.DoesNotExist:
                newcli = True
                usuario = User.objects.create_user(
                    username=self.cleaned_data['email'],
                    email=self.cleaned_data['email'],
                    password="******"
                )
                usuario.first_name = self.cleaned_data['nombre']
                usuario.last_name = self.cleaned_data['apellido']
                usuario.is_active = False
                usuario.save()
                cliente = Cliente(usuario=usuario)
                cliente.save()

        cliente.recibir_email = self.cleaned_data['recibir_email']
        cliente.rastrear_proyectos = self.cleaned_data['rastrear_proyectos']
        for rubro in self.cleaned_data['rubros_interes']:
            cliente.rubros.add(rubro)
        for form_telefono in formset_telefonos.forms:
            telefono = form_telefono.save()
            cliente.set_telefono(telefono)
#        proyectos = []
        for form_area in formset_areas.forms:
            area_interes = form_area.save()
            # proyectos += Proyecto.accepted.filter(
            #     latitud__lte=area_interes.high_latitud,
            #     latitud__gte=area_interes.low_latitud,
            #     longitud__lte=area_interes.high_longitud,
            #     longitud__gte=area_interes.low_longitud,
            # )
            cliente.areas_interes.add(area_interes)
        cliente.save()

        #si es un nuevo cliente envia el mail para confirmar el registro y 
        #envia los mails de bienvenida de cada rubro que selecciono el usuario
        if newcli:
            send_html_mail(settings.DEFAULT_FROM_EMAIL,
                           u"Registro en Quimera Inmobiliaria",
                           "confirmar_registro_contacto.html",
                           {"cliente": cliente,
                            "sitio": Site.objects.get_current(),
                            "STATIC_URL": settings.STATIC_URL,
                            "inmobiliaria":Inmobiliaria.objects.get(id=1)
                            },
                           cliente.usuario.email)

            for rubro in cliente.rubros.all():
                #se envia un correo de bienvenida por rubro
                send_html_mail(settings.DEFAULT_FROM_EMAIL,
                               u"Bienvenido al rubro '%s' de Quimera \
Inmobiliaria" % rubro,
                               "contacto_cliente_rubro.html",
                               {"rubro": rubro,
                                "sitio": Site.objects.get_current(),
                                "STATIC_URL": settings.STATIC_URL,
                                "inmobiliaria":Inmobiliaria.objects.get(id=1)
                                },
                               cliente.usuario.email)

        #mail de mensaje recibido
        send_html_mail(settings.DEFAULT_FROM_EMAIL,
                       u"Mensaje Recibido",
                       "contacto_cliente.html",
                       {"sitio": Site.objects.get_current(),
                        "STATIC_URL": settings.STATIC_URL,
                        "inmobiliaria":Inmobiliaria.objects.get(id=1)
                        },
                       cliente.usuario.email)        
        
        project_message = self.cleaned_data.get("proyecto")
        mensaje = MensajeFormularioContacto(
            cliente = cliente,
            mensaje = self.cleaned_data["mensaje"],
            fecha = datetime.now(),
            proyecto = project_message)
        mensaje.save()

        #se envia un correo a los administradores comerciales del proyecto
        #si no hay admin comerciales asociados al proyecto se envia al
        #DEFAULT_FROM_MAIL
        #si el mensaje no esta asociado a un proyecto se envia un mensaje
        #al DEFAULT_FROM_MAIL
        if project_message:
            queryset = project_message.usuarios.all()
            if queryset:
                for user in queryset:
                    if user.email:
                        send_html_mail( 
                            settings.DEFAULT_FROM_EMAIL,
                            u"%s : Hay un nuevo mensaje!" % project_message,
                            "contacto_admin.html",
                            {"cliente": cliente,
                             "mensaje": self.cleaned_data["mensaje"],
                             "proyecto": project_message,
                             "sitio": Site.objects.get_current(),
                             "STATIC_URL": settings.STATIC_URL,
                             "inmobiliaria":Inmobiliaria.objects.get(id=1)},
                            user.email)
            else:
                send_html_mail( 
                    settings.DEFAULT_FROM_EMAIL,
                    u"%s : Hay un nuevo mensaje!" % project_message,
                    "contacto_admin.html",
                    {"noAdminsAssociated": True,
                     "cliente": cliente,
                     "mensaje": self.cleaned_data["mensaje"],
                     "proyecto": project_message,
                     "sitio": Site.objects.get_current(),
                     "STATIC_URL": settings.STATIC_URL,
                     "inmobiliaria":Inmobiliaria.objects.get(id=1)},
                    settings.DEFAULT_FROM_EMAIL)
        else:
            sitio = Site.objects.get_current()
            send_html_mail( 
                settings.DEFAULT_FROM_EMAIL,
                u"%s : Hay un nuevo mensaje!" % sitio.name,
                "contacto_admin_no_project.html",
                {"cliente": cliente,
                 "mensaje": self.cleaned_data["mensaje"],
                 "sitio": sitio,
                 "STATIC_URL": settings.STATIC_URL,
                 "inmobiliaria":Inmobiliaria.objects.get(id=1)},
                settings.DEFAULT_FROM_EMAIL)