Browse Source

Merge edafb27bb8 into 3a7057bfd7

pull/2853/merge
Vinícius Cantuária 6 years ago
committed by GitHub
parent
commit
76e97b3c01
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 23
      sapl/materia/migrations/0055_auto_20190702_1751.py
  2. 1
      sapl/materia/models.py
  3. 161
      sapl/relatorios/views.py
  4. 18
      sapl/sessao/forms.py
  5. 47
      sapl/sessao/migrations/0045_auto_20190626_1151.py
  6. 43
      sapl/sessao/models.py
  7. 8
      sapl/sessao/urls.py
  8. 82
      sapl/sessao/views.py
  9. 137
      sapl/templates/sessao/pauta_sessao_detail.html
  10. 72
      sapl/templates/sessao/pauta_sessao_situacao_materia.html

23
sapl/materia/migrations/0055_auto_20190702_1751.py

@ -0,0 +1,23 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.22 on 2019-07-02 20:51
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('materia', '0054_merge_20190802_1117'),
]
operations = [
migrations.AlterModelOptions(
name='tramitacao',
options={
'ordering': ['-id', '-timestamp', '-data_tramitacao'],
'verbose_name': 'Tramitação',
'verbose_name_plural': 'Tramitações'
},
),
]

1
sapl/materia/models.py

