Merge remote-tracking branch 'origin/main'

This commit is contained in:
2023-08-29 16:31:58 +03:00
14 changed files with 209 additions and 5 deletions

View File

@@ -154,7 +154,11 @@ def find_routes_ajax(request):
try:
data = request.POST.dict()
if not data and request.body:
data = json.loads(request.body)
data['owner_type'] = 'mover'
routes_Dict = get_routes_Dict(data=data)
if 'errors' in routes_Dict:

View File

3
SubscribesApp/admin.py Normal file
View File

@@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

6
SubscribesApp/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class SubscribesappConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'SubscribesApp'

View File

@@ -0,0 +1,89 @@
# Generated by Django 4.2.2 on 2023-08-29 16:04
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Subscribe',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название')),
('name_ru', models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название')),
('name_en', models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название')),
('name_plural', models.TextField(blank=True, null=True, verbose_name='Название (множественное число)')),
('order', models.IntegerField(blank=True, null=True, verbose_name='Очередность отображения')),
('createDT', models.DateTimeField(auto_now_add=True, verbose_name='Дата и время создания')),
('modifiedDT', models.DateTimeField(blank=True, null=True, verbose_name='Дата и время последнего изменения')),
('enable', models.BooleanField(db_index=True, default=True, verbose_name='Включено')),
('json_data', models.JSONField(blank=True, default=dict, verbose_name='Дополнительные данные')),
('price', models.FloatField(default=0, verbose_name='Стоимость')),
('period_name', models.CharField(max_length=250, verbose_name='Название периода')),
('period_name_ru', models.CharField(max_length=250, null=True, verbose_name='Название периода')),
('period_name_en', models.CharField(max_length=250, null=True, verbose_name='Название периода')),
('period', models.IntegerField(default=0, verbose_name='Длительность подписки в часах')),
],
options={
'verbose_name': 'Подписка',
'verbose_name_plural': 'Подписки',
},
),
migrations.CreateModel(
name='SubscribeOption',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название')),
('name_ru', models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название')),
('name_en', models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название')),
('name_plural', models.TextField(blank=True, null=True, verbose_name='Название (множественное число)')),
('order', models.IntegerField(blank=True, null=True, verbose_name='Очередность отображения')),
('createDT', models.DateTimeField(auto_now_add=True, verbose_name='Дата и время создания')),
('modifiedDT', models.DateTimeField(blank=True, null=True, verbose_name='Дата и время последнего изменения')),
('enable', models.BooleanField(db_index=True, default=True, verbose_name='Включено')),
('json_data', models.JSONField(blank=True, default=dict, verbose_name='Дополнительные данные')),
],
options={
'verbose_name': 'Опция подписки',
'verbose_name_plural': 'Опции подписки',
},
),
migrations.CreateModel(
name='SubscribeForUser',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.TextField(blank=True, help_text='Название', null=True, verbose_name='Название')),
('name_plural', models.TextField(blank=True, null=True, verbose_name='Название (множественное число)')),
('order', models.IntegerField(blank=True, null=True, verbose_name='Очередность отображения')),
('createDT', models.DateTimeField(auto_now_add=True, verbose_name='Дата и время создания')),
('modifiedDT', models.DateTimeField(blank=True, null=True, verbose_name='Дата и время последнего изменения')),
('enable', models.BooleanField(db_index=True, default=True, verbose_name='Включено')),
('json_data', models.JSONField(blank=True, default=dict, verbose_name='Дополнительные данные')),
('last_paid_DT', models.DateTimeField(blank=True, null=True, verbose_name='Последняя дата оплаты')),
('paid_period_from_DT', models.DateTimeField(blank=True, null=True, verbose_name='Оплаченный период с')),
('paid_period_to_DT', models.DateTimeField(blank=True, null=True, verbose_name='Оплаченный период до')),
('auto_continue', models.BooleanField(default=False, verbose_name='Автопродление')),
('receive_finish_subscribe_msg', models.BooleanField(default=False, verbose_name='Получать сообщения о окончании периода')),
('subscribe', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='rel_userSubscribes_for_subscribe', to='SubscribesApp.subscribe', verbose_name='Подписка')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='rel_userSubscribes_for_user', to=settings.AUTH_USER_MODEL, verbose_name='Пользователь')),
],
options={
'verbose_name': 'Пользовательская подписка',
'verbose_name_plural': 'Пользовательские подписки',
},
),
migrations.AddField(
model_name='subscribe',
name='options',
field=models.ManyToManyField(blank=True, related_name='rel_subscribes_for_option', to='SubscribesApp.subscribeoption', verbose_name='Подключенные опции'),
),
]

View File

47
SubscribesApp/models.py Normal file
View File

