|
|
|
@ -615,88 +615,6 @@ class ParlamentarCrud(Crud): |
|
|
|
return [_('Parlamentar'), _('Partido'), |
|
|
|
_('Ativo?'), _('Titular?')] |
|
|
|
|
|
|
|
def get_context_data(self, **kwargs): |
|
|
|
context = super().get_context_data(**kwargs) |
|
|
|
username = self.request.user.username |
|
|
|
|
|
|
|
# Adiciona legislatura para filtrar parlamentares |
|
|
|
legislaturas = Legislatura.objects.all().order_by('-numero') |
|
|
|
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,) |
|
|
|
|
|
|
|
# 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 |
|
|
|
# da legislatura e data de desfiliação deve nula, ou maior, |
|
|
|
# ou igual a data de fim da legislatura |
|
|
|
try: |
|
|
|
self.logger.debug("user=" + username + ". Tentando obter filiação do parlamentar com (data<={} e data_desfiliacao>={}) " |
|
|
|
"ou (data<={} e data_desfiliacao=Null))." |
|
|
|
.format(legislatura.data_fim, legislatura.data_fim, legislatura.data_fim)) |
|
|
|
filiacao = parlamentar.filiacao_set.get(Q( |
|
|
|
data__lte=legislatura.data_fim, |
|
|
|
data_desfiliacao__gte=legislatura.data_fim) | Q( |
|
|
|
data__lte=legislatura.data_fim, |
|
|
|
data_desfiliacao__isnull=True)) |
|
|
|
|
|
|
|
# Caso não exista filiação com essas condições |
|
|
|
except ObjectDoesNotExist: |
|
|
|
self.logger.error("user=" + username + ". Parlamentar com (data<={} e data_desfiliacao>={}) " |
|
|
|
"ou (data<={} e data_desfiliacao=Null)) não possui filiação." |
|
|
|
.format(legislatura.data_fim, legislatura.data_fim, legislatura.data_fim)) |
|
|
|
row[1] = ('Não possui filiação', None, None) |
|
|
|
|
|
|
|
# Caso exista mais de uma filiação nesse intervalo |
|
|
|
# Entretanto, NÃO DEVE OCORRER |
|
|
|
except MultipleObjectsReturned: |
|
|
|
self.logger.error("user=" + username + ". O Parlamentar com (data<={} e data_desfiliacao>={}) " |
|
|
|
"ou (data<={} e data_desfiliacao=Null)) possui duas filiações conflitantes" |
|
|
|
.format(legislatura.data_fim, legislatura.data_fim, legislatura.data_fim)) |
|
|
|
row[1] = ( |
|
|
|
'O Parlamentar possui duas filiações conflitantes', |
|
|
|
None, None) |
|
|
|
|
|
|
|
# Caso encontre UMA filiação nessas condições |
|
|
|
else: |
|
|
|
self.logger.debug("user=" + username + |
|
|
|
". Filiação encontrada com sucesso.") |
|
|
|
row[1] = (filiacao.partido.sigla, None, None) |
|
|
|
|
|
|
|
return context |
|
|
|
|
|
|
|
|
|
|
|
class ParlamentarMateriasView(FormView): |
|
|
|
template_name = "parlamentares/materias.html" |
|
|
|
success_url = reverse_lazy('sapl.parlamentares:parlamentar_materia') |
|
|
|
|