Commit b93bd0826e602c134d0b716f475fce55af071be6

Authored by Matheus Lins
2 parents 92de728a 34d6ebe7

Merge branch 'master' into dev

1 from django import forms 1 from django import forms
2 from django.utils.translation import ugettext_lazy as _ 2 from django.utils.translation import ugettext_lazy as _
3 from users.models import User 3 from users.models import User
  4 +from pycpfcnpj import cpfcnpj
  5 +import re
  6 +
  7 +
4 8
5 class RegisterUserForm(forms.ModelForm): 9 class RegisterUserForm(forms.ModelForm):
6 10
7 - password = forms.CharField(label='Senha', widget=forms.PasswordInput)  
8 - password2 = forms.CharField(label = 'Confirmacao de Senha', widget = forms.PasswordInput) 11 + password = forms.CharField(label=_('Password'), widget=forms.PasswordInput)
  12 + password2 = forms.CharField(label = _('Password confirmation'), widget = forms.PasswordInput)
9 # birth_date = forms.DateField(widget=forms.SelectDateWidget()) 13 # birth_date = forms.DateField(widget=forms.SelectDateWidget())
10 MIN_LENGTH = 8 14 MIN_LENGTH = 8
11 15
  16 + def validate_cpf(self, cpf):
  17 + cpf = ''.join(re.findall('\d', str(cpf)))
  18 + # print(cpf)
  19 +
  20 + # if (not cpf) or (len(cpf) < 11):
  21 + # return False
  22 +
  23 + # #Get only the first 9 digits and generate other 2
  24 + # _int = map(int, cpf)
  25 + # integer = list(map(int, cpf))
  26 + # new = integer[:9]
  27 +
  28 + # while len(new) < 11:
  29 + # r = sum([(len(new) + 1 - i)* v for i, v in enumerate(new)]) % 11
  30 +
  31 + # if r > 1:
  32 + # f = 11 - r
  33 + # else:
  34 + # f = 0
  35 + # new.append(f)
  36 +
  37 + # #if generated number is the same(original) the cpf is valid
  38 + # new2 = list(new)
  39 + # if new2 == _int:
  40 + # return cpf
  41 + # else:
  42 + # return False
  43 + if cpfcnpj.validate(cpf):
  44 + return True
  45 + return False
  46 +
12 def clean_email(self): 47 def clean_email(self):
13 email = self.cleaned_data['email'] 48 email = self.cleaned_data['email']
14 if User.objects.filter(email = email).exists(): 49 if User.objects.filter(email = email).exists():
15 raise forms.ValidationError(_('There is already a registered User with this e-mail')) 50 raise forms.ValidationError(_('There is already a registered User with this e-mail'))
16 return email 51 return email
17 52
  53 + def clean_cpf(self):
  54 + cpf = self.cleaned_data['cpf']
  55 + if User.objects.filter(cpf = cpf).exists():
  56 + raise forms.ValidationError(_('There is already a registeres User with this CPF'))
  57 + if not self.validate_cpf(cpf):
  58 + raise forms.ValidationError(_('Please enter a valid CPF'))
  59 + return cpf
  60 +
18 def clean_password(self): 61 def clean_password(self):
19 password = self.cleaned_data.get('password') 62 password = self.cleaned_data.get('password')
20 63
core/static/css/base/amadeus.css
@@ -271,6 +271,14 @@ a.alert_message:hover{color : grey} @@ -271,6 +271,14 @@ a.alert_message:hover{color : grey}
271 display: none; 271 display: none;
272 } 272 }
273 273
  274 +/*Logo register user*/
  275 +#logo{
  276 + max-width: 30%;
  277 + margin-top: 1em;
  278 + margin-bottom: 1em;
  279 +}
  280 +/*====================== ========*/
  281 +
