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.
101 lines
3.5 KiB
101 lines
3.5 KiB
from django_filters import FilterSet, CharFilter, NumberFilter, OrderingFilter, ModelChoiceFilter, ModelMultipleChoiceFilter
|
|
from django.utils.translation import ugettext_lazy as _
|
|
from .models import Cidade, Cliente, Pessoa, Endereco, Telefone, TelefoneCliente
|
|
|
|
|
|
class PessoaFiltro(FilterSet):
|
|
nome = CharFilter(
|
|
label=_('Nome'), lookup_expr='icontains', field_name='nome')
|
|
cpf = CharFilter(label=_('CPF'), lookup_expr='icontains', field_name='cpf')
|
|
endereco = CharFilter(label=_('Endereco'), method='filter_endereco')
|
|
cidade = NumberFilter(label=_('Cidade'), method='filter_cidade')
|
|
telefone = CharFilter(label=_('Telefone'), method='filter_telefone')
|
|
ordering = OrderingFilter(
|
|
label=_('Ordem'),
|
|
fields=(
|
|
('nome', 'nome'),
|
|
('cidade', 'cidade'),
|
|
),
|
|
field_labels={
|
|
'nome': _('Nome'),
|
|
'-nome': _('Nome (Decrescente)'),
|
|
# 'cidade': _('Cidade'),
|
|
# '-cidade': _('Cidade (Decrescente)'),
|
|
}
|
|
)
|
|
|
|
class Meta:
|
|
model = Pessoa
|
|
fields = {
|
|
'data_nascimento': ['lte', 'gte'],
|
|
'criado': ['lte', 'gte'],
|
|
'modificado': ['lte', 'gte'],
|
|
'situacao': ['exact'],
|
|
}
|
|
|
|
def filter_endereco(self, queryset, field, value):
|
|
if value:
|
|
queryset = queryset.filter(enderecos__endereco__icontains=value)
|
|
return queryset
|
|
|
|
def filter_cidade(self, queryset, field, value):
|
|
if value:
|
|
queryset = queryset.filter(pk__in=Endereco.objects.filter(
|
|
cidade=value).values_list('pessoa_id', flat=True))
|
|
|
|
return queryset
|
|
|
|
def filter_telefone(self, queryset, field, value):
|
|
if value:
|
|
queryset = queryset.filter(pk__in=Telefone.objects.filter(
|
|
numero__icontains=value).values_list('pessoa_id', flat=True))
|
|
|
|
return queryset
|
|
|
|
|
|
class ClienteFiltro(FilterSet):
|
|
razao_social = CharFilter(
|
|
label=_('Razão Social'), lookup_expr='icontains', field_name='razao_social')
|
|
cnpj = CharFilter(
|
|
label=_('CNPJ'), lookup_expr='icontains', field_name='cnpj')
|
|
ie = CharFilter(
|
|
label=_('IE'), lookup_expr='icontains', field_name='ie')
|
|
im = CharFilter(
|
|
label=_('IM'), lookup_expr='icontains', field_name='im')
|
|
endereco = CharFilter(
|
|
label=_('Endereço'), lookup_expr='icontains', field_name='endereco')
|
|
cidade = ModelMultipleChoiceFilter(
|
|
label=_('Cidade'), queryset=Cidade.objects.all())
|
|
responsaveis = ModelMultipleChoiceFilter(
|
|
label=_('Responsáveis'), queryset=Pessoa.objects.all())
|
|
socios = ModelMultipleChoiceFilter(
|
|
label=_('Sócios'), queryset=Pessoa.objects.all())
|
|
telefone = CharFilter(label=_('Telefone'), method='filter_telefone')
|
|
|
|
ordering = OrderingFilter(
|
|
label=_('Ordem'),
|
|
fields=(
|
|
('razao_social', 'razao_social'),
|
|
),
|
|
field_labels={
|
|
'razao_social': _(u'Razão Social'),
|
|
'-razao_social': _(u'Razão Social (Decrescente)'),
|
|
}
|
|
)
|
|
|
|
class Meta:
|
|
model = Cliente
|
|
fields = {
|
|
'data_adesao': ['lte', 'gte'],
|
|
'criado': ['lte', 'gte'],
|
|
'modificado': ['lte', 'gte'],
|
|
'situacao': ['exact'],
|
|
'ativo': ['exact'],
|
|
}
|
|
|
|
def filter_telefone(self, queryset, field, value):
|
|
if value:
|
|
queryset = queryset.filter(pk__in=TelefoneCliente.objects.filter(
|
|
numero__icontains=value).values_list('cliente_id', flat=True))
|
|
|
|
return queryset
|