Merge pull request 'dev' (#7) from dev into main

Reviewed-on: sysadminix/tripwithbonus#7
This commit is contained in:
2024-08-09 18:55:31 +03:00
22 changed files with 441 additions and 197 deletions

View File

@@ -97,12 +97,14 @@ class Admin_User(UserAdmin):
save_on_top = True
list_display = ['id', 'last_name', 'first_name', 'mailing_on', 'email', 'is_staff',
'is_active']
'is_active', 'date_joined', 'last_login']
list_editable = ['is_staff', 'is_active']
list_display_links = ['first_name', 'last_name', 'email']
search_fields = ['first_name', 'last_name', 'email']
list_filter = ['user_profile__mailing_on', 'is_staff', 'is_active']
readonly_fields = ['date_joined', 'last_login']
list_filter = ['user_profile__mailing_on', 'is_staff', 'is_active', 'date_joined', 'last_login']
inlines = (Admin_ProfileInline,)
# actions = ['del_all_temp_users', ]

View File

@@ -9,11 +9,9 @@ tzf = TimezoneFinder()
def search_cities_in_db(search_str):
Q_obj = Q(name_en__icontains=search_str) | Q(name_ru__icontains=search_str) | \
Q(country__name_en__icontains=search_str) | Q(country__name_ru__icontains=search_str)
res_data = City.objects.filter(Q_obj).values('id', 'name', 'country__name')
res_data = City.objects.filter(Q_obj).values('id', 'name', 'country__name', 'timezone')
return list(res_data)
def search_airports_in_db(search_str):
@@ -22,7 +20,10 @@ def search_airports_in_db(search_str):
Q(city__name_en__icontains=search_str) | Q(city__name_ru__icontains=search_str) | \
Q(city__country__name_en__icontains=search_str) | \
Q(city__country__name_ru__icontains=search_str)
res_data = Airport.objects.filter(Q_obj).values('id', 'name', 'iata_code', 'city__name', 'city__country__name')
res_data = Airport.objects.filter(Q_obj).values(
'id', 'name', 'iata_code',
'city__name', 'city__country__name', 'city__timezone'
)
return list(res_data)

View File

@@ -56,10 +56,12 @@ def get_address_point_ajax(request):
item['fullname'] = f'{item["iata_code"]} - {item["name"]}'
item['city_name'] = item['city__name']
item['country_name'] = item['city__country__name']
item['city_DT'] = datetime.now(tz=pytz.timezone(item['city__timezone']))
else:
item['city_name'] = item['name']
item['country_name'] = item['country__name']
item['fullname'] = f'{item["city_name"]} / {item["country_name"]}'
item['city_DT'] = datetime.now(tz=pytz.timezone(item['timezone']))
html = f"{html}{render_to_string('widgets/w_ac_input_address_point.html', item)}"
i += 1

View File

@@ -0,0 +1,28 @@
# Generated by Django 4.2.2 on 2024-07-12 17:23
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('ReferenceDataApp', '0005_remove_airport_parsing_finished_and_more'),
]
operations = [
migrations.AddField(
model_name='airport',
name='timezone',
field=models.CharField(blank=True, max_length=250, null=True, verbose_name='Часовая зона'),
),
migrations.AddField(
model_name='city',
name='timezone',
field=models.CharField(blank=True, max_length=250, null=True, verbose_name='Часовая зона'),
),
migrations.AddField(
model_name='country',
name='timezone',
field=models.CharField(blank=True, max_length=250, null=True, verbose_name='Часовая зона'),
),
]

View File

@@ -13,7 +13,9 @@ class Admin_Route(Admin_Trans_BaseModel):
list_display_links = ['id']
list_filter = ['owner_type', 'type_transport', 'cargo_type', 'from_place', 'arrival_DT', 'modifiedDT', 'createDT']
search_fields = ['owner__first_name', 'owner__last_name']
search_fields = [
'owner__first_name', 'owner__last_name', 'from_city__name', 'to_city__name'
]
raw_id_fields = ['from_city', 'to_city']
admin.site.register(Route,Admin_Route)

