Browse Source

Fix #2753 - Corrige inconsistências entre Tramitacao DocAdm e MateriaLegislativa (#2755)

* Corrige inconsistencias entre Tramitacao DocAdm e MatLegislativa

* corrige teste
pull/2811/head
Cesar Augusto de Carvalho 6 years ago
committed by Cesar Carvalho
parent
commit
df67a334db
  1. 11
      sapl/materia/views.py
  2. 15
      sapl/protocoloadm/forms.py
  3. 25
      sapl/protocoloadm/migrations/0019_auto_20190429_0828.py
  4. 21
      sapl/protocoloadm/migrations/0020_tramitacaoadministrativo_timestamp.py
  5. 7
      sapl/protocoloadm/models.py
  6. 12
      sapl/protocoloadm/tests/test_protocoloadm.py
  7. 22
      sapl/protocoloadm/views.py
  8. 6
      sapl/templates/protocoloadm/layouts.yaml

11
sapl/materia/views.py

@ -1203,6 +1203,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[
@ -1216,6 +1217,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):
@ -1275,7 +1285,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.')

15
sapl/protocoloadm/forms.py

@ -650,6 +650,7 @@ class TramitacaoAdmForm(ModelForm):
fields = ['data_tramitacao',
'unidade_tramitacao_local',
'status',
'urgente',
'unidade_tramitacao_destino',
'data_encaminhamento',
'data_fim_prazo',
@ -660,6 +661,19 @@ class TramitacaoAdmForm(ModelForm):
'ip': forms.HiddenInput()}
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()
@ -747,6 +761,7 @@ class TramitacaoAdmEditForm(TramitacaoAdmForm):
fields = ['data_tramitacao',
'unidade_tramitacao_local',
'status',
'urgente',
'unidade_tramitacao_destino',
'data_encaminhamento',
'data_fim_prazo',

25
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'),
),
]

21
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),
),
]

7
sapl/protocoloadm/models.py

@ -301,6 +301,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(
@ -315,8 +316,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'))
user = models.ForeignKey(get_settings_auth_user_model(),

12
sapl/protocoloadm/tests/test_protocoloadm.py

@ -157,6 +157,8 @@ def test_create_tramitacao(admin_client):
'unidade_tramitacao_destino': unidade_tramitacao_local_1.pk,
'documento': documento_adm.pk,
'status': status.pk,
'urgente': False,
'texto': 'teste',
'data_tramitacao': date(2016, 8, 21)},
follow=True)
@ -175,6 +177,8 @@ def test_create_tramitacao(admin_client):
'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk,
'documento': documento_adm.pk,
'status': status.pk,
'urgente': False,
'texto': 'teste',
'data_tramitacao': date(2016, 8, 20)},
follow=True)
@ -193,6 +197,8 @@ def test_create_tramitacao(admin_client):
'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk,
'documento': documento_adm.pk,
'status': status.pk,
'urgente': False,
'texto': 'teste',
'data_tramitacao': timezone.now().date() + timedelta(
days=1)},
follow=True)
@ -212,6 +218,8 @@ def test_create_tramitacao(admin_client):
'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk,
'documento': documento_adm.pk,
'status': status.pk,
'urgente': False,
'texto': 'teste',
'data_tramitacao': date(2016, 8, 21),
'data_encaminhamento': date(2016, 8, 20)},
follow=True)
@ -231,6 +239,8 @@ def test_create_tramitacao(admin_client):
'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk,
'documento': documento_adm.pk,
'status': status.pk,
'urgente': False,
'texto': 'teste',
'data_tramitacao': date(2016, 8, 21),
'data_fim_prazo': date(2016, 8, 20)},
follow=True)
@ -250,6 +260,8 @@ def test_create_tramitacao(admin_client):
'unidade_tramitacao_destino': unidade_tramitacao_destino_2.pk,
'documento': documento_adm.pk,
'status': status.pk,
'urgente': False,
'texto': 'teste',
'data_tramitacao': date(2016, 8, 21)},
follow=True)

22
sapl/protocoloadm/views.py

@ -1122,6 +1122,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())
@ -1141,7 +1162,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))

6
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:

Loading…
Cancel
Save