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.
74 lines
2.8 KiB
74 lines
2.8 KiB
from crispy_forms.helper import FormHelper
|
|
from crispy_forms.layout import Layout, Field, Submit, Hidden
|
|
|
|
from django import forms
|
|
from django.conf import settings
|
|
from django.urls import reverse_lazy
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from .mixins import RequestNotifiable
|
|
from .models import (
|
|
Request, STATUS_NEW
|
|
)
|
|
|
|
|
|
# -------------------------------- Client-side forms -----------------------------------#
|
|
|
|
|
|
class ContactUsForm(RequestNotifiable, forms.ModelForm):
|
|
field_template = 'bootstrap/forms/contact_us.html'
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
self.next = kwargs.pop('next')
|
|
self.next_kwargs = kwargs.pop('kwargs')
|
|
self.field_css = kwargs.pop('field_css_base_class')
|
|
|
|
self.helper = FormHelper()
|
|
self.helper.form_action = reverse_lazy('contact_us:send')
|
|
self.helper.form_method = 'post'
|
|
self.helper.layout = Layout(
|
|
Hidden('next', reverse_lazy(self.next) if not self.next_kwargs else reverse_lazy(self.next,
|
|
kwargs=self.next_kwargs)),
|
|
Field('name', css_class=self.field_css + "__text", placeholder=_("Имя"), template=self.field_template),
|
|
Field('email', css_class=self.field_css + "__text", placeholder=_("Email"), template=self.field_template),
|
|
Field('subject', css_class=self.field_css + "__text", placeholder=_("Название продукта"),
|
|
template=self.field_template),
|
|
Field('phone', css_class=self.field_css + "__text", placeholder=_("+79781234567"),
|
|
template=self.field_template),
|
|
Submit('send', _("Отправить"), css_class=self.field_css + "__btn")
|
|
)
|
|
super(ContactUsForm, self).__init__(*args, **kwargs)
|
|
self.init_fields(self.fields)
|
|
|
|
def init_fields(self, fields):
|
|
for field_name in fields:
|
|
if field_name != "phone":
|
|
fields[field_name].required = True
|
|
|
|
def is_valid(self):
|
|
return super().is_valid()
|
|
|
|
def save(self, commit=True):
|
|
self.instance.status = STATUS_NEW
|
|
return super().save(commit)
|
|
|
|
def send_email(self, request):
|
|
context = {
|
|
'from_email': settings.DEFAULT_FROM_EMAIL,
|
|
'recipients': (settings.DEFAULT_FROM_EMAIL,),
|
|
'email': {
|
|
'name': self.instance.name,
|
|
'email': self.instance.email,
|
|
'subject': self.instance.subject,
|
|
'phone': self.instance.phone or None,
|
|
},
|
|
'send_at_date': self.instance.create_at,
|
|
|
|
}
|
|
self.send_request_notification(
|
|
context,
|
|
)
|
|
|
|
class Meta:
|
|
model = Request
|
|
fields = ('name', 'email', 'subject', 'phone',)
|
|
|