View File

@@ -59,6 +59,8 @@ def route_search_results_View(request):
t = loader.get_template('pages/p_results_find_route.html')
return get_inter_http_response(t, Dict, request)
# return HttpResponse(t.render(Dict, request))
except Exception as e:
msg = f'!!! --- route_search_results_View Exception {str(e)}'
print(msg)
raise Http404

View File

@@ -1510,6 +1510,10 @@
width: 153px;
}
.popup_content{
width: 41%;
}
}
@media (max-width: 950px){
@@ -1554,6 +1558,9 @@
.pag_news_item_text{
width: unset;
}
.popup_content{
width: 52%;
}
}
@media (max-width: 850px){
@@ -1687,6 +1694,9 @@
.marker_messages_mobile.show{
display: block;
}
.popup_content>.confirm_profile_btn{
width: 90%;
}
}
@media (max-width: 828px){
@@ -1844,6 +1854,9 @@
.inf_carrier_icon{
/*width: 3%;*/
}
.popup_content{
width: 70%;
}
}
@media (max-width: 687px){
/*.to_address_point_txt.find_route {*/

View File

@@ -3008,6 +3008,8 @@ a.open_inf_carrier{
display: none;
}
.cookie_block.show{
display: block;
}
@@ -3035,3 +3037,63 @@ a.open_inf_carrier{
width: 95px;
cursor: pointer;
}
/*popup*/
.popup_wrapper{
display: none;
position: fixed; /* Используйте fixed, чтобы попап оставался на месте при прокрутке */
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5); /* Полупрозрачный фон */
justify-content: center;
align-items: center;
z-index: 9999;
}
.popup_wrapper.show{
display: flex;
}
.popup_content{
position: relative;
width: 38%;
height: fit-content;
background: #FFFFFF;
border-radius: 15px;
text-align: center;
padding: 28px;
font-family: Inter;
}
.popup_cross{
position: absolute;
right: 5%;
cursor: pointer;
}
.popup_img>img{
background: #E1E1E1;
border-radius: 39px;
padding: 5px;
}
.popup_title{
font-weight: 700;
font-size: 34px;
margin-top: 20px;
}
.popup_text{
line-height: 30px;
font-size: 20px;
margin-top: 10px;
color: #6F6C90;
}
.popup_content>.confirm_profile_btn{
width: 62%;
}
#poup_text_bold{
font-weight: 700;
color: #1d1e20;
}
#authenticated_img{
display: none;
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 228 KiB

View File

@@ -0,0 +1,4 @@
<svg width="19" height="18" viewBox="0 0 19 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M1.29785 17L17.2979 1" stroke="#170F49" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M17.2979 17L1.29785 1" stroke="#170F49" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>

After

Width:  |  Height:  |  Size: 333 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 984 KiB

View File

