Skip to content

Commit

Permalink
login de candidatos al reves
Browse files Browse the repository at this point in the history
  • Loading branch information
lfalvarez committed Aug 2, 2018
1 parent cba3a11 commit 4c84342
Show file tree
Hide file tree
Showing 20 changed files with 435 additions and 108 deletions.
10 changes: 0 additions & 10 deletions merepresenta/candidates_backend/urls.py

This file was deleted.

Empty file.
File renamed without changes.
27 changes: 27 additions & 0 deletions merepresenta/candidatos/forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# coding=utf-8
from django import forms
from backend_candidate.models import Candidacy
from merepresenta.models import Candidate


class CPFAndDdnForm(forms.Form):
cpf = forms.CharField(required=True)
nascimento = forms.DateField(required=True, input_formats=['%d/%m/%Y','%d/%m/%y', '%d-%m-%Y', '%d-%m-%y',])

def __init__(self, *args, **kwargs):
self.user = kwargs.pop('user')
super(CPFAndDdnForm, self).__init__(*args, **kwargs)

def clean(self):
cpf = self.cleaned_data['cpf']
ddn = self.cleaned_data.get('nascimento', None)
if ddn is None:
raise forms.ValidationError(u'Não encontramos o candidato')
try:
self.candidate = Candidate.objects.get(cpf=cpf, data_de_nascimento=ddn)
except Candidate.DoesNotExist:
raise forms.ValidationError(u'Não encontramos o candidato')
return self.cleaned_data

def save(self):
return Candidacy.objects.create(user=self.user, candidate=self.candidate)
23 changes: 23 additions & 0 deletions merepresenta/candidatos/strategy.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from social_django.strategy import DjangoStrategy
from django.shortcuts import resolve_url
from django.contrib.auth import authenticate


class CandidateStrategy(DjangoStrategy):

def get_setting(self, name):
if name in ['NEW_USER_REDIRECT_URL', 'LOGIN_REDIRECT_URL', 'SOCIAL_AUTH_FACEBOOK_LOGIN_REDIRECT_URL']:
return resolve_url('cpf_and_date')
return super(CandidateStrategy, self).get_setting(name)

def create_user(self, *args, **kwargs):
user = super(CandidateStrategy, self).create_user(*args, **kwargs)
return user

def authenticate(self, backend, *args, **kwargs):
kwargs['strategy'] = self
kwargs['storage'] = self.storage
kwargs['backend'] = backend
if 'request' in kwargs:
kwargs.pop('request')
return authenticate(*args, **kwargs)
25 changes: 25 additions & 0 deletions merepresenta/candidatos/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@

from django.conf.urls import url, include
from .views import (LoginView,
CPFAndDDNSelectView,
complete,
auth
)


urlpatterns = [
url(r'^login/?$',
LoginView.as_view(),
name='candidate_login'),

url(r'^cpf_e_ddn/?$',
CPFAndDDNSelectView.as_view(),
name='cpf_and_date'),
url(r'^complete/(?P<backend>[^/]+)$',
complete,
name='candidate_social_complete'
),
url(r'^login/(?P<backend>[^/]+)/?$', auth,
name='candidato_social_begin'),

]
80 changes: 80 additions & 0 deletions merepresenta/candidatos/views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
from django.views.generic.edit import FormView
from django.contrib.auth.mixins import LoginRequiredMixin
from django.core.urlresolvers import reverse_lazy
from django.http import HttpResponseNotFound, HttpResponseRedirect
from backend_candidate.models import Candidacy
from .forms import CPFAndDdnForm
from social_core.actions import do_complete, do_auth
from social_django.views import _do_login
from django.views.decorators.cache import never_cache
from django.views.decorators.csrf import csrf_exempt
from social_django.utils import psa, STORAGE, get_strategy
from django.views.generic.base import TemplateView
from backend_candidate.models import is_candidate



class LoginView(TemplateView):
template_name="candidatos/login.html"

def dispatch(self, *args, **kwargs):
if self.request.user.is_authenticated:
url = reverse_lazy('cpf_and_date')
return HttpResponseRedirect(url)
return super(LoginView, self).dispatch(*args, **kwargs)


