Commit 3c80a5d80ceecddbaed656afd41035685bb73c21
Exists in
master
and in
5 other branches
resolve conflicts
Showing
8 changed files
with
152 additions
and
8 deletions
Show diff stats
core/decorators.py
@@ -14,7 +14,25 @@ def log_decorator(log_action = '', log_resource = ''): | @@ -14,7 +14,25 @@ def log_decorator(log_action = '', log_resource = ''): | ||
14 | action = Action.objects.filter(name = log_action) | 14 | action = Action.objects.filter(name = log_action) |
15 | resource = Resource.objects.filter(name = log_resource) | 15 | resource = Resource.objects.filter(name = log_resource) |
16 | 16 | ||
17 | - action_resource = Action_Resource.objects.filter(action = action, resource = resource)[0] | 17 | + if not action: |
18 | + action = Action(name = log_action) | ||
19 | + action.save() | ||
20 | + else: | ||
21 | + action = action[0] | ||
22 | + | ||
23 | + if not resource: | ||
24 | + resource = Resource(name = log_resource) | ||
25 | + resource.save() | ||
26 | + else: | ||
27 | + resource = resource[0] | ||
28 | + | ||
29 | + action_resource = Action_Resource.objects.filter(action = action, resource = resource) | ||
30 | + | ||
31 | + if not action_resource: | ||
32 | + action_resource = Action_Resource(action = action, resource = resource) | ||
33 | + action_resource.save() | ||
34 | + else: | ||
35 | + action_resource = action_resource[0] | ||
18 | 36 | ||
19 | log = Log() | 37 | log = Log() |
20 | log.user = request.user | 38 | log.user = request.user |
core/forms.py
@@ -12,7 +12,7 @@ class RegisterUserForm(forms.ModelForm): | @@ -12,7 +12,7 @@ class RegisterUserForm(forms.ModelForm): | ||
12 | def clean_email(self): | 12 | def clean_email(self): |
13 | email = self.cleaned_data['email'] | 13 | email = self.cleaned_data['email'] |
14 | if User.objects.filter(email = email).exists(): | 14 | if User.objects.filter(email = email).exists(): |
15 | - raise forms.ValidationError('Já existe um usuário cadastrado com este E-mail') | 15 | + raise forms.ValidationError('Ja existe um usuario cadastrado com este E-mail') |
16 | return email | 16 | return email |
17 | 17 | ||
18 | def clean_password(self): | 18 | def clean_password(self): |
@@ -35,7 +35,7 @@ class RegisterUserForm(forms.ModelForm): | @@ -35,7 +35,7 @@ class RegisterUserForm(forms.ModelForm): | ||
35 | password2 = self.cleaned_data.get("password2") | 35 | password2 = self.cleaned_data.get("password2") |
36 | 36 | ||
37 | if password and password2 and password != password2: | 37 | if password and password2 and password != password2: |
38 | - raise forms.ValidationError('A confirmacão da senha está incorreta') | 38 | + raise forms.ValidationError('A confirmacao da senha esta incorreta') |
39 | return password2 | 39 | return password2 |
40 | 40 | ||
41 | def save(self, commit=True): | 41 | def save(self, commit=True): |
@@ -0,0 +1,28 @@ | @@ -0,0 +1,28 @@ | ||
1 | +# -*- coding: utf-8 -*- | ||
2 | +# Generated by Django 1.10 on 2016-09-08 14:08 | ||
3 | +from __future__ import unicode_literals | ||
4 | + | ||
5 | +from django.conf import settings | ||
6 | +from django.db import migrations, models | ||
7 | +import django.db.models.deletion | ||
8 | + | ||
9 | + | ||
10 | +class Migration(migrations.Migration): | ||
11 | + | ||
12 | + dependencies = [ | ||
13 | + migrations.swappable_dependency(settings.AUTH_USER_MODEL), | ||
14 | + ('core', '0002_auto_20160907_0038'), | ||
15 | + ] | ||
16 | + | ||
17 | + operations = [ | ||
18 | + migrations.AddField( | ||
19 | + model_name='notification', | ||
20 | + name='actor', | ||
21 | + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='notification_Performer', to=settings.AUTH_USER_MODEL, verbose_name='Perfomer'), | ||
22 | + ), | ||
23 | + migrations.AlterField( | ||
24 | + model_name='notification', | ||
25 | + name='user', | ||
26 | + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notification_Actor', to=settings.AUTH_USER_MODEL, verbose_name='User'), | ||
27 | + ), | ||
28 | + ] |
@@ -0,0 +1,20 @@ | @@ -0,0 +1,20 @@ | ||
1 | +# -*- coding: utf-8 -*- | ||
2 | +# Generated by Django 1.10 on 2016-09-08 14:51 | ||
3 | +from __future__ import unicode_literals | ||
4 | + | ||
5 | +from django.db import migrations, models | ||
6 | + | ||
7 | + | ||
8 | +class Migration(migrations.Migration): | ||
9 | + | ||
10 | + dependencies = [ | ||
11 | + ('core', '0003_auto_20160908_1108'), | ||
12 | + ] | ||
13 | + | ||
14 | + operations = [ | ||
15 | + migrations.AlterField( | ||
16 | + model_name='resource', | ||
17 | + name='name', | ||
18 | + field=models.CharField(max_length=100, unique=True, verbose_name='Name'), | ||
19 | + ), | ||
20 | + ] |
core/mixins.py
1 | from django.conf import settings | 1 | from django.conf import settings |
2 | -from .models import Action, Resource, Action_Resource, Log | 2 | +from .models import Action, Resource, Action_Resource, Log, Notification |
3 | 3 | ||
4 | class LogMixin(object): | 4 | class LogMixin(object): |
5 | log_action = "" | 5 | log_action = "" |
@@ -9,7 +9,25 @@ class LogMixin(object): | @@ -9,7 +9,25 @@ class LogMixin(object): | ||
9 | action = Action.objects.filter(name = self.log_action) | 9 | action = Action.objects.filter(name = self.log_action) |
10 | resource = Resource.objects.filter(name = self.log_resource) | 10 | resource = Resource.objects.filter(name = self.log_resource) |
11 | 11 | ||
12 | - action_resource = Action_Resource.objects.filter(action = action, resource = resource)[0] | 12 | + if not action: |
13 | + action = Action(name = self.log_action) | ||
14 | + action.save() | ||
15 | + else: | ||
16 | + action = action[0] | ||
17 | + | ||
18 | + if not resource: | ||
19 | + resource = Resource(name = self.log_resource) | ||
20 | + resource.save() | ||
21 | + else: | ||
22 | + resource = resource[0] | ||
23 | + | ||
24 | + action_resource = Action_Resource.objects.filter(action = action, resource = resource) | ||
25 | + | ||
26 | + if not action_resource: | ||
27 | + action_resource = Action_Resource(action = action, resource = resource) | ||
28 | + action_resource.save() | ||
29 | + else: | ||
30 | + action_resource = action_resource[0] | ||
13 | 31 | ||
14 | log = Log() | 32 | log = Log() |
15 | log.user = request.user | 33 | log.user = request.user |
@@ -18,3 +36,20 @@ class LogMixin(object): | @@ -18,3 +36,20 @@ class LogMixin(object): | ||
18 | log.save() | 36 | log.save() |
19 | 37 | ||
20 | return super(LogMixin, self).dispatch(request, *args, **kwargs) | 38 | return super(LogMixin, self).dispatch(request, *args, **kwargs) |
39 | + | ||
40 | +class NotificationMixin(object): | ||
41 | + message = "" | ||
42 | + read = False | ||
43 | + | ||
44 | + def dispatch(self, request, *args, **kwargs): | ||
45 | + action = Action.objects.filter(name = self.log_action) | ||
46 | + resource = Resource.objects.filter(name = self.log_resource) | ||
47 | + | ||
48 | + action_resource = Action_Resource.objects.filter(action = action, resource = resource)[0] | ||
49 | + | ||
50 | + notification = Notification() | ||
51 | + notification.action_resource = action_resource | ||
52 | + notification.user = request.user #We still have to handle the notification to be sent to an amount of Users | ||
53 | + | ||
54 | + notification.read = read | ||
55 | + notification.message = "" |
core/models.py
@@ -24,9 +24,14 @@ class Resource(models.Model): | @@ -24,9 +24,14 @@ class Resource(models.Model): | ||
24 | """ | 24 | """ |
25 | It represents the resource where the action was applied on. | 25 | It represents the resource where the action was applied on. |
26 | Example: Pool was answered (Resource: Pool), PDF was visualized(Resource: PDF). | 26 | Example: Pool was answered (Resource: Pool), PDF was visualized(Resource: PDF). |
27 | + | ||
28 | + Attributes: | ||
29 | + @name: name of the resource affected, it will be unique because a resource can be affecte | ||
30 | + by a huge amount of actions | ||
31 | + @created_date: The date the resource was created | ||
27 | """ | 32 | """ |
28 | 33 | ||
29 | - name = models.CharField(_('Name'), max_length =100) | 34 | + name = models.CharField(_('Name'), max_length =100, unique=True) |
30 | created_date = models.DateField(_('Created Date'), auto_now_add=True) | 35 | created_date = models.DateField(_('Created Date'), auto_now_add=True) |
31 | 36 | ||
32 | class Meta: | 37 | class Meta: |
@@ -51,12 +56,23 @@ class Action_Resource(models.Model): | @@ -51,12 +56,23 @@ class Action_Resource(models.Model): | ||
51 | 56 | ||
52 | 57 | ||
53 | class Notification(models.Model): | 58 | class Notification(models.Model): |
59 | + """ | ||
60 | + Attributes: | ||
61 | + @message: The message that will be shown on the notification prompt | ||
62 | + @user: The User that the notification will be sent to. | ||
63 | + @read: Whether or not the user has read the notification. | ||
64 | + @datetime: The time the notification was created | ||
65 | + @action_resource: The Object that holds the information about which action was perfomed on the Resource | ||
66 | + @actor: The user who applied the action | ||
67 | + """ | ||
68 | + | ||
54 | message = models.TextField(_('Message')) | 69 | message = models.TextField(_('Message')) |
55 | - user = models.ForeignKey(User, verbose_name = _('Actor')) | 70 | + user = models.ForeignKey(User, related_name = _('%(class)s_Actor'), verbose_name= _('User')) |
56 | read = models.BooleanField(_('Read'), default = False) | 71 | read = models.BooleanField(_('Read'), default = False) |
57 | datetime = models.DateTimeField(_("Date and Time of action"), auto_now_add = True) | 72 | datetime = models.DateTimeField(_("Date and Time of action"), auto_now_add = True) |
58 | action_resource = models.ForeignKey(Action_Resource, verbose_name = _('Action_Resource')) | 73 | action_resource = models.ForeignKey(Action_Resource, verbose_name = _('Action_Resource')) |
59 | - | 74 | + actor = models.ForeignKey(User, related_name = _('%(class)s_Performer'), verbose_name= _('Perfomer'), null = True) |
75 | + | ||
60 | class Meta: | 76 | class Meta: |
61 | verbose_name = _("Notification") | 77 | verbose_name = _("Notification") |
62 | verbose_name_plural = _("Notifications") | 78 | verbose_name_plural = _("Notifications") |
logs/log_file_06-09-2016.txt
@@ -93,3 +93,8 @@ | @@ -93,3 +93,8 @@ | ||
93 | 06/09/2016 21:34:11 - test - Acessou home | 93 | 06/09/2016 21:34:11 - test - Acessou home |
94 | 06/09/2016 21:38:44 - test - Entrou no sistema | 94 | 06/09/2016 21:38:44 - test - Entrou no sistema |
95 | 06/09/2016 21:38:44 - test - Acessou home | 95 | 06/09/2016 21:38:44 - test - Acessou home |
96 | +06/09/2016 21:58:49 - jailson - Entrou no sistema | ||
97 | +06/09/2016 21:58:49 - jailson - Acessou home | ||
98 | +06/09/2016 21:59:05 - jailson - Acessou home | ||
99 | +06/09/2016 21:59:35 - jailson - Acessou home | ||
100 | +06/09/2016 21:59:42 - jailson - Acessou home |
@@ -0,0 +1,22 @@ | @@ -0,0 +1,22 @@ | ||
1 | +# -*- coding: utf-8 -*- | ||
2 | +# Generated by Django 1.10 on 2016-09-08 14:08 | ||
3 | +from __future__ import unicode_literals | ||
4 | + | ||
5 | +import django.core.validators | ||
6 | +from django.db import migrations, models | ||
7 | +import re | ||
8 | + | ||
9 | + | ||
10 | +class Migration(migrations.Migration): | ||
11 | + | ||
12 | + dependencies = [ | ||
13 | + ('users', '0010_auto_20160906_2332'), | ||
14 | + ] | ||
15 | + | ||
16 | + operations = [ | ||
17 | + migrations.AlterField( | ||
18 | + model_name='user', | ||
19 | + name='username', | ||
20 | + field=models.CharField(help_text='A short name that will be used to identify you in the platform and to access it', max_length=35, unique=True, validators=[django.core.validators.RegexValidator(re.compile(b'^[\\w.@+-]+$'), 'Type a valid username. This fields should only contain letters, numbers and the characteres: @/./+/-/_ .', b'invalid')], verbose_name='Login'), | ||
21 | + ), | ||
22 | + ] |