Exemplo n.º 1
0
 def test_div_attrs_context(self):
     i = widgets.DatePickerInput(format='%d/%m/%Y')
     ctx = i.get_context('test_input', None, {})
     self.assertEqual(ctx['div_attrs'], {
         'data-oscarWidget': 'date',
         'data-dateFormat': 'DD/MM/YYYY',
     })
Exemplo n.º 2
0
class OrderSearchForm(forms.Form):
    date_from = forms.DateField(required=False,
                                label=pgettext_lazy("start date", "From"),
                                widget=widgets.DatePickerInput())
    date_to = forms.DateField(required=False,
                              label=pgettext_lazy("end date", "To"),
                              widget=widgets.DatePickerInput())
    order_number = forms.CharField(required=False, label=_("Order number"))

    def clean(self):
        if self.is_valid() and not any([
                self.cleaned_data['date_from'], self.cleaned_data['date_to'],
                self.cleaned_data['order_number']
        ]):
            raise forms.ValidationError(_("At least one field is required."))
        return super(OrderSearchForm, self).clean()

    def description(self):
        """
        Uses the form's data to build a useful description of what orders
        are listed.
        """
        if not self.is_bound or not self.is_valid():
            return _('All orders')
        else:
            date_from = self.cleaned_data['date_from']
            date_to = self.cleaned_data['date_to']
            order_number = self.cleaned_data['order_number']
            return self._orders_description(date_from, date_to, order_number)

    def _orders_description(self, date_from, date_to, order_number):
        if date_from and date_to:
            if order_number:
                desc = _('Orders placed between %(date_from)s and '
                         '%(date_to)s and order number containing '
                         '%(order_number)s')
            else:
                desc = _('Orders placed between %(date_from)s and '
                         '%(date_to)s')
        elif date_from:
            if order_number:
                desc = _('Orders placed since %(date_from)s and '
                         'order number containing %(order_number)s')
            else:
                desc = _('Orders placed since %(date_from)s')
        elif date_to:
            if order_number:
                desc = _('Orders placed until %(date_to)s and '
                         'order number containing %(order_number)s')
            else:
                desc = _('Orders placed until %(date_to)s')
        elif order_number:
            desc = _('Orders with order number containing %(order_number)s')
        else:
            return None
        params = {
            'date_from': date_from,
            'date_to': date_to,
            'order_number': order_number,
        }
        return desc % params

    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 and date_to:
            kwargs['date_placed__range'] = [date_from, date_to]
        elif date_from and not date_to:
            kwargs['date_placed__gt'] = date_from
        elif not date_from and date_to:
            kwargs['date_placed__lt'] = date_to
        if order_number:
            kwargs['number__contains'] = order_number
        return kwargs
Exemplo n.º 3
0
 def test_datepickerinput_format_unicode(self):
     # Check that the widget can handle unicode formats
     i = widgets.DatePickerInput(format='δ-%d/%m/%Y')
     date = datetime.date(2017, 5, 1)
     html = i.render('date', date)
     self.assertIn('value="δ-01/05/2017"', html)
Exemplo n.º 4
0
 def test_icon_classes_context(self):
     i = widgets.DatePickerInput(format='%H:%M')
     ctx = i.get_context('test_input', None, {})
     self.assertEqual(ctx['icon_classes'], 'far fa-calendar-alt')