class CPFAndDDNSelectView(LoginRequiredMixin, FormView):
form_class = CPFAndDdnForm
template_name = 'candidatos/cpf_and_ddn.html'
# login_url = reverse_lazy('')
def dispatch(self, *args, **kwargs):
if not self.request.user.is_authenticated:
return HttpResponseRedirect(reverse_lazy('index'))
if self.request.user.is_staff:
return HttpResponseNotFound()
try:
c = Candidacy.objects.get(user=self.request.user)
election = c.candidate.election
candidate = c.candidate
url = reverse_lazy('backend_candidate:complete_profile', kwargs={'slug': election.slug, 'candidate_slug': candidate.slug})
return HttpResponseRedirect(url)
except Candidacy.DoesNotExist:
pass

return super(CPFAndDDNSelectView, self).dispatch(*args, **kwargs)

def get_form_kwargs(self):
original = super(CPFAndDDNSelectView, self).get_form_kwargs()
original['user'] = self.request.user
return original

def form_valid(self, form):
form.save()
return super(CPFAndDDNSelectView, self).form_valid(form)


def get_success_url(self):
c = Candidacy.objects.get(user=self.request.user)
election = c.candidate.election
candidate = c.candidate
url = reverse_lazy('backend_candidate:complete_profile', kwargs={'slug': election.slug, 'candidate_slug': candidate.slug})
return url



def load_strategy(request=None):
return get_strategy('merepresenta.candidatos.strategy.CandidateStrategy', STORAGE, request)

@never_cache
@csrf_exempt
@psa(load_strategy=load_strategy, redirect_uri='candidate_social_complete')
def complete(request, backend, *args, **kwargs):
return do_complete(request.backend, _do_login, request.user,
redirect_value='next', request=request,
*args, **kwargs)

@never_cache
@psa('candidate_social_complete')
def auth(request, backend):
return do_auth(request.backend)
12 changes: 6 additions & 6 deletions merepresenta/fixtures/merep_mini.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -187,37 +187,37 @@
- fields: {person_ptr: 1, name: Manuel Rojas, elections: [2], extra_info: {}}
model: elections.candidate
pk: 1
- fields: {candidate_ptr: '1'}
- fields: {candidate_ptr: '1', cpf: '1'}
model: merepresenta.candidate
pk: 1
- fields: {person_ptr: 2, name: Alejandro Guillier, elections: [2], extra_info: {}}
model: elections.candidate
pk: 2
- fields: {candidate_ptr: '2'}
- fields: {candidate_ptr: '2', cpf: '2'}
model: merepresenta.candidate
pk: 2
- fields: {person_ptr: 3, name: Pedro Araya, elections: [2], extra_info: {}}
model: elections.candidate
pk: 3
- fields: {candidate_ptr: '3'}
- fields: {candidate_ptr: '3', cpf: '3'}
model: merepresenta.candidate
pk: 3
- fields: {person_ptr: 4, name: Gisela Contreras, elections: [1], extra_info: {}}
model: elections.candidate
pk: 4
- fields: {candidate_ptr: '4'}
- fields: {candidate_ptr: '4', cpf: '4'}
model: merepresenta.candidate
pk: 4
- fields: {person_ptr: 5, name: Carlos Cantero, elections: [1], extra_info: {}}
model: elections.candidate
pk: 5
- fields: {candidate_ptr: '5'}
- fields: {candidate_ptr: '5', cpf: '5'}
model: merepresenta.candidate
pk: 5
- fields: {person_ptr: 6, name: Daniel Guevara, elections: [1], extra_info: {}}
model: elections.candidate
pk: 6
- fields: {candidate_ptr: '6'}
- fields: {candidate_ptr: '6', cpf: '6'}
model: merepresenta.candidate
pk: 6
- fields: {topic: 4, position: 8, person: 1}
Expand Down
20 changes: 20 additions & 0 deletions merepresenta/migrations/0014_auto_20180801_1551.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.9 on 2018-08-01 15:51
from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('merepresenta', '0013_candidate_data_de_nascimento'),
]

operations = [
migrations.AlterField(
model_name='candidate',
name='cpf',
field=models.CharField(max_length=1024, unique=True),
),
]
2 changes: 1 addition & 1 deletion merepresenta/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ def get_queryset(self):


