Controle de faturas e bloqueio de usuários para o sistema de lojas web
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

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