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
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"),})
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})
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
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({})
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
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
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)