import logging from django.contrib import messages from django.contrib.messages.views import SuccessMessageMixin from django.db import transaction from django.urls import reverse_lazy from django.views.generic import FormView from django.utils.translation import ugettext_lazy as _ from .forms import ContactUsForm logger = logging.getLogger(__name__) # Create your views here. class ContactUsFormView(SuccessMessageMixin, FormView): template_name = None form_class = ContactUsForm http_method_names = ['post'] success_message = _('Request has been sent successfully!') error_message = _('Some errors occurred during sending the request. Check the input fields or try latter.') def get_initial(self): initial = super().get_initial() if self.request.method == "GET": initial['type'] = RequestType.objects.order_by('order').first() if self.request.user.is_authenticated(): initial['name'] = self.request.user.profile.get_full_name(self.request, self.request.user.profile) initial['email'] = self.request.user.email return initial def form_valid(self, form): try: with transaction.atomic(): if self.request.user.is_authenticated(): form.instance.user = self.request.user form.save() files = [] if len(self.request.FILES) > 0: attachments = AttachmentFormSet(self.request.POST, self.request.FILES, form_kwargs={'request': form.instance}) if attachments.is_valid(): attachments.save() files = attachments.get_file_absolute_urls(self.request) form.send_email(self.request, files) return super().form_valid(form) except ValueError as ve: logger.critical(ve) messages.error(self.request, self.error_message, 'danger') except Exception as e: logger.critical(e) messages.error(self.request, self.error_message, 'danger') return self.form_invalid(form) def form_invalid(self, form): context = self.get_context_data() if len(form.errors) > 0: context['form_show_errors'] = True return self.render_to_response(context) def get_success_url(self): return super().get_success_url()