@ -5,7 +5,7 @@ import django_filters
from project . customer . models import Client
from project . customer . models import Client
from . models import Invoice , Platejka
from . models import Invoice
from . import consts
from . import consts
@ -134,77 +134,68 @@ platej_type_choices = (
)
)
class _ BaseFilterSet( django_filters . FilterSet ) :
class BaseDocs FilterSet ( django_filters . FilterSet ) :
""" Базовый класс фильтров.
""" Базовый класс всех фильтров документ ов.
Классы фильтров строить через build_filterset_class !
Работает и без Meta .
"""
"""
class Meta :
model = None
def __init__ ( self , request , * args , * * kwargs ) :
super ( BaseDocsFilterSet , self ) . __init__ ( * args , * * kwargs )
def __init__ ( self , user , * args , * * kwargs ) :
super ( _BaseFilterSet , self ) . __init__ ( * args , * * kwargs )
self . request = request
self . form . label_suffix = ' '
if ' client ' in self . filters :
self . filters [ ' client ' ] . extra [ ' queryset ' ] = Client . objects . get_all ( self . request . user . profile )
def build_filterset_class ( model , user , need_fields = None ) :
""" Строит и возвращает класс с набором фильтров для фильтрации документов. """
if ' invoice ' in self . filters :
attrs = { }
self . filters [ ' invoice ' ] . extra [ ' queryset ' ] = Invoice . objects . get_all ( self . request . user . profile )
fields = [ ]
# сбросить у полей формы атрибут help_text
for f in need_fields :
for field in self . form . fields . itervalues ( ) :
if f == ' doc_date ' :
field . help_text = None
doc_date = CustomDateRangeFilter ( label = u ' По времени создания ' , options = doc_date_choices ,
widget = django_filters . widgets . LinkWidget )
attrs [ ' doc_date ' ] = doc_date
class InvoiceFilterSet ( BaseDocsFilterSet ) :
fields . append ( ' doc_date ' )
paid_status = django_filters . ChoiceFilter ( label = u ' По оплате ' , choices = paid_status_choices , widget = django_filters . widgets . LinkWidget )
closed_status = django_filters . ChoiceFilter ( label = u ' По закрывающим документам ' , choices = closed_status_choices , widget = django_filters . widgets . LinkWidget )
elif f == ' client ' :
client = django_filters . ModelChoiceFilter ( label = u ' По контрагенту ' , queryset = None , empty_label = u ' все контрагенты ' )
client = django_filters . ModelChoiceFilter ( label = u ' По контрагенту ' , queryset = Client . objects . get_all ( user . profile ) ,
doc_date = CustomDateRangeFilter ( label = u ' По времени создания ' , options = doc_date_choices , widget = django_filters . widgets . LinkWidget )
empty_label = u ' все контрагенты ' )
attrs [ ' client ' ] = client
fields . append ( ' client ' )
class AktRabotFilterSet ( BaseDocsFilterSet ) :
signed_status = django_filters . ChoiceFilter ( label = u ' По приёмке ' , choices = signed_status_choices , widget = django_filters . widgets . LinkWidget )
elif f == ' invoice ' :
client = django_filters . ModelChoiceFilter ( label = u ' По контрагенту ' , queryset = None , empty_label = u ' все контрагенты ' )
invoice = django_filters . ModelChoiceFilter ( label = u ' По счёту ' , queryset = Invoice . objects . get_all ( user . profile ) ,
invoice = django_filters . ModelChoiceFilter ( label = u ' По счёту ' , queryset = None , empty_label = u ' все счета ' )
empty_label = u ' все счета ' )
doc_date = CustomDateRangeFilter ( label = u ' По времени создания ' , options = doc_date_choices , widget = django_filters . widgets . LinkWidget )
attrs [ ' invoice ' ] = invoice
fields . append ( ' invoice ' )
class NakladnFilterSet ( BaseDocsFilterSet ) :
elif f == ' closed_status ' :
signed_status = django_filters . ChoiceFilter ( label = u ' По приёмке ' , choices = signed_status_choices , widget = django_filters . widgets . LinkWidget )
closed_status = django_filters . ChoiceFilter ( label = u ' По закрывающим документам ' , choices = closed_status_choices ,
client = django_filters . ModelChoiceFilter ( label = u ' По контрагенту ' , queryset = None , empty_label = u ' все контрагенты ' )
widget = django_filters . widgets . LinkWidget )
invoice = django_filters . ModelChoiceFilter ( label = u ' По счёту ' , queryset = None , empty_label = u ' все счета ' )
attrs [ ' closed_status ' ] = closed_status
doc_date = CustomDateRangeFilter ( label = u ' По времени создания ' , options = doc_date_choices , widget = django_filters . widgets . LinkWidget )
fields . append ( ' closed_status ' )
elif f == ' paid_status ' :
class FakturaFilterSet ( BaseDocsFilterSet ) :
paid_status = django_filters . ChoiceFilter ( label = u ' По оплате ' , choices = paid_status_choices ,
signed_status = django_filters . ChoiceFilter ( label = u ' По приёмке ' , choices = signed_status_choices , widget = django_filters . widgets . LinkWidget )
widget = django_filters . widgets . LinkWidget )
client = django_filters . ModelChoiceFilter ( label = u ' По контрагенту ' , queryset = None , empty_label = u ' все контрагенты ' )
attrs [ ' paid_status ' ] = paid_status
invoice = django_filters . ModelChoiceFilter ( label = u ' По счёту ' , queryset = None , empty_label = u ' все счета ' )
fields . append ( ' paid_status ' )
doc_date = CustomDateRangeFilter ( label = u ' По времени создания ' , options = doc_date_choices , widget = django_filters . widgets . LinkWidget )
elif f == ' signed_status ' :
signed_status = django_filters . ChoiceFilter ( label = u ' По приёмке ' , choices = signed_status_choices ,
class AktSverkiFilterSet ( BaseDocsFilterSet ) :
widget = django_filters . widgets . LinkWidget )
signed_status = django_filters . ChoiceFilter ( label = u ' По приёмке ' , choices = signed_status_choices , widget = django_filters . widgets . LinkWidget )
attrs [ ' signed_status ' ] = signed_status
client = django_filters . ModelChoiceFilter ( label = u ' По контрагенту ' , queryset = None , empty_label = u ' все контрагенты ' )
fields . append ( ' signed_status ' )
total_saldo = CustomChoiceFilter ( label = u ' По сальдо ' , options = total_saldo_choices , widget = django_filters . widgets . LinkWidget )
doc_date = CustomDateRangeFilter ( label = u ' По времени создания ' , options = doc_date_choices , widget = django_filters . widgets . LinkWidget )
elif f == ' total_saldo ' :
total_saldo = CustomChoiceFilter ( label = u ' По сальдо ' , options = total_saldo_choices ,
widget = django_filters . widgets . LinkWidget )
class DoverFilterSet ( BaseDocsFilterSet ) :
attrs [ ' total_saldo ' ] = total_saldo
client = django_filters . ModelChoiceFilter ( label = u ' По контрагенту ' , queryset = None , empty_label = u ' все контрагенты ' )
fields . append ( ' total_saldo ' )
doc_date = CustomDateRangeFilter ( label = u ' По времени создания ' , options = doc_date_choices , widget = django_filters . widgets . LinkWidget )
elif f == ' platej_type ' :
platej_type = django_filters . ChoiceFilter ( label = u ' По типу ' , choices = platej_type_choices ,
class PlatejkaFilterSet ( BaseDocsFilterSet ) :
widget = django_filters . widgets . LinkWidget )
platej_type = django_filters . ChoiceFilter ( label = u ' По типу ' , choices = platej_type_choices , widget = django_filters . widgets . LinkWidget )
attrs [ ' platej_type ' ] = platej_type
client = django_filters . ModelChoiceFilter ( label = u ' По контрагенту ' , queryset = None , empty_label = u ' все контрагенты ' )
fields . append ( ' platej_type ' )
doc_date = CustomDateRangeFilter ( label = u ' По времени создания ' , options = doc_date_choices , widget = django_filters . widgets . LinkWidget )
else :
raise NotImplementedError ( u ' Unknown field: " %s " . ' % f )
model_name = model . __name__ . lower ( )
klass = type ( model_name + ' FilterSet ' , ( _BaseFilterSet , ) , attrs )
klass . Meta . model = model
klass . Meta . fields = fields # + _BaseFilterSet.Meta.fields
return klass