class QuotationBookFilter(django_filters.FilterSet): event = django_filters.ModelChoiceFilter(queryset=Event.objects.all(), required=True, widget=BootstrapedSelect2( url="event-autocomplete", )) event__time_locations = django_filters.ModelChoiceFilter( queryset=TimeLocation.objects.all(), required=True, widget=BootstrapedSelect2(url="tl-autocomplete", )) class Meta: model = Book exclude = {"notes"} @property def qs(self): """ Filters the Books of the Quotation to be only the ones matching the Selected TimeLocation by looking into the TimeOptions match between both """ parent = super().qs # Get the TL id entered pk = self.data.get("event__time_locations", None) if pk: # If the id not None get the object time_location = TimeLocation.objects.get(id=pk) # And filter bookings with only to of event return parent.filter(times=time_location.time_option)
class Meta: model = Book fields = ["user", "event", "times", "price"] widgets = { "times": M2MSelect(), "event": BootstrapedSelect2(url="event-autocomplete"), "user": BootstrapedSelect2(url="user-autocomplete", ), }
class Meta: model = Book fields = ["user", "event", "times", "price"] widgets = { "times": BootstrapedSelect2Multiple(url="to-autocomplete"), "event": BootstrapedSelect2(url="event-autocomplete"), "user": BootstrapedSelect2(url="user-autocomplete"), "price": BootstrapedSelect2(url="po-autocomplete") }
class Meta: model = Book fields = [ "user", "event", "price", "status", "times", "comment", "comment_response", "note" ] widgets = { "times": M2MSelect(), "event": BootstrapedSelect2(url="event-autocomplete"), "price": BootstrapedSelect2(url="po-autocomplete"), }
class QuotationFilter(django_filters.FilterSet): event = django_filters.ModelChoiceFilter( queryset=Event.objects.all(), widget=BootstrapedSelect2(url="event-autocomplete")) teachers = django_filters.ModelMultipleChoiceFilter( queryset=User.objects.filter(is_teacher=True), widget=BootstrapedModelSelect2Multiple(url="teachers-autocomplete")) time_location = django_filters.ModelChoiceFilter( queryset=TimeLocation.objects.all(), widget=BootstrapedSelect2(url="tl-autocomplete", )) class Meta: model = Quotation fields = {"id", "event", "time_location", "locked"}
class EventFilter(django_filters.FilterSet): time_locations = django_filters.ModelChoiceFilter( queryset=TimeLocation.objects.all(), widget=BootstrapedSelect2(url="tl-autocomplete", )) class Meta: model = Event fields = {"project", "level"}
class Meta: model = Quotation fields = ( "event", "time_location", "teachers", "related_rent", "total_attendees", "direct_revenue", "fix_profit", "admin_profit", "partner_profit", ) widgets = { "teachers": BootstrapedSelect2Multiple(url="teachers-autocomplete"), "event": BootstrapedSelect2(url="event-autocomplete"), "time_location": BootstrapedSelect2(url="tl-autocomplete"), }
class AttendanceFilter(django_filters.FilterSet): book__user = django_filters.ModelChoiceFilter( queryset=User.objects.all(), widget=BootstrapedSelect2(url="user-autocomplete"), label="User") book__event = django_filters.ModelChoiceFilter( queryset=Event.objects.all(), widget=BootstrapedSelect2(url="event-autocomplete"), label="Event") attendance_date = django_filters.DateFilter( field_name="attendance_date", method="filter_by_date_contains", ) class Meta: model = Attendance fields = {'id'} def filter_by_date_contains(self, queryset, name, value): return queryset.filter(Q(attendance_date__icontains=value))
class AccountFilter(django_filters.FilterSet): book__user = django_filters.ModelChoiceFilter( queryset=User.objects.all(), widget=BootstrapedSelect2(url="user-autocomplete") ) book__event = django_filters.ModelChoiceFilter( queryset=Event.objects.all(), widget=BootstrapedSelect2(url="event-autocomplete",) ) pay_till = django_filters.DateFilter(field_name="pay_till", method="filter_by_date_smaller_than", label="Pay till") balance = django_filters.ChoiceFilter(field_name="balance", choices=BALANCE, label="Account") start_pay_date = django_filters.DateFilter(field_name="pay_date", lookup_expr="gt", label="Start Pay date",) end_pay_date = django_filters.DateFilter(field_name="pay_date", lookup_expr="lt", label="End Pay date",) range_pay_date = django_filters.DateRangeFilter(field_name="pay_date", label="Range Pay date") class Meta: model = Invoice fields = {"id", "status", "methode"} def filter_by_date_smaller_than(self, queryset, name, value): return queryset.filter(Q(pay_till__lte=value))
class BookFilter(django_filters.FilterSet): magic = django_filters.CharFilter(label='Magic Box', method='filter_by_all_name_fields') user = django_filters.ModelChoiceFilter( label='Registered User', queryset=User.objects.all(), widget=BootstrapedSelect2(url=("user-autocomplete"))) event = django_filters.ModelChoiceFilter(queryset=Event.objects.all(), widget=BootstrapedSelect2( url="event-autocomplete", )) times = django_filters.ModelMultipleChoiceFilter( queryset=TimeOption.objects.all(), widget=BootstrapedModelSelect2Multiple(url="to-autocomplete", )) start_date = django_filters.DateFilter( field_name="booked_at", lookup_expr="gt", label="Start date", ) end_date = django_filters.DateFilter( field_name="booked_at", lookup_expr="lt", label="End date", ) date_range = django_filters.DateRangeFilter(field_name="booked_at", label="Range") class Meta: model = Book fields = {"status", "times", "event__level"} def filter_by_all_name_fields(self, queryset, name, value): return queryset.filter( Q(user__first_name__icontains=value) | Q(user__last_name__icontains=value) | Q(user__email__icontains=value) | Q(user__id__icontains=value) | Q(bookuserinfo__first_name__icontains=value) | Q(bookuserinfo__last_name__icontains=value) | Q(bookuserinfo__email__icontains=value) | Q(bookuserinfo__id__icontains=value))