From 71a2209726c85d8210549aac87a9e989a309b4e8 Mon Sep 17 00:00:00 2001 From: Cesar Carvalho Date: Mon, 29 Apr 2019 09:33:01 -0300 Subject: [PATCH] Corrige inconsistencias entre Tramitacao DocAdm e MatLegislativa --- sapl/materia/views.py | 12 +++++++-- sapl/protocoloadm/forms.py | 17 ++++++++++++- .../migrations/0019_auto_20190429_0828.py | 25 +++++++++++++++++++ ...0020_tramitacaoadministrativo_timestamp.py | 21 ++++++++++++++++ sapl/protocoloadm/models.py | 7 ++++-- sapl/protocoloadm/views.py | 23 +++++++++++++++-- sapl/templates/protocoloadm/layouts.yaml | 6 ++--- 7 files changed, 101 insertions(+), 10 deletions(-) create mode 100644 sapl/protocoloadm/migrations/0019_auto_20190429_0828.py create mode 100644 sapl/protocoloadm/migrations/0020_tramitacaoadministrativo_timestamp.py diff --git a/sapl/materia/views.py b/sapl/materia/views.py index e7a730c8f..b9128a80c 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -1201,6 +1201,7 @@ class TramitacaoCrud(MasterDetailCrud): '-timestamp', '-id').first() + #TODO: Esta checagem foi inserida na issue #2027, mas é mesmo necessária? if ultima_tramitacao: if ultima_tramitacao.unidade_tramitacao_destino: context['form'].fields[ @@ -1214,6 +1215,15 @@ class TramitacaoCrud(MasterDetailCrud): ' da última tramitação não pode ser vazia!') messages.add_message(self.request, messages.ERROR, msg) + primeira_tramitacao = not(Tramitacao.objects.filter( + materia_id=int(kwargs['root_pk'])).exists()) + + # Se não for a primeira tramitação daquela matéria, o campo + # não pode ser modificado + if not primeira_tramitacao: + context['form'].fields[ + 'unidade_tramitacao_local'].widget.attrs['disabled'] = True + return context def form_valid(self, form): @@ -1234,7 +1244,6 @@ class TramitacaoCrud(MasterDetailCrud): post=self.object, request=self.request) except Exception as e: - # TODO log error msg = _('Tramitação criada, mas e-mail de acompanhamento ' 'de matéria não enviado. Há problemas na configuração ' 'do e-mail.') @@ -1268,7 +1277,6 @@ class TramitacaoCrud(MasterDetailCrud): post=self.object, request=self.request) except Exception: - # TODO log error msg = _('Tramitação atualizada, mas e-mail de acompanhamento ' 'de matéria não enviado. Há problemas na configuração ' 'do e-mail.') diff --git a/sapl/protocoloadm/forms.py b/sapl/protocoloadm/forms.py index 43f410847..6f28d5955 100644 --- a/sapl/protocoloadm/forms.py +++ b/sapl/protocoloadm/forms.py @@ -650,12 +650,26 @@ class TramitacaoAdmForm(ModelForm): fields = ['data_tramitacao', 'unidade_tramitacao_local', 'status', + 'urgente', 'unidade_tramitacao_destino', 'data_encaminhamento', 'data_fim_prazo', 'texto', ] + def __init__(self, *args, **kwargs): + super(TramitacaoAdmForm, self).__init__(*args, **kwargs) + self.fields['data_tramitacao'].initial = timezone.now().date() + ust = UnidadeTramitacao.objects.select_related().all() + unidade_tramitacao_destino = [('', '---------')] + [(ut.pk, ut) + for ut in ust if ut.comissao and ut.comissao.ativa] + unidade_tramitacao_destino.extend( + [(ut.pk, ut) for ut in ust if ut.orgao]) + unidade_tramitacao_destino.extend( + [(ut.pk, ut) for ut in ust if ut.parlamentar]) + self.fields['unidade_tramitacao_destino'].choices = unidade_tramitacao_destino + self.fields['urgente'].label = "Urgente? *" + def clean(self): cleaned_data = super(TramitacaoAdmForm, self).clean() @@ -742,7 +756,8 @@ class TramitacaoAdmEditForm(TramitacaoAdmForm): model = TramitacaoAdministrativo fields = ['data_tramitacao', 'unidade_tramitacao_local', - 'status', + 'status', + 'urgente', 'unidade_tramitacao_destino', 'data_encaminhamento', 'data_fim_prazo', diff --git a/sapl/protocoloadm/migrations/0019_auto_20190429_0828.py b/sapl/protocoloadm/migrations/0019_auto_20190429_0828.py new file mode 100644 index 000000000..204db8598 --- /dev/null +++ b/sapl/protocoloadm/migrations/0019_auto_20190429_0828.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-04-29 11:28 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0018_auto_20190314_1532'), + ] + + operations = [ + migrations.AddField( + model_name='tramitacaoadministrativo', + name='urgente', + field=models.BooleanField(choices=[(True, 'Sim'), (False, 'Não')], default=False, verbose_name='Urgente ?'), + ), + migrations.AlterField( + model_name='tramitacaoadministrativo', + name='texto', + field=models.TextField(verbose_name='Texto da Ação'), + ), + ] diff --git a/sapl/protocoloadm/migrations/0020_tramitacaoadministrativo_timestamp.py b/sapl/protocoloadm/migrations/0020_tramitacaoadministrativo_timestamp.py new file mode 100644 index 000000000..0e367b306 --- /dev/null +++ b/sapl/protocoloadm/migrations/0020_tramitacaoadministrativo_timestamp.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-04-29 12:15 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('protocoloadm', '0019_auto_20190429_0828'), + ] + + operations = [ + migrations.AddField( + model_name='tramitacaoadministrativo', + name='timestamp', + field=models.DateTimeField(default=django.utils.timezone.now), + ), + ] diff --git a/sapl/protocoloadm/models.py b/sapl/protocoloadm/models.py index f792a9cdb..77d1a64eb 100644 --- a/sapl/protocoloadm/models.py +++ b/sapl/protocoloadm/models.py @@ -300,6 +300,7 @@ class TramitacaoAdministrativo(models.Model): verbose_name=_('Status')) documento = models.ForeignKey(DocumentoAdministrativo, on_delete=models.PROTECT) + timestamp = models.DateTimeField(default=timezone.now) data_tramitacao = models.DateField( verbose_name=_('Data Tramitação')) unidade_tramitacao_local = models.ForeignKey( @@ -314,8 +315,10 @@ class TramitacaoAdministrativo(models.Model): related_name='adm_tramitacoes_destino', on_delete=models.PROTECT, verbose_name=_('Unidade Destino')) - texto = models.TextField( - blank=True, verbose_name=_('Texto da Ação')) + urgente = models.BooleanField(verbose_name=_('Urgente ?'), + choices=YES_NO_CHOICES, + default=False) + texto = models.TextField(verbose_name=_('Texto da Ação')) data_fim_prazo = models.DateField( blank=True, null=True, verbose_name=_('Data Fim do Prazo')) diff --git a/sapl/protocoloadm/views.py b/sapl/protocoloadm/views.py index c93ff3ccd..95fc580a4 100755 --- a/sapl/protocoloadm/views.py +++ b/sapl/protocoloadm/views.py @@ -1120,6 +1120,27 @@ class TramitacaoAdmCrud(MasterDetailCrud): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) + username = self.request.user.username + + ultima_tramitacao = TramitacaoAdministrativo.objects.filter( + documento_id=self.kwargs['pk']).order_by( + '-data_tramitacao', + '-timestamp', + '-id').first() + + #TODO: Esta checagem foi inserida na issue #2027, mas é mesmo necessária? + if ultima_tramitacao: + if ultima_tramitacao.unidade_tramitacao_destino: + context['form'].fields[ + 'unidade_tramitacao_local'].choices = [ + (ultima_tramitacao.unidade_tramitacao_destino.pk, + ultima_tramitacao.unidade_tramitacao_destino)] + else: + self.logger.error('user=' + username + '. Unidade de tramitação destino ' + 'da última tramitação não pode ser vazia!') + msg = _('Unidade de tramitação destino ' + ' da última tramitação não pode ser vazia!') + messages.add_message(self.request, messages.ERROR, msg) primeira_tramitacao = not(TramitacaoAdministrativo.objects.filter( documento_id=int(kwargs['root_pk'])).exists()) @@ -1139,7 +1160,6 @@ class TramitacaoAdmCrud(MasterDetailCrud): post=self.object, request=self.request) except Exception as e: - # TODO log error self.logger.error('user=' + username + '. Tramitação criada, mas e-mail de acompanhamento de documento ' 'não enviado. A não configuração do servidor de e-mail ' 'impede o envio de aviso de tramitação. ' + str(e)) @@ -1162,7 +1182,6 @@ class TramitacaoAdmCrud(MasterDetailCrud): post=self.object, request=self.request) except Exception as e: - # TODO log error self.logger.error('user=' + username + '. Tramitação criada, mas e-mail de acompanhamento de documento ' 'não enviado. A não configuração do servidor de e-mail ' 'impede o envio de aviso de tramitação. ' + str(e)) diff --git a/sapl/templates/protocoloadm/layouts.yaml b/sapl/templates/protocoloadm/layouts.yaml index 2ada51382..d87a99b56 100644 --- a/sapl/templates/protocoloadm/layouts.yaml +++ b/sapl/templates/protocoloadm/layouts.yaml @@ -30,9 +30,9 @@ StatusTramitacaoAdministrativo: TramitacaoAdministrativo: {% trans 'Tramitação' %}: - - data_tramitacao:4 unidade_tramitacao_local - - status:4 unidade_tramitacao_destino - - data_encaminhamento data_fim_prazo + - data_tramitacao unidade_tramitacao_local + - unidade_tramitacao_destino data_encaminhamento data_fim_prazo + - status urgente - texto Anexado: