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.
62 lines
2.4 KiB
62 lines
2.4 KiB
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()
|
|
|