Exemplo n.º 5
0
class VoucherForm(forms.Form):
    """
    A specialised form for creating a voucher and offer
    model.
    """
    name = forms.CharField(label=_("Name"))
    code = forms.CharField(label=_("Code"))

    start_date = forms.DateField(label=_("Start date"),
                                 widget=widgets.DatePickerInput())
    end_date = forms.DateField(label=_("End date"),
                               widget=widgets.DatePickerInput())
    usage = forms.ChoiceField(choices=Voucher.USAGE_CHOICES, label=_("Usage"))

    benefit_range = forms.ModelChoiceField(
        label=_('Which products get a discount?'),
        queryset=Range.objects.all(),
    )
    type_choices = (
        (Benefit.PERCENTAGE, _('Percentage off of products in range')),
        (Benefit.FIXED, _('Fixed amount off of products in range')),
    )
    benefit_type = forms.ChoiceField(
        choices=type_choices,
        label=_('Discount type'),
    )
    benefit_value = forms.DecimalField(label=_('Discount value'))

    def __init__(self, voucher=None, *args, **kwargs):
        self.voucher = voucher
        super(VoucherForm, self).__init__(*args, **kwargs)

    def clean_name(self):
        name = self.cleaned_data['name']
        try:
            voucher = Voucher.objects.get(name=name)
        except Voucher.DoesNotExist:
            pass
        else:
            if (not self.voucher) or (voucher.id != self.voucher.id):
                raise forms.ValidationError(
                    _("The name '%s' is already in use") % name)
        return name

    def clean_code(self):
        code = self.cleaned_data['code'].strip().upper()
        if not code:
            raise forms.ValidationError(_("Please enter a voucher code"))
        try:
            voucher = Voucher.objects.get(code=code)
        except Voucher.DoesNotExist:
            pass
        else:
            if (not self.voucher) or (voucher.id != self.voucher.id):
                raise forms.ValidationError(
                    _("The code '%s' is already in use") % code)
        return code

    def clean(self):
        cleaned_data = super(VoucherForm, self).clean()
        start_date = cleaned_data.get('start_date', None)
        end_date = cleaned_data.get('end_date', None)
        if start_date and end_date and end_date < start_date:
            raise forms.ValidationError(
                _("The start date must be before the end date"))
        return cleaned_data
Exemplo n.º 6
0
class OrderSearchForm(forms.Form):
    date_from = forms.DateField(required=False,
                                label=pgettext_lazy("start date", "开始日期"),
                                widget=widgets.DatePickerInput())
    date_to = forms.DateField(required=False,
                              label=pgettext_lazy("end date", "结束日期"),
                              widget=widgets.DatePickerInput())
    order_number = forms.CharField(required=False, label=_("订单号"))

    def clean(self):
        if self.is_valid() and not any([
                self.cleaned_data['date_from'], self.cleaned_data['date_to'],
                self.cleaned_data['order_number']
        ]):
            raise forms.ValidationError(_("请填写至少一个查询条件"))
        return super().clean()

    def description(self):
        """
        Uses the form's data to build a useful description of what orders
        are listed.
        """
        if not self.is_bound or not self.is_valid():
            return _('所有订单')
        else:
            date_from = self.cleaned_data['date_from']
            date_to = self.cleaned_data['date_to']
            order_number = self.cleaned_data['order_number']
            return self._orders_description(date_from, date_to, order_number)

    def _orders_description(self, date_from, date_to, order_number):
        if date_from and date_to:
            if order_number:
                desc = _('从%(date_from)s 到 '
                         '%(date_to)s '
                         '订单编号包括%(order_number)s的订单:')
            else:
                desc = _('从%(date_from)s到 ' '%(date_to)s的订单:')
        elif date_from:
            if order_number:
                desc = _('从%(date_from)s开始' '订单号包括%(order_number)s的订单:')
            else:
                desc = _('从%(date_from)s开始的订单:')
        elif date_to:
            if order_number:
                desc = _('截止到%(date_to)s' '订单编号包括%(order_number)s的订单')
            else:
                desc = _('截止到%(date_to)s的订单:')
        elif order_number:
            desc = _('包含订单编号%(order_number)s的订单:')
        else:
            return None
        params = {
            'date_from': date_from,
            'date_to': date_to,
            'order_number': order_number,
        }
        return desc % params

    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 and date_to:
            kwargs['date_placed__range'] = [date_from, date_to]
        elif date_from and not date_to:
            kwargs['date_placed__gt'] = date_from
        elif not date_from and date_to:
            kwargs['date_placed__lt'] = date_to
        if order_number:
            kwargs['number__contains'] = order_number
        return kwargs