class Candidate(OriginalCandidate):
cpf = models.CharField(max_length=1024, null=True)
cpf = models.CharField(max_length=1024, unique=True)
nome_completo = models.CharField(max_length=1024, null=True)
numero = models.CharField(max_length=1024, null=True)
race = models.CharField(max_length=1024, null=True)
Expand Down
4 changes: 4 additions & 0 deletions merepresenta/templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,13 @@
<link rel="icon" href="http://2016.merepresenta.org.br/assets/4ico.png">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.1/css/all.css" integrity="sha384-O8whS3fhG2OnA5Kas0Y9l3cfpmYjapjI0E4theH4iuMD+pLhbf6JI0jIMfYcK3yZ" crossorigin="anonymous">
<link href="{% sass_src 'merep_sass/main.scss' %}" rel="stylesheet" type="text/css" />

<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/css/bootstrap-datepicker.css" rel='stylesheet' type='text/css'>
<script
src="https://code.jquery.com/jquery-2.2.4.min.js"
integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
crossorigin="anonymous"></script>

{% block extra_head %}
{% endblock extra_head %}

Expand Down Expand Up @@ -56,6 +59,7 @@

<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/js/bootstrap-datepicker.js"></script>
{% block scripts %}
{% endblock scripts %}
<script>
Expand Down
36 changes: 36 additions & 0 deletions merepresenta/templates/candidatos/cpf_and_ddn.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{% extends "base.html" %}
{% load staticfiles %}
{% load i18n %}

{% block title %}- Portada{% endblock title %}

{% block content %}
<div class="content">
{% if form.errors %}
{{form.errors}}
{% endif %}
<form method='POST' action="{% url 'cpf_and_date' %}">
{% csrf_token %}
<div class="form-group">
<label for="cpf-id">Informe seu CPF</label>
<input id='cpf-id' class="form-control" name='cpf' aria-describedby="cpfhelp" placeholder="CPF" required="True">
<small id="cpfhelp" class="form-text text-muted"></small>
</div>
<div class="form-group">
<label for="nascimento-id">Sua data de nascimento</label>
<input id='nascimento-id' class="form-control" name='nascimento' required="True" aria-describedby="helpNascimento" placeholder="Data de nascimento">
<small id="helpNascimento" class="form-text text-muted"></small>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
<script type="text/javascript">
$(function(){
var currentDate = new Date(new Date().getTime() + 24 * 60 * 60 * 1000);
$("#nascimento-id").datepicker({
format: 'dd/mm/yyyy'
});
});

</script>
{% endblock content %}
13 changes: 13 additions & 0 deletions merepresenta/templates/candidatos/login.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{% extends "base.html" %}
{% load staticfiles %}
{% load i18n %}

{% block title %}- Portada{% endblock title %}

{% block content %}
<div class="container">
<a class="btn btn-block btn-facebook" href="{% url 'candidato_social_begin' 'facebook' %}">
<i class="fa fa-facebook"></i> {% trans 'Entra con Facebook' %}
</a>
</div>
{% endblock content %}
10 changes: 8 additions & 2 deletions merepresenta/templates/merepresenta/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,19 @@ <h2 class="title">Ajude seus eleitores <div class="landing-explanation">chegarem
<p>Chegou a hora de contar um pouco mais sobre suas pautas e ajudar eleitores a encontrar candidatos que os representam.</p>
<div class="row">
<div class="col-3">
<a href="{% url 'questions' %}" class="btn btn-gris voluntario">Sou candidata</a>
<a href="{% url 'candidate_login' %}" class="btn btn-gris voluntario">Sou candidata</a>
</div>
<div class="col-3">
<a href="{% url 'questions' %}" class="btn btn-gris voluntario">Sou eleitor</a>
</div>
<div class="col-3">
<a href="{% url 'volunteer_index' %}" class="btn btn-roxo voluntario">{% if user.is_authenticated and user.is_staff %}Portal Voluntario{% else %}>Quero ser voluntário/{% endif %}</a>
<a href="{% url 'volunteer_index' %}" class="btn btn-roxo voluntario">{% if user.is_authenticated %}
{% if user.is_staff %}
Portal Voluntario
{% endif %}
{% else %}
Quero ser voluntário
{% endif %}</a>
</div>
</div>
</div>
Expand Down

0 comments on commit 4c84342

Please sign in to comment.