diff --git a/access/views.py b/access/views.py index c3e69dd..8cb6305 100644 --- a/access/views.py +++ b/access/views.py @@ -128,6 +128,7 @@ class FindUserView(APIView): class DetailUserView(APIView): renderer_classes = (JSONRenderer,) + permission_classes = (permissions.IsAuthenticated,) @staticmethod def post(request, out_key=None): diff --git a/courses/models.py b/courses/models.py index ce50bf7..eacc7e6 100755 --- a/courses/models.py +++ b/courses/models.py @@ -72,7 +72,7 @@ class Topic(models.Model): class CourseManager(models.Manager): - def update_or_create_course(self, image=None, big_image=None, statistic=None, + def update_or_create_course(self, image=None, big_image=None, statistic=None, old_slug=None, big_mobile_image=None, slug=None, teacher_tokens=None, level=None, direction=None, **kwargs): @@ -102,10 +102,11 @@ class CourseManager(models.Manager): kwargs['direction'] = get_real_name(COURSE_DIRECTION, direction[0]) try: - course = self.get(slug=slug) + course = self.get(slug=old_slug) for i in kwargs: if kwargs[i]: setattr(course, i, kwargs[i]) + course.slug = slug course.save() except ObjectDoesNotExist: diff --git a/finance/models.py b/finance/models.py index e63f55f..47ac532 100755 --- a/finance/models.py +++ b/finance/models.py @@ -6,10 +6,14 @@ from django.core.mail import EmailMessage from django.db import models from django.utils import timezone from yandex_money.models import Payment +import logging from progress.models import Progress +logger_business_rules = logging.getLogger('business_rules') + + class Bill(models.Model): course_token = models.UUIDField(verbose_name="Токен курса", editable=False) user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name='Плательщик', related_name='bill_user') @@ -24,15 +28,22 @@ class Bill(models.Model): return '%s: %s' % (self.id, self.user) def freeze_course(self, user): - try: - p = Progress.objects.get(user=user, course_token=self.course_token) - p.freeze = True - p.save() - except Progress.DoesNotExist: - pass - - self.freeze = True - self.save() + if self.invoice_set.exclude('F').exists(): + try: + p = Progress.objects.get(user=user, course_token=self.course_token) + p.freeze = True + p.save() + except Progress.DoesNotExist: + pass + + self.freeze = True + self.save() + + else: + logger_business_rules.warning('Попытка нарушения правила отказа от плотежей', exc_info=True, extra={ + 'description': 'Пользоваль пытается отказатся от платежей по счёту, однако все платежи уже оплачены', + 'user': user, + }) def get_full_price(self): return sum([i.price for i in self.invoice_set.all() if not i.price is None]) diff --git a/lms/settings.py b/lms/settings.py index c9f4e61..ce5acd6 100644 --- a/lms/settings.py +++ b/lms/settings.py @@ -212,6 +212,11 @@ LOGGING = { 'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler', 'tags': {'custom-tag': 'yandex'}, }, + 'business_rules': { + 'level': 'DEBUG', + 'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler', + 'tags': {'custom-tag': 'business_rules'}, + }, 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', @@ -228,6 +233,11 @@ LOGGING = { 'level': 'DEBUG', 'propagate': False }, + 'business_rules': { + 'handlers': ['business_rules'], + 'level': 'DEBUG', + 'propagate': False + }, }, } diff --git a/progress/views.py b/progress/views.py index 5b8b2de..97e9b3e 100644 --- a/progress/views.py +++ b/progress/views.py @@ -93,6 +93,7 @@ class CourseProgressUserView(APIView): class TeacherUpdateProgress(APIView): + permission_classes = (permissions.IsAuthenticated, ) renderer_classes = (JSONRenderer,) @staticmethod