133 lines
4.4 KiB
Python
133 lines
4.4 KiB
Python
from .models import *
|
|
from datetime import datetime, timedelta
|
|
from django.utils.translation import gettext as _
|
|
from django.template.loader import render_to_string
|
|
from GeneralApp.funcs_options import get_options_by_opt_types, get_mail_send_options
|
|
from BaseModels.mailSender import admin_send_mail_by_SMTPlib, techSendMail
|
|
|
|
|
|
|
|
def get_Dict_for_send_msgs(kwargs, search_owner_type):
|
|
|
|
Dict = {
|
|
'search_owner_type': search_owner_type
|
|
}
|
|
sets = get_options_by_opt_types(['domain', 'project_name'], only_vals=True)
|
|
Dict.update(sets)
|
|
|
|
|
|
Dict.update({'logo': f'{sets["domain"]}/static/img/svg/LogoMobile.svg', })
|
|
|
|
find_routes_page_url = f'{sets["domain"]}/routes/route_search_results/?'
|
|
kwargs_list = [f'{key}={value}' for key, value in kwargs.items()]
|
|
kwargs_list.append(f'owner_type={search_owner_type}')
|
|
find_routes_page_url += f'{"&".join(kwargs_list)}'
|
|
|
|
Dict.update({'find_routes_page_url': find_routes_page_url})
|
|
|
|
return Dict
|
|
|
|
|
|
|
|
def send_push_message_for_found_matches_routes(route, data_Dict):
|
|
if not route.owner.is_authenticated:
|
|
return None
|
|
|
|
from PushMessages.views import send_push
|
|
title = 'Мы нашли исполнителя по Вашему объявлению!'
|
|
text = 'Для просмотра результата нажмите на кнопку ниже'
|
|
send_push(route.owner, title, text, url=data_Dict['find_routes_page_url'], button_name=_('Перейти к найденному'))
|
|
return None
|
|
|
|
|
|
|
|
def send_mail_found_matches_routes(route, data_Dict):
|
|
|
|
Dict = {
|
|
'route': route,
|
|
}
|
|
Dict.update(data_Dict)
|
|
|
|
html = render_to_string('mail/m_found_matched_routes.html', Dict)
|
|
|
|
|
|
mail_sets = get_mail_send_options()
|
|
to = [route.owner.email, 'web@syncsystems.net']
|
|
subject = _('Мы нашли исполнителя по Вашему объявлению!')
|
|
res = admin_send_mail_by_SMTPlib(
|
|
mail_sets,
|
|
subject=subject,
|
|
from_email=mail_sets['sender_email'], to=to,
|
|
html_content=html
|
|
)
|
|
|
|
return res
|
|
|
|
|
|
def search_matches(for_routes=None):
|
|
|
|
log = ''
|
|
|
|
try:
|
|
if not for_routes:
|
|
for_routes = Route.objects.filter(
|
|
createDT__gte=datetime.now() - timedelta(hours=1),
|
|
receive_msg_by_email=True
|
|
)
|
|
|
|
check_fields = [
|
|
'type_transport', 'departure_DT', 'arrival_DT', 'from_address_point', 'to_address_point',
|
|
'from_place', 'to_place', 'cargo_type', 'weight'
|
|
]
|
|
|
|
|
|
for route in for_routes:
|
|
kwargs = {}
|
|
params = {}
|
|
|
|
for field_name in check_fields:
|
|
field_val = getattr(route, field_name, None)
|
|
if field_val:
|
|
if type(field_val) == datetime:
|
|
params.update({f"{field_name}": f'{field_val.strftime("%d.%m.%Y")} - {field_val.strftime("%d.%m.%Y")}'})
|
|
kwargs.update({f"{field_name}__date": field_val.date()})
|
|
elif field_name == 'weight':
|
|
# print(field_name)
|
|
params.update({f"{field_name}": field_val})
|
|
if route.owner_type == 'mover':
|
|
kwargs.update({f"{field_name}__lte": field_val})
|
|
else:
|
|
kwargs.update({f"{field_name}__gte": field_val})
|
|
else:
|
|
kwargs.update({field_name: field_val})
|
|
params.update({field_name: field_val})
|
|
|
|
found_routes = Route.objects.exclude(
|
|
id=route.id,
|
|
).exclude(
|
|
owner=route.owner
|
|
).exclude(
|
|
owner_type=route.owner_type
|
|
).filter(
|
|
**kwargs
|
|
# ).count(
|
|
)
|
|
|
|
if found_routes:
|
|
data_Dict = get_Dict_for_send_msgs(params, found_routes[0].owner_type)
|
|
msg = send_push_message_for_found_matches_routes(route, data_Dict)
|
|
if msg:
|
|
log += msg
|
|
msg = send_mail_found_matches_routes(route, data_Dict)
|
|
if msg:
|
|
log += msg
|
|
|
|
except Exception as e:
|
|
msg = f'<br>\n! search_matches Error = {str(e)}'
|
|
log += msg
|
|
|
|
mail_sets = get_mail_send_options()
|
|
techSendMail(mail_sets, log, title='search_matches fail')
|
|
|
|
return log
|