@ -1076,6 +1076,7 @@ class Tramitacao(models.Model):
class Meta: class Meta:
verbose_name = _('Tramitação') verbose_name = _('Tramitação')
verbose_name_plural = _('Tramitações') verbose_name_plural = _('Tramitações')
ordering = ['-id', '-timestamp', '-data_tramitacao']
def __str__(self): def __str__(self):
return _('%(materia)s | %(status)s | %(data)s') % { return _('%(materia)s | %(status)s | %(data)s') % {

161
sapl/relatorios/views.py

@ -886,7 +886,7 @@ def get_sessao_plenaria(sessao, casa):
def get_turno(materia): def get_turno(materia):
descricao_turno = '' descricao_turno = ''
descricao_tramitacao = '' descricao_tramitacao = ''
tramitacao = materia.tramitacao_set.last() tramitacao = Tramitacao.objects.filter(materia=materia).first()
if tramitacao: if tramitacao:
if tramitacao.turno: if tramitacao.turno:
@ -1144,9 +1144,7 @@ def relatorio_pauta_sessao(request, pk):
''' '''
response = HttpResponse(content_type='application/pdf') response = HttpResponse(content_type='application/pdf')
response[ response['Content-Disposition'] = 'inline; filename="relatorio_pauta_sessao.pdf"'
'Content-Disposition'] = (
'inline; filename="relatorio_pauta_sessao.pdf"')
casa = CasaLegislativa.objects.first() casa = CasaLegislativa.objects.first()
@ -1155,13 +1153,8 @@ def relatorio_pauta_sessao(request, pk):
sessao = SessaoPlenaria.objects.get(id=pk) sessao = SessaoPlenaria.objects.get(id=pk)
lst_expediente_materia, lst_votacao, inf_basicas_dic = get_pauta_sessao( lst_expediente_materia, lst_votacao, inf_basicas_dic = get_pauta_sessao(sessao, casa)
sessao, casa) pdf = pdf_pauta_sessao_gerar.principal(rodape, imagem, inf_basicas_dic, lst_expediente_materia, lst_votacao)
pdf = pdf_pauta_sessao_gerar.principal(rodape,
imagem,
inf_basicas_dic,
lst_expediente_materia,
lst_votacao)
response.write(pdf) response.write(pdf)
@ -1169,102 +1162,62 @@ def relatorio_pauta_sessao(request, pk):
def get_pauta_sessao(sessao, casa): def get_pauta_sessao(sessao, casa):
inf_basicas_dic = {
"nom_sessao": sessao.tipo.nome,
"num_sessao_plen": sessao.numero,
"num_legislatura": sessao.legislatura,
"num_sessao_leg": sessao.sessao_legislativa.numero,
"dat_inicio_sessao": sessao.data_inicio,
"hr_inicio_sessao": sessao.hora_inicio,
"dat_fim_sessao": sessao.data_fim,
"hr_fim_sessao": sessao.hora_fim,
"nom_camara": casa.nome,
}
dicts = {
'em': {
'qs': ExpedienteMateria.objects.filter(sessao_plenaria=sessao),
'lst': [],
},
'od': {
'qs': OrdemDia.objects.filter(sessao_plenaria=sessao),
'lst': [],
},
}
for k, v in dicts.items():
for tm in v['qs']:
materia = MateriaLegislativa.objects.filter(id=tm.materia.id).first()
materia_aux = materia if k == 'em' else tm.materia
numeracao = Numeracao.objects.filter(materia=materia_aux).first()
autoria = materia.autoria_set.all()
turno, tramitacao = get_turno(materia)
dict_aux = {
"tipo_materia": "{} - {}".format(materia.tipo.sigla, materia.tipo.descricao),
"num_ordem": str(tm.numero_ordem),
"id_materia": "{}/{}".format(str(materia.numero), str(materia.ano)),
"txt_ementa": materia.ementa,
"ordem_observacao": str(tm.observacao),
"num_autores": 'Autores' if len(autoria) > 1 else 'Autor',
"nom_autor": ', '.join([a.autor.nome for a in autoria if a.autor.nome]) if autoria else "Desconhecido",
"des_turno": turno,
"des_situacao": tramitacao,
}
if k == 'em':
dict_aux.update({
"des_numeracao": str(numeracao) if numeracao else ' ',
})
else:
dict_aux.update({
"des_numeracao": "{}/{}".format(str(numeracao.numero_materia),
str(numeracao.ano_materia)) if numeracao else ' ',
})
inf_basicas_dic = {} v['lst'].append(dict_aux)
inf_basicas_dic["nom_sessao"] = sessao.tipo.nome
inf_basicas_dic["num_sessao_plen"] = sessao.numero
inf_basicas_dic["num_legislatura"] = sessao.legislatura
inf_basicas_dic["num_sessao_leg"] = sessao.sessao_legislativa.numero
inf_basicas_dic["dat_inicio_sessao"] = sessao.data_inicio
inf_basicas_dic["hr_inicio_sessao"] = sessao.hora_inicio
inf_basicas_dic["dat_fim_sessao"] = sessao.data_fim
inf_basicas_dic["hr_fim_sessao"] = sessao.hora_fim
inf_basicas_dic["nom_camara"] = casa.nome
lst_expediente_materia = []
for expediente_materia in ExpedienteMateria.objects.filter(sessao_plenaria=sessao):
materia = MateriaLegislativa.objects.filter(
id=expediente_materia.materia.id).first()
dic_expediente_materia = {}
dic_expediente_materia["tipo_materia"] = materia.tipo.sigla + \
' - ' + materia.tipo.descricao
dic_expediente_materia["num_ordem"] = str(
expediente_materia.numero_ordem)
dic_expediente_materia["id_materia"] = str(
materia.numero) + "/" + str(materia.ano)
dic_expediente_materia["txt_ementa"] = materia.ementa
dic_expediente_materia["ordem_observacao"] = str(
expediente_materia.observacao)
dic_expediente_materia["des_numeracao"] = ' '
numeracao = Numeracao.objects.filter(materia=materia)
if numeracao:
numeracao = numeracao.first()
dic_expediente_materia["des_numeracao"] = str(numeracao)
dic_expediente_materia["nom_autor"] = ''
autoria = materia.autoria_set.all()
dic_expediente_materia['num_autores'] = 'Autores' if len(
autoria) > 1 else 'Autor'
if autoria:
for a in autoria:
if a.autor.nome:
dic_expediente_materia['nom_autor'] += a.autor.nome + ', '
dic_expediente_materia['nom_autor'] = dic_expediente_materia['nom_autor'][:-2]
else:
dic_expediente_materia["nom_autor"] = 'Desconhecido'
turno, tramitacao = get_turno(materia)
dic_expediente_materia["des_turno"] = turno
dic_expediente_materia["des_situacao"] = tramitacao
lst_expediente_materia.append(dic_expediente_materia)
lst_votacao = []
for votacao in OrdemDia.objects.filter(
sessao_plenaria=sessao):
materia = MateriaLegislativa.objects.filter(
id=votacao.materia.id).first()
dic_votacao = {}
dic_votacao["tipo_materia"] = materia.tipo.sigla + \
' - ' + materia.tipo.descricao
dic_votacao["num_ordem"] = votacao.numero_ordem
dic_votacao["id_materia"] = str(
materia.numero) + "/" + str(materia.ano)
dic_votacao["txt_ementa"] = materia.ementa
dic_votacao["ordem_observacao"] = votacao.observacao
dic_votacao["des_numeracao"] = ' '
numeracao = Numeracao.objects.filter(materia=votacao.materia).first()
if numeracao:
dic_votacao["des_numeracao"] = str(
numeracao.numero_materia) + '/' + str(numeracao.ano_materia)
turno, tramitacao = get_turno(materia)
dic_votacao["des_turno"] = turno
dic_votacao["des_situacao"] = tramitacao
dic_votacao["nom_autor"] = '' return dicts['em']['lst'], dicts['od']['lst'], inf_basicas_dic
autoria = materia.autoria_set.all()
dic_votacao['num_autores'] = 'Autores' if len(autoria) > 1 else 'Autor'
if autoria:
for a in autoria:
if a.autor.nome:
dic_votacao['nom_autor'] += a.autor.nome + ', '
dic_votacao['nom_autor'] = dic_votacao['nom_autor'][:-2]
else:
dic_votacao["nom_autor"] = 'Desconhecido'
lst_votacao.append(dic_votacao)
return (lst_expediente_materia,
lst_votacao,
inf_basicas_dic)
def make_pdf(base_url,main_template,header_template,main_css='',header_css=''): def make_pdf(base_url,main_template,header_template,main_css='',header_css=''):
html = HTML(base_url=base_url, string=main_template) html = HTML(base_url=base_url, string=main_template)

18
sapl/sessao/forms.py

@ -17,7 +17,7 @@ from sapl.crispy_layout_mixin import SaplFormHelper
from sapl.crispy_layout_mixin import form_actions, to_row, SaplFormLayout from sapl.crispy_layout_mixin import form_actions, to_row, SaplFormLayout
from sapl.materia.forms import MateriaLegislativaFilterSet from sapl.materia.forms import MateriaLegislativaFilterSet
from sapl.materia.models import (MateriaLegislativa, StatusTramitacao, from sapl.materia.models import (MateriaLegislativa, StatusTramitacao,
TipoMateriaLegislativa) TipoMateriaLegislativa, Tramitacao)
from sapl.parlamentares.models import Parlamentar, Mandato from sapl.parlamentares.models import Parlamentar, Mandato
from sapl.utils import (RANGE_DIAS_MES, RANGE_MESES, from sapl.utils import (RANGE_DIAS_MES, RANGE_MESES,
MateriaPesquisaOrderingFilter, autor_label, MateriaPesquisaOrderingFilter, autor_label,
@ -356,9 +356,13 @@ class ExpedienteMateriaForm(ModelForm):
return cleaned_data return cleaned_data
def save(self, commit=False): def save(self, commit=False):
expediente = super(ExpedienteMateriaForm, self).save(commit) expediente = super().save(commit)
expediente.materia = self.cleaned_data['materia'] materia = self.cleaned_data['materia']
expediente.materia = materia
expediente.tramitacao = Tramitacao.objects.filter(materia=materia).first()
expediente.save() expediente.save()
return expediente return expediente
@ -394,9 +398,13 @@ class OrdemDiaForm(ExpedienteMateriaForm):
return self.cleaned_data return self.cleaned_data
def save(self, commit=False): def save(self, commit=False):
ordem = super(OrdemDiaForm, self).save(commit) ordem = super().save(commit)
ordem.materia = self.cleaned_data['materia'] materia = self.cleaned_data['materia']
ordem.materia = materia
ordem.tramitacao = Tramitacao.objects.filter(materia=materia).first()
ordem.save() ordem.save()
return ordem return ordem

47
sapl/sessao/migrations/0045_auto_20190626_1151.py

@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.11.21 on 2019-06-26 14:51
from __future__ import unicode_literals
import django.db.models.deletion
from django.db import migrations, models
def congirura_tramitacoes_pautas(apps, schema_editor):
ExpedienteMateria = apps.get_model('sessao', 'ExpedienteMateria')
OrdemDia = apps.get_model('sessao', 'OrdemDia')
for expediente in ExpedienteMateria.objects.all():
expediente.tramitacao = expediente.materia.tramitacao_set.first()
expediente.save()
for ordemdia in OrdemDia.objects.all():
ordemdia.tramitacao = ordemdia.materia.tramitacao_set.first()
ordemdia.save()
class Migration(migrations.Migration):
dependencies = [
('materia', '0051_auto_20190703_1414'),
('sessao', '0044_merge_20190802_1117'),
]
operations = [
migrations.AddField(
model_name='expedientemateria',
name='tramitacao',
field=models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.PROTECT,
to='materia.Tramitacao'),
),
migrations.AddField(
model_name='ordemdia',
name='tramitacao',
field=models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.PROTECT,
to='materia.Tramitacao'),
),
migrations.RunPython(congirura_tramitacoes_pautas),
]

43
sapl/sessao/models.py

@ -1,15 +1,15 @@
from operator import xor from operator import xor
import reversion
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from django.db import models from django.db import models
from django.db.models import Q from django.db.models import Q
from django.utils import timezone, formats from django.utils import timezone, formats
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from model_utils import Choices from model_utils import Choices
import reversion
from sapl.base.models import Autor from sapl.base.models import Autor
from sapl.materia.models import MateriaLegislativa from sapl.materia.models import MateriaLegislativa, Tramitacao
from sapl.parlamentares.models import (CargoMesa, Legislatura, Parlamentar, from sapl.parlamentares.models import (CargoMesa, Legislatura, Parlamentar,
Partido, SessaoLegislativa) Partido, SessaoLegislativa)
from sapl.utils import (YES_NO_CHOICES, SaplGenericRelation, from sapl.utils import (YES_NO_CHOICES, SaplGenericRelation,
@ -247,21 +247,29 @@ class AbstractOrdemDia(models.Model):
TIPO_VOTACAO_CHOICES = Choices( TIPO_VOTACAO_CHOICES = Choices(
(1, 'simbolica', 'Simbólica'), (1, 'simbolica', 'Simbólica'),
(2, 'nominal', 'Nominal'), (2, 'nominal', 'Nominal'),
(3, 'secreta', 'Secreta'), (3, 'secreta', 'Secreta'),)
)
sessao_plenaria = models.ForeignKey(SessaoPlenaria, sessao_plenaria = models.ForeignKey(
on_delete=models.CASCADE) SessaoPlenaria,
materia = models.ForeignKey(MateriaLegislativa, on_delete=models.CASCADE)
on_delete=models.PROTECT, materia = models.ForeignKey(
verbose_name=_('Matéria')) MateriaLegislativa,
data_ordem = models.DateField(verbose_name=_('Data da Sessão')) on_delete=models.PROTECT,
verbose_name=_('Matéria'))
data_ordem = models.DateField(
verbose_name=_('Data da Sessão'))
observacao = models.TextField( observacao = models.TextField(
blank=True, verbose_name=_('Observação')) blank=True,
numero_ordem = models.PositiveIntegerField(verbose_name=_('Nº Ordem')) verbose_name=_('Observação'))
resultado = models.TextField(blank=True, verbose_name=_('Resultado')) numero_ordem = models.PositiveIntegerField(
verbose_name=_('Nº Ordem'))
resultado = models.TextField(
blank=True,
verbose_name=_('Resultado'))
tipo_votacao = models.PositiveIntegerField( tipo_votacao = models.PositiveIntegerField(
verbose_name=_('Tipo de votação'), choices=TIPO_VOTACAO_CHOICES, default=1) verbose_name=_('Tipo de votação'),
choices=TIPO_VOTACAO_CHOICES,
default=1)
votacao_aberta = models.NullBooleanField( votacao_aberta = models.NullBooleanField(
blank=True, blank=True,
choices=YES_NO_CHOICES, choices=YES_NO_CHOICES,
@ -270,6 +278,10 @@ class AbstractOrdemDia(models.Model):
blank=True, blank=True,
choices=YES_NO_CHOICES, choices=YES_NO_CHOICES,
verbose_name=_('Registro de Votação Iniciado?')) verbose_name=_('Registro de Votação Iniciado?'))
tramitacao = models.ForeignKey(
Tramitacao,
null=True,
on_delete=models.PROTECT)
class Meta: class Meta:
abstract = True abstract = True
@ -279,8 +291,7 @@ class AbstractOrdemDia(models.Model):
return self.materia.ementa return self.materia.ementa
def __str__(self): def __str__(self):
return 'Ordem do Dia/Expediente: %s - %s em %s' % ( return 'Ordem do Dia/Expediente: %s - %s em %s' % (self.numero_ordem, self.materia, self.sessao_plenaria)
self.numero_ordem, self.materia, self.sessao_plenaria)
@reversion.register() @reversion.register()

8
sapl/sessao/urls.py

@ -35,7 +35,7 @@ from sapl.sessao.views import (AdicionarVariasMateriasExpediente,
VotacaoEmBlocoSimbolicaView, VotacaoEmBlocoNominalView, VotacaoEmBlocoSimbolicaView, VotacaoEmBlocoNominalView,
resumo_ordenacao, resumo_ordenacao,
recuperar_nome_tipo_sessao, recuperar_nome_tipo_sessao,
voto_nominal_parlamentar) voto_nominal_parlamentar, mostra_status_materia, atualiza_status_materia)
from .apps import AppConfig from .apps import AppConfig
@ -116,6 +116,12 @@ urlpatterns = [
PesquisarPautaSessaoView.as_view(), name='pesquisar_pauta'), PesquisarPautaSessaoView.as_view(), name='pesquisar_pauta'),
url(r'^sessao/pauta-sessao/(?P<pk>\d+)$', url(r'^sessao/pauta-sessao/(?P<pk>\d+)$',
PautaSessaoDetailView.as_view(), name='pauta_sessao_detail'), PautaSessaoDetailView.as_view(), name='pauta_sessao_detail'),
url(r'^sessao/pauta-sessao/(?P<sessao_id>\d+)/mostra-situacao-(?P<tipo>[\w-]+)/(?P<materia_id>\d+)/$',
mostra_status_materia, name='mostra_status_materia'),
url(r'^sessao/pauta-sessao/(?P<sessao_id>\d+)/atualiza-situacao-(?P<tipo>[\w-]+)/(?P<materia_id>\d+)/$',
atualiza_status_materia, name='atualiza_status_materia'),
# Subnav sessão # Subnav sessão
url(r'^sessao/(?P<pk>\d+)/expediente$', url(r'^sessao/(?P<pk>\d+)/expediente$',

82
sapl/sessao/views.py

@ -24,7 +24,6 @@ from django.views.generic.edit import FormMixin
from django_filters.views import FilterView from django_filters.views import FilterView
from django.shortcuts import render from django.shortcuts import render
from sapl.base.models import AppConfig as AppsAppConfig from sapl.base.models import AppConfig as AppsAppConfig
from sapl.crud.base import (RP_DETAIL, RP_LIST, Crud, CrudAux, from sapl.crud.base import (RP_DETAIL, RP_LIST, Crud, CrudAux,
MasterDetailCrud, MasterDetailCrud,
@ -3246,21 +3245,15 @@ class PautaSessaoDetailView(DetailView):
]}) ]})
# ===================================================================== # =====================================================================
# Matérias Expediente # Matérias Expediente
materias = ExpedienteMateria.objects.filter( materias = ExpedienteMateria.objects.filter(sessao_plenaria_id=self.object.id)
sessao_plenaria_id=self.object.id)
materias_expediente = [] materias_expediente = []
for m in materias: for m in materias:
ementa = m.materia.ementa ementa = m.materia.ementa
titulo = m.materia titulo = m.materia
numero = m.numero_ordem numero = m.numero_ordem
situacao = m.tramitacao.status if m.tramitacao else _("Não informada")
ultima_tramitacao = m.materia.tramitacao_set.last()
situacao = ultima_tramitacao.status if ultima_tramitacao else None
if situacao is None:
situacao = _("Não informada")
rv = m.registrovotacao_set.all() rv = m.registrovotacao_set.all()
if rv: if rv:
resultado = rv[0].tipo_resultado_votacao.nome resultado = rv[0].tipo_resultado_votacao.nome
@ -3287,15 +3280,12 @@ class PautaSessaoDetailView(DetailView):
context.update({'materia_expediente': materias_expediente}) context.update({'materia_expediente': materias_expediente})
# ===================================================================== # =====================================================================
# Expedientes # Expedientes
expediente = ExpedienteSessao.objects.filter( expediente = ExpedienteSessao.objects.filter(sessao_plenaria_id=self.object.id)
sessao_plenaria_id=self.object.id)
expedientes = [] expedientes = []
for e in expediente: for e in expediente:
tipo = TipoExpediente.objects.get( tipo = TipoExpediente.objects.get(id=e.tipo_id)
id=e.tipo_id) conteudo = sub('&nbsp;', ' ', strip_tags(e.conteudo.replace('<br/>', '\n')))
conteudo = sub(
'&nbsp;', ' ', strip_tags(e.conteudo.replace('<br/>', '\n')))
ex = {'tipo': tipo, 'conteudo': conteudo} ex = {'tipo': tipo, 'conteudo': conteudo}
expedientes.append(ex) expedientes.append(ex)
@ -3303,26 +3293,19 @@ class PautaSessaoDetailView(DetailView):
context.update({'expedientes': expedientes}) context.update({'expedientes': expedientes})
# ===================================================================== # =====================================================================
# Orador Expediente # Orador Expediente
oradores = OradorExpediente.objects.filter( oradores = OradorExpediente.objects.filter(sessao_plenaria_id=self.object.id).order_by('numero_ordem')
sessao_plenaria_id=self.object.id).order_by('numero_ordem')
context.update({'oradores': oradores}) context.update({'oradores': oradores})
# ===================================================================== # =====================================================================
# Matérias Ordem do Dia # Matérias Ordem do Dia
ordem = OrdemDia.objects.filter( ordem = OrdemDia.objects.filter(sessao_plenaria_id=self.object.id)
sessao_plenaria_id=self.object.id)
materias_ordem = [] materias_ordem = []
for o in ordem: for o in ordem:
ementa = o.materia.ementa ementa = o.materia.ementa
titulo = o.materia titulo = o.materia
numero = o.numero_ordem numero = o.numero_ordem
situacao = o.tramitacao.status if o.tramitacao else _("Não informada")
ultima_tramitacao = o.materia.tramitacao_set.last()
situacao = ultima_tramitacao.status if ultima_tramitacao else None
if situacao is None:
situacao = _("Não informada")
# Verificar resultado # Verificar resultado
rv = o.registrovotacao_set.all() rv = o.registrovotacao_set.all()
if rv: if rv:
@ -3332,8 +3315,7 @@ class PautaSessaoDetailView(DetailView):
resultado = _('Matéria não votada') resultado = _('Matéria não votada')
resultado_observacao = _(' ') resultado_observacao = _(' ')
autoria = Autoria.objects.filter( autoria = Autoria.objects.filter(materia_id=o.materia_id)
materia_id=o.materia_id)
autor = [str(x.autor) for x in autoria] autor = [str(x.autor) for x in autoria]
mat = {'id': o.materia_id, mat = {'id': o.materia_id,
@ -3354,6 +3336,46 @@ class PautaSessaoDetailView(DetailView):
return self.render_to_response(context) return self.render_to_response(context)
def pega_materia_exp_od(sessao_id, tipo, materia_id):
models = {
'expediente': ExpedienteMateria,
'ordemdia': OrdemDia
}
exp_od = models[tipo].objects.select_related('materia').get(sessao_plenaria=sessao_id, materia=materia_id)
return exp_od
def mostra_status_materia(request, sessao_id, tipo, materia_id):
template_name = "sessao/pauta_sessao_situacao_materia.html"
exp_od = pega_materia_exp_od(sessao_id, tipo, materia_id)
autores = [a.autor.nome for a in exp_od.materia.autoria_set.all()]
context = {
'sessao_id': sessao_id,
'materia_id': materia_id,
'titulo': exp_od.materia,
'exp_od_id': exp_od.id,
'tipo': tipo,
'autores': autores,
'ementa': exp_od.materia.ementa,
'tramitacao_id': exp_od.tramitacao.id,
'status': exp_od.tramitacao.status,
'nova_tramitacao_id': exp_od.materia.tramitacao_set.first().id,
'novo_status': exp_od.materia.tramitacao_set.first().status
}
return render(request, template_name, context)
def atualiza_status_materia(request, sessao_id, tipo, materia_id):
exp_od = pega_materia_exp_od(sessao_id, tipo, materia_id)
exp_od.tramitacao = exp_od.materia.tramitacao_set.first()
exp_od.save()
return HttpResponseRedirect(reverse('sapl.sessao:pauta_sessao_detail', kwargs={'pk': sessao_id}))
class PesquisarSessaoPlenariaView(FilterView): class PesquisarSessaoPlenariaView(FilterView):
model = SessaoPlenaria model = SessaoPlenaria
filterset_class = SessaoPlenariaFilterSet filterset_class = SessaoPlenariaFilterSet
@ -3366,11 +3388,9 @@ class PesquisarSessaoPlenariaView(FilterView):
kwargs = {'data': self.request.GET or None} kwargs = {'data': self.request.GET or None}
qs = self.get_queryset().select_related( qs = self.get_queryset().select_related('tipo', 'sessao_legislativa', 'legislatura')
'tipo', 'sessao_legislativa', 'legislatura')
qs = qs.distinct().order_by( qs = qs.distinct().order_by('-legislatura__numero', '-data_inicio', '-hora_inicio')
'-legislatura__numero', '-data_inicio', '-hora_inicio')
kwargs.update({ kwargs.update({
'queryset': qs, 'queryset': qs,

137
sapl/templates/sessao/pauta_sessao_detail.html

@ -3,72 +3,75 @@
{% load crispy_forms_tags %} {% load crispy_forms_tags %}
{% block base_content %} {% block base_content %}
<div align=right><a href="{% url 'sapl.relatorios:relatorio_pauta_sessao' object.pk %}"> Impressão PDF</a></li></div> <div align=right><a href="{% url 'sapl.relatorios:relatorio_pauta_sessao' object.pk %}"> Impressão PDF</a></li>
<fieldset> </div>
<legend>Identificação Básica</legend> <fieldset>
<table class="table"> <legend>Identificação Básica</legend>
<thead class="thead-default"> <table class="table">
<tr> <thead class="thead-default">
{% for b in basica %} <tr>
<td>{{b}}</td> {% for b in basica %}
{% endfor %} <td>{{ b }}</td>
</tr> {% endfor %}
</thead> </tr>
</table> </thead>
</fieldset> </table>
<fieldset> </fieldset>
<legend>Matérias do Expediente</legend> <fieldset>
{% if materia_expediente %} <legend>Matérias do Expediente</legend>
<table class="table table-striped"> {% if materia_expediente %}
<thead> <table class="table table-striped">
<tr> <thead>
<th>Matéria</th> <tr>
<th>Ementa</th> <th>Matéria</th>
<th>Situação</th> <th>Ementa</th>
</tr> <th>Situação</th>
</thead> </tr>
{% for m in materia_expediente %} </thead>
<tr> {% for m in materia_expediente %}
<td style="width:20%;"> <tr>
{{m.numero}} - <a href="{% url 'sapl.materia:materialegislativa_detail' m.id %}">{{m.titulo}}</a> <td style="width:20%;">
<br /> {{ m.numero }} - <a
<b>Autor{{ m.autor|length|pluralize:"es" }}</b>: {{ m.autor|join:', ' }} href="{% url 'sapl.materia:materialegislativa_detail' m.id %}">{{ m.titulo }}</a>
</td> <br/>
<td style="width:70%;">{{m.ementa|safe}}<br>{{m.observacao|linebreaksbr|safe}}</td> <b>Autor{{ m.autor|length|pluralize:"es" }}</b>: {{ m.autor|join:', ' }}
<td style="width:10%;">{{m.situacao}}</td> </td>
</tr> <td style="width:70%;">{{ m.ementa|safe }}<br>{{ m.observacao|linebreaksbr|safe }}</td>
{% endfor %} <td style="width:10%;"><a href="{% url 'sapl.sessao:mostra_status_materia' object.pk 'expediente' m.id %}">{{ m.situacao }}</a></td>
</table> </tr>
{% else %} {% endfor %}
<strong>Não existem Matérias de Expediente para essa Sessão Plenária</strong> </table>
{% endif %} {% else %}
<strong>Não existem Matérias de Expediente para essa Sessão Plenária</strong>
{% endif %}
</fieldset> </fieldset>
<fieldset> <fieldset>
<legend>Matérias da Ordem do Dia</legend> <legend>Matérias da Ordem do Dia</legend>
{% if materias_ordem %} {% if materias_ordem %}
<table class="table table-striped"> <table class="table table-striped">
<thead> <thead>
<tr> <tr>
<th>Matéria</th> <th>Matéria</th>
<th>Ementa</th> <th>Ementa</th>
<th>Situação</th> <th>Situação</th>
</tr> </tr>
</thead> </thead>
{% for m in materias_ordem %} {% for m in materias_ordem %}
<tr> <tr>
<td style="width:20%;"> <td style="width:20%;">¡
{{m.numero}} - <a href="{% url 'sapl.materia:materialegislativa_detail' m.id %}">{{m.titulo}}</a> {{ m.numero }} - <a
<br /> href="{% url 'sapl.materia:materialegislativa_detail' m.id %}">{{ m.titulo }}</a>
<b>Autor{{ m.autor|length|pluralize:"es" }}</b>: {{ m.autor|join:', ' }} <br/>
</td> <b>Autor{{ m.autor|length|pluralize:"es" }}</b>: {{ m.autor|join:', ' }}
<td style="width:70%;">{{m.ementa|safe}}<br>{{m.observacao|linebreaksbr|safe}}</td> </td>
<td style="width:10%;">{{m.situacao}}</td> <td style="width:70%;">{{ m.ementa|safe }}<br>{{ m.observacao|linebreaksbr|safe }}</td>
</tr> <td style="width:10%;"><a href="{% url 'sapl.sessao:mostra_status_materia' object.pk 'ordemdia' m.id %}">{{ m.situacao }}</a></td>
{% endfor %} </tr>
</table> {% endfor %}
{% else %} </table>
<strong>Não existem Matérias de Ordem do Dia para essa Sessão Plenária</strong> {% else %}
{% endif %} <strong>Não existem Matérias de Ordem do Dia para essa Sessão Plenária</strong>
</fieldset> {% endif %}
</fieldset>
{% endblock base_content %} {% endblock base_content %}

72
sapl/templates/sessao/pauta_sessao_situacao_materia.html

@ -0,0 +1,72 @@
{% extends "crud/detail.html" %}
{% load i18n %}
{% load crispy_forms_tags %}
{% block base_content %}
<h1 class="page-header">Atualização da Situação da Matéria em Pauta</h1>
<div class="actions btn-group btn-group-sm" role="group">
<a href="{% url 'sapl.sessao:pauta_sessao_detail' sessao_id %}" class="btn btn-outline-primary">Voltar</a>
</div>
<h2 class="legend">Identificações Básicas</h2>
<div class="row">
<div class="col">
<p class="control-label">{% if tipo == expediente %} Matéria do Expediente {% else %} Matéria da Ordem Dia {% endif %}</p>
</div>
<div class="col">
<p class="control-label">Autor{{ autores|length|pluralize:"es" }}</p>
</div>
</div>
<div class="row">
<div class="col">
<div class="form-control-static">
<a href="{% url 'sapl.materia:materialegislativa_detail' materia_id %}">{{ titulo }}</a>
</div>
</div>
<div class="col">
<div class="form-control-static">
{{ autores|join:', ' }}
</div>
</div>
</div>
<br>
<h2 class="legend">Dado Textual</h2>
<div class="row">
<div class="col">
<p class="control-label">Ementa</p>
</div>
</div>
<div class="row">
<div class="col">
<div class="form-control-static">
{{ ementa }}
</div>
</div>
</div>
<br>
<h2 class="legend">Situações</h2>
<div class="row">
<div class="col">
<p class="control-label">Atual Situação</p>
</div>
<div class="col">
<p class="control-label">Nova Situação</p>
</div>
</div>
<div class="row">
<div class="col">
<div class="form-control-static">
<a href="{% url 'sapl.materia:tramitacao_detail' tramitacao_id %}">{{ status }}</a>
</div>
</div>
<div class="col">
<div class="form-control-static">
<a href="{% url 'sapl.materia:tramitacao_detail' nova_tramitacao_id %}">{{ novo_status }}</a>
</div>
</div>
</div>
<br>
<div><em>Ao apertar em 'Atualizar', não será possível reverter a alteração posteriormente.</em></div>
<div class="actions btn-group btn-group-sm" role="group">
<a href="{% url 'sapl.sessao:atualiza_status_materia' sessao_id tipo materia_id %}" class="btn btn-outline-primary">Atualizar</a>
</div>
{% endblock base_content %}
Loading…
Cancel
Save