diff --git a/BaseModels/mailSender.py b/BaseModels/mailSender.py index 5c54ca1..176f6a7 100644 --- a/BaseModels/mailSender.py +++ b/BaseModels/mailSender.py @@ -20,11 +20,7 @@ import random from django.conf import settings -# tech@truenergy.by -# k7n2d3ZFZo4@CU5$4YDk -# administrator@truenergy.by -# 6&#WfW8$qR2w8uv69e5$ # def fix_mailing_links_in_mail(html): @@ -86,34 +82,20 @@ def prepare_xls_attach_by_xls_virtual_file(virtual_file, filename): return file -def admin_send_mail_by_SMTPlib(subject, from_email, to, html_content, attachments=None): +def admin_send_mail_by_SMTPlib(sets, subject, from_email, to, html_content, attachments=None): res = None try: - # smtp_server = 'mail.cln.by' # 'mail.truenergy.by' - # smtp_port = 2525 # 587 - # smtp_password = 'clNdt6a8a' # u'98q3$IjxH%RUIxySw8R2' - # smtp_login = 'support@cln.by' # 'support@truenergy.by' - # from_email = smtp_login - try: - smtp_server = 'mail.truenergy.by' - smtp_port = 587 - smtp_password = 'eg4$#95Xp0T*V%ig5BbR' - smtp_login = 'support@truenergy.by' - res = send_mail_by_SMTPlib(subject, from_email, to, html_content, smtp_server, smtp_port, smtp_login, - smtp_password, attachments) - except: - smtp_server = 'mail.truenergy.by' - smtp_port = 25 - smtp_password = 'PowH@aL0a4%$iz0Uo5V$' - smtp_login = 'tech@truenergy.by' - res = send_mail_by_SMTPlib(subject, smtp_login, to, html_content, smtp_server, smtp_port, smtp_login, - smtp_password, attachments) + smtp_server = sets['mail_server_url'] + smtp_port = sets['mail_server_smtp_port'] + smtp_password = sets['sender_mail_password'] + smtp_login = sets['sender_mail_login'] + res = send_mail_by_SMTPlib(sets, subject, from_email, to, html_content, smtp_server, smtp_port, smtp_login, + smtp_password, attachments) + except Exception as e: - # from Baldenini_site.SMS_sender import send_SMS - # send_SMS(u'375296177827', u'send_mail_by_SMTPlib error = {0}'.format(str(e)), urgent=True) msg = 'admin_send_mail_by_SMTPlib error = {0}'.format(str(e)) print(msg) # techSendMail(msg) @@ -121,17 +103,17 @@ def admin_send_mail_by_SMTPlib(subject, from_email, to, html_content, attachment return str(res) -def send_mail_by_SMTPlib(subject, from_email, to_init, html_content, smtp_server, smtp_port, smtp_login, smtp_password, +def send_mail_by_SMTPlib(sets, subject, from_email, to_init, html_content, smtp_server, smtp_port, smtp_login, smtp_password, attachments=None): to = to_init - if not settings.prod_server: - to = 'web@syncsystems.net' - else: - to = to_init - try: - from settings_local import DEBUG - except: - print('get settings_local fail') + # if not settings.prod_server: + # to = 'web@syncsystems.net' + # else: + # to = to_init + # try: + # from settings_local import DEBUG + # except: + # print('get settings_local fail') res = None mail_lib = None @@ -163,16 +145,16 @@ def send_mail_by_SMTPlib(subject, from_email, to_init, html_content, smtp_server res = None if type(to) in (list, tuple): - if 'support@truenergy.by' in to: - to.remove('support@truenergy.by') + if sets['sender_email'] in to: + to.remove(sets['sender_email']) if len(to) > 1: to_str = u', '.join(to) else: to_str = to[0] else: - if to == 'support@truenergy.by': - return None + # if to == sets['sender_email']: + # return None to_str = to to = [] to.append(to_str) @@ -216,8 +198,6 @@ def send_mail_by_SMTPlib(subject, from_email, to_init, html_content, smtp_server # print('mail_lib.quit = {0}'.format(str(msg))) except Exception as e: - # from Baldenini_site.SMS_sender import send_SMS - # send_SMS(u'375296177827', u'send_mail_by_SMTPlib error = {0}'.format(str(e)), urgent=True) msg = 'send_mail_by_SMTPlib error = {0}'.format(str(e)) print(msg) try: @@ -241,10 +221,10 @@ def send_mail_by_SMTPlib(subject, from_email, to_init, html_content, smtp_server return msg -def sendMail(subject, text_content, from_email, to, html_content): +def sendMail(sets, subject, text_content, from_email, to, html_content): print('sendMail to {0}'.format(str(to))) - admin_send_mail_by_SMTPlib(subject, from_email, [to], html_content) + admin_send_mail_by_SMTPlib(sets, subject, from_email, [to], html_content) # msg = EmailMultiAlternatives(subject, text_content, from_email, [to]) # msg.attach_alternative(html_content, "text/html") @@ -253,52 +233,10 @@ def sendMail(subject, text_content, from_email, to, html_content): return u'Accept' -# def techSendMail_for_top_management(html_content, title=None): -# try: -# -# # if not prod_server: -# # msg = '{0}. Not sended because is local'.format(html_content) -# # print(msg) -# # return msg -# from AuthApp.models import User -# from django.db.models import Q -# -# # to = ['web@syncsystems.net'] -# to = User.objects.filter( -# Q(is_superuser=True) | Q(groups__name__in=[ -# 'Отдел продаж: Начальник отдела продаж', 'Управляющий', -# 'Бухгалтерия: Главный бухгалтер' -# ]), -# is_active=True, -# is_staff=True -# ).values_list('email', flat=True) -# to = list(to) -# to.append('office@truenergy.by') -# -# print('techSendMail_for_top_management') -# if title: -# subject = title -# else: -# subject = u'truEnergy Data техническое оповещение' -# from_email = 'support@truenergy.by' -# -# res = admin_send_mail_by_SMTPlib(subject, from_email, to, html_content) -# -# # msg = EmailMultiAlternatives(subject, text_content, from_email, to) -# # msg.attach_alternative(html_content, "text/html") -# # msg.send() -# print(res) -# return u'Accept' -# -# except Exception as e: -# msg = 'techSendMail_for_top_management error={0}'.format(str(e)) -# techSendMail(msg) -# print(msg) -# -# return 'Fail' -def techSendMail_for_specified_email_list(html_content, email_list, title=None): + +def techSendMail_for_specified_email_list(sets, html_content, email_list, title=None): try: print('techSendMail_for_specified_email_list') @@ -308,20 +246,20 @@ def techSendMail_for_specified_email_list(html_content, email_list, title=None): subject = u'truEnergy Data техническое оповещение' from_email = 'support@truenergy.by' - res = admin_send_mail_by_SMTPlib(subject, from_email, email_list, html_content) + res = admin_send_mail_by_SMTPlib(sets, subject, from_email, email_list, html_content) print(res) return u'Accept' except Exception as e: msg = 'techSendMail_for_specified_email_list error={0}'.format(str(e)) - techSendMail(msg) + techSendMail(sets, msg) print(msg) return 'Fail' -def techSendMail(html_content, title=None, add_emails=None): +def techSendMail(sets, html_content, title=None, add_emails=None): # if not prod_server: # msg = '{0}. Not sended because is local'.format(html_content) # print(msg) @@ -342,7 +280,7 @@ def techSendMail(html_content, title=None, add_emails=None): else: subject = u'truEnergy Data техническое оповещение' - res = admin_send_mail_by_SMTPlib(subject, from_email, to, html_content) + res = admin_send_mail_by_SMTPlib(sets, subject, from_email, to, html_content) print(res) diff --git a/GeneralApp/forms.py b/GeneralApp/forms.py new file mode 100644 index 0000000..448deb1 --- /dev/null +++ b/GeneralApp/forms.py @@ -0,0 +1,21 @@ +from django import forms +from django.contrib.auth.forms import AuthenticationForm +from django.utils.translation import gettext_lazy as _ +from django.core.exceptions import ValidationError +from django.forms import widgets + + + + +class FeedbackForm(forms.Form): + # account_type = forms.ChoiceField(choices=account_type_choices, initial='sender', required=True) + name = forms.CharField(label=_('Имя'), required=True) + company = forms.CharField(label=_('Фамилия'), required=True) + + contacts = forms.CharField(label=_('Роль в проекте'), required=True) + description = forms.CharField(label=_('Телефон'), required=True) + + agreement = forms.BooleanField( + label=_('Принимаю пользовательское соглашение и принимаю условия обработки личных данных'), + initial=False, required=True + ) \ No newline at end of file diff --git a/GeneralApp/funcs.py b/GeneralApp/funcs.py index b3b9bd0..0a84d88 100644 --- a/GeneralApp/funcs.py +++ b/GeneralApp/funcs.py @@ -9,9 +9,13 @@ def get_inter_Dict(user): from ServicesApp.funcs import get_sections sections = get_sections() theme = get_admin_interface_theme() + + from .forms import FeedbackForm + Dict.update({ 'sections': sections, - 'logo': theme.logo.url + 'logo': theme.logo.url, + 'feedback_form': FeedbackForm(), }) # from SubscribesApp.funcs import get_cur_user_subscribe # user_subscribe = get_cur_user_subscribe(user) diff --git a/GeneralApp/models.py b/GeneralApp/models.py index 999c68c..010f32f 100644 --- a/GeneralApp/models.py +++ b/GeneralApp/models.py @@ -154,4 +154,179 @@ class FAQitem(BaseModel): class Meta: verbose_name = 'FAQ' - verbose_name_plural = 'FAQs' \ No newline at end of file + verbose_name_plural = 'FAQs' + + + +def work_time_default_from(): + dt = datetime.now().replace(hour=9, minute=0, second=0, microsecond=0) + return dt + +def work_time_default_to(): + dt = datetime.now().replace(hour=18, minute=0, second=0, microsecond=0) + return dt + +class Office(BaseModelViewPage): + + city = models.CharField(max_length=250, verbose_name=_(u'Город')) + address = models.CharField(max_length=250, verbose_name=_(u'Адрес'), null=True, blank=True) + workTime = models.CharField( + max_length=220, verbose_name=_(u'Комментарий к времени работы'), + # help_text='добавляется справа от времени работы' + ) + work_time_from = models.TimeField(verbose_name=_('Время работы с'), default=work_time_default_from()) + work_time_to = models.TimeField(verbose_name=_('Время работы до'), default=work_time_default_to()) + # email = models.CharField(max_length=50,verbose_name=_(u'e-mail'), null=True, blank=True) + + legal_name = models.CharField(max_length=250, verbose_name=_(u'Юридическое название'), null=True, blank=True) + legal_address = models.CharField(max_length=250, verbose_name=_(u'Адрес'), null=True, blank=True) + unp = models.CharField(max_length=250, verbose_name=_(u'Номер налогоплательщика'), null=True, blank=True) + urInfo = RichTextUploadingField(verbose_name=_(u'Юридическая информация'), null=True, blank=True) + legal_docs_text = models.TextField( + verbose_name=_(u'Данные о свидетельствах и сертификатах'), null=True, blank=True + ) + + fullContactInfo = RichTextUploadingField( + verbose_name=_(u'Контактные данные'), null=True, blank=True) + map_code = models.TextField(verbose_name=_(u'код карты'), null=True, blank=True) + + main_office = models.BooleanField(verbose_name='Главный офис', default=False) + + gps_longitude = models.DecimalField( + max_digits=22, decimal_places=16, verbose_name='GPS Долгота', blank=True, null=True + ) + gps_latitude = models.DecimalField( + max_digits=22, decimal_places=16, verbose_name='GPS Широта', blank=True, null=True + ) + + footer_info = RichTextUploadingField(verbose_name=_('Информация в подвале'), null=True, blank=True) + + def __str__(self): + return self.name + + def save(self, *args, **kwargs): + # self.order = 0 + super(Office, self).save(*args, **kwargs) + + def contacts(self): + return Contact.objects.filter(enable=True, office=self).order_by('order') + + def first_phone(self): + try: + contact = Contact.objects.filter(enable=True, office=self, contact_type='phone').first() + if contact.contact_prefix: + return '{0} {1}'.format(contact.contact_prefix, contact.contact_data) + else: + return contact.contact_data + except Contact.DoesNotExist: + return None + + def get_first_contact_by_type(self, contact_type): + try: + contact = Contact.objects.filter(enable=True, office=self, contact_type=contact_type).first() + if contact.contact_prefix: + return '{0} {1}'.format(contact.contact_prefix, contact.contact_data) + else: + return contact.contact_data + except Contact.DoesNotExist: + return None + + + class Meta: + verbose_name=_(u'Подразделения') + verbose_name_plural = _(u'Подразделение') + ordering = ['order', 'city', 'name'] + + +contact_type_choice = ( + ('phone', 'Телефон'), + ('email', 'email'), + ('messenger', 'Мессенджер'), +) + + +class Contact(BaseModel): + contact_type = models.CharField( + max_length=50, choices=contact_type_choice, verbose_name=_(u'Тип контакта'), default='phone' + ) + contact_label = models.CharField(max_length=50, verbose_name=_(u'Метка контакта'), null=True, blank=True) + contact_prefix = models.CharField(max_length=50, verbose_name=_(u'Префикс контакта'), null=True, blank=True) + contact_data = models.CharField(max_length=50, verbose_name=_(u'Номер телефона')) + office = models.ForeignKey(Office, verbose_name='Офис', related_name='rel_contacts_for_office', on_delete=models.CASCADE) + + def __str__(self): + if self.name: + return self.name + else: + if not self.contact_prefix: + return self.contact_label + ' ' + self.contact_data + else: + return self.contact_label + ' ' + self.contact_prefix + self.contact_data + + def get_prefix_w_data(self): + if self.contact_prefix: + return '{0} {1}'.format(self.contact_prefix, self.contact_data) + else: + return self.contact_data + + + class Meta: + verbose_name=_(u'Контакт') + verbose_name_plural = _(u'Контакты') + ordering = ['order', 'contact_type', 'contact_label'] + + +class FooterBlockModel(BaseModel): + url = models.CharField(max_length=250, verbose_name=u'URL привязанной страницы', help_text=u'адрес страницы на которую ведет данная ссылка)', null=True, blank=True) + enable_bullets = models.BooleanField(default=False, verbose_name='Включить метки') + + def __str__(self): + if self.name: + return self.name + else: + return self.id + + class Meta: + verbose_name=u'Блок подвала' + verbose_name_plural =u'Блоки подвала' + ordering = ['order', 'name'] + +class FooterLinkModel(BaseModel): + footer_block = models.ForeignKey(FooterBlockModel,verbose_name='Блок', related_name='rel_footer_block', on_delete=models.CASCADE) + url = models.CharField(max_length=250, verbose_name=u'URL привязанной страницы', help_text=u'адрес страницы на которую ведет данная ссылка)', null=True, blank=True) + + def __str__(self): + if self.name: + return self.name + else: + return self.id + + class Meta: + verbose_name=u'Ссылка подвала' + verbose_name_plural =u'Ссылки подвала' + ordering = ['order', 'name'] + + + +# class HeaderLinkModel(FooterLinkModel): +# +# class Meta: +# verbose_name=u'Ссылка козырька' +# verbose_name_plural =u'Ссылки козырька' +# ordering = ['order', 'name'] + + +class HeaderLink(BaseModel): + url = models.CharField(max_length=250, verbose_name=u'URL привязанной страницы', + help_text=u'адрес страницы на которую ведет данная ссылка)', null=True, blank=True) + + def __str__(self): + if self.name: + return self.name + else: + return self.id + + class Meta: + verbose_name=u'Ссылка козырька' + verbose_name_plural =u'Ссылки козырька' + ordering = ['order', 'name'] \ No newline at end of file diff --git a/ServicesApp/urls.py b/ServicesApp/urls.py index c7c497e..f01592e 100644 --- a/ServicesApp/urls.py +++ b/ServicesApp/urls.py @@ -6,7 +6,7 @@ from .views import * urlpatterns = [ path('section//', section_view, name='section_page'), - path('project_request/', page_project_request_View, name='page_project_request'), + # path('project_request/', page_project_request_View, name='page_project_request'), # path('page//', StaticPageView, name='static_page'), # path('test_code', test_code, name='test_code'), ] \ No newline at end of file