|
1 | 1 | from django.db import models |
2 | | -from django.db.models import Avg, F, FilteredRelation, Prefetch, Q, Sum |
| 2 | +from django.db.models import Avg, Case, Count, Exists, F, FilteredRelation, OuterRef, Prefetch, Q, Sum, Value, When |
| 3 | +from django.db.models.functions import Coalesce |
3 | 4 |
|
4 | 5 |
|
5 | 6 | class DeputadoQuerySet(models.QuerySet): |
@@ -54,9 +55,31 @@ def prefetch_gastos(self, **kwargs): |
54 | 55 | def annotate_gastos_acima_dobro(self, descricao_gasto): |
55 | 56 | media = GastoCotaParlamentar.objects.filter_descricao(descricao_gasto).media() |
56 | 57 | acima_dobro = Q(gastos__descricao=descricao_gasto, gastos__valor_liquido__gt=media * 2) |
57 | | - count_acima_dobro = Count('pk', filter=acima_dobro) |
58 | | - count_geral = Count('pk', filter=Q(gastos__descricao=descricao_gasto)) |
59 | | - return self.annotate(gastos_acima_dobro=count_acima_dobro, qtd_gastos=count_geral) |
| 58 | + return self.annotate( |
| 59 | + qtd_gastos=Count('gastos', filter=Q(gastos__descricao=descricao_gasto)), |
| 60 | + qtd_acima_dobro=Coalesce( |
| 61 | + Sum( |
| 62 | + Case( |
| 63 | + When( |
| 64 | + Q(gastos__valor_liquido__gt=media * 2, gastos__descricao=descricao_gasto), |
| 65 | + then=Value(1) |
| 66 | + ), |
| 67 | + output_field=models.IntegerField() |
| 68 | + ) |
| 69 | + ), |
| 70 | + 0 |
| 71 | + ) |
| 72 | + ) |
| 73 | + |
| 74 | + def annotate_empresas(self): |
| 75 | + from empresas.models import Empresa |
| 76 | + empresas_qs = Empresa.objects.filter( |
| 77 | + sociedades__socio_pessoa_fisica__nome=OuterRef('nome'), |
| 78 | + uf=OuterRef('uf') |
| 79 | + ) |
| 80 | + return self.annotate( |
| 81 | + empresas=Exists(empresas_qs) |
| 82 | + ) |
60 | 83 |
|
61 | 84 |
|
62 | 85 | class GastoCotaParlamentarQuerySet(models.QuerySet): |
|
0 commit comments