274 .accordion { 282 .accordion {
275 background: #c0c0c0; 283 background: #c0c0c0;
276 } 284 }
core/templates/index.html
@@ -21,30 +21,25 @@ @@ -21,30 +21,25 @@
21 </div> 21 </div>
22 </div> 22 </div>
23 </div> 23 </div>
24 - <div class="row">  
25 - {% for breadcrumb in breadcrumbs %}  
26 - <a href="{{ breadcrumb.url }}">{{ breadcrumb.text }}</a>  
27 - {% endfor %}  
28 - </div>  
29 24
30 <div class="row "> 25 <div class="row ">
31 <div class="col-md-8 col-md-offset-2 col-sm-8 col-sm-offset-2 col-xs-8 col-xs-offset-2 col-lg-8 col-lg-offset-2 col-xl-8 col-xl-offset-2"> 26 <div class="col-md-8 col-md-offset-2 col-sm-8 col-sm-offset-2 col-xs-8 col-xs-offset-2 col-lg-8 col-lg-offset-2 col-xl-8 col-xl-offset-2">
32 - {% if message %}  
33 - <div class="alert alert-danger alert-dismissible" role="alert">  
34 - <button type="button" class="close" data-dismiss="alert" aria-label="Close">  
35 - <span aria-hidden="true">&times;</span>  
36 - </button>  
37 - <ul>  
38 - <li>{{ message }}</li>  
39 - </ul>  
40 - </div>  
41 - {% endif %} 27 + {% if messages %}
  28 + {% for message in messages %}
  29 + <div class="alert alert-{{ message.tags }} alert-dismissible" role="alert">
  30 + <button type="button" class="close" data-dismiss="alert" aria-label="Close">
  31 + <span aria-hidden="true">&times;</span>
  32 + </button>
  33 + <p>{{ message }}</p>
  34 + </div>
  35 + {% endfor %}
  36 + {% endif %}
42 <div class="card"> 37 <div class="card">
43 <div class="card-block"> 38 <div class="card-block">
44 <form id="form-login" class="form-group" method="post" action=""> 39 <form id="form-login" class="form-group" method="post" action="">
45 - {% csrf_token %}  
46 - <div class="form-group is-empty">  
47 - <label for="inputEmail" class="col-md-4 col-xs-4 col-sm-4 col-lg-4 control-label"> {% trans 'Username' %}</label> 40 + {% csrf_token %}
  41 + <div class="form-group is-empty">
  42 + <label for="inputEmail" class="col-md-4 col-xs-4 col-sm-4 col-lg-4 control-label"> {% trans 'Username' %}</label>
48 <div class="col-md-8 col-xs-8 col-lg-8 col-sm-8"> 43 <div class="col-md-8 col-xs-8 col-lg-8 col-sm-8">
49 <input form="form-login" type="text" name="username" class="form-control" id="inputEmail" placeholder="Username" value="{% if username %}{{username}}{% endif %}"> 44 <input form="form-login" type="text" name="username" class="form-control" id="inputEmail" placeholder="Username" value="{% if username %}{{username}}{% endif %}">
50 </div> 45 </div>
core/templates/register_user.html
@@ -44,6 +44,8 @@ @@ -44,6 +44,8 @@
44 </button> 44 </button>
45 </span> 45 </span>
46 </div> 46 </div>
  47 + {% elif field.auto_id == 'id_cpf' %}
  48 + {% render_field field class='form-control' onkeypress='campoNumerico(this,event); formatarCpf(this,event);' %}
47 {% else %} 49 {% else %}
48 {% render_field field class='form-control' %} 50 {% render_field field class='form-control' %}
49 <span id="helpBlock" class="help-block">{{ field.help_text }}</span> 51 <span id="helpBlock" class="help-block">{{ field.help_text }}</span>
@@ -68,7 +70,7 @@ @@ -68,7 +70,7 @@
68 <input type="submit" value="{% trans 'Save' %}" class="btn btn-sm btn-success" /> 70 <input type="submit" value="{% trans 'Save' %}" class="btn btn-sm btn-success" />
69 </div> 71 </div>
70 <div class="col-md-offset-3 col-md-2 col-sm-2 col-xs-2"> 72 <div class="col-md-offset-3 col-md-2 col-sm-2 col-xs-2">
71 - <a href="{% url 'core:home' %}" class="btn btn-sm btn-success" >{% trans 'Register' %}</a> 73 + <a href="{% url 'core:home' %}" class="btn btn-sm btn-success" >{% trans 'Cancel' %}</a>
72 </div> 74 </div>
73 75
74 </form> 76 </form>
@@ -79,4 +81,5 @@ @@ -79,4 +81,5 @@
79 </div> 81 </div>
80 82
81 <br clear="all" /> 83 <br clear="all" />
  84 + <script src="{% static 'js/base/amadeus.js' %}"></script>
