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 }}