Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

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