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