diff --git a/RoutesApp/js_views.py b/RoutesApp/js_views.py index c6cd87e..53cda2f 100644 --- a/RoutesApp/js_views.py +++ b/RoutesApp/js_views.py @@ -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: diff --git a/SubscribesApp/__init__.py b/SubscribesApp/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/SubscribesApp/admin.py b/SubscribesApp/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/SubscribesApp/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/SubscribesApp/apps.py b/SubscribesApp/apps.py new file mode 100644 index 0000000..0201678 --- /dev/null +++ b/SubscribesApp/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class SubscribesappConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'SubscribesApp' diff --git a/SubscribesApp/migrations/0001_initial.py b/SubscribesApp/migrations/0001_initial.py new file mode 100644 index 0000000..e5293f8 --- /dev/null +++ b/SubscribesApp/migrations/0001_initial.py @@ -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='Подключенные опции'), + ), + ] diff --git a/SubscribesApp/migrations/__init__.py b/SubscribesApp/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/SubscribesApp/models.py b/SubscribesApp/models.py new file mode 100644 index 0000000..28ad7d6 --- /dev/null +++ b/SubscribesApp/models.py @@ -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 = _('Пользовательские подписки') \ No newline at end of file diff --git a/SubscribesApp/tests.py b/SubscribesApp/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/SubscribesApp/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/SubscribesApp/translation.py b/SubscribesApp/translation.py new file mode 100644 index 0000000..dcd9fe2 --- /dev/null +++ b/SubscribesApp/translation.py @@ -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) \ No newline at end of file diff --git a/SubscribesApp/views.py b/SubscribesApp/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/SubscribesApp/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/TWB/settings.py b/TWB/settings.py index 22ad2f6..51dd820 100644 --- a/TWB/settings.py +++ b/TWB/settings.py @@ -54,7 +54,7 @@ INSTALLED_APPS = [ 'RoutesApp', 'ReferenceDataApp', 'ArticlesApp', - + 'SubscribesApp', ] MIDDLEWARE = [