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.

forms.py 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import datetime
  2. from django import forms
  3. from django.db.models.loading import get_model
  4. from django.utils.translation import ugettext_lazy as _
  5. Order = get_model('order', 'Order')
  6. OrderNote = get_model('order', 'OrderNote')
  7. ShippingAddress = get_model('order', 'ShippingAddress')
  8. SourceType = get_model('payment', 'SourceType')
  9. class OrderStatsForm(forms.Form):
  10. date_from = forms.DateField(required=False, label=_("From"))
  11. date_to = forms.DateField(required=False, label=_("To"))
  12. _filters = _description = None
  13. def _determine_filter_metadata(self):
  14. self._filters = {}
  15. self._description = _('All orders')
  16. if self.errors:
  17. return
  18. date_from = self.cleaned_data['date_from']
  19. date_to = self.cleaned_data['date_to']
  20. if date_from and date_to:
  21. # We want to include end date so we adjust the date we use with the 'range'
  22. # function.
  23. self._filters = {'date_placed__range': [date_from,
  24. date_to +
  25. datetime.timedelta(days=1)]}
  26. self._description = _('Orders placed between %(date_from)s and %(date_to)s') % {
  27. 'date_from': date_from,
  28. 'date_to': date_to}
  29. elif date_from and not date_to:
  30. self._filters = {'date_placed__gte': date_from}
  31. self._description = _('Orders placed since %s') % (date_from,)
  32. elif not date_from and date_to:
  33. self._filters = {'date_placed__lte': date_to}
  34. self._description = _('Orders placed until %s') % (date_to,)
  35. else:
  36. self._filters = {}
  37. self._description = _('All orders')
  38. def get_filters(self):
  39. if self._filters is None:
  40. self._determine_filter_metadata()
  41. return self._filters
  42. def get_filter_description(self):
  43. if self._description is None:
  44. self._determine_filter_metadata()
  45. return self._description
  46. class OrderSearchForm(forms.Form):
  47. order_number = forms.CharField(required=False, label=_("Order number"))
  48. name = forms.CharField(required=False, label=_("Customer name"))
  49. product_title = forms.CharField(required=False, label=_("Product name"))
  50. upc = forms.CharField(required=False, label=_("UPC"))
  51. partner_sku = forms.CharField(required=False, label=_("Partner SKU"))
  52. status_choices = (('', '---------'),) + tuple([(v, v) for v in Order.all_statuses()])
  53. status = forms.ChoiceField(choices=status_choices, label=_("Status"), required=False)
  54. date_from = forms.DateField(required=False, label=_("Date from"))
  55. date_to = forms.DateField(required=False, label=_("Date to"))
  56. voucher = forms.CharField(required=False, label=_("Voucher code"))
  57. payment_method = forms.ChoiceField(
  58. label=_("Payment method"), required=False,
  59. choices=())
  60. format_choices = (('html', _('HTML')),
  61. ('csv', _('CSV')),)
  62. response_format = forms.ChoiceField(widget=forms.RadioSelect,
  63. choices=format_choices, initial='html', label=_("Get results as"))
  64. def __init__(self, *args, **kwargs):
  65. super(OrderSearchForm, self).__init__(*args, **kwargs)
  66. self.fields['payment_method'].choices = self.payment_method_choices()
  67. def payment_method_choices(self):
  68. return (('', '---------'),) + tuple(
  69. [(src.code, src.name) for src in SourceType.objects.all()])
  70. class OrderNoteForm(forms.ModelForm):
  71. class Meta:
  72. model = OrderNote
  73. exclude = ('order', 'user', 'note_type')
  74. class ShippingAddressForm(forms.ModelForm):
  75. class Meta:
  76. model = ShippingAddress
  77. exclude = ('search_text',)