82 {% endblock %} 85 {% endblock %}
@@ -80,7 +80,7 @@ def login(request): @@ -80,7 +80,7 @@ def login(request):
80 login_user(request, user) 80 login_user(request, user)
81 return redirect(reverse("app:index")) 81 return redirect(reverse("app:index"))
82 else: 82 else:
83 - context["message"] = _("E-mail or password are incorrect!") 83 + messages.add_message(request, messages.ERROR, _('E-mail or password are incorrect.'))
84 context["username"] = username 84 context["username"] = username
85 elif request.user.is_authenticated: 85 elif request.user.is_authenticated:
86 return redirect(reverse('app:index')) 86 return redirect(reverse('app:index'))
requirements.txt
1 click==6.6 1 click==6.6
  2 +deps==0.1.0
2 Django==1.10 3 Django==1.10
3 -django-autoslug==1.9.3  
4 django-bootstrap-breadcrumbs==0.8 4 django-bootstrap-breadcrumbs==0.8
5 django-discover-runner==1.0 5 django-discover-runner==1.0
6 django-role-permissions==1.2.1 6 django-role-permissions==1.2.1
@@ -10,6 +10,8 @@ itsdangerous==0.24 @@ -10,6 +10,8 @@ itsdangerous==0.24
10 Jinja2==2.8 10 Jinja2==2.8
11 MarkupSafe==0.23 11 MarkupSafe==0.23
12 Pillow==3.3.1 12 Pillow==3.3.1
13 -psycopg2==2.6.2 13 +pkg-resources==0.0.0
  14 +pycpfcnpj==1.0.2
14 six==1.10.0 15 six==1.10.0
  16 +slugify==0.0.1
15 Werkzeug==0.11.11 17 Werkzeug==0.11.11
users/forms.py
@@ -5,6 +5,7 @@ from django import forms @@ -5,6 +5,7 @@ from django import forms
5 from django.utils.translation import ugettext_lazy as _ 5 from django.utils.translation import ugettext_lazy as _
6 from rolepermissions.shortcuts import assign_role 6 from rolepermissions.shortcuts import assign_role
7 from django.contrib.auth.forms import UserCreationForm 7 from django.contrib.auth.forms import UserCreationForm
  8 +from core.forms import RegisterUserForm
8 from .models import User 9 from .models import User
9 10
10 11
@@ -25,26 +26,26 @@ class ProfileForm(forms.ModelForm): @@ -25,26 +26,26 @@ class ProfileForm(forms.ModelForm):
25 'password':forms.PasswordInput 26 'password':forms.PasswordInput
26 } 27 }
27 28
28 -class UserForm(UserCreationForm):  
29 - # def save(self, commit=True):  
30 - # super(UserForm, self).save()  
31 - #  
32 - # #if not self.instance.image:  
33 - # # self.instance.image = os.path.join(os.path.dirname(settings.BASE_DIR), 'uploads', 'no_image.jpg')  
34 - #  
35 - # # self.instance.set_password(self.cleaned_data['password'])  
36 - # # self.instance.save()  
37 - #  
38 - # if self.instance.is_staff:  
39 - # assign_role(self.instance, 'system_admin')  
40 - # elif self.instance.type_profile == 2:  
41 - # assign_role(self.instance, 'student')  
42 - # elif self.instance.type_profile == 1:  
43 - # assign_role(self.instance, 'professor')  
44 - #  
45 - # self.instance.save()  
46 - #  
47 - # return self.instance 29 +class UserForm(RegisterUserForm):
  30 + def save(self, commit=True):
  31 + super(UserForm, self).save()
  32 +
  33 + if not self.instance.image:
  34 + self.instance.image = os.path.join(os.path.dirname(settings.BASE_DIR), 'uploads', 'no_image.jpg')
  35 +
  36 + self.instance.set_password(self.cleaned_data['password1'])
  37 + self.instance.save()
  38 +
  39 + if self.instance.is_staff:
  40 + assign_role(self.instance, 'system_admin')
  41 + elif self.instance.type_profile == 2:
  42 + assign_role(self.instance, 'student')
  43 + elif self.instance.type_profile == 1:
  44 + assign_role(self.instance, 'professor')
  45 +
  46 + self.instance.save()
  47 +
  48 + return self.instance
