From 8107a6947f825dc8106cb7535ad555c3a2f1c4d9 Mon Sep 17 00:00:00 2001 From: Eliseu Egewarth Date: Wed, 31 May 2017 13:28:43 -0300 Subject: [PATCH] Refatora SessaoPlenariaSerializer (#1144) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Refatora SessaoPlenariaSerializer Mapeia informações do JSON para padrão E-Cidadania Signed-off-by: Eliseu Egewarth * Corrige erro de migração A migração do app 'base' só é executada após o job de migração passar pelo app 'api'. Dessa maneira, o atributo 'SessaoPlenariaSerializer.casa' gerava um erro na base de dados. Signed-off-by: Eliseu Egewarth --- sapl/api/serializers.py | 126 ++++++++++++++++++++++++++++++++++------ 1 file changed, 109 insertions(+), 17 deletions(-) diff --git a/sapl/api/serializers.py b/sapl/api/serializers.py index 60ea6692a..e6adaf21a 100644 --- a/sapl/api/serializers.py +++ b/sapl/api/serializers.py @@ -1,8 +1,8 @@ from rest_framework import serializers -from sapl.base.models import Autor +from sapl.base.models import Autor, CasaLegislativa from sapl.materia.models import MateriaLegislativa -from sapl.sessao.models import SessaoPlenaria +from sapl.sessao.models import SessaoPlenaria, OrdemDia class ChoiceSerializer(serializers.Serializer): @@ -58,21 +58,113 @@ class MateriaLegislativaSerializer(serializers.ModelSerializer): class SessaoPlenariaSerializer(serializers.ModelSerializer): - tipo = serializers.StringRelatedField(many=False) - sessao_legislativa = serializers.StringRelatedField(many=False) - legislatura = serializers.StringRelatedField(many=False) + codReuniao = serializers.SerializerMethodField('get_pk_sessao') + codReuniaoPrincipal = serializers.SerializerMethodField('get_pk_sessao') + txtTituloReuniao = serializers.SerializerMethodField('get_name') + txtSiglaOrgao = serializers.SerializerMethodField('get_sigla_orgao') + txtApelido = serializers.SerializerMethodField('get_name') + txtNomeOrgao = serializers.SerializerMethodField('get_nome_orgao') + codEstadoReuniao = serializers.SerializerMethodField('get_estadoSessaoPlenaria') + txtTipoReuniao = serializers.SerializerMethodField('get_tipo_sessao') + txtObjeto = serializers.SerializerMethodField('get_assunto_sessao') + txtLocal = serializers.SerializerMethodField('get_endereco_orgao') + bolReuniaoConjunta = serializers.SerializerMethodField('get_reuniao_conjunta') + bolHabilitarEventoInterativo = serializers.SerializerMethodField('get_iterativo') + idYoutube = serializers.SerializerMethodField('get_url') + codEstadoTransmissaoYoutube = serializers.SerializerMethodField('get_estadoTransmissaoYoutube') + datReuniaoString = serializers.SerializerMethodField('get_date') + + # Constantes SessaoPlenaria (de 1-9) (apenas 3 serão usados) + SESSAO_FINALIZADA = 4 + SESSAO_EM_ANDAMENTO = 3 + SESSAO_CONVOCADA = 2 + + # Constantes EstadoTranmissaoYoutube (de 0 a 2) + TRANSMISSAO_ENCERRADA = 2 + TRANSMISSAO_EM_ANDAMENTO = 1 + SEM_TRANSMISSAO = 0 class Meta: model = SessaoPlenaria - fields = ('pk', - 'tipo', - 'sessao_legislativa', - 'legislatura', - 'data_inicio', - 'hora_inicio', - 'hora_fim', - 'url_video', - 'iniciada', - 'finalizada', - 'interativa' - ) + fields = ( + 'codReuniao', + 'codReuniaoPrincipal', + 'txtTituloReuniao', + 'txtSiglaOrgao', + 'txtApelido', + 'txtNomeOrgao', + 'codEstadoReuniao', + 'txtTipoReuniao', + 'txtObjeto', + 'txtLocal', + 'bolReuniaoConjunta', + 'bolHabilitarEventoInterativo', + 'idYoutube', + 'codEstadoTransmissaoYoutube', + 'datReuniaoString' + ) + + def __init__(self, *args, **kwargs): + super(SessaoPlenariaSerializer, self).__init__(args, kwargs) + casa = CasaLegislativa.objects.first() + + def get_pk_sessao(self, obj): + return obj.pk + + def get_name(self, obj): + return obj.__str__() + + def get_estadoSessaoPlenaria(self, obj): + if obj.finalizada: + return self.SESSAO_FINALIZADA + elif obj.iniciada: + return self.SESSAO_EM_ANDAMENTO + else: + return self.SESSAO_CONVOCADA + + def get_tipo_sessao(self, obj): + return obj.tipo.__str__() + + def get_url(self, obj): + return obj.url_video if obj.url_video else None + + def get_iterativo(self, obj): + return obj.interativa if obj.interativa else False + + def get_date(self, obj): + return "{} {}{}".format( + obj.data_inicio.strftime("%d/%m/%Y"), + obj.hora_inicio, + ":00" + ) + + def get_estadoTransmissaoYoutube(self, obj): + if obj.url_video: + if obj.finalizada: + return self.TRANSMISSAO_ENCERRADA + else: + return self.TRANSMISSAO_EM_ANDAMENTO + else: + return self.SEM_TRANSMISSAO + def get_assunto_sessao(self, obj): + pauta_sessao = '' + ordem_dia = OrdemDia.objects.filter(sessao_plenaria=obj.pk) + pauta_sessao = ', '.join([i.materia.__str__() for i in ordem_dia]) + + return str(pauta_sessao) + + def get_endereco_orgao(self, obj): + return self.casa().endereco + + def get_reuniao_conjunta(self, obj): + return False + + def get_sigla_orgao(self, obj): + return self.casa().sigla + + def get_nome_orgao(self, obj): + return self.casa().nome + + def casa(self): + casa = CasaLegislativa.objects.first() + return casa