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.

views.py 3.2KB

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