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.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. from django.utils import six
  2. from django.contrib import messages
  3. from django.contrib.sites.models import get_current_site
  4. from oscar.core.loading import get_model
  5. from django.template import TemplateSyntaxError
  6. from django.utils.translation import ugettext_lazy as _
  7. from django.views import generic
  8. from oscar.core.loading import get_class
  9. CommunicationEventType = get_model('customer', 'CommunicationEventType')
  10. CommunicationEventTypeForm = get_class('dashboard.communications.forms',
  11. 'CommunicationEventTypeForm')
  12. Dispatcher = get_class('customer.utils', 'Dispatcher')
  13. class ListView(generic.ListView):
  14. model = CommunicationEventType
  15. template_name = 'dashboard/comms/list.html'
  16. context_object_name = 'commtypes'
  17. class UpdateView(generic.UpdateView):
  18. model = CommunicationEventType
  19. form_class = CommunicationEventTypeForm
  20. template_name = 'dashboard/comms/detail.html'
  21. context_object_name = 'commtype'
  22. success_url = '.'
  23. slug_field = 'code'
  24. def form_invalid(self, form):
  25. messages.error(self.request,
  26. _("The submitted form was not valid, please correct "
  27. "the errors and resubmit"))
  28. return super(UpdateView, self).form_invalid(form)
  29. def form_valid(self, form):
  30. if 'send_preview' in self.request.POST:
  31. return self.send_preview(form)
  32. if 'show_preview' in self.request.POST:
  33. return self.show_preview(form)
  34. messages.success(self.request, _("Email saved"))
  35. return super(UpdateView, self).form_valid(form)
  36. def get_messages_context(self, form):
  37. ctx = {'user': self.request.user,
  38. 'site': get_current_site(self.request)}
  39. ctx.update(form.get_preview_context())
  40. return ctx
  41. def show_preview(self, form):
  42. ctx = super(UpdateView, self).get_context_data()
  43. ctx['form'] = form
  44. commtype = form.save(commit=False)
  45. commtype_ctx = self.get_messages_context(form)
  46. try:
  47. msgs = commtype.get_messages(commtype_ctx)
  48. except TemplateSyntaxError as e:
  49. form.errors['__all__'] = form.error_class([six.text_type(e)])
  50. return self.render_to_response(ctx)
  51. ctx['show_preview'] = True
  52. ctx['preview'] = msgs
  53. return self.render_to_response(ctx)
  54. def send_preview(self, form):
  55. ctx = super(UpdateView, self).get_context_data()
  56. ctx['form'] = form
  57. commtype = form.save(commit=False)
  58. commtype_ctx = self.get_messages_context(form)
  59. try:
  60. msgs = commtype.get_messages(commtype_ctx)
  61. except TemplateSyntaxError as e:
  62. form.errors['__all__'] = form.error_class([six.text_type(e)])
  63. return self.render_to_response(ctx)
  64. email = form.cleaned_data['preview_email']
  65. dispatch = Dispatcher()
  66. dispatch.send_email_messages(email, msgs)
  67. messages.success(self.request,
  68. _("A preview email has been sent to %s") % email)
  69. return self.render_to_response(ctx)