diff --git a/ArticlesApp/admin.py b/ArticlesApp/admin.py
index 4e47232..0a4eb0b 100644
--- a/ArticlesApp/admin.py
+++ b/ArticlesApp/admin.py
@@ -149,7 +149,7 @@ class Admin_UserPage(Admin_Trans_BaseModelViewPage):
if request.user.is_superuser:
return True
- if obj and obj.url in ('for-partners', 'dealers', 'about-truenergy', 'contacts'):
+ if obj and obj.url in ('for-partners', 'dealers', 'contacts'):
return False
return True
diff --git a/ArticlesApp/views.py b/ArticlesApp/views.py
index 3451081..ce36403 100644
--- a/ArticlesApp/views.py
+++ b/ArticlesApp/views.py
@@ -18,7 +18,7 @@ from django.utils.translation import gettext_lazy as _
def get_flat_pages_links_Dict(site):
flat_pages_links = UserPageModel.objects.filter(
- url__in=('about-truenergy', 'for-partners', 'contacts'),
+ url__in=('for-partners', 'contacts'),
sites=site
).values_list('url', flat=True)
diff --git a/AuthApp/views.py b/AuthApp/views.py
index 96e1faa..872eeda 100644
--- a/AuthApp/views.py
+++ b/AuthApp/views.py
@@ -205,7 +205,7 @@ def create_temporary_user():
from django.utils.translation import gettext as _
user_id = str(uuid1().hex)[:10]
user_name = u'user'+user_id
- mail = user_id+u'@truenergy.by'
+ mail = user_id+u'@domain'
user = User.objects.create_user(mail, mail,user_id)
user.first_name = _(u'незарег. пользователь')
user.last_name = u''
diff --git a/BaseModels/mailSender.py b/BaseModels/mailSender.py
index dbbb987..551febb 100644
--- a/BaseModels/mailSender.py
+++ b/BaseModels/mailSender.py
@@ -241,49 +241,7 @@ 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):
diff --git a/BaseModels/search_optimization/ld_json/ld_search.py b/BaseModels/search_optimization/ld_json/ld_search.py
index 9161def..1d19313 100644
--- a/BaseModels/search_optimization/ld_json/ld_search.py
+++ b/BaseModels/search_optimization/ld_json/ld_search.py
@@ -8,7 +8,7 @@ def get_ld_search(domain):
data = {
"@context": "https://schema.org",
"@type": "WebSite",
- "url": domain, #"https://truenergy.by/",
+ "url": domain,
"potentialAction": {
"@type": "SearchAction",
"target": {
diff --git a/BaseModels/seo_text_generators.py b/BaseModels/seo_text_generators.py
index c5e36eb..ffb9a8e 100644
--- a/BaseModels/seo_text_generators.py
+++ b/BaseModels/seo_text_generators.py
@@ -1,258 +1,75 @@
from BaseModels.inter import cut_to_number_w_point
-def generate_seotext_by_properties(product_data_Dict):
-
- power_txt = ''
- ip_txt = ''
- lm_txt = ''
- temp_txt = ''
- install_txt = ''
- diametr_txt = ''
-
- try:
-
- if 'diameter' in product_data_Dict:
- val = int(product_data_Dict['diameter'])
- else:
- val = int(product_data_Dict['width'])
-
- diametr_txt = '{0} truEnergy {1} серии {2}.
'.format(
- product_data_Dict['product_type']['name'].upper(),
- product_data_Dict['article'],
- product_data_Dict['product_series']['name'].upper()
- )
-
- # if product_data_Dict['product_type']['name'] == 'Светильник светодиодный':
- #
- # if val < 100:
- # diametr_txt = '{0} truEnergy {1} серии {2} - это хорошее решение для дома.
'.format(
- # product_data_Dict['product_type']['name'].upper(),
- # product_data_Dict['article'],
- # product_data_Dict['product_series']['name'].upper()
- # )
- #
- # elif val < 150:
- # diametr_txt = '{0} truEnergy {1} серии {2} отлично подойдет для освещения вашей квартиры, дома или офиса.
'.format(
- # product_data_Dict['product_type']['name'].upper(),
- # product_data_Dict['article'],
- # product_data_Dict['product_series']['name'].upper()
- # )
- #
- # else:
- # diametr_txt = '{0} truEnergy {1} серии {2} - это энергоэффективное освещение для различных площадей и объектов.
'.format(
- # product_data_Dict['product_type']['name'].upper(),
- # product_data_Dict['article'],
- # product_data_Dict['product_series']['name'].upper()
- # )
- # # не светильник
- # else:
- # diametr_txt = '{0} truEnergy {1} серии {2} - это энергоэффективное решение для освещения различных пространств.
'.format(
- # product_data_Dict['product_type']['name'].upper(),
- # product_data_Dict['article'],
- # product_data_Dict['product_series']['name'].upper()
- # )
- except Exception as e:
- pass
-
- # ---------
- for property in product_data_Dict['properties_w_values_filtred']:
-
- # ------
-
- try:
-
- if property['property']['name'] == 'Мощность':
- power = int(property['property_value'])
-
- if power < 7:
- power_txt = 'Обладая низким энергопотреблением, этот {0} является заменой лампочки накаливания мощностью до 40 Ватт.
'.format(
- product_data_Dict['product_type']['name'].lower(),
- )
-
- elif power < 13:
- power_txt = 'Энергоэффективность этого устройства позволяет использовть его в местах, ' \
- 'где ранее использовались светильники с лампами накаливания мощностью до 75 Ватт.
'.format(
- )
- elif power < 19:
- power_txt = 'Этот {0} мощностью {1} Ватт легко заменит старые лампы накаливания мощностью до 100 Ватт ' \
- 'или люминесцентные лампы мощностью до 40 Ватт.
'.format(
- product_data_Dict['product_type']['name'].lower(),
- str(power)
- )
-
- elif power < 37:
- power_txt = 'Данная модель подходит для освещения больших пространств. ' \
- 'Она не только поможет решить вопрос освещения, но и существенно сэкономит бюджет, ' \
- 'выделенный на решение этой задачи.
'.format(
- product_data_Dict['product_type']['name'].lower(),
- )
- else:
- power_txt = '{0} Ватт, в данной модели обеспечивает мощный световой поток. ' \
- 'Это дает возможность установки одного изделия для освещения помещений с большой ' \
- 'площадью или открытых пространств.
'.format(
- str(power),
- product_data_Dict['product_type']['name'].lower(),
- )
-
- except Exception as e:
- pass
-
- # ------
-
- try:
-
- if property['property']['name'] == 'Световой поток' and product_data_Dict['article'] != '11043':
- val = int(property['property_value'])
-
- if product_data_Dict['product_type']['name'] == 'Светильник светодиодный':
- lm_txt = 'Один {0} данной модели способен осветить до {1} м.кв. площади ' \
- 'для рабочих зон и жилых комнат, и до {2} м.кв. площади для проходных и подсобных помещений ' \
- '(при стандартной высоте потолка и нормальной освещенности помещения).
'.format(
- product_data_Dict['product_type']['name'].lower(),
- str(round(val / 300,2)),
- str(round(val / 120, 2)),
- )
-
- except Exception as e:
- pass
-
- # -------
-
- try:
-
- if property['property']['name'] == 'IP (пылевлагозащита)':
- val = int(property['property_value'])
-
- if val > 66:
- ip_txt = 'Максимальная защита IP{0} способна выдержать самые сильные испытания водой. ' \
- 'Освещение с такой защитой используют для фонтанов и бассейнов.
'.format(
- str(val),
- )
-
- elif val > 64:
- ip_txt = 'Данный продукт имеет высокую степень пылевлагозащиты - IP{0}. В связи с этим данная модель прекрасно подходит как ' \
- 'для отапливаемых помещений с нормальным уровнем влажности, так и для помещений неотапливаемых, ' \
- 'а также для эксплуатации на улице. Устройство с данной степенью защиты не боится пыли и влаги' \
- 'а так же имеет защиту от струй воды со всех направлений.
'.format(
- str(val),
- )
-
- elif val > 60:
- ip_txt = 'Степень защиты IP{0} обозначает полную защиту от брызг с любых сторон и имеет полную пылинепроницаемость ' \
- '(никакая пыль не может проникнуть внутрь корпуса устройства). ' \
- 'Светильники подходят для установки в помещении и на улице, при рабочих температурах -20 до +40 градусов.
'.format(
- str(val),
- )
-
- elif val > 53:
- ip_txt = 'У изделия с степенью защиты IP{0} снижена возможность попадания пыли внутрь корпуса ' \
- 'и обеспечена полная защита расположенной внутри устройстав электроники.' \
- 'Часто используют для рабочих помещений с повышенным содержанием пыли и влаги, а также под навесами.
'.format(
- str(val),
- product_data_Dict['product_type']['name'].lower(),
- product_data_Dict['product_type']['name_plural'].lower(),
- )
-
- elif val > 40:
- ip_txt = 'Могут устанавливаться в помещения с повышенным уровнем пыли.'.format(
- product_data_Dict['product_type']['name'].lower(),
- )
- else:
- ip_txt = 'IP{0} - степень защиты данной модели, в связи с этим могут устанавливаться в' \
- ' отапливаемые помещения с умеренным уровнем влажности.
'.format(
- str(val),
- )
-
- except Exception as e:
- pass
-
- # -------
-
- try:
-
- if property['property']['name'] == 'Цветовая температура':
- val = int(property['property_value'])
-
- if val < 3001:
- temp_txt = 'Теплый свет, генерируемый этой моделью способствует отдыху и расслаблению. ' \
- 'Он приятен для глаз. В связи с этим рекомендуется устанавливать {0} ' \
- 'с температурой {1}К в зоны отдыха, жилые комнаты и спальни, кафе, лаундж зоны. ' \
- 'Очень удачное решение для обеденных и гостинных комнат.
'.format(
- product_data_Dict['product_type']['name_plural'].lower(),
- str(val),
- )
-
- elif val < 4601:
- temp_txt = 'Модель обладает нейтральным цветом свечения, который прекрасно подходит и как для жилых помещений и комнат, ' \
- 'так и для рабочих зон (офисов, кабинетов, производств) . ' \
- 'Данный свет стимулирует к работе не вызывая перенапряжения глаз и не искажая цветопередачу. ' \
- 'Универсальное и наиболее распространенное решение.
'.format(
- str(val),
- )
-
- elif val < 7001:
- temp_txt = 'Цветовая температура {0}К - наиболее оптимально использование в помещениях промышленного назначения, ' \
- 'административных зданиях, на производствах, складах, гаражах, паркингах. ' \
- 'Однако могут применяться и в интерьере для создания акцентов в дизайне, ' \
- 'либо если предпочтения потребителя отданы в пользу белого света.
'.format(
- str(val),
- )
-
-
-
- else:
- temp_txt = 'От показателя цветовой температуры зависит то, как Вы будут воспринимать предметы и другие объекты освещенные устройством. ' \
- 'С помощью цветовой температуры можно сделать более приятным отдых и улучшить эффективность работы. ' \
- 'Отниситесь внимательно к выбору устройства по этому параметру.
'.format(
- str(val),
- )
- except Exception as e:
- pass
-
- # -------
-
- try:
-
- if property['property']['name'] == 'Тип монтажа':
- val = property['property_value']
-
- if val == 'встраиваемый':
- install_txt = 'Устройство устанавливается в предварительно вырезанное в поверхности отверстие. ' \
- 'Этот вариант монтажа используется для подвесных и натяжных потолков, а так же для фальш-стен и ниш.'.format(
- str(val),
- )
-
- elif val == 'накладной':
- install_txt = 'Способ крепления - накладной. Значит эта модель может быть закреплена на любую ровную поверхность.'.format(
- str(val),
- )
-
- elif val == 'встраиваемый/накладной':
- install_txt = '{0} обладает возможностью монтажа как в отверстия на поверхности плоскостей, так и на любую ровную поверхность.'.format(
- product_data_Dict['article'],
- )
-
- else:
- pass
-
- if 'height_visible_part' in product_data_Dict and product_data_Dict['height_visible_part']:
- install_txt = install_txt + ' Высота видимой части устройства после монтажа составит {0}мм.
'.format(
- str(round(product_data_Dict['height_visible_part']))
- )
- else:
- install_txt = install_txt + '
'
-
- except Exception as e:
- pass
-
- product_data_Dict['seo_text'] = '{0}{1}{2}{3}{4}{5}'.format(
- diametr_txt,
- power_txt,
- lm_txt,
- ip_txt,
- temp_txt,
- install_txt
- )
-
- return product_data_Dict
\ No newline at end of file
+# def generate_seotext_by_properties(product_data_Dict):
+#
+# power_txt = ''
+# ip_txt = ''
+# lm_txt = ''
+# temp_txt = ''
+# install_txt = ''
+# diametr_txt = ''
+#
+# try:
+#
+#
+#
+# except Exception as e:
+# pass
+#
+# # ---------
+# for property in product_data_Dict['properties_w_values_filtred']:
+#
+# # ------
+#
+# try:
+#
+#
+# except Exception as e:
+# pass
+#
+# # ------
+#
+# try:
+#
+#
+#
+# except Exception as e:
+# pass
+#
+# # -------
+#
+# try:
+#
+#
+#
+# except Exception as e:
+# pass
+#
+# # -------
+#
+# try:
+#
+#
+# except Exception as e:
+# pass
+#
+# # -------
+#
+# try:
+#
+#
+#
+# except Exception as e:
+# pass
+#
+# product_data_Dict['seo_text'] = '{0}{1}{2}{3}{4}{5}'.format(
+# diametr_txt,
+# power_txt,
+# lm_txt,
+# ip_txt,
+# temp_txt,
+# install_txt
+# )
+#
+# return product_data_Dict
\ No newline at end of file
diff --git a/GeneralApp/admin.py b/GeneralApp/admin.py
index e724391..7399cfa 100644
--- a/GeneralApp/admin.py
+++ b/GeneralApp/admin.py
@@ -80,17 +80,31 @@ admin.site.register(Block,Admin_Block)
class Admin_Option(Admin_BaseModel):
- def get_fieldsets(self, request, obj=None):
- fieldsets = super(type(self), self).get_fieldsets(request, obj)
- fieldsets.insert(
- 1, ('Контент', {
- 'classes': ['wide'],
- 'fields': (
- 'opt_type', 'prefix', 'value', 'picture'
- )
+ # def get_fieldsets(self, request, obj=None):
+ # fieldsets = super(type(self), self).get_fieldsets(request, obj)
+ # fieldsets.insert(
+ # 1, ('Контент', {
+ # 'classes': ['wide'],
+ # 'fields': (
+ # 'opt_type', 'prefix', 'value', 'picture'
+ # )
+ #
+ # })
+ # )
+ # return fieldsets
- })
- )
- return fieldsets
+
+ fieldsets = [
+ ('Контент', {
+ 'classes': ['wide'],
+ 'fields': (
+ 'name', 'opt_type', 'prefix', 'value', 'picture'
+ )
+ }),
+ ]
+
+ list_display = ['image_thumb', 'opt_type', 'name', 'prefix', 'value']
+ list_editable = ['value', 'prefix']
+ list_filter = ['opt_type']
admin.site.register(Option,Admin_Option)
diff --git a/GeneralApp/init_options.py b/GeneralApp/init_options.py
index 5f534bb..d262c4b 100644
--- a/GeneralApp/init_options.py
+++ b/GeneralApp/init_options.py
@@ -1,7 +1,49 @@
from .models import *
-def init():
+
+required_options_Dict = {
+ 'Адрес почтового сервера': {
+ 'name': 'Адрес почтового сервера',
+ 'opt_type': 'mail_server_url',
+ },
+ 'SMTP порт почтового сервера': {
+ 'name': 'SMTP порт почтового сервера',
+ 'opt_type': 'mail_server_smtp_port',
+ },
+ 'email для отправки писем с сайта': {
+ 'name': 'email для отправки писем с сайта',
+ 'opt_type': 'sender_mail_login',
+ },
+ 'Пароль для отправки писем с сайта': {
+ 'name': 'пароль для отправки писем с сайта',
+ 'opt_type': 'sender_mail_password',
+ },
+ 'Название проекта': {
+ 'name': 'Название проекта',
+ 'opt_type': 'project_name',
+ 'value': 'TWB'
+ },
+ 'Адрес сайта': {
+ 'name': 'Адрес сайта',
+ 'opt_type': 'domain',
+ },
+ 'email техподдержки': {
+ 'name': 'email техподдержки',
+ 'opt_type': 'support_email',
+ },
+
+ }
+
+def init_options():
options = Option.objects.all()
option_names = options.values_list('name', flat=True)
- #
- # if not 'mail_server_url':
+
+ opts_for_create = []
+ for name, data_Dict in required_options_Dict.items():
+ if not name in option_names:
+ opt = Option(**data_Dict)
+ opts_for_create.append(opt)
+
+ Option.objects.bulk_create(opts_for_create)
+
+ return True
diff --git a/GeneralApp/views.py b/GeneralApp/views.py
index 0ced57a..0e65373 100644
--- a/GeneralApp/views.py
+++ b/GeneralApp/views.py
@@ -39,6 +39,10 @@ def test_code(request):
def MainPage(request):
from RoutesApp.forms import RouteForm
+ from .init_options import init_options
+ init_options()
+
+
print(f'LOCALE_PATHS = {str(settings.LOCALE_PATHS)}')
page = StaticPage.objects.get(url='main')
diff --git a/static/css/styles(boris).css b/static/css/styles(boris).css
index 19ed2aa..442ac67 100644
--- a/static/css/styles(boris).css
+++ b/static/css/styles(boris).css
@@ -412,8 +412,8 @@
height: 100px;
width: 100px;
position: absolute;
- top: 35%;
- left: 47%;
+ top: 40%;
+ left: 45%;
}
.loader_chat_f_sw_chats.support.show{
@@ -446,13 +446,28 @@
background: #ffffff;
box-shadow: -1px 4px 10px 0 rgba(198, 199, 203, 0.20), 0 -1px 10px 0 rgba(198, 199, 203, 0.20);
float: right;
+ position: relative;
+}
+.block_loader_chat{
+ width: 63%;
+ height: calc(100vh - 120px);
+ border-radius: 10px;
+ border: none;
+ background: none;
+ box-shadow: none;
+ float: right;
+ position: relative;
}
.block-chat.support{
height: calc(100vh - 154px);
}
+.block_loader_chat.support{
+ height: calc(100vh - 154px);
+}
+
.block-list-of-users{
width: 30%;
margin-left: 20px;
diff --git a/static/js/user_profile_2.js b/static/js/user_profile_2.js
index 29e457a..ddcb458 100644
--- a/static/js/user_profile_2.js
+++ b/static/js/user_profile_2.js
@@ -457,8 +457,10 @@ function selectedUserMessenger (ticket_id=null,user_id=null,el){
if (loader){
loader.classList.toggle("show")
if (block_chat) {
- block_chat.innerHTML = null
+ block_chat.innerHTML = ''
}
+ } else if (block_chat){
+ block_chat.innerHTML = ``
}
let data = null
let url = null
diff --git a/templates/blocks/profile/b_chats.html b/templates/blocks/profile/b_chats.html
index 8b778b5..a1d14fe 100644
--- a/templates/blocks/profile/b_chats.html
+++ b/templates/blocks/profile/b_chats.html
@@ -50,9 +50,14 @@
{# #}
{# #}
{##}
-
+{% if not cur_receiver %}
+