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 5 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. 2
      sapl/templates/sessao/blocos_resumo/materias_ordem_dia.html
  14. 13
      sapl/templates/sessao/votacao/votacao_bloco.html

16
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,

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}
@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'))

5
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/',

24
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

7
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

1
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__),

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
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 = '''<a href=%s>%s</a> </br>
<b>Processo:</b> %s </br>
@ -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()

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

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

2
sapl/templates/sessao/blocos_resumo/materias_ordem_dia.html

@ -21,7 +21,7 @@
<br />
<b>Turno:</b> {{m.turno}}
{% endif %}
<br />
<b>Autor{{ m.autor|length|pluralize:"es" }}</b>: {{ m.autor|join:', ' }}

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

@ -61,17 +61,12 @@
{% endfor %}
</br>
{% if o.materia.numero_protocolo %}
<strong>Protocolo:</strong> &nbsp; {{o.materia.numero_protocolo}}</br>
<strong>Protocolo:</strong>&nbsp;{{o.materia.numero_protocolo}}</br>
{% 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 %}
<strong>Turno:</strong>&nbsp;
{% for t in turno_choices %}
{% if t.0 == o.materia.tramitacao_set.last.turno %}
{{ t.1 }}
{% endif %}
{% endfor %}</br>
{% endif %}
{{o.materia.tramitacao_set.last.tipo_turno.nome}}
</br>
{% endif %}
<strong>Ementa:</strong>&nbsp;{{ o.materia.ementa|safe }}</br>
<p></p>

Loading…
Cancel
Save