48 49
49 class Meta: 50 class Meta:
50 model = User 51 model = User
users/templates/list_users.html
@@ -26,7 +26,7 @@ @@ -26,7 +26,7 @@
26 {% block content %} 26 {% block content %}
27 {% if messages %} 27 {% if messages %}
28 {% for message in messages %} 28 {% for message in messages %}
29 - <div class="alert alert-{{ message.tag }} alert-dismissible" role="alert"> 29 + <div class="alert alert-{{ message.tags }} alert-dismissible" role="alert">
30 <button type="button" class="close" data-dismiss="alert" aria-label="Close"> 30 <button type="button" class="close" data-dismiss="alert" aria-label="Close">
31 <span aria-hidden="true">&times;</span> 31 <span aria-hidden="true">&times;</span>
32 </button> 32 </button>
users/templates/users/create.html
@@ -14,10 +14,9 @@ @@ -14,10 +14,9 @@
14 14
15 15
16 {% block content %} 16 {% block content %}
17 - <script src="{% static 'js/base/amadeus.js' %}"></script>  
18 {% if messages %} 17 {% if messages %}
19 {% for message in messages %} 18 {% for message in messages %}
20 - <div class="alert alert-success alert-dismissible" role="alert"> 19 + <div class="alert alert-{{ message.tags }} alert-dismissible" role="alert">
21 <button type="button" class="close" data-dismiss="alert" aria-label="Close"> 20 <button type="button" class="close" data-dismiss="alert" aria-label="Close">
22 <span aria-hidden="true">&times;</span> 21 <span aria-hidden="true">&times;</span>
23 </button> 22 </button>
@@ -49,8 +48,8 @@ @@ -49,8 +48,8 @@
49 </div> 48 </div>
50 {% elif field.auto_id == 'id_is_staff' or field.auto_id == 'id_is_active' %} 49 {% elif field.auto_id == 'id_is_staff' or field.auto_id == 'id_is_active' %}
51 <div class="checkbox"> 50 <div class="checkbox">
52 - <label>  
53 - <input type="checkbox" name="checkbox"><span class="checkbox-material"><span class="check"></span></span> {{field.label}} 51 + <label for="{{ field.auto_id }}">
  52 + {% render_field field %}<span class="checkbox-material"><span class="check"></span></span> {{field.label}}
54 </label> 53 </label>
55 </div> 54 </div>
56 {% elif field.auto_id == 'id_cpf' %} 55 {% elif field.auto_id == 'id_cpf' %}
@@ -76,7 +75,7 @@ @@ -76,7 +75,7 @@
76 </div> 75 </div>
77 {% endfor %} 76 {% endfor %}
78 <div class="col-md-offset-2 col-md-2 col-sm-2 col-xs-2"> 77 <div class="col-md-offset-2 col-md-2 col-sm-2 col-xs-2">
79 - <input type="submit" value="{% trans 'Save' %}" class="btn btn-sm btn-success" /> 78 + <input type="submit" value="{% trans 'Save' %}" class="btn btn-sm btn-success" onclick="validarCpfSemAlert(id_cpf, CPF, idElementoMensagemErro)'" />
80 </div> 79 </div>
81 <div class="col-md-offset-3 col-md-2 col-sm-2 col-xs-2"> 80 <div class="col-md-offset-3 col-md-2 col-sm-2 col-xs-2">
82 <a href="{% url 'users:manage' %}" class="btn btn-sm btn-default" >{% trans 'Cancel' %}</a> 81 <a href="{% url 'users:manage' %}" class="btn btn-sm btn-default" >{% trans 'Cancel' %}</a>
@@ -91,5 +90,5 @@ @@ -91,5 +90,5 @@
91 {% endblock %} 90 {% endblock %}
92 91
93 {% block javascript %} 92 {% block javascript %}
94 - 93 + <script src="{% static 'js/base/amadeus.js' %}"></script>
95 {% endblock %} 94 {% endblock %}