mirror of https://github.com/interlegis/sapl.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.4 KiB
75 lines
2.4 KiB
from django.utils import timezone
|
|
|
|
from sapl.materia.models import MateriaLegislativa
|
|
|
|
|
|
def _iso(valor):
|
|
if valor is None:
|
|
return None
|
|
if hasattr(valor, 'tzinfo'):
|
|
if timezone.is_aware(valor):
|
|
valor = timezone.localtime(valor)
|
|
return valor.isoformat()
|
|
return valor.isoformat()
|
|
|
|
|
|
def _materia_da_proposicao(proposicao):
|
|
materia = proposicao.materia_gerada
|
|
if materia is None:
|
|
conteudo = getattr(proposicao, 'conteudo_gerado_related', None)
|
|
if isinstance(conteudo, MateriaLegislativa):
|
|
materia = conteudo
|
|
if materia is None:
|
|
return None
|
|
return {
|
|
'id': materia.pk,
|
|
'tipo': {
|
|
'id': materia.tipo_id,
|
|
'sigla': materia.tipo.sigla if materia.tipo else None,
|
|
'descricao': materia.tipo.descricao if materia.tipo else None,
|
|
},
|
|
'numero': materia.numero,
|
|
'ano': materia.ano,
|
|
'numero_protocolo': materia.numero_protocolo,
|
|
}
|
|
|
|
|
|
def serializar_proposicao(proposicao):
|
|
"""Shape SAPL-nativo (spec, princípio 2): o hub traduz para o canônico."""
|
|
return {
|
|
'id': proposicao.pk,
|
|
'ano': proposicao.ano,
|
|
'numero_proposicao': proposicao.numero_proposicao,
|
|
'tipo': {
|
|
'id': proposicao.tipo_id,
|
|
'descricao': proposicao.tipo.descricao if proposicao.tipo else None,
|
|
},
|
|
'autor': proposicao.autor_id,
|
|
'ementa': proposicao.descricao,
|
|
'rascunho': proposicao.data_envio is None,
|
|
'cancelado': proposicao.cancelado,
|
|
'data_envio': _iso(proposicao.data_envio),
|
|
'data_recebimento': _iso(proposicao.data_recebimento),
|
|
'data_devolucao': _iso(proposicao.data_devolucao),
|
|
'justificativa_devolucao': proposicao.justificativa_devolucao or '',
|
|
'materia': _materia_da_proposicao(proposicao),
|
|
}
|
|
|
|
|
|
def serializar_tramitacao(tramitacao):
|
|
status = tramitacao.status
|
|
return {
|
|
'id': tramitacao.pk,
|
|
'materia': tramitacao.materia_id,
|
|
'data_tramitacao': _iso(tramitacao.data_tramitacao),
|
|
'timestamp': _iso(tramitacao.timestamp),
|
|
'texto': tramitacao.texto or '',
|
|
'urgente': tramitacao.urgente,
|
|
'unidade_destino': tramitacao.unidade_tramitacao_destino_id,
|
|
'status': {
|
|
'id': status.pk,
|
|
'sigla': status.sigla,
|
|
'descricao': status.descricao,
|
|
'indicador': status.indicador,
|
|
} if status else None,
|
|
}
|
|
|