diff --git a/sapl/relatorios/templates/pdf_materia_gerar.py b/sapl/relatorios/templates/pdf_materia_gerar.py
index cadc6501c..96457a5ce 100755
--- a/sapl/relatorios/templates/pdf_materia_gerar.py
+++ b/sapl/relatorios/templates/pdf_materia_gerar.py
@@ -86,7 +86,10 @@ def materias(lst_materias):
# materias
tmp_data += '\t\t ' + \
dic['titulo'] + ' - Autor: ' + \
- dic['nom_autor'] + ' \n'
+ dic['nom_autor']
+ if dic.get('nom_relator'):
+ tmp_data += ' - Relator: ' + dic['nom_relator']
+ tmp_data += ' \n'
if dic['txt_ementa'] != None:
txt_ementa = dic['txt_ementa'].replace('&', '&')
tmp_data += '\t\t ' + txt_ementa + ' \n'
diff --git a/sapl/relatorios/views.py b/sapl/relatorios/views.py
index bc28b3ffc..b27213f0c 100755
--- a/sapl/relatorios/views.py
+++ b/sapl/relatorios/views.py
@@ -136,6 +136,13 @@ def get_materias(mats):
dic['nom_autor'] = ', '.join(
[str(autor) for autor in materia.autores.all()])
+ # Buscar relator atual da matéria
+ relatoria = materia.relatoria_set.filter(data_destituicao_relator__isnull=True).order_by('-data_designacao_relator').first()
+ if relatoria:
+ dic['nom_relator'] = str(relatoria.parlamentar)
+ else:
+ dic['nom_relator'] = ''
+
des_status = ''
txt_tramitacao = ''
@@ -146,27 +153,9 @@ def get_materias(mats):
'-data_tramitacao', '-id')
for tramitacao in tramitacoes:
- des_status = tramitacao.status.descricao
+ dic['nom_relator'] = str(relatoria.parlamentar) if relatoria.parlamentar else ''
txt_tramitacao = tramitacao.texto
-
- # for tramitacao in context.zsql
- # .tramitacao_obter_zsql(cod_materia
- # =materia.cod_materia,ind_ult_tramitacao=1):
- # if tramitacao.cod_unid_tram_dest:
- # cod_unid_tram = tramitacao.cod_unid_tram_dest
- # else:
- # cod_unid_tram = tramitacao.cod_unid_tram_local
- # for unidade_tramitacao in
- # context.zsql
- # .unidade_tramitacao_obter_zsql(
- # cod_unid_tramitacao = cod_unid_tram):
- # if unidade_tramitacao.cod_orgao:
- # dic['localizacao_atual']=unidade_tramitacao.nom_orgao
- # else:
- # dic['localizacao_atual']=unidade_tramitacao.nom_comissao
- # des_status=tramitacao.des_status
- # txt_tramitacao=tramitacao.txt_tramitacao
-
+ dic['nom_relator'] = ''
dic['des_situacao'] = des_status
dic['ultima_acao'] = txt_tramitacao
diff --git a/sapl/sessao/models.py b/sapl/sessao/models.py
index 613068afe..2aad07696 100644
--- a/sapl/sessao/models.py
+++ b/sapl/sessao/models.py
@@ -402,6 +402,53 @@ class AbstractOrdemDia(models.Model):
def ementa(self):
return self.materia.ementa
+ @property
+ def turno_vigente(self):
+ """
+ Retorna o código do turno vigente para esta inclusão na pauta.
+ Prioriza o campo `tramitacao` gravado na inclusão. Caso não haja,
+ busca a última tramitação com timestamp anterior ao início da sessão.
+ """
+ # Usa a tramitação registrada na inclusão, se houver
+ if self.tramitacao and getattr(self.tramitacao, 'turno', None):
+ return self.tramitacao.turno
+
+ # Caso não haja tramitação registrada, calcula em função da sessão
+ try:
+ from django.conf import settings
+ import pytz
+ from datetime import datetime
+ except Exception:
+ return None
+
+ if not self.sessao_plenaria or not self.sessao_plenaria.data_inicio:
+ return None
+
+ # Monta datetime local da sessão a partir de data_inicio e hora_inicio
+ data_sessao = self.sessao_plenaria.data_inicio.strftime("%Y-%m-%d ")
+ hora = self.sessao_plenaria.hora_inicio or "00:00"
+ try:
+ data_hora_sessao = datetime.strptime(
+ data_sessao + hora, "%Y-%m-%d %H:%M")
+ except Exception:
+ return None
+
+ try:
+ tz_local = pytz.timezone(getattr(settings, 'TIME_ZONE', 'UTC'))
+ data_hora_sessao_utc = tz_local.localize(data_hora_sessao).astimezone(pytz.utc)
+ except Exception:
+ data_hora_sessao_utc = None
+
+ qs = self.materia.tramitacao_set.all()
+ if data_hora_sessao_utc is not None:
+ qs = qs.filter(timestamp__lt=data_hora_sessao_utc)
+
+ # Respeita a ordenação padrão de Tramitacao ('-data_tramitacao', '-id')
+ tr = qs.first()
+ if tr and getattr(tr, 'turno', None):
+ return tr.turno
+ return None
+
def __str__(self):
return 'Ordem do Dia/Expediente: %s - %s em %s' % (
self.numero_ordem, self.materia, self.sessao_plenaria)
diff --git a/sapl/templates/sessao/leitura/leitura_bloco.html b/sapl/templates/sessao/leitura/leitura_bloco.html
index ac6a45cb4..52c65c034 100644
--- a/sapl/templates/sessao/leitura/leitura_bloco.html
+++ b/sapl/templates/sessao/leitura/leitura_bloco.html
@@ -62,16 +62,14 @@
{% if o.materia.numero_protocolo %}
Protocolo: {{o.materia.numero_protocolo}}
{% endif %}
- {% if o.materia.tramitacao_set.first %}
- {% if o.materia.tramitacao_set.first.turno %}
+ {% if o.turno_vigente %}
Turno:
{% for t in turno_choices %}
- {% if t.0 == o.materia.tramitacao_set.first.turno %}
+ {% if t.0 == o.turno_vigente %}
{{ t.1 }}
{% endif %}
{% endfor %}
{% endif %}
- {% endif %}
Ementa: {{ o.materia.ementa|safe }}
diff --git a/sapl/templates/sessao/votacao/votacao_bloco.html b/sapl/templates/sessao/votacao/votacao_bloco.html
index e58d2bf10..91054b84d 100644
--- a/sapl/templates/sessao/votacao/votacao_bloco.html
+++ b/sapl/templates/sessao/votacao/votacao_bloco.html
@@ -63,16 +63,14 @@
{% if o.materia.numero_protocolo %}
Protocolo: {{o.materia.numero_protocolo}}
{% endif %}
- {% if o.materia.tramitacao_set.first %}
- {% if o.materia.tramitacao_set.first.turno %}
+ {% if o.turno_vigente %}
Turno:
{% for t in turno_choices %}
- {% if t.0 == o.materia.tramitacao_set.first.turno %}
+ {% if t.0 == o.turno_vigente %}
{{ t.1 }}
{% endif %}
{% endfor %}
{% endif %}
- {% endif %}
Ementa: {{ o.materia.ementa|safe }}