diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py index 2f861bc62..eb908a81d 100644 --- a/sapl/protocoloadm/forms.py +++ b/sapl/protocoloadm/forms.py @@ -1090,10 +1090,17 @@ class DocumentoAdministrativoForm(FileFieldCheckMixin, ModelForm): 'observacao', 'texto_integral', 'protocolo', - 'restrito' + 'restrito', + 'user', + 'ip', + 'ultima_edicao' ] - widgets = {'protocolo': forms.HiddenInput()} + widgets = {'protocolo': forms.HiddenInput(), + 'user': forms.HiddenInput(), + 'ip': forms.HiddenInput(), + 'ultima_edicao': forms.HiddenInput() + } def clean(self): super(DocumentoAdministrativoForm, self).clean() diff --git a/sapl/protocoloadm/migrations/0026_auto_20190815_1737.py b/sapl/protocoloadm/migrations/0026_auto_20190815_1737.py new file mode 100644 index 000000000..ba6d53656 --- /dev/null +++ b/sapl/protocoloadm/migrations/0026_auto_20190815_1737.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.23 on 2019-08-15 20:37 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('protocoloadm', '0025_auto_20190815_1539'), + ] + + operations = [ + migrations.AddField( + model_name='documentoadministrativo', + name='ip', + field=models.CharField(blank=True, default='', max_length=30, verbose_name='IP'), + ), + migrations.AddField( + model_name='documentoadministrativo', + name='ultima_edicao', + field=models.DateTimeField(blank=True, null=True, verbose_name='Data e Hora da Edição'), + ), + migrations.AddField( + model_name='documentoadministrativo', + name='user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL, verbose_name='Usuário'), + ), + ] diff --git a/sapl/protocoloadm/models.py b/sapl/protocoloadm/models.py index da0c33016..413d01ab7 100644 --- a/sapl/protocoloadm/models.py +++ b/sapl/protocoloadm/models.py @@ -186,6 +186,24 @@ class DocumentoAdministrativo(models.Model): ) ) + user = models.ForeignKey( + get_settings_auth_user_model(), + verbose_name=_('Usuário'), + on_delete=models.PROTECT, + null=True, + blank=True + ) + ip = models.CharField( + verbose_name=_('IP'), + max_length=30, + blank=True, + default='' + ) + ultima_edicao = models.DateTimeField( + verbose_name=_('Data e Hora da Edição'), + blank=True, null=True + ) + class Meta: verbose_name = _('Documento Administrativo') verbose_name_plural = _('Documentos Administrativos') diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py index 705f536fa..03500c3ec 100755 --- a/sapl/protocoloadm/views.py +++ b/sapl/protocoloadm/views.py @@ -350,6 +350,17 @@ class DocumentoAdministrativoCrud(Crud): form_class = DocumentoAdministrativoForm layout_key = None + def get_initial(self): + initial = super().get_initial() + + initial['user'] = self.request.user + initial['ip'] = get_client_ip(self.request) + + tz = timezone.get_current_timezone() + initial['ultima_edicao'] = tz.localize(datetime.now()) + + return initial + @property def cancel_url(self): return self.search_url @@ -358,6 +369,33 @@ class DocumentoAdministrativoCrud(Crud): form_class = DocumentoAdministrativoForm layout_key = None + def form_valid(self, form): + dict_objeto_antigo = DocumentoAdministrativo.objects.get( + pk=self.kwargs['pk'] + ).__dict__ + + self.object = form.save() + dict_objeto_novo = self.object.__dict__ + + atributos = [ + 'tipo_id', 'ano', 'numero', 'data', 'protocolo_id', 'assunto', + 'interessado', 'tramitacao', 'restrito', 'texto_integral','numero_externo', + 'dias_prazo', 'data_fim_prazo', 'observacao' + ] + + for atributo in atributos: + if dict_objeto_antigo[atributo] != dict_objeto_novo[atributo]: + self.object.user = self.request.user + self.object.ip = get_client_ip(self.request) + + tz = timezone.get_current_timezone() + self.object.ultima_edicao = tz.localize(datetime.now()) + + self.object.save() + break + + return super().form_valid(form) + def get_initial(self): if self.object.protocolo: p = self.object.protocolo @@ -372,7 +410,17 @@ class DocumentoAdministrativoCrud(Crud): if documento.restrito and self.request.user.is_anonymous(): return redirect('/') return super(Crud.DetailView, self).get(args, kwargs) + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + + context['user'] = self.request.user + context['documentoadministrativo'] = DocumentoAdministrativo.objects.get( + pk=self.kwargs['pk'] + ) + return context + def urlize(self, obj, fieldname): a = '%s' % ( reverse( @@ -633,6 +681,12 @@ class CriarDocumentoProtocolo(PermissionRequiredMixin, CreateView): doc['assunto'] = protocolo.assunto_ementa doc['interessado'] = protocolo.interessado doc['numero'] = numero_max + 1 if numero_max else 1 + doc['user'] = self.request.user + doc['ip'] = get_client_ip(self.request) + + tz = timezone.get_current_timezone() + doc['ultima_edicao'] = tz.localize(datetime.now()) + return doc @@ -1358,6 +1412,13 @@ class DesvincularDocumentoView(PermissionRequiredMixin, CreateView): ano=form.cleaned_data['ano'], tipo=form.cleaned_data['tipo']) documento.protocolo = None + + documento.user = self.request.user + documento.ip = get_client_ip(self.request) + + tz = timezone.get_current_timezone() + documento.ultima_edicao = tz.localize(datetime.now()) + documento.save() return redirect(self.get_success_url()) diff --git a/sapl/templates/materia/materialegislativa_detail.html b/sapl/templates/materia/materialegislativa_detail.html index 38114e489..10749b765 100644 --- a/sapl/templates/materia/materialegislativa_detail.html +++ b/sapl/templates/materia/materialegislativa_detail.html @@ -54,7 +54,9 @@
diff --git a/sapl/templates/materia/tramitacao_detail.html b/sapl/templates/materia/tramitacao_detail.html index 1ece652aa..df108ad13 100644 --- a/sapl/templates/materia/tramitacao_detail.html +++ b/sapl/templates/materia/tramitacao_detail.html @@ -12,7 +12,9 @@
diff --git a/sapl/templates/norma/normajuridica_detail.html b/sapl/templates/norma/normajuridica_detail.html index c7bc2e922..005de56d1 100644 --- a/sapl/templates/norma/normajuridica_detail.html +++ b/sapl/templates/norma/normajuridica_detail.html @@ -93,7 +93,9 @@
diff --git a/sapl/templates/protocoloadm/documentoadministrativo_detail.html b/sapl/templates/protocoloadm/documentoadministrativo_detail.html new file mode 100644 index 000000000..c947ed917 --- /dev/null +++ b/sapl/templates/protocoloadm/documentoadministrativo_detail.html @@ -0,0 +1,54 @@ +{% extends "crud/detail.html" %} +{% load i18n %} + +{% block detail_content %} + {{ block.super }} + {% if user.is_superuser %} +
+ {% if documentoadministrativo.user %} +
+
+

Usuário

+ +
+
+ {% endif %} + {% if documentoadministrativo.ip %} +
+
+

IP

+
+
+
+ {{ documentoadministrativo.ip }} +
+
+
+
+
+ {% endif %} + {% if documentoadministrativo.ultima_edicao %} +
+
+

Data e Hora da Edição

+
+
+
+ {{ documentoadministrativo.ultima_edicao }} +
+
+
+
+
+ {% endif %} +
+ {% endif %} +{% endblock detail_content %} diff --git a/sapl/templates/protocoloadm/tramitacaoadministrativo_detail.html b/sapl/templates/protocoloadm/tramitacaoadministrativo_detail.html index db93f045a..5cceff772 100644 --- a/sapl/templates/protocoloadm/tramitacaoadministrativo_detail.html +++ b/sapl/templates/protocoloadm/tramitacaoadministrativo_detail.html @@ -26,7 +26,9 @@