diff --git a/AuthApp/models.py b/AuthApp/models.py index 56e0d9b..6c85ff5 100644 --- a/AuthApp/models.py +++ b/AuthApp/models.py @@ -16,7 +16,6 @@ from datetime import datetime def user_name_str(self): return f'{self.last_name} {self.first_name}' - User.add_to_class("__str__", user_name_str) diff --git a/RoutesApp/funcs.py b/RoutesApp/funcs.py index 3a2e3fd..ed9b94b 100644 --- a/RoutesApp/funcs.py +++ b/RoutesApp/funcs.py @@ -134,6 +134,11 @@ def get_profile_my_routes_page_content_html(request): print(msg) return msg + from SubscribesApp.funcs import get_cur_user_subscribe + user_subscribe = get_cur_user_subscribe(request.user) + if user_subscribe: + routes_Dict.update(user_subscribe.remains_route_adding_options()) + html = render_to_string('blocks/profile/b_my_routes.html', routes_Dict, request=request) return html diff --git a/SubscribesApp/admin.py b/SubscribesApp/admin.py index dce4541..55057cf 100644 --- a/SubscribesApp/admin.py +++ b/SubscribesApp/admin.py @@ -42,6 +42,12 @@ class Admin_SubscribeOption(Admin_Trans_BaseModel): 'enable' ) }), + (None, { + 'classes': ['wide'], + 'fields': ( + 'allow_route_rising_count', 'allow_route_select_count' + ) + }), ) list_display = [ @@ -76,6 +82,7 @@ class Admin_SubscribeForUser(Admin_Trans_BaseModel): list_display = [ 'id', 'enable', 'name', 'user', 'subscribe', + 'used_route_rising_count', 'used_route_select_count', 'last_paid_DT', 'paid_period_from_DT', 'paid_period_to_DT', 'auto_continue', 'receive_finish_subscribe_msg', 'order', 'modifiedDT', 'createDT' diff --git a/SubscribesApp/models.py b/SubscribesApp/models.py index 1611b5a..de4a43b 100644 --- a/SubscribesApp/models.py +++ b/SubscribesApp/models.py @@ -1,4 +1,6 @@ from django.db import models +from django.db.models import Count, Sum, F +from django.db.models.functions import Coalesce from BaseModels.base_models import BaseModel from django.utils.translation import gettext_lazy as _ from colorfield.fields import ColorField @@ -15,6 +17,9 @@ from datetime import datetime, timedelta class SubscribeOption(BaseModel): + allow_route_rising_count = models.IntegerField(verbose_name=_('Количество поднятий объявлений') ,default=0) + allow_route_select_count = models.IntegerField(verbose_name=_('Количество выделений объявлений'), default=0) + class Meta: verbose_name = _('Опция подписки') verbose_name_plural = _('Опции подписки') @@ -65,6 +70,9 @@ class SubscribeForUser(BaseModel): receive_finish_subscribe_msg = models.BooleanField( default=False, verbose_name=_('Получать сообщения о окончании периода')) + used_route_rising_count = models.IntegerField(verbose_name=_('Использовано поднятий объявлений'), default=0) + used_route_select_count = models.IntegerField(verbose_name=_('Использовано выделений объявлений'), default=0) + class Meta: verbose_name = _('Пользовательская подписка') verbose_name_plural = _('Пользовательские подписки') @@ -80,6 +88,22 @@ class SubscribeForUser(BaseModel): res += f' {str(self.id)}' return res + + def remains_route_adding_options(self): + total_data = SubscribeOption.objects.filter( + enable=True, rel_subscribes_for_option=self.subscribe + ).aggregate( + total_route_rising_count = Coalesce(Sum('allow_route_rising_count'), 0), + total_route_select_count = Coalesce(Sum('allow_route_select_count'), 0), + ) + total_data.update({ + 'used_route_rising_count': self.used_route_rising_count, + 'used_route_select_count': self.used_route_select_count, + 'remains_route_rising_count': total_data['total_route_rising_count'] - self.used_route_rising_count, + 'remains_route_select_count': total_data['total_route_select_count'] - self.used_route_select_count, + }) + return total_data + def get_days_to_finish(self): days = (self.paid_period_to_DT - datetime.now()).days return days