Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

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