def filter_with_date_range(self, queryset): """ Filter results based that are within a (possibly open ended) daterange """ # Nothing to do if we don't have a date field if not self.date_range_field_name: return queryset # After the start date if self.start_date: start_datetime = utils.datetime_combine(self.start_date, time.min) filter_kwargs = { "%s__gte" % self.date_range_field_name: start_datetime, } queryset = queryset.filter(**filter_kwargs) # Before the end of the end date if self.end_date: end_datetime = utils.datetime_combine(self.end_date, time.max) filter_kwargs = { "%s__lte" % self.date_range_field_name: end_datetime, } queryset = queryset.filter(**filter_kwargs) return queryset
def get_filters(self): date_from = self.cleaned_data['date_from'] date_to = self.cleaned_data['date_to'] order_number = self.cleaned_data['order_number'] kwargs = {} if date_from: kwargs['date_placed__gte'] = datetime_combine( date_from, datetime.time.min) if date_to: kwargs['date_placed__lte'] = datetime_combine( date_to, datetime.time.max) if order_number: kwargs['number__contains'] = order_number return kwargs
def get_queryset(self): # noqa (too complex (19)) """ Build the queryset for this list. """ queryset = sort_queryset(self.base_queryset, self.request, ['number', 'total_incl_tax']) # Look for shortcut query filters if 'order_status' in self.request.GET: self.form = self.form_class() status = self.request.GET['order_status'] if status.lower() == 'none': status = None return self.base_queryset.filter(status=status) if 'order_number' not in self.request.GET: self.form = self.form_class() return queryset self.form = self.form_class(self.request.GET) if not self.form.is_valid(): return queryset data = self.form.cleaned_data if data['order_number']: queryset = self.base_queryset.filter( number__istartswith=data['order_number']) if data['name']: # If the value is two words, then assume they are first name and # last name parts = data['name'].split() allow_anon = getattr(settings, 'OSCAR_ALLOW_ANON_CHECKOUT', False) if len(parts) == 1: parts = [data['name'], data['name']] else: parts = [parts[0], parts[1:]] filter = Q(user__first_name__istartswith=parts[0]) filter |= Q(user__last_name__istartswith=parts[1]) if allow_anon: filter |= Q(billing_address__first_name__istartswith=parts[0]) filter |= Q(shipping_address__first_name__istartswith=parts[0]) filter |= Q(billing_address__last_name__istartswith=parts[1]) filter |= Q(shipping_address__last_name__istartswith=parts[1]) queryset = queryset.filter(filter).distinct() if data['product_title']: queryset = queryset.filter( lines__title__istartswith=data['product_title']).distinct() if data['upc']: queryset = queryset.filter(lines__upc=data['upc']) if data['partner_sku']: queryset = queryset.filter(lines__partner_sku=data['partner_sku']) if data['date_from'] and data['date_to']: date_to = datetime_combine(data['date_to'], datetime.time.max) date_from = datetime_combine(data['date_from'], datetime.time.min) queryset = queryset.filter( date_placed__gte=date_from, date_placed__lt=date_to) elif data['date_from']: date_from = datetime_combine(data['date_from'], datetime.time.min) queryset = queryset.filter(date_placed__gte=date_from) elif data['date_to']: date_to = datetime_combine(data['date_to'], datetime.time.max) queryset = queryset.filter(date_placed__lt=date_to) if data['voucher']: queryset = queryset.filter( discounts__voucher_code=data['voucher']).distinct() if data['payment_method']: queryset = queryset.filter( sources__source_type__code=data['payment_method']).distinct() if data['status']: queryset = queryset.filter(status=data['status']) return queryset
def get_queryset(self): # noqa (too complex (19)) """ Build the queryset for this list. """ queryset = sort_queryset(self.base_queryset, self.request, ['number', 'total_incl_tax']) # Look for shortcut query filters if 'invoice_status' in self.request.GET: self.form = self.form_class() status = self.request.GET['invoice_status'] if status.lower() == 'none': status = None return self.base_queryset.filter(status=status) if 'invoice_number' not in self.request.GET: self.form = self.form_class() return queryset self.form = self.form_class(self.request.GET) if not self.form.is_valid(): return queryset data = self.form.cleaned_data if data['invoice_number']: queryset = self.base_queryset.filter( number__istartswith=data['invoice_number']) if data['name']: # If the value is two words, then assume they are first name and # last name parts = data['name'].split() if len(parts) == 1: parts = [data['name'], data['name']] else: parts = [parts[0], parts[1:]] filter = Q(user__first_name__istartswith=parts[0]) filter |= Q(user__last_name__istartswith=parts[1]) queryset = queryset.filter(filter).distinct() if data['person_name']: queryset = queryset.filter(person__name__istartswith=data['person_name']).distinct() if data['date_from'] and data['date_to']: date_to = datetime_combine(data['date_to'], datetime.time.max) date_from = datetime_combine(data['date_from'], datetime.time.min) queryset = queryset.filter( date_created__gte=date_from, date_created__lt=date_to) elif data['date_from']: date_from = datetime_combine(data['date_from'], datetime.time.min) queryset = queryset.filter(date_created__gte=date_from) elif data['date_to']: date_to = datetime_combine(data['date_to'], datetime.time.max) queryset = queryset.filter(date_created__lt=date_to) if data['vatin']: queryset = queryset.filter( person__vatin=data['vatin']).distinct() if data['status']: queryset = queryset.filter(status=data['status']) return queryset
def get_queryset(self): # noqa (too complex (19)) """ Build the queryset for this list. """ queryset = sort_queryset(self.base_queryset, self.request, ['number', 'total_incl_tax']) # Look for shortcut query filters if 'invoice_status' in self.request.GET: self.form = self.form_class() status = self.request.GET['invoice_status'] if status.lower() == 'none': status = None return self.base_queryset.filter(status=status) if 'invoice_number' not in self.request.GET: self.form = self.form_class() return queryset self.form = self.form_class(self.request.GET) if not self.form.is_valid(): return queryset data = self.form.cleaned_data if data['invoice_number']: queryset = self.base_queryset.filter( number__istartswith=data['invoice_number']) if data['name']: # If the value is two words, then assume they are first name and # last name parts = data['name'].split() if len(parts) == 1: parts = [data['name'], data['name']] else: parts = [parts[0], parts[1:]] filter = Q(user__first_name__istartswith=parts[0]) filter |= Q(user__last_name__istartswith=parts[1]) queryset = queryset.filter(filter).distinct() if data['person_name']: queryset = queryset.filter( person__name__istartswith=data['person_name']).distinct() if data['date_from'] and data['date_to']: date_to = datetime_combine(data['date_to'], datetime.time.max) date_from = datetime_combine(data['date_from'], datetime.time.min) queryset = queryset.filter(date_created__gte=date_from, date_created__lt=date_to) elif data['date_from']: date_from = datetime_combine(data['date_from'], datetime.time.min) queryset = queryset.filter(date_created__gte=date_from) elif data['date_to']: date_to = datetime_combine(data['date_to'], datetime.time.max) queryset = queryset.filter(date_created__lt=date_to) if data['vatin']: queryset = queryset.filter(person__vatin=data['vatin']).distinct() if data['status']: queryset = queryset.filter(status=data['status']) return queryset