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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. from django import forms
  2. from django.db.models import get_model
  3. from django.template import Template, TemplateSyntaxError
  4. from django.utils.translation import ugettext_lazy as _
  5. from oscar.apps.customer.utils import normalise_email
  6. from oscar.forms import widgets
  7. CommunicationEventType = get_model('customer', 'CommunicationEventType')
  8. Order = get_model('order', 'Order')
  9. class CommunicationEventTypeForm(forms.ModelForm):
  10. email_subject_template = forms.CharField(
  11. label=_("Email subject template"))
  12. email_body_template = forms.CharField(
  13. label=_("Email body text template"), required=True,
  14. widget=forms.widgets.Textarea(attrs={'class': 'plain'}))
  15. email_body_html_template = forms.CharField(
  16. label=_("Email body HTML template"), required=True,
  17. widget=widgets.WYSIWYGTextArea)
  18. preview_order_number = forms.CharField(
  19. label=_("Order number"), required=False)
  20. preview_email = forms.EmailField(label=_("Preview email"),
  21. required=False)
  22. def __init__(self, data=None, *args, **kwargs):
  23. self.show_preview = False
  24. self.send_preview = False
  25. if data:
  26. self.show_preview = 'show_preview' in data
  27. self.send_preview = 'send_preview' in data
  28. super(CommunicationEventTypeForm, self).__init__(data, *args, **kwargs)
  29. def validate_template(self, value):
  30. try:
  31. Template(value)
  32. except TemplateSyntaxError, e:
  33. raise forms.ValidationError(e.message)
  34. def clean_email_subject_template(self):
  35. subject = self.cleaned_data['email_subject_template']
  36. self.validate_template(subject)
  37. return subject
  38. def clean_email_body_template(self):
  39. body = self.cleaned_data['email_body_template']
  40. self.validate_template(body)
  41. return body
  42. def clean_email_body_html_template(self):
  43. body = self.cleaned_data['email_body_html_template']
  44. self.validate_template(body)
  45. return body
  46. def clean_preview_order_number(self):
  47. number = self.cleaned_data['preview_order_number'].strip()
  48. if not self.instance.is_order_related():
  49. return number
  50. if not self.show_preview and not self.send_preview:
  51. return number
  52. try:
  53. self.preview_order = Order.objects.get(number=number)
  54. except Order.DoesNotExist:
  55. raise forms.ValidationError(_(
  56. "No order found with this number"))
  57. return number
  58. def clean_preview_email(self):
  59. email = normalise_email(self.cleaned_data['preview_email'])
  60. if not self.send_preview:
  61. return email
  62. if not email:
  63. raise forms.ValidationError(_(
  64. "Please enter an email address"))
  65. return email
  66. def get_preview_context(self):
  67. ctx = {}
  68. if hasattr(self, 'preview_order'):
  69. ctx['order'] = self.preview_order
  70. return ctx
  71. class Meta:
  72. model = CommunicationEventType
  73. exclude = ('code', 'category', 'sms_template')