@@ -20,6 +20,7 @@ function SendLoginForm(el){
data: formData,
success: function(data){
location.href = data.redirect_url//`/profile/page/dashboard/`
window.sessionStorage.removeItem('mailingSubscribeRequired')
window.sessionStorage.removeItem('email')
@@ -29,6 +30,8 @@ function SendLoginForm(el){
},
error: function (data, exception){
document.querySelector(".login").innerHTML = data.responseJSON.html

View File

@@ -227,6 +227,14 @@ function checkStateCookie () {
if (!window.document.cookie.includes("allow_cookie=true")){
document.querySelector(".cookie_block").classList.add("show")
}
if (!window.document.cookie.includes("popup_show=false")){
setTimeout(() => {
document.querySelector('.popup_wrapper').classList.add('show');
}, 15000);
}
if(!window.document.cookie.includes("first_authorization=true") && window.document.getElementById('authenticated_img')){
document.querySelector(".popup_wrapper").classList.add("show")
}
if (window.document.cookie.includes("twb_new_messages=true")){
if (getInfoAboutUser('screen_width') < 800) {
let marker_new_messages = document.querySelector(".marker_messages_mobile");
@@ -258,12 +266,22 @@ function getCsrfCookie () {
return csrf
}
function setCokie (days,name,val) {
function setCokie (days,name,val, url = null) {
let date = new Date();
// let days = 182;
date.setTime(+ date + (days * 86400000));
window.document.cookie = `${name}=${val}` + "; expires=" + date.toGMTString() + "; path=/";
document.querySelector(".cookie_block").classList.remove("show")
if(name === 'allow_cookie' ){
document.querySelector(".cookie_block").classList.remove("show")
} else if(name === 'popup_show'){
document.querySelector(".popup_wrapper").classList.remove("show")
if(url){
window.location.href = url}
} else if (name === 'first_authorization'){
document.querySelector(".popup_wrapper").classList.remove("show")
}
// return value;
}

View File

@@ -143,108 +143,108 @@ function init_arrival_DT (date=null,single=true,hour=true){
}
function init_departure_DT() {
let place_1 = document.querySelector("#id_departure_DT");
if (!place_1) return;
function init_departure_DT (){
let hiddenTime = document.querySelector('.local_city_time').innerText;
let place_1 = document.querySelector("#id_departure_DT")
let onl_param = ""
if (window.location.href === "http://localhost:8016/ru/profile/page/create_route_for_mover/" || window.location.href === "http://localhost:8016/ru/profile/page/create_route_for_customer/"){
onl_param = "singleDatePicker"
}
if (place_1) {
let startDate = null;
if(hiddenTime){
if (window.location.href.includes("/ru/")) {
$(place_1).daterangepicker({
"autoapply": true,
"linkedCalendars": false,
"singleDatePicker":true,
"timePicker":true,
"timePicker24Hour":true,
"locale": changeLangForDateTimePicker(),
},
function(start, end, label) {
// $('#displayRegervation').text('Registration date is: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD'));
// $('#regervation')[0].dataset['departure_DT'] = start.format('YYYY-MM-DD');
// $('#regervation')[0].dataset['arrival_DT'] = end.format('YYYY-MM-DD');
$('#id_departure_DT').val(start.format('DD.MM.YYYY HH:mm'))
startDate = moment(hiddenTime, "D MMMM YYYY г. HH:mm", 'ru');
} else {
});
$(`${place_1.id} .drp-calendar.right`).hide();
$(`${place_1.id} .drp-calendar.left`).addClass('single');
$(`${place_1.id} .calendar-table`).on('DOMSubtreeModified', function() {
var el = $(`${place_1.id} .prev.available`).parent().children().last();
if (el.hasClass('next available')) {
return;
}
el.addClass('next available');
el.append('<span></span>');
});
startDate = moment(hiddenTime, "MMMM D, YYYY, h:mm a", 'en');
}
} else {
startDate = moment()
}
$(place_1).daterangepicker({
"autoapply": true,
"linkedCalendars": false,
"singleDatePicker": true,
"timePicker": true,
"timePicker24Hour": true,
"minDate": startDate,
"locale": changeLangForDateTimePicker(),
}, function (start, end, label) {
$('#id_departure_DT').val(start.format('DD.MM.YYYY HH:mm'));
});
$(`${place_1.id} .drp-calendar.right`).hide();
$(`${place_1.id} .drp-calendar.left`).addClass('single');
$(`${place_1.id} .calendar-table`).on('DOMSubtreeModified', function () {
var el = $(`${place_1.id} .prev.available`).parent().children().last();
if (el.hasClass('next available')) {
return;
}
el.addClass('next available');
el.append('<span></span>');
});
}
$(function () {
let onl_param = ""
if (window.location.href === "http://localhost:8016/ru/profile/page/create_route_for_mover/" || window.location.href === "http://localhost:8016/ru/profile/page/create_route_for_customer/"){
onl_param = "singleDatePicker: true"
}
let place_1 = document.querySelector("#id_arrival_DT")
if (place_1) {
$(place_1).daterangepicker({
"autoapply": true,
"linkedCalendars": false,
"locale": changeLangForDateTimePicker(),
},
function (start, end, label) {
// $('#displayRegervation').text('Registration date is: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD'));
$('#id_arrival_DT').val(start.format('DD.MM.YYYY') + " - " + end.format('DD.MM.YYYY'))
});
$(`${place_1.id} .drp-calendar.right`).hide();
$(`${place_1.id} .drp-calendar.left`).addClass('single');
$(`${place_1.id} .calendar-table`).on('DOMSubtreeModified', function () {
var el = $(`${place_1.id} .prev.available`).parent().children().last();
if (el.hasClass('next available')) {
return;
}
el.addClass('next available');
el.append('<span></span>');
});
}
});
$(function() {
let place_1 = document.querySelector("#id_departure_DT")
let onl_param = ""
if (window.location.href === "http://localhost:8016/ru/profile/page/create_route_for_mover/" || window.location.href === "http://localhost:8016/ru/profile/page/create_route_for_customer/"){
onl_param = "singleDatePicker: true"
let onl_param = {};
if (window.location.href.includes("/ru/profile/page/create_route_for_mover/") || window.location.href.includes("/ru/profile/page/create_route_for_customer/")) {
onl_param = { singleDatePicker: true };
}
let place_1 = document.querySelector("#id_arrival_DT");
if (place_1) {
$(place_1).daterangepicker({
"autoapply": true,
"linkedCalendars": false,
"locale": changeLangForDateTimePicker(),
onl_param
},
function(start, end, label) {
// $('#displayRegervation').text('Registration date is: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD'));
// $('#regervation')[0].dataset['departure_DT'] = start.format('YYYY-MM-DD');
// $('#regervation')[0].dataset['arrival_DT'] = end.format('YYYY-MM-DD');
$('#id_departure_DT').val(start.format('DD.MM.YYYY') + " - " + end.format('DD.MM.YYYY'))
// init_arrival_DT(start.format('DD.MM.YYYY'),false,false)
$('#id_arrival_DT').val('')
init_arrival_DT(start.format('DD.MM.YYYY'),false,false)
...onl_param
}, function (start, end, label) {
$('#id_arrival_DT').val(start.format('DD.MM.YYYY') + " - " + end.format('DD.MM.YYYY'));
});
$(`${place_1.id} .drp-calendar.right`).hide();
$(`${place_1.id} .drp-calendar.left`).addClass('single');
$(`${place_1.id} .calendar-table`).on('DOMSubtreeModified', function() {
$(`${place_1.id} .calendar-table`).on('DOMSubtreeModified', function () {
var el = $(`${place_1.id} .prev.available`).parent().children().last();
if (el.hasClass('next available')) {
return;
}
el.addClass('next available');
el.append('<span></span>');
});
}
});
$(function() {
let place_1 = document.querySelector("#id_departure_DT");
let onl_param = {};
if (window.location.href.includes("/ru/profile/page/create_route_for_mover/") || window.location.href.includes("/ru/profile/page/create_route_for_customer/")) {
onl_param = { singleDatePicker: true };
}
if (place_1) {
$(place_1).daterangepicker({
"autoapply": true,
"linkedCalendars": false,
"locale": changeLangForDateTimePicker(),
...onl_param
}, function (start, end, label) {
$('#id_departure_DT').val(start.format('DD.MM.YYYY') + " - " + end.format('DD.MM.YYYY'));
$('#id_arrival_DT').val('');
init_arrival_DT(start.format('DD.MM.YYYY'), false, false);
});
$(`${place_1.id} .drp-calendar.right`).hide();
$(`${place_1.id} .drp-calendar.left`).addClass('single');
$(`${place_1.id} .calendar-table`).on('DOMSubtreeModified', function () {
var el = $(`${place_1.id} .prev.available`).parent().children().last();
if (el.hasClass('next available')) {
return;

View File

@@ -346,13 +346,27 @@ function searchTown(el){
function selectItemAddrPoint(id, name, ctrl_name,){
function selectItemAddrPoint(id, name, ctrl_name, city_DT){
let input_list = document.getElementsByName(ctrl_name + '_list')[0];
let tap_txt_cont = document.querySelector("#id_" + ctrl_name);
let local_city_time = document.querySelector(".local_city_time");
if(ctrl_name === "from_address_point_txt" && local_city_time){
local_city_time.innerHTML = city_DT;
}
tap_txt_cont.value = name;
tap_txt_cont.setAttribute('title',name)
let tap_cont = document.querySelector("#id_" + ctrl_name.slice(0, -4));
tap_cont.value = id;
if (local_city_time){
init_departure_DT()
init_arrival_DT()
}
if (tap_txt_cont.classList.contains('red_text')){
tap_txt_cont.classList.remove('red_text')
}
@@ -541,12 +555,16 @@ function sendRoute(el, routeID = null){
// if (selected_owner_type[0].classList.contains('selected')){
//
// }else{}
let owner_type_value = document.getElementById('hide_owner_type').value
let hiddenTime = document.querySelector('.local_city_time').innerText;
let owner_type_value = document.getElementById('hide_owner_type').value
let form = el.form
let formData = new FormData(form);
let owner_type = owner_type_value
formData.set('owner_type', owner_type)
formData.set('hiddenTime', hiddenTime)
let url = '/routes/create_or_change_route/'
if (routeID !== null){
@@ -805,8 +823,8 @@ function OnSelectionChange(el) {
// }
sliderInit();
init_arrival_DT()
init_departure_DT()
// init_arrival_DT()
// init_departure_DT()

View File

@@ -1,3 +1,15 @@
<div>
{% load static %}
{% load i18n %}
<div class="page_paging_elements_1">
{% include 'blocks/routes/b_my_routes_list.html' %}
</div>
{% if last_block == False and next_page_els_count %}
<div class="text-align-center">
<button class="button-find-more-routes" id="{{ last_el }}" onclick="load_routes(this,null,{{ next_page_els_count }},'{{ owner_type }}')">{% trans "Показать ещё" %}<span class="col_vo_els_f_load"> {{ next_page_els_count }}</span></button>
<div class="width-100 text-align-center mb-10">
<img class="loader_f_loading_routes" src="{% static "img/svg/loader.svg" %}">
</div>
</div>
{% endif %}

View File

@@ -74,92 +74,9 @@
{% if form.initial and form.initial.type_transport and form.initial.type_transport != '' %}
<hr>
<div class="departure_arrival">
<div class="wrap_left">
<label for="id_departure_DT">
{% if form.initial.owner_type == 'mover' and form.initial.type_transport == 'road' or form.data.owner_type == 'mover' and form.initial.type_transport == 'road' %}
{% translate "Дата и время выезда" %}
{% elif form.initial.owner_type == 'mover' and form.initial.type_transport == 'avia' or form.data.owner_type == 'mover' and form.initial.type_transport == 'avia' %}
{% translate "Дата и время вылета" %}
{% elif form.initial.owner_type == 'customer' or form.data.owner_type == 'customer' %}
{% translate "Дата и время отправки" %}
{% endif %}
</label>
{# <input#}
{# type="datetime-local"#}
{# min= {% now "Y-m-d" %}T{% now "H:i" %}#}
{# name="departure_DT"#}
{# onchange="checkDate()"#}
{# {% if form.fields.departure_DT.required %} required{% endif %}#}
{# id="id_departure_DT"#}
{# class="el_form_b_new_route"#}
{# placeholder="Выберите дату и время"#}
{# {% if form.initial.departure_DT %}value="{{ form.initial.departure_DT.date|date:"Y-m-d" }}T{{ form.initial.departure_DT.time|date:"H:i" }}"{% endif %}#}
{# />#}
{# boris change input #}
<input
class="el_form_b_new_route"
{# onchange="checkDate()"#}
{# onclick="setIcon(this)"#}
onmouseup="hideErrors(this)"
type="text"
id="id_departure_DT"
name="departure_DT"
placeholder="{% translate "Выберите дату и время" %}" {% if form.initial.departure_DT %}
value="{{ form.initial.departure_DT|date:"d.m.Y H:m" }}"{% endif %}/>
<div id="displayRegervation"></div>
{% if not errors_off and form.errors and form.errors.departure_DT %}
<span id="error_departure_DT">{{ form.errors.departure_DT }}</span>
{% endif %}
</div>
<div id="arrival_div">
<label for="id_arrival_DT">
{% if form.initial.owner_type == 'mover' or form.data.owner_type == 'mover'%}
{% translate "Дата и время прибытия" %}
{% elif form.initial.owner_type == 'customer' or form.data.owner_type == 'customer' %}
{% translate "Дата и время доставки посылки" %}
{% endif %}
</label>
{# <input#}
{# type="datetime-local"#}
{# min= {% now "Y-m-d" %}T{% now "H:i" %}#}
{# name="arrival_DT"#}
{# onchange="checkDate()"#}
{# {% if form.fields.arrival_DT.required %} required{% endif %}#}
{# id="id_arrival_DT"#}
{# class="el_form_b_new_route"#}
{# {% if form.initial.arrival_DT %}value="{{ form.initial.arrival_DT.date|date:"Y-m-d" }}T{{ form.initial.arrival_DT.time|date:"H:i" }}"{% endif %}#}
{# />#}
{# boris change input #}
<input
class="el_form_b_new_route"
onchange="checkDate()"
onmouseup="hideErrors(this)"
type="text"
id="id_arrival_DT"
name="arrival_DT"
placeholder="{% translate "Выберите дату и время" %}" {% if form.initial.arrival_DT %}
value="{{ form.initial.arrival_DT|date:"d.m.Y H:m" }}"{% endif %}/>
<div id="displayRegervation"></div>
{# end #}
{% if not errors_off and form.errors and form.errors.arrival_DT %}
<span id="error_arrival_DT">{{ form.errors.arrival_DT }}</span>
{% endif %}
</div>
<div class="clear_both"></div>
</div>
<hr>
<div class="from_to_country">
<div class="from_to_country">
<div class="from_country_container">
<div class="local_city_time" hidden="hidden">{% if route.departure_DT %}{{ route.from_city.get_current_datetime }}{% elif form.initial.departure_DT %}{{ form.initial.departure_DT }}{% endif %}</div>
<label for="id_from_address_point_txt">
{% if form.initial.owner_type == 'mover' and form.initial.type_transport == 'avia' or form.data.owner_type == 'mover' and form.initial.type_transport == 'avia' %}
{% translate "Пункт вылета" %}
@@ -247,6 +164,92 @@
</div>
<div class="clear_both"></div>
</div>
<hr>
<div class="departure_arrival">
<div class="wrap_left">
<label for="id_departure_DT">
{% if form.initial.owner_type == 'mover' and form.initial.type_transport == 'road' or form.data.owner_type == 'mover' and form.initial.type_transport == 'road' %}
{% translate "Дата и время выезда" %}
{% elif form.initial.owner_type == 'mover' and form.initial.type_transport == 'avia' or form.data.owner_type == 'mover' and form.initial.type_transport == 'avia' %}
{% translate "Дата и время вылета" %}
{% elif form.initial.owner_type == 'customer' or form.data.owner_type == 'customer' %}
{% translate "Дата и время отправки" %}
{% endif %}
</label>
{# <input#}
{# type="datetime-local"#}
{# min= {% now "Y-m-d" %}T{% now "H:i" %}#}
{# name="departure_DT"#}
{# onchange="checkDate()"#}
{# {% if form.fields.departure_DT.required %} required{% endif %}#}
{# id="id_departure_DT"#}
{# class="el_form_b_new_route"#}
{# placeholder="Выберите дату и время"#}
{# {% if form.initial.departure_DT %}value="{{ form.initial.departure_DT.date|date:"Y-m-d" }}T{{ form.initial.departure_DT.time|date:"H:i" }}"{% endif %}#}
{# />#}
{# boris change input #}
<input
class="el_form_b_new_route"
{# onchange="checkDate()"#}
{# onclick="setIcon(this)"#}
onmouseup="hideErrors(this)"
readonly
type="text"
id="id_departure_DT"
name="departure_DT"
placeholder="{% translate "Выберите дату и время" %}" {% if form.initial.departure_DT %}
value="{{ form.initial.departure_DT|date:"d.m.Y H:i" }}"{% endif %}/>
<div id="displayRegervation"></div>
{% if not errors_off and form.errors and form.errors.departure_DT %}
<span id="error_departure_DT">{{ form.errors.departure_DT }}</span>
{% endif %}
</div>
<div id="arrival_div">
<label for="id_arrival_DT">
{% if form.initial.owner_type == 'mover' or form.data.owner_type == 'mover'%}
{% translate "Дата и время прибытия" %}
{% elif form.initial.owner_type == 'customer' or form.data.owner_type == 'customer' %}
{% translate "Дата и время доставки посылки" %}
{% endif %}
</label>
{# <input#}
{# type="datetime-local"#}
{# min= {% now "Y-m-d" %}T{% now "H:i" %}#}
{# name="arrival_DT"#}
{# onchange="checkDate()"#}
{# {% if form.fields.arrival_DT.required %} required{% endif %}#}
{# id="id_arrival_DT"#}
{# class="el_form_b_new_route"#}
{# {% if form.initial.arrival_DT %}value="{{ form.initial.arrival_DT.date|date:"Y-m-d" }}T{{ form.initial.arrival_DT.time|date:"H:i" }}"{% endif %}#}
{# />#}
{# boris change input #}
<input
class="el_form_b_new_route"
onchange="checkDate()"
onmouseup="hideErrors(this)"
type="text"
readonly
id="id_arrival_DT"
name="arrival_DT"
placeholder="{% translate "Выберите дату и время" %}" {% if form.initial.arrival_DT %}
value="{{ form.initial.arrival_DT|date:"d.m.Y H:i" }}"{% endif %}/>
<div id="displayRegervation"></div>
{# end #}
{% if not errors_off and form.errors and form.errors.arrival_DT %}
<span id="error_arrival_DT">{{ form.errors.arrival_DT }}</span>
{% endif %}
</div>
<div class="clear_both"></div>
</div>
{# <div>#}
{# <label for="id_from_city">{{ form.fields.from_city.label }}</label>#}

View File

@@ -0,0 +1,42 @@
{% if page.url == 'main' %}
{% endif %}
{% if page.url == 'about_service' and page.url == 'ru' %}
<meta property="og:type" content="website">
<meta property="og:title" content="Express parcel delivery | TWB">
<meta property="og:description" content="You can order fast delivery of parcels and letters to all CIS cities with us ✓ Competitive rates on the website ✓ Express parcel dispatch ➡️ Contact us">
<meta property="og:url" content="https://tripwb.com/en/page/about_service/">
<meta property="og:image" content="https://tripwb.com/static/img/png/finlogo.png">
<meta property="og:site_name" content="TWB">
<meta property="og:locale" content="en_EN">
<meta property="fb:app_id" content="tripwithbonus">
<meta name="twitter:title" content="Express parcel delivery | TWB">
<meta name="twitter:description" content="You can order fast delivery of parcels and letters to all CIS cities with us ✓ Competitive rates on the website ✓ Express parcel dispatch ➡️ Contact us">
<meta name="twitter:card" content="summary">
{% endif %}
{% if page.url == 'about_service' and page.url == 'en' %}
<meta property="og:type" content="website">
<meta property="og:title" content="Express parcel delivery | TWB">
<meta property="og:description" content="You can order fast delivery of parcels and letters to all CIS cities with us ✓ Competitive rates on the website ✓ Express parcel dispatch ➡️ Contact us">
<meta property="og:url" content="https://tripwb.com/en/page/about_service/">
<meta property="og:image" content="https://tripwb.com/static/img/png/finlogo.png">
<meta property="og:site_name" content="TWB">
<meta property="og:locale" content="en_EN">
<meta property="fb:app_id" content="tripwithbonus">
<meta name="twitter:title" content="Express parcel delivery | TWB">
<meta name="twitter:description" content="You can order fast delivery of parcels and letters to all CIS cities with us ✓ Competitive rates on the website ✓ Express parcel dispatch ➡️ Contact us">
<meta name="twitter:card" content="summary">
{% endif %}

View File

@@ -2,7 +2,17 @@
{% load i18n %}
<div class="carrier-card {% if route.highlight_color %} highlight-color {% endif %}" data-number-of-route="{{ route.id }}">
{% if route.departure_DT %}
{% with current_datetime=route.from_city.get_current_datetime %}
{% with departure_datetime=route.departure_DT %}
{% if current_datetime|date:"Y-m-d H:i:s" > departure_datetime|date:"Y-m-d H:i:s" %}
<div class="carrier-card out_of_date" data-number-of-route="{{ route.id }}">
{% else %}
<div class="carrier-card {% if route.highlight_color %} highlight-color {% endif %}" data-number-of-route="{{ route.id }}">
{% endif %}
{% endwith %}
{% endwith %}
{% endif %}
{#<div class="carrier-card"{% if route.highlight_color %} style="border: 5px solid {{ route.highlight_color }};"{% endif %} data-number-of-route="{{ route.id }}">#}
<div class="left-part-carrier-card">
{# <div class="first-line-card-carrier">#}

View File

@@ -1,4 +1,4 @@
<div onmousedown='selectItemAddrPoint({{ id }}, "{{ fullname }}", "{{ ctrl_name }}")' class="autocomplete-result" data-index="{{ index }}">
<div onmousedown='selectItemAddrPoint({{ id }}, "{{ fullname }}", "{{ ctrl_name }}", "{{ city_DT }}")' class="autocomplete-result" data-index="{{ index }}">
{% if airport_fullname %}<div>{{ airport_fullname|safe }}</div>{% endif %}
<div class="autocomplete-location">{{ city_name }} / {{ country_name }}</div>
</div>

View File

@@ -2,17 +2,21 @@
{% load i18n %}
{% load subscribes_tags_extra %}
{% if route.departure_DT %}
{% now 'Y-m-d H:i:s' as current_date %}
{% with departure_date_string=route.departure_DT|date:"Y-m-d H:i:s" %}
{% if departure_date_string < current_date %}
<div class="carrier-card out_of_date" data-number-of-route="{{ route.id }}">
{% else %}
<div class="carrier-card {% if route.highlight_color %} highlight-color {% endif %}" data-number-of-route="{{ route.id }}">
{% endif %}
{% endwith %}
{#Current Datetime: {{ route.from_city.get_current_datetime }}<br>#}
{#Departure DT:{{ route.departure_DT }}<br>#}
{% if route.departure_DT %}
{% with current_datetime=route.from_city.get_current_datetime %}
{% with departure_datetime=route.departure_DT %}
{% if current_datetime|date:"Y-m-d H:i:s" > departure_datetime|date:"Y-m-d H:i:s" %}
<div class="carrier-card out_of_date" data-number-of-route="{{ route.id }}">
{% else %}
<div class="carrier-card {% if route.highlight_color %} highlight-color {% endif %}" data-number-of-route="{{ route.id }}">
{% endif %}
{% endwith %}
{% endwith %}
{% endif %}
<div class="left-part-carrier-card">
{% if route.owner_type == 'mover' %}
<div class="first-line-card-carrier">
@@ -144,7 +148,7 @@
<span class="phones_carrier_span{% if route.owner == user %} active{% endif %} el_for_open_el"></span>
<div class="clear_both"></div>
</a>
<a class="email_carrier" data-href="mailto:{{ route.owner.email }}">
<a class="email_carrier" data-href="mailto:">
<img class="inf_carrier_icon" src="{% static "/img/svg/email.svg" %}">
<span class="email_carrier_span{% if route.owner == user %} active{% endif %} el_for_open_el"></span>