@@ -0,0 +1,47 @@
from django.db import models
from BaseModels.base_models import BaseModel
from django.utils.translation import gettext_lazy as _
class SubscribeOption(BaseModel):
class Meta:
verbose_name = _('Опция подписки')
verbose_name_plural = _('Опции подписки')
class Subscribe(BaseModel):
price = models.FloatField(verbose_name='Стоимость', default=0)
options = models.ManyToManyField(
SubscribeOption, verbose_name=_('Подключенные опции'), blank=True, related_name='rel_subscribes_for_option'
)
period_name = models.CharField(max_length=250, verbose_name=_('Название периода'))
period = models.IntegerField(default=0, verbose_name=_('Длительность подписки в часах'))
class Meta:
verbose_name = _('Подписка')
verbose_name_plural = _('Подписки')
class SubscribeForUser(BaseModel):
from AuthApp.models import User
user = models.ForeignKey(
User, verbose_name=_('Пользователь'), related_name='rel_userSubscribes_for_user', on_delete=models.CASCADE)
subscribe = models.ForeignKey(
Subscribe, verbose_name=_('Подписка'), null=True, blank=True, related_name='rel_userSubscribes_for_subscribe',
on_delete=models.SET_NULL
)
last_paid_DT = models.DateTimeField(verbose_name=_('Последняя дата оплаты'), blank=True, null=True)
paid_period_from_DT = models.DateTimeField(verbose_name=_('Оплаченный период с'), blank=True, null=True)
paid_period_to_DT = models.DateTimeField(verbose_name=_('Оплаченный период до'), blank=True, null=True)
auto_continue = models.BooleanField(default=False, verbose_name=_('Автопродление'))
receive_finish_subscribe_msg = models.BooleanField(
default=False, verbose_name=_('Получать сообщения о окончании периода'))
class Meta:
verbose_name = _('Пользовательская подписка')
verbose_name_plural = _('Пользовательские подписки')

3
SubscribesApp/tests.py Normal file
View File

@@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

View File

@@ -0,0 +1,21 @@
from modeltranslation.translator import translator, TranslationOptions
from .models import *
class Subscribe_TranslationOptions(TranslationOptions):
fields = (
'name', 'period_name'
)
translator.register(Subscribe, Subscribe_TranslationOptions)
class SubscribeOption_TranslationOptions(TranslationOptions):
fields = (
'name',
)
translator.register(SubscribeOption, SubscribeOption_TranslationOptions)
class SubscribeForUser_TranslationOptions(TranslationOptions):
fields = (
)
translator.register(SubscribeForUser, SubscribeForUser_TranslationOptions)

3
SubscribesApp/views.py Normal file
View File

@@ -0,0 +1,3 @@
from django.shortcuts import render
# Create your views here.

View File

@@ -54,7 +54,7 @@ INSTALLED_APPS = [
'RoutesApp',
'ReferenceDataApp',
'ArticlesApp',
'SubscribesApp',
]
MIDDLEWARE = [

View File

@@ -11,7 +11,7 @@
}
.text-align-center{
text-align: center;
text-align: -webkit-center;
width: 100%;
}
@@ -552,6 +552,8 @@
padding: 20px;
font-size: 16px;
display: block;
overflow: hidden;
text-overflow: ellipsis;
}
.insert_users{
@@ -1460,4 +1462,17 @@
font-size: 18px;
font-weight: 600;
border-radius: 10px;
}
.button-find-more-routes.hide{
display: none;
}
.loader_f_loading_routes{
width: 25px;
height: 25px;
display: none;
}
.loader_f_loading_routes.show{
display: block;
}

View File

@@ -2,6 +2,9 @@ let page_iterator = 2
function load_routes (el) {
let loader = document.querySelector(".loader_f_loading_routes")
loader.classList.toggle("show")
el.classList.toggle("hide")
event.preventDefault()
// let el_parent = el.parentNode
// let new_el = el_parent.previousSibling.previousSibling
@@ -25,12 +28,21 @@ function load_routes (el) {
// enctype: 'json',
data: JSON.stringify(data),
success: function(data){
// new_el.parentNode.insertBefore(data.html, new_el.nextSibling);
let url_insert = ".page_routes_" + page_iterator
document.querySelector(url_insert).innerHTML = data.html
let place_ins = document.querySelector(url_insert)
place_ins.innerHTML = data.html
let old_page_iterator = page_iterator
page_iterator++
loader.classList.toggle("show")
el.classList.toggle("hide")
let el_scroll = place_ins.firstElementChild
el_scroll.scrollIntoView(
{
behavior:"smooth"
}
)
let new_page_routes = document.createElement("div")
new_page_routes.classList.add("page_routes_" + page_iterator)
$(new_page_routes).insertAfter(".page_routes_" + old_page_iterator);
@@ -40,7 +52,7 @@ function load_routes (el) {
},
error: function (data){
document.querySelector(".info_profile").innerHTML = data.responseJSON.html;
document.querySelector(".block-finded-routes").innerHTML = data.responseJSON.html;
}
});

View File

@@ -219,6 +219,7 @@
</div>
<div class="text-align-center">
<button class="button-find-more-routes" id="25" onclick="load_routes(this)">Показать ещё 10</button>
<img class="loader_f_loading_routes" src="{% static "img/svg/loader.svg" %}">
</div>
</div>