Browse Source

Fix #2933 - Adiciona tabela auxiliar para Turno de Tramitações (#2957)

* Fix #2933 - Adiciona tabela auxiliar para Turno de Tramitações

* Remove campo antigo de turno

* Fix erro relatado no PR

* Fix migrations

* Adiciona nova opção de turno

* Fix migrations
pull/3009/head
Cesar Augusto de Carvalho 6 years ago
committed by Edward
parent
commit
8843154ebc
  1. 16
      sapl/materia/forms.py
  2. 32
      sapl/materia/migrations/0060_auto_20190905_1134.py
  3. 45
      sapl/materia/migrations/0061_auto_20190905_1135.py
  4. 19
      sapl/materia/migrations/0062_remove_tramitacao_turno.py
  5. 21
      sapl/materia/models.py
  6. 5
      sapl/materia/urls.py
  7. 24
      sapl/materia/views.py
  8. 7
      sapl/relatorios/views.py
  9. 1
      sapl/rules/map_rules.py
  10. 33
      sapl/sessao/views.py
  11. 8
      sapl/templates/materia/layouts.yaml
  12. 3
      sapl/templates/menu_tabelas_auxiliares.yaml
  13. 11
      sapl/templates/sessao/votacao/votacao_bloco.html

16
sapl/materia/forms.py

