diff --git a/sapl/parlamentares/views.py b/sapl/parlamentares/views.py index ef1e46622..dfbd4a224 100644 --- a/sapl/parlamentares/views.py +++ b/sapl/parlamentares/views.py @@ -537,8 +537,7 @@ class ParlamentarCrud(Crud): list_field_names = [ 'nome_parlamentar', 'filiacao_atual', - 'ativo', - 'mandato_titular'] + 'ativo'] class DetailView(Crud.DetailView): @@ -614,8 +613,7 @@ class ParlamentarCrud(Crud): username = self.request.user.username if legislatura_id >= 0: return queryset.filter( - mandato__legislatura_id=legislatura_id).annotate( - mandato_titular=F('mandato__titular')).distinct() + mandato__legislatura_id=legislatura_id).distinct() else: try: self.logger.debug( @@ -631,8 +629,7 @@ class ParlamentarCrud(Crud): ". Objeto encontrado com sucesso.") if l is None: return Legislatura.objects.all() - return queryset.filter(mandato__legislatura_id=l).annotate( - mandato_titular=F('mandato__titular')) + return queryset.filter(mandato__legislatura_id=l) def get_headers(self): return [_('Parlamentar'), _('Partido'), @@ -647,19 +644,38 @@ class ParlamentarCrud(Crud): context['legislaturas'] = legislaturas context['legislatura_id'] = self.take_legislatura_id() + # Pega a Legislatura + legislatura = Legislatura.objects.get( + id=context['legislatura_id']) + for row in context['rows']: # Pega o Parlamentar por meio da pk parlamentar = Parlamentar.objects.get( id=(row[0][1].split('/')[-1])) + # Conserta a issue do github https://github.com/interlegis/sapl/issues/3028 + # Inicialmente a titularidade era conseguida através do código + # queryset.filter(mandato__legislatura_id=legislatura_id).annotate( + # mandato_titular=F('mandato__titular')).distinct() + # em get_queryset(), MAS não funciona se o parlamentar tem vários + # mandatos na mesma legislatura, sendo ao menos um titular e outro não, + # pois isso gera entradas repetidas. Este código corrige essa situação. + mandato = Mandato.objects.filter( + parlamentar=parlamentar, + data_inicio_mandato__gte=legislatura.data_inicio, + data_fim_mandato__lte=legislatura.data_fim + ).order_by('-data_inicio_mandato').first() + + if mandato: + titular = 'Sim' if mandato.titular else 'Não' + row.append((titular, None)) + else: + row.append(('-', None)) + for index, value in enumerate(row): row[index] += (None if index else parlamentar,) - # Pega a Legislatura - legislatura = Legislatura.objects.get( - id=context['legislatura_id']) - # Coloca a filiação atual ao invés da última # As condições para mostrar a filiação são: # A data de filiacao deve ser menor que a data de fim diff --git a/sapl/sessao/views.py b/sapl/sessao/views.py index 1f4978aa7..46a8b0189 100755 --- a/sapl/sessao/views.py +++ b/sapl/sessao/views.py @@ -502,18 +502,16 @@ def customize_link_materia(context, pk, has_permission, is_expediente): def get_presencas_generic(model, sessao, legislatura): - presencas = model.objects.filter( - sessao_plenaria=sessao) - - presentes = [p.parlamentar for p in presencas] + presentes = [p.parlamentar for p in model.objects.filter(sessao_plenaria=sessao)] - presentes = sorted( - presentes, key=lambda x: remover_acentos(x.nome_parlamentar)) - - mandato = Mandato.objects.filter( - legislatura=legislatura).order_by('parlamentar__nome_parlamentar') - - for m in mandato: + parlamentares_mandato = Mandato.objects.filter( + legislatura=legislatura, + data_inicio_mandato__lte=sessao.data_inicio, + data_fim_mandato__gte=sessao.data_inicio + ).distinct().order_by( + 'parlamentar__nome_parlamentar') + + for m in parlamentares_mandato: parlamentar = m.parlamentar p_afastado = verifica_afastamento_parlamentar(parlamentar, sessao.data_inicio, sessao.data_fim) if parlamentar in presentes: @@ -1620,11 +1618,11 @@ def get_presenca_sessao(sessao_plenaria): parlamentares_sessao = [p.parlamentar for p in SessaoPlenariaPresenca.objects.filter( sessao_plenaria_id=sessao_plenaria.id - ).order_by('parlamentar__nome_parlamentar')] + ).order_by('parlamentar__nome_parlamentar').distinct()] ausentes_sessao = JustificativaAusencia.objects.filter( sessao_plenaria_id=sessao_plenaria.id - ).order_by('parlamentar__nome_parlamentar') + ).distinct().order_by('parlamentar__nome_parlamentar') return ({'presenca_sessao': parlamentares_sessao, 'justificativa_ausencia': ausentes_sessao}) @@ -1718,7 +1716,7 @@ def get_oradores_expediente(sessao_plenaria): def get_presenca_ordem_do_dia(sessao_plenaria): parlamentares_ordem = [p.parlamentar for p in PresencaOrdemDia.objects.filter( sessao_plenaria_id=sessao_plenaria.id - ).order_by('parlamentar__nome_parlamentar')] + ).distinct().order_by('parlamentar__nome_parlamentar')] return {'presenca_ordem': parlamentares_ordem}