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.
85 lines
3.3 KiB
85 lines
3.3 KiB
from crispy_forms.helper import FormHelper
|
|
from crispy_forms.layout import Layout, Div, HTML, Field, Submit
|
|
from django import forms
|
|
from django.conf import settings
|
|
from django.urls import reverse_lazy
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from ckeditor.widgets import CKEditorWidget
|
|
|
|
|
|
from .mixins import RequestNotifiable
|
|
from .models import (
|
|
Request,
|
|
STATUS_NEW, STATUS_REJECTED,
|
|
STATUS_PROCESSED, STATUS_IN_PROCESSING
|
|
)
|
|
|
|
# -------------------------------- Client-side forms -----------------------------------#
|
|
|
|
|
|
class ContactUsForm(RequestNotifiable, forms.ModelForm):
|
|
|
|
field_template = 'bootstrap/forms/product_search.html'
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
self.helper = FormHelper()
|
|
self.helper.form_action = reverse_lazy('contact_us:send')
|
|
self.helper.form_method = 'post'
|
|
self.helper.layout = Layout(
|
|
HTML("""
|
|
<div class="left-menu__title">
|
|
Не нашли нужную программу или разработчика?
|
|
Заполните форму и с Вами свяжется наш специалист.
|
|
</div>"""),
|
|
Field('name', css_class="left-menu__text", placeholder=_("Имя"), template=self.field_template),
|
|
Field('email', css_class="left-menu__text", placeholder=_("Email"), template=self.field_template),
|
|
Field('subject', css_class="left-menu__text", placeholder=_("Название продукта"), template=self.field_template),
|
|
Field('phone', css_class="left-menu__text", placeholder=_("Номер телефона"), template=self.field_template),
|
|
Submit('send', _("Отправить"), css_class="left-menu__btn")
|
|
)
|
|
super(ContactUsForm, self).__init__(*args, **kwargs)
|
|
self.init_fields(self.fields)
|
|
|
|
def init_fields(self, fields):
|
|
for field_name in fields:
|
|
fields[field_name].required = True
|
|
|
|
def save(self, commit=True):
|
|
self.instance.status = STATUS_NEW
|
|
return super().save(commit)
|
|
|
|
def send_email(self, request, files=()):
|
|
context = {
|
|
'from_email': self.instance.type.author.email,
|
|
'bcc': self.get_def_email(settings) if self.get_def_email(settings) is not None else (),
|
|
'recipients': self.instance.type.author.email,
|
|
'context': {
|
|
'username': self.instance.name,
|
|
'email': self.instance.email,
|
|
'subject': self.instance.subject,
|
|
'message': self.instance.message,
|
|
'sent_at': self.instance.create_at,
|
|
'attachments': files,
|
|
'edit_link': request.scheme + "://" + request.get_host() + reverse_lazy(
|
|
'admin:{}_{}_change'.format(
|
|
self.instance._meta.app_label,
|
|
self.instance._meta.object_name.lower()),
|
|
args=(self.instance.id,)
|
|
).__str__(),
|
|
},
|
|
'files': [],
|
|
'send_at_date': self.instance.create_at,
|
|
|
|
}
|
|
self.send_request_notification(
|
|
context,
|
|
)
|
|
|
|
@property
|
|
def is_request_sent(self):
|
|
return self.notification_sent
|
|
|
|
class Meta:
|
|
model = Request
|
|
fields = ('name', 'email', 'subject', 'phone')
|
|
|