diff --git a/sapl/materia/forms.py b/sapl/materia/forms.py index 476b1a921..cc0f9ff42 100644 --- a/sapl/materia/forms.py +++ b/sapl/materia/forms.py @@ -456,7 +456,7 @@ class TramitacaoForm(ModelForm): fields = ['data_tramitacao', 'unidade_tramitacao_local', 'status', - 'turno', + 'tipo_turno', 'urgente', 'unidade_tramitacao_destino', 'data_encaminhamento', @@ -574,7 +574,7 @@ class TramitacaoForm(ModelForm): data_encaminhamento=tramitacao.data_encaminhamento, unidade_tramitacao_destino=tramitacao.unidade_tramitacao_destino, urgente=tramitacao.urgente, - turno=tramitacao.turno, + tipo_turno=tramitacao.tipo_turno, texto=tramitacao.texto, data_fim_prazo=tramitacao.data_fim_prazo, user=tramitacao.user, @@ -613,7 +613,7 @@ class TramitacaoUpdateForm(TramitacaoForm): fields = ['data_tramitacao', 'unidade_tramitacao_local', 'status', - 'turno', + 'tipo_turno', 'urgente', 'unidade_tramitacao_destino', 'data_encaminhamento', @@ -685,7 +685,7 @@ class TramitacaoUpdateForm(TramitacaoForm): tram_anexada.data_encaminhamento = nova_tram_principal.data_encaminhamento tram_anexada.unidade_tramitacao_destino = nova_tram_principal.unidade_tramitacao_destino tram_anexada.urgente = nova_tram_principal.urgente - tram_anexada.turno = nova_tram_principal.turno + tram_anexada.tipo_turno = nova_tram_principal.tipo_turno tram_anexada.texto = nova_tram_principal.texto tram_anexada.data_fim_prazo = nova_tram_principal.data_fim_prazo tram_anexada.user = nova_tram_principal.user @@ -1608,7 +1608,7 @@ class TramitacaoEmLoteForm(ModelForm): 'unidade_tramitacao_local', 'status', 'urgente', - 'turno', + 'tipo_turno', 'unidade_tramitacao_destino', 'data_encaminhamento', 'data_fim_prazo', @@ -1643,7 +1643,7 @@ class TramitacaoEmLoteForm(ModelForm): row3 = to_row([ ('status', 4), ('urgente', 4), - ('turno', 4) + ('tipo_turno', 4) ]) row4 = to_row([ ('texto', 12) @@ -1751,7 +1751,7 @@ class TramitacaoEmLoteForm(ModelForm): unidade_tramitacao_destino=cd['unidade_tramitacao_destino'], data_encaminhamento=cd['data_encaminhamento'], urgente=cd['urgente'], - turno=cd['turno'], + tipo_turno=cd['tipo_turno'], texto=cd['texto'], data_fim_prazo=cd['data_fim_prazo'], user=user, @@ -1777,7 +1777,7 @@ class TramitacaoEmLoteForm(ModelForm): data_encaminhamento=tramitacao.data_encaminhamento, unidade_tramitacao_destino=tramitacao.unidade_tramitacao_destino, urgente=tramitacao.urgente, - turno=tramitacao.turno, + tipo_turno=tramitacao.tipo_turno, texto=tramitacao.texto, data_fim_prazo=tramitacao.data_fim_prazo, user=tramitacao.user, diff --git a/sapl/materia/migrations/0060_auto_20190905_1134.py b/sapl/materia/migrations/0060_auto_20190905_1134.py new file mode 100644 index 000000000..678144a8d --- /dev/null +++ b/sapl/materia/migrations/0060_auto_20190905_1134.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-09-05 14:34 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0059_auto_20191001_1450'), + ] + + operations = [ + migrations.CreateModel( + name='TipoTurnoTramitacao', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('nome', models.CharField(max_length=100, verbose_name='Nome do Turno')), + ], + options={ + 'verbose_name': 'Tipo de Turno de Tramitação', + 'verbose_name_plural': 'Tipos de Turno de Tramitação', + }, + ), + migrations.AddField( + model_name='tramitacao', + name='tipo_turno', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='materia.TipoTurnoTramitacao', verbose_name='Turno'), + ), + ] diff --git a/sapl/materia/migrations/0061_auto_20190905_1135.py b/sapl/materia/migrations/0061_auto_20190905_1135.py new file mode 100644 index 000000000..ed1c55d09 --- /dev/null +++ b/sapl/materia/migrations/0061_auto_20190905_1135.py @@ -0,0 +1,45 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-09-05 13:30 +from __future__ import unicode_literals + +from django.db import migrations, models +from django.utils.translation import ugettext_lazy as _ +import django.db.models.deletion + +def migra_tipos_turnos_tramitacao(apps, schema_editor): + TipoTurnoTramitacao = apps.get_model('materia', 'TipoTurnoTramitacao') + Tramitacao = apps.get_model('materia', 'Tramitacao') + + TURNO_CHOICES = { + 'P': _('Primeiro'), + 'S': _('Segundo'), + 'U': _('Único'), + 'L': _('Suplementar'), + 'F': _('Final'), + 'A': _('Votação Única em Regime de Urgência'), + 'B': _('1ª Votação'), + 'C': _('2ª e 3ª Votações'), + 'D': _('Deliberação'), + 'G': _('1ª e 2ª Votações'), + 'E': _('1ª e 2ª Votações em Regime de Urgência'), + } + + for value in TURNO_CHOICES.values(): + TipoTurnoTramitacao.objects.create(nome=value) + + for t in Tramitacao.objects.all(): + turno_antigo = t.turno + if turno_antigo: + t.tipo_turno = TipoTurnoTramitacao.objects.get(nome=TURNO_CHOICES[turno_antigo]) + t.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0060_auto_20190905_1134'), + ] + + operations = [ + migrations.RunPython(migra_tipos_turnos_tramitacao) + ] diff --git a/sapl/materia/migrations/0062_remove_tramitacao_turno.py b/sapl/materia/migrations/0062_remove_tramitacao_turno.py new file mode 100644 index 000000000..421a6f5c2 --- /dev/null +++ b/sapl/materia/migrations/0062_remove_tramitacao_turno.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.20 on 2019-09-06 13:02 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('materia', '0061_auto_20190905_1135'), + ] + + operations = [ + migrations.RemoveField( + model_name='tramitacao', + name='turno', + ), + ] diff --git a/sapl/materia/models.py b/sapl/materia/models.py index cdc089b3b..1414e0088 100644 --- a/sapl/materia/models.py +++ b/sapl/materia/models.py @@ -1014,6 +1014,18 @@ class UnidadeTramitacao(models.Model): return _('%(parlamentar)s') % {'parlamentar': self.parlamentar} +@reversion.register() +class TipoTurnoTramitacao(models.Model): + nome = models.CharField(max_length=100, verbose_name=_('Nome do Turno')) + + class Meta: + verbose_name = _('Tipo de Turno de Tramitação') + verbose_name_plural = _('Tipos de Turno de Tramitação') + + def __str__(self): + return self.nome + + @reversion.register() class Tramitacao(models.Model): TURNO_CHOICES = Choices( @@ -1029,7 +1041,6 @@ class Tramitacao(models.Model): ('G', 'primeria_segunda_votacoes', _('1ª e 2ª Votações')), ('E', 'primeira_segunda_votacao_urgencia', _( '1ª e 2ª Votações em Regime de Urgência')), - ) status = models.ForeignKey(StatusTramitacao, on_delete=models.PROTECT, @@ -1062,9 +1073,11 @@ class Tramitacao(models.Model): urgente = models.BooleanField(verbose_name=_('Urgente ?'), choices=YES_NO_CHOICES, default=False) - turno = models.CharField( - max_length=1, blank=True, verbose_name=_('Turno'), - choices=TURNO_CHOICES) + tipo_turno = models.ForeignKey( + TipoTurnoTramitacao, + on_delete=models.PROTECT, + blank=True, null=True, + verbose_name=_('Turno')) texto = models.TextField(verbose_name=_('Texto da Ação')) data_fim_prazo = models.DateField( blank=True, null=True, verbose_name=_('Data Fim Prazo')) diff --git a/sapl/materia/urls.py b/sapl/materia/urls.py index 2fe9145de..1adbdfbba 100644 --- a/sapl/materia/urls.py +++ b/sapl/materia/urls.py @@ -27,7 +27,8 @@ from sapl.materia.views import (AcompanhamentoConfirmarView, proposicao_texto, recuperar_materia, ExcluirTramitacaoEmLoteView, RetornarProposicao, MateriaPesquisaSimplesView, - DespachoInicialMultiCreateView) + DespachoInicialMultiCreateView, + TipoTurnoTramitacaoCrud) from sapl.norma.views import NormaPesquisaSimplesView from sapl.protocoloadm.views import ( FichaPesquisaAdmView, FichaSelecionaAdmView) @@ -160,6 +161,8 @@ urlpatterns_sistema = [ include(RegimeTramitacaoCrud.get_urls())), url(r'^sistema/materia/tipo-documento/', include(TipoDocumentoCrud.get_urls())), + url(r'^sistema/materia/tipo-turno/', + include(TipoTurnoTramitacaoCrud.get_urls())), url(r'^sistema/materia/tipo-fim-relatoria/', include(TipoFimRelatoriaCrud.get_urls())), url(r'^sistema/materia/unidade-tramitacao/', diff --git a/sapl/materia/views.py b/sapl/materia/views.py index 94f10f539..1038c8c03 100644 --- a/sapl/materia/views.py +++ b/sapl/materia/views.py @@ -76,7 +76,8 @@ from .models import (AcompanhamentoMateria, Anexada, AssuntoMateria, Autoria, MateriaLegislativa, Numeracao, Orgao, Origem, Proposicao, RegimeTramitacao, Relatoria, StatusTramitacao, TipoDocumento, TipoFimRelatoria, TipoMateriaLegislativa, - TipoProposicao, Tramitacao, UnidadeTramitacao) + TipoProposicao, Tramitacao, UnidadeTramitacao, + TipoTurnoTramitacao) AssuntoMateriaCrud = CrudAux.build(AssuntoMateria, 'assunto_materia') @@ -92,6 +93,9 @@ TipoDocumentoCrud = CrudAux.build( TipoFimRelatoriaCrud = CrudAux.build( TipoFimRelatoria, 'fim_relatoria') +TipoTurnoTramitacaoCrud = CrudAux.build( + TipoTurnoTramitacao, 'tipo_turno_tramitacao') + def autores_ja_adicionados(materia_pk): autorias = Autoria.objects.filter(materia_id=materia_pk).values_list( @@ -1310,18 +1314,28 @@ class TramitacaoCrud(MasterDetailCrud): layout_key = 'TramitacaoUpdate' def form_valid(self, form): - dict_objeto_antigo = Tramitacao.objects.get( - pk=self.kwargs['pk']).__dict__ + tram = Tramitacao.objects.get( + pk=self.kwargs['pk']) + dict_objeto_antigo = tram.__dict__ + tipo_turno_antigo = tram.tipo_turno self.object = form.save() dict_objeto_novo = self.object.__dict__ + tipo_turno_novo = self.object.tipo_turno user = self.request.user atributos = [ - 'data_tramitacao', 'unidade_tramitacao_destino_id', 'status_id', 'texto', - 'data_encaminhamento', 'data_fim_prazo', 'urgente', 'turno' + 'data_tramitacao', 'unidade_tramitacao_destino_id', 'status_id', + 'texto', 'data_encaminhamento', 'data_fim_prazo', 'urgente' ] + + # TipoTurno foi colocado separado pois não aparece no __dict__ + if tipo_turno_antigo != tipo_turno_novo: + self.object.user = user + self.object.ip = get_client_ip(self.request) + self.object.save() + atributos = [] # ignora os demais atributos # Se não houve qualquer alteração em um dos dados, mantém o usuário # e ip diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py index 68b18914e..b99a79a5e 100755 --- a/sapl/relatorios/views.py +++ b/sapl/relatorios/views.py @@ -891,11 +891,8 @@ def get_turno(materia): tramitacao = materia.tramitacao_set.last() if tramitacao: - if tramitacao.turno: - for t in Tramitacao.TURNO_CHOICES: - if t[0] == tramitacao.turno: - descricao_turno = str(t[1]) - break + if tramitacao.tipo_turno: + descricao_turno = tramitacao.tipo_turno.nome descricao_tramitacao = tramitacao.status.descricao if tramitacao.status else 'Não informada' return descricao_turno, descricao_tramitacao diff --git a/sapl/rules/map_rules.py b/sapl/rules/map_rules.py index ecc64c49c..645911662 100644 --- a/sapl/rules/map_rules.py +++ b/sapl/rules/map_rules.py @@ -258,6 +258,7 @@ rules_group_geral = { (materia.Parecer, __base__, __perms_publicas__), (materia.StatusTramitacao, __base__, __perms_publicas__), (materia.UnidadeTramitacao, __base__, __perms_publicas__), + (materia.TipoTurnoTramitacao, __base__, __perms_publicas__), (norma.AssuntoNorma, __base__, __perms_publicas__), diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index cbb0b4e46..1693e9977 100755 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -221,9 +221,9 @@ def customize_link_materia(context, pk, has_permission, is_expediente): data_inicio_sessao = SessaoPlenaria.objects.get(id=pk).data_inicio tramitacao = Tramitacao.objects.filter(materia=materia, - turno__isnull=False, + tipo_turno__isnull=False, data_tramitacao__lte=data_inicio_sessao - ).exclude(turno__exact='' + ).exclude(tipo_turno__nome__exact='' ).select_related( 'materia', 'status', @@ -231,11 +231,8 @@ def customize_link_materia(context, pk, has_permission, is_expediente): '-data_tramitacao' ).first() turno = ' ' - if tramitacao: - for t in Tramitacao.TURNO_CHOICES: - if t[0] == tramitacao.turno: - turno = t[1] - break + if tramitacao and tramitacao.tipo_turno: + turno = tramitacao.tipo_turno.nome title_materia = '''%s
Processo: %s
@@ -1521,14 +1518,6 @@ def resumo_ordenacao(request): 'sapl.sessao:resumo_ordenacao')) -def get_turno(turno): - for i in Tramitacao.TURNO_CHOICES: - if i[0] == turno: - return str(i[1]) - else: - return '' - - def get_identificacao_basica(sessao_plenaria): # ===================================================================== # Identificação Básica @@ -1614,13 +1603,13 @@ def get_materias_expediente(sessao_plenaria): tramitacoes = Tramitacao.objects.filter( materia=m.materia).order_by('-pk') for aux_tramitacao in tramitacoes: - if aux_tramitacao.turno: + if aux_tramitacao.tipo_turno: tramitacao = aux_tramitacao break - turno = None - if tramitacao: - turno = get_turno(tramitacao.turno) + turno = '' + if tramitacao and tramitacao.tipo_turno: + turno = tramitacao.tipo_turno.nome rv = m.registrovotacao_set.first() rp = m.retiradapauta_set.filter(materia=m.materia).first() @@ -1730,13 +1719,13 @@ def get_materias_ordem_do_dia(sessao_plenaria): tramitacoes = Tramitacao.objects.filter( materia=o.materia).order_by('-pk') for aux_tramitacao in tramitacoes: - if aux_tramitacao.turno: + if aux_tramitacao.tipo_turno: tramitacao = aux_tramitacao break turno = None - if tramitacao: - turno = get_turno(tramitacao.turno) + if tramitacao and tramitacao.tipo_turno: + turno = tramitacao.tipo_turno.nome # Verificar resultado rv = o.registrovotacao_set.filter(materia=o.materia).first() diff --git a/sapl/templates/materia/layouts.yaml b/sapl/templates/materia/layouts.yaml index a885a418d..24e3b9b29 100644 --- a/sapl/templates/materia/layouts.yaml +++ b/sapl/templates/materia/layouts.yaml @@ -19,6 +19,10 @@ TipoDocumento: {% trans 'Regime Tramitação' %}: - descricao +TipoTurnoTramitacao: + {% trans 'Tipo de Turno de Tramitacao' %}: + - nome + TipoFimRelatoria: {% trans 'Tipo Fim de Relatoria' %}: - descricao @@ -118,13 +122,13 @@ Tramitacao: {% trans 'Tramitação' %}: - data_tramitacao unidade_tramitacao_local - unidade_tramitacao_destino data_encaminhamento data_fim_prazo - - status turno urgente + - status tipo_turno urgente - texto TramitacaoUpdate: {% trans 'Tramitação' %}: - unidade_tramitacao_destino data_encaminhamento data_fim_prazo - - status turno urgente + - status tipo_turno urgente - texto DespachoInicial: diff --git a/sapl/templates/menu_tabelas_auxiliares.yaml b/sapl/templates/menu_tabelas_auxiliares.yaml index e423741ee..8453dcb43 100644 --- a/sapl/templates/menu_tabelas_auxiliares.yaml +++ b/sapl/templates/menu_tabelas_auxiliares.yaml @@ -119,6 +119,9 @@ - title: {% trans 'Assunto Matéria' %} url: sapl.materia:assuntomateria_list css_class: btn btn-link + - title: {% trans 'Tipo de Turnos de Tramitação' %} + url: sapl.materia:tipoturnotramitacao_list + css_class: btn btn-link - title: {% trans 'Módulo Normas Jurídicas' %} css_class: head_title children: diff --git a/sapl/templates/sessao/blocos_resumo/materias_ordem_dia.html b/sapl/templates/sessao/blocos_resumo/materias_ordem_dia.html index 909adf1b2..886cbe5e2 100644 --- a/sapl/templates/sessao/blocos_resumo/materias_ordem_dia.html +++ b/sapl/templates/sessao/blocos_resumo/materias_ordem_dia.html @@ -21,7 +21,7 @@
Turno: {{m.turno}} {% endif %} - +
Autor{{ m.autor|length|pluralize:"es" }}: {{ m.autor|join:', ' }} diff --git a/sapl/templates/sessao/votacao/votacao_bloco.html b/sapl/templates/sessao/votacao/votacao_bloco.html index ac9b10ce9..a86784ec8 100644 --- a/sapl/templates/sessao/votacao/votacao_bloco.html +++ b/sapl/templates/sessao/votacao/votacao_bloco.html @@ -61,17 +61,12 @@ {% endfor %}
{% if o.materia.numero_protocolo %} - Protocolo:   {{o.materia.numero_protocolo}}
+ Protocolo: {{o.materia.numero_protocolo}}
{% endif %} - {% if o.materia.tramitacao_set.last %} - {% if o.materia.tramitacao_set.last.turno %} + {% if o.materia.tramitacao_set.last and o.materia.tramitacao_set.last.tipo_turno %} Turno:  - {% for t in turno_choices %} - {% if t.0 == o.materia.tramitacao_set.last.turno %} - {{ t.1 }} - {% endif %} - {% endfor %}
- {% endif %} + {{o.materia.tramitacao_set.last.tipo_turno.nome}} +
{% endif %} Ementa: {{ o.materia.ementa|safe }}