Files
tripwithbonus/RoutesApp/funcs.py
SDE bae7e05077 0.7.29
fix search routes insert txt address points
2023-09-16 16:19:22 +03:00

242 lines
7.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from .models import *
from .forms import *
from django.utils.translation import gettext as _
from django.template.loader import render_to_string
from datetime import datetime
def get_profile_new_route_page_html(request, data):
form = RouteForm()
Dict = {
'form': form
}
try:
errors_off = True
if 'from_address_point' in data:
del data['from_address_point']
if 'from_address_point_txt' in data:
del data['from_address_point_txt']
if 'to_address_point' in data:
del data['to_address_point']
if 'to_address_point_txt' in data:
del data['to_address_point_txt']
if 'type_transport' in data:
if data['type_transport'] == 'avia':
transfer_location_choices = (
('airport', _('В аэропорту')),
('city', _('По городу')),
('other', _('По договоренности'))
)
cargo_type_choices = (
('passenger', _('Пассажир')),
('cargo', _('Груз')),
('parcel', _('Бандероль')),
('package', _('Посылка')),
('letter', _('Письмо\Документ'))
)
else:
transfer_location_choices = (
('city', _('По городу')),
('other', _('По договоренности'))
)
cargo_type_choices = (
('cargo', _('Груз')),
('parcel', _('Бандероль')),
('package', _('Посылка')),
('letter', _('Письмо\Документ'))
)
form = RouteForm(data)
if not form.is_valid():
pass
form = RouteForm(initial=form.cleaned_data)
form.fields['from_place'].choices = transfer_location_choices
form.fields['to_place'].choices = transfer_location_choices
form.fields['cargo_type'].choices = cargo_type_choices
form.base_fields['from_place'].choices = transfer_location_choices
form.base_fields['to_place'].choices = transfer_location_choices
form.base_fields['cargo_type'].choices = cargo_type_choices
# form = CreateRouteForm(initial=data)
# if not form.is_valid():
# pass
Dict = {
'form': form,
'errors_off': errors_off
}
# print(form)
except Exception as e:
# form.errors.append({'__all__': f'Ошибка: {str(e)}'})
print(str(e))
html = render_to_string('blocks/profile/b_new_route.html', Dict, request=request)
return html
def get_country_n_city_str_by_type_transport_and_address_point(type_transport, address_point):
city = get_city_by_type_transport_and_address_point(type_transport, address_point)
return city.get_country_n_city_str()
def get_city_by_type_transport_and_address_point(type_transport, address_point):
from ReferenceDataApp.models import Airport, City
try:
if type_transport == 'avia':
return Airport.objects.get(id=address_point).city
else:
return City.objects.get(id=address_point)
except Exception as e:
msg = f'get_city_by_type_transport_and_address_point Error = {str(e)}, type_transport = {type_transport}, address_point = {address_point}'
print(msg)
return None
def get_profile_my_routes_page_content_html(request):
routes_Dict = get_routes_Dict(request.user)
if 'errors' in routes_Dict:
msg = f'get_my_routes_page_content_html errors = {str(routes_Dict)}'
print(msg)
return msg
html = render_to_string('blocks/profile/b_my_routes.html', routes_Dict, request=request)
return html
def get_routes_Dict(user=None, data=None):
from ReferenceDataApp.models import Airport, Country, City
# if not user and user.is_authenticated:
# errors_Dict = {
# 'errors': {
# 'all__': f'ошибка идентификации пользователя'
# }
# }
# return errors_Dict
kwargs = {}
if user:
kwargs.update({
'owner': user
})
from_el = None
to_el = None
res_Dict = {}
if data:
for key, val in data.items():
if val:
if key == 'weight':
weight_list = val.split(';')
if weight_list[0]:
kwargs.update({f'{key}__gte': int(weight_list[0])})
if weight_list[1]:
kwargs.update({f'{key}__lte': int(weight_list[1])})
if key == 'type_transport':
items_list = val.split(',')
kwargs.update({f'{key}__in': items_list})
if key in (
'departure_DT', 'arrival_DT'
):
kwargs.update({f'{key}__date': datetime.strptime(val, '%Y-%m-%d')})
if key not in (
'from_address_point_txt', 'to_address_point_txt', 'csrfmiddlewaretoken', 'sort', 'weight',
'from_el', 'to_el', 'from_address_point', 'to_address_point', 'type_transport',
'departure_DT', 'arrival_DT'
):
kwargs.update({key: val})
if key == 'from_address_point':
kwargs.update({f'from_city__id': val})
res_Dict.update({
'from_address_point_txt': get_country_n_city_str_by_type_transport_and_address_point(
'road', val
)
})
if key == 'to_address_point':
kwargs.update({f'to_city__id': val})
res_Dict.update({
'to_address_point_txt': get_country_n_city_str_by_type_transport_and_address_point(
'road', val
)
})
if key == 'from_el':
from_el = int(val)
if key == 'to_el':
to_el = int(val)
routes = Route.objects.filter(**kwargs).order_by('-modifiedDT')
routes_count = routes.count()
if from_el and to_el:
routes = routes[from_el:to_el]
elif from_el:
routes = routes[from_el:]
elif to_el:
routes = routes[:to_el]
else:
routes = routes[:25]
last_block_routes = False
if to_el and to_el >= routes_count:
last_block_routes = True
try:
for route in routes:
try:
if route.type_transport == 'avia':
route.from_airport = Airport.objects.get(id=route.from_address_point)
route.to_airport = Airport.objects.get(id=route.to_address_point)
route.from_city = route.from_airport.city
route.to_city = route.to_airport.city
else:
route.from_city = City.objects.get(id=route.from_address_point)
route.to_city = City.objects.get(id=route.to_address_point)
route.from_country = route.from_city.country
route.to_country = route.to_city.country
except Exception as e:
msg = f'get_routes_for_user get route Error = {str(e)}'
print(msg)
res_Dict.update({
'routes': routes,
'last_block_routes': last_block_routes
})
return res_Dict
except Exception as e:
msg = f'get_routes_for_user = {str(e)}'
print(msg)
errors_Dict = {
'errors': {
'all__': msg
}
}
return errors_Dict