@ -456,7 +456,7 @@ class TramitacaoForm(ModelForm):
fields = ['data_tramitacao', fields = ['data_tramitacao',
'unidade_tramitacao_local', 'unidade_tramitacao_local',
'status', 'status',
'turno', 'tipo_turno',
'urgente', 'urgente',
'unidade_tramitacao_destino', 'unidade_tramitacao_destino',
'data_encaminhamento', 'data_encaminhamento',
@ -574,7 +574,7 @@ class TramitacaoForm(ModelForm):
data_encaminhamento=tramitacao.data_encaminhamento, data_encaminhamento=tramitacao.data_encaminhamento,
unidade_tramitacao_destino=tramitacao.unidade_tramitacao_destino, unidade_tramitacao_destino=tramitacao.unidade_tramitacao_destino,
urgente=tramitacao.urgente, urgente=tramitacao.urgente,
turno=tramitacao.turno, tipo_turno=tramitacao.tipo_turno,
texto=tramitacao.texto, texto=tramitacao.texto,
data_fim_prazo=tramitacao.data_fim_prazo, data_fim_prazo=tramitacao.data_fim_prazo,
user=tramitacao.user, user=tramitacao.user,
@ -613,7 +613,7 @@ class TramitacaoUpdateForm(TramitacaoForm):
fields = ['data_tramitacao', fields = ['data_tramitacao',
'unidade_tramitacao_local', 'unidade_tramitacao_local',
'status', 'status',
'turno', 'tipo_turno',
'urgente', 'urgente',
'unidade_tramitacao_destino', 'unidade_tramitacao_destino',
'data_encaminhamento', 'data_encaminhamento',
@ -685,7 +685,7 @@ class TramitacaoUpdateForm(TramitacaoForm):
tram_anexada.data_encaminhamento = nova_tram_principal.data_encaminhamento tram_anexada.data_encaminhamento = nova_tram_principal.data_encaminhamento
tram_anexada.unidade_tramitacao_destino = nova_tram_principal.unidade_tramitacao_destino tram_anexada.unidade_tramitacao_destino = nova_tram_principal.unidade_tramitacao_destino
tram_anexada.urgente = nova_tram_principal.urgente 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.texto = nova_tram_principal.texto
tram_anexada.data_fim_prazo = nova_tram_principal.data_fim_prazo tram_anexada.data_fim_prazo = nova_tram_principal.data_fim_prazo
tram_anexada.user = nova_tram_principal.user tram_anexada.user = nova_tram_principal.user
@ -1608,7 +1608,7 @@ class TramitacaoEmLoteForm(ModelForm):
'unidade_tramitacao_local', 'unidade_tramitacao_local',
'status', 'status',
'urgente', 'urgente',
'turno', 'tipo_turno',
'unidade_tramitacao_destino', 'unidade_tramitacao_destino',
'data_encaminhamento', 'data_encaminhamento',
'data_fim_prazo', 'data_fim_prazo',
@ -1643,7 +1643,7 @@ class TramitacaoEmLoteForm(ModelForm):
row3 = to_row([ row3 = to_row([
('status', 4), ('status', 4),
('urgente', 4), ('urgente', 4),
('turno', 4) ('tipo_turno', 4)
]) ])
row4 = to_row([ row4 = to_row([
('texto', 12) ('texto', 12)
@ -1751,7 +1751,7 @@ class TramitacaoEmLoteForm(ModelForm):
unidade_tramitacao_destino=cd['unidade_tramitacao_destino'], unidade_tramitacao_destino=cd['unidade_tramitacao_destino'],
data_encaminhamento=cd['data_encaminhamento'], data_encaminhamento=cd['data_encaminhamento'],
urgente=cd['urgente'], urgente=cd['urgente'],
turno=cd['turno'], tipo_turno=cd['tipo_turno'],
texto=cd['texto'], texto=cd['texto'],
data_fim_prazo=cd['data_fim_prazo'], data_fim_prazo=cd['data_fim_prazo'],
user=user, user=user,
@ -1777,7 +1777,7 @@ class TramitacaoEmLoteForm(ModelForm):
data_encaminhamento=tramitacao.data_encaminhamento, data_encaminhamento=tramitacao.data_encaminhamento,
unidade_tramitacao_destino=tramitacao.unidade_tramitacao_destino, unidade_tramitacao_destino=tramitacao.unidade_tramitacao_destino,
urgente=tramitacao.urgente, urgente=tramitacao.urgente,
turno=tramitacao.turno, tipo_turno=tramitacao.tipo_turno,
texto=tramitacao.texto, texto=tramitacao.texto,
data_fim_prazo=tramitacao.data_fim_prazo, data_fim_prazo=tramitacao.data_fim_prazo,
user=tramitacao.user, user=tramitacao.user,

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

45
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)
]

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

21
sapl/materia/models.py

@ -1014,6 +1014,18 @@ class UnidadeTramitacao(models.Model):
return _('%(parlamentar)s') % {'parlamentar': self.parlamentar} 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() @reversion.register()
class Tramitacao(models.Model): class Tramitacao(models.Model):
TURNO_CHOICES = Choices( TURNO_CHOICES = Choices(
@ -1029,7 +1041,6 @@ class Tramitacao(models.Model):
('G', 'primeria_segunda_votacoes', _('1ª e 2ª Votações')), ('G', 'primeria_segunda_votacoes', _('1ª e 2ª Votações')),
('E', 'primeira_segunda_votacao_urgencia', _( ('E', 'primeira_segunda_votacao_urgencia', _(
'1ª e 2ª Votações em Regime de Urgência')), '1ª e 2ª Votações em Regime de Urgência')),
) )
status = models.ForeignKey(StatusTramitacao, on_delete=models.PROTECT, status = models.ForeignKey(StatusTramitacao, on_delete=models.PROTECT,
@ -1062,9 +1073,11 @@ class Tramitacao(models.Model):
urgente = models.BooleanField(verbose_name=_('Urgente ?'), urgente = models.BooleanField(verbose_name=_('Urgente ?'),
choices=YES_NO_CHOICES, choices=YES_NO_CHOICES,
default=False) default=False)
turno = models.CharField( tipo_turno = models.ForeignKey(
max_length=1, blank=True, verbose_name=_('Turno'), TipoTurnoTramitacao,
choices=TURNO_CHOICES) on_delete=models.PROTECT,
blank=True, null=True,
verbose_name=_('Turno'))
texto = models.TextField(verbose_name=_('Texto da Ação')) texto = models.TextField(verbose_name=_('Texto da Ação'))
data_fim_prazo = models.DateField( data_fim_prazo = models.DateField(
blank=True, null=True, verbose_name=_('Data Fim Prazo')) blank=True, null=True, verbose_name=_('Data Fim Prazo'))

5
sapl/materia/urls.py

@ -27,7 +27,8 @@ from sapl.materia.views import (AcompanhamentoConfirmarView,
proposicao_texto, recuperar_materia, proposicao_texto, recuperar_materia,
ExcluirTramitacaoEmLoteView, RetornarProposicao, ExcluirTramitacaoEmLoteView, RetornarProposicao,
MateriaPesquisaSimplesView, MateriaPesquisaSimplesView,
DespachoInicialMultiCreateView) DespachoInicialMultiCreateView,
TipoTurnoTramitacaoCrud)
from sapl.norma.views import NormaPesquisaSimplesView from sapl.norma.views import NormaPesquisaSimplesView
from sapl.protocoloadm.views import ( from sapl.protocoloadm.views import (
FichaPesquisaAdmView, FichaSelecionaAdmView) FichaPesquisaAdmView, FichaSelecionaAdmView)
@ -160,6 +161,8 @@ urlpatterns_sistema = [
include(RegimeTramitacaoCrud.get_urls())), include(RegimeTramitacaoCrud.get_urls())),
url(r'^sistema/materia/tipo-documento/', url(r'^sistema/materia/tipo-documento/',
include(TipoDocumentoCrud.get_urls())), include(TipoDocumentoCrud.get_urls())),
url(r'^sistema/materia/tipo-turno/',
include(TipoTurnoTramitacaoCrud.get_urls())),
url(r'^sistema/materia/tipo-fim-relatoria/', url(r'^sistema/materia/tipo-fim-relatoria/',
include(TipoFimRelatoriaCrud.get_urls())), include(TipoFimRelatoriaCrud.get_urls())),
url(r'^sistema/materia/unidade-tramitacao/', url(r'^sistema/materia/unidade-tramitacao/',

24
sapl/materia/views.py

@ -76,7 +76,8 @@ from .models import (AcompanhamentoMateria, Anexada, AssuntoMateria, Autoria,
MateriaLegislativa, Numeracao, Orgao, Origem, Proposicao, MateriaLegislativa, Numeracao, Orgao, Origem, Proposicao,
RegimeTramitacao, Relatoria, StatusTramitacao, RegimeTramitacao, Relatoria, StatusTramitacao,
TipoDocumento, TipoFimRelatoria, TipoMateriaLegislativa, TipoDocumento, TipoFimRelatoria, TipoMateriaLegislativa,
TipoProposicao, Tramitacao, UnidadeTramitacao) TipoProposicao, Tramitacao, UnidadeTramitacao,
TipoTurnoTramitacao)
AssuntoMateriaCrud = CrudAux.build(AssuntoMateria, 'assunto_materia') AssuntoMateriaCrud = CrudAux.build(AssuntoMateria, 'assunto_materia')
@ -92,6 +93,9 @@ TipoDocumentoCrud = CrudAux.build(
TipoFimRelatoriaCrud = CrudAux.build( TipoFimRelatoriaCrud = CrudAux.build(
TipoFimRelatoria, 'fim_relatoria') TipoFimRelatoria, 'fim_relatoria')
TipoTurnoTramitacaoCrud = CrudAux.build(
TipoTurnoTramitacao, 'tipo_turno_tramitacao')
def autores_ja_adicionados(materia_pk): def autores_ja_adicionados(materia_pk):
autorias = Autoria.objects.filter(materia_id=materia_pk).values_list( autorias = Autoria.objects.filter(materia_id=materia_pk).values_list(
@ -1310,19 +1314,29 @@ class TramitacaoCrud(MasterDetailCrud):
layout_key = 'TramitacaoUpdate' layout_key = 'TramitacaoUpdate'
def form_valid(self, form): def form_valid(self, form):
dict_objeto_antigo = Tramitacao.objects.get( tram = Tramitacao.objects.get(
pk=self.kwargs['pk']).__dict__ pk=self.kwargs['pk'])
dict_objeto_antigo = tram.__dict__
tipo_turno_antigo = tram.tipo_turno
self.object = form.save() self.object = form.save()
dict_objeto_novo = self.object.__dict__ dict_objeto_novo = self.object.__dict__
tipo_turno_novo = self.object.tipo_turno
user = self.request.user user = self.request.user
atributos = [ atributos = [
'data_tramitacao', 'unidade_tramitacao_destino_id', 'status_id', 'texto', 'data_tramitacao', 'unidade_tramitacao_destino_id', 'status_id',
'data_encaminhamento', 'data_fim_prazo', 'urgente', 'turno' '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 # Se não houve qualquer alteração em um dos dados, mantém o usuário
# e ip # e ip
for atributo in atributos: for atributo in atributos:

7
sapl/relatorios/views.py

@ -891,11 +891,8 @@ def get_turno(materia):
tramitacao = materia.tramitacao_set.last() tramitacao = materia.tramitacao_set.last()
if tramitacao: if tramitacao:
if tramitacao.turno: if tramitacao.tipo_turno:
for t in Tramitacao.TURNO_CHOICES: descricao_turno = tramitacao.tipo_turno.nome
if t[0] == tramitacao.turno:
descricao_turno = str(t[1])
break
descricao_tramitacao = tramitacao.status.descricao if tramitacao.status else 'Não informada' descricao_tramitacao = tramitacao.status.descricao if tramitacao.status else 'Não informada'
return descricao_turno, descricao_tramitacao return descricao_turno, descricao_tramitacao

1
sapl/rules/map_rules.py

@ -258,6 +258,7 @@ rules_group_geral = {
(materia.Parecer, __base__, __perms_publicas__), (materia.Parecer, __base__, __perms_publicas__),
(materia.StatusTramitacao, __base__, __perms_publicas__), (materia.StatusTramitacao, __base__, __perms_publicas__),
(materia.UnidadeTramitacao, __base__, __perms_publicas__), (materia.UnidadeTramitacao, __base__, __perms_publicas__),
(materia.TipoTurnoTramitacao, __base__, __perms_publicas__),
(norma.AssuntoNorma, __base__, __perms_publicas__), (norma.AssuntoNorma, __base__, __perms_publicas__),

33
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 data_inicio_sessao = SessaoPlenaria.objects.get(id=pk).data_inicio
tramitacao = Tramitacao.objects.filter(materia=materia, tramitacao = Tramitacao.objects.filter(materia=materia,
turno__isnull=False, tipo_turno__isnull=False,
data_tramitacao__lte=data_inicio_sessao data_tramitacao__lte=data_inicio_sessao
).exclude(turno__exact='' ).exclude(tipo_turno__nome__exact=''
).select_related( ).select_related(
'materia', 'materia',
'status', 'status',
@ -231,11 +231,8 @@ def customize_link_materia(context, pk, has_permission, is_expediente):
'-data_tramitacao' '-data_tramitacao'
).first() ).first()
turno = ' ' turno = ' '
if tramitacao: if tramitacao and tramitacao.tipo_turno:
for t in Tramitacao.TURNO_CHOICES: turno = tramitacao.tipo_turno.nome
if t[0] == tramitacao.turno:
turno = t[1]
break
title_materia = '''<a href=%s>%s</a> </br> title_materia = '''<a href=%s>%s</a> </br>
<b>Processo:</b> %s </br> <b>Processo:</b> %s </br>
@ -1521,14 +1518,6 @@ def resumo_ordenacao(request):
'sapl.sessao:resumo_ordenacao')) '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): def get_identificacao_basica(sessao_plenaria):
# ===================================================================== # =====================================================================
# Identificação Básica # Identificação Básica
@ -1614,13 +1603,13 @@ def get_materias_expediente(sessao_plenaria):
tramitacoes = Tramitacao.objects.filter( tramitacoes = Tramitacao.objects.filter(
materia=m.materia).order_by('-pk') materia=m.materia).order_by('-pk')
for aux_tramitacao in tramitacoes: for aux_tramitacao in tramitacoes:
if aux_tramitacao.turno: if aux_tramitacao.tipo_turno:
tramitacao = aux_tramitacao tramitacao = aux_tramitacao
break break
turno = None turno = ''
if tramitacao: if tramitacao and tramitacao.tipo_turno:
turno = get_turno(tramitacao.turno) turno = tramitacao.tipo_turno.nome
rv = m.registrovotacao_set.first() rv = m.registrovotacao_set.first()
rp = m.retiradapauta_set.filter(materia=m.materia).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( tramitacoes = Tramitacao.objects.filter(
materia=o.materia).order_by('-pk') materia=o.materia).order_by('-pk')
for aux_tramitacao in tramitacoes: for aux_tramitacao in tramitacoes:
if aux_tramitacao.turno: if aux_tramitacao.tipo_turno:
tramitacao = aux_tramitacao tramitacao = aux_tramitacao
break break
turno = None turno = None
if tramitacao: if tramitacao and tramitacao.tipo_turno:
turno = get_turno(tramitacao.turno) turno = tramitacao.tipo_turno.nome
# Verificar resultado # Verificar resultado
rv = o.registrovotacao_set.filter(materia=o.materia).first() rv = o.registrovotacao_set.filter(materia=o.materia).first()

8
sapl/templates/materia/layouts.yaml

@ -19,6 +19,10 @@ TipoDocumento:
{% trans 'Regime Tramitação' %}: {% trans 'Regime Tramitação' %}:
- descricao - descricao
TipoTurnoTramitacao:
{% trans 'Tipo de Turno de Tramitacao' %}:
- nome
TipoFimRelatoria: TipoFimRelatoria:
{% trans 'Tipo Fim de Relatoria' %}: {% trans 'Tipo Fim de Relatoria' %}:
- descricao - descricao
@ -118,13 +122,13 @@ Tramitacao:
{% trans 'Tramitação' %}: {% trans 'Tramitação' %}:
- data_tramitacao unidade_tramitacao_local - data_tramitacao unidade_tramitacao_local
- unidade_tramitacao_destino data_encaminhamento data_fim_prazo - unidade_tramitacao_destino data_encaminhamento data_fim_prazo
- status turno urgente - status tipo_turno urgente
- texto - texto
TramitacaoUpdate: TramitacaoUpdate:
{% trans 'Tramitação' %}: {% trans 'Tramitação' %}:
- unidade_tramitacao_destino data_encaminhamento data_fim_prazo - unidade_tramitacao_destino data_encaminhamento data_fim_prazo
- status turno urgente - status tipo_turno urgente
- texto - texto
DespachoInicial: DespachoInicial:

3
sapl/templates/menu_tabelas_auxiliares.yaml

@ -119,6 +119,9 @@
- title: {% trans 'Assunto Matéria' %} - title: {% trans 'Assunto Matéria' %}
url: sapl.materia:assuntomateria_list url: sapl.materia:assuntomateria_list
css_class: btn btn-link 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' %} - title: {% trans 'Módulo Normas Jurídicas' %}
css_class: head_title css_class: head_title
children: children:

11
sapl/templates/sessao/votacao/votacao_bloco.html

@ -63,15 +63,10 @@
{% if o.materia.numero_protocolo %} {% if o.materia.numero_protocolo %}
<strong>Protocolo:</strong>&nbsp;{{o.materia.numero_protocolo}}</br> <strong>Protocolo:</strong>&nbsp;{{o.materia.numero_protocolo}}</br>
{% endif %} {% endif %}
{% if o.materia.tramitacao_set.last %} {% if o.materia.tramitacao_set.last and o.materia.tramitacao_set.last.tipo_turno %}
{% if o.materia.tramitacao_set.last.turno %}
<strong>Turno:</strong>&nbsp; <strong>Turno:</strong>&nbsp;
{% for t in turno_choices %} {{o.materia.tramitacao_set.last.tipo_turno.nome}}
{% if t.0 == o.materia.tramitacao_set.last.turno %} </br>
{{ t.1 }}
{% endif %}
{% endfor %}</br>
{% endif %}
{% endif %} {% endif %}
<strong>Ementa:</strong>&nbsp;{{ o.materia.ementa|safe }}</br> <strong>Ementa:</strong>&nbsp;{{ o.materia.ementa|safe }}</br>
<p></p> <p></p>

Loading…
Cancel
Save