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

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