From 693895a90ae423118289bb955030ffc97a59c558 Mon Sep 17 00:00:00 2001 From: Andrey Date: Tue, 12 Dec 2017 12:45:28 +0300 Subject: [PATCH] fix --- access/models/other.py | 6 +++++- access/models/user.py | 1 + access/views.py | 2 +- finance/signals.py | 2 +- journals/models.py | 2 +- journals/views.py | 12 ++++++++---- 6 files changed, 17 insertions(+), 8 deletions(-) diff --git a/access/models/other.py b/access/models/other.py index 33c44cb..3c6ba9e 100644 --- a/access/models/other.py +++ b/access/models/other.py @@ -2,6 +2,8 @@ from django.conf import settings from django.db import models from courses.models import Course, Vertex +from journals.models import Thread +from lms.global_decorators import transaction_decorator from maps.models import CourseRoute from django.db.models import Q @@ -59,13 +61,15 @@ class Progress(models.Model): self.course.title, ) + @transaction_decorator def add_vertex(self, vertex): self.progress_list.add(vertex) parent = vertex.vertex_set.first() if vertex.vertex_set.all().exists() else None if parent: children_ids = self.progress_list.values_list('id', flat=True) _flt = ~Q(id__in=children_ids) - parent.children.filter(_flt) + if parent.children.filter(_flt).exists(): + self.progress_list.add(parent) def get_template(self): return self.template if self.template else self.course.route diff --git a/access/models/user.py b/access/models/user.py index 8006f1e..6db3d7d 100644 --- a/access/models/user.py +++ b/access/models/user.py @@ -9,6 +9,7 @@ from django.utils import timezone from django.utils.translation import ugettext_lazy as _ from access.models.other import Invite, Account +from courses.models import Vertex from journals.models import Thread from lms.global_decorators import transaction_decorator diff --git a/access/views.py b/access/views.py index 72cfdbb..84250cc 100644 --- a/access/views.py +++ b/access/views.py @@ -254,7 +254,7 @@ class UpdateProgress(APIView): return res_403 try: - progress = Progress.objects.get(user=request.user, course=vertex.course, active_obj=vertex) + progress = Progress.objects.get(user=request.user, course=vertex.course) progress.add_vertex(vertex) return Response(status=204) except Progress.DoesNotExist: diff --git a/finance/signals.py b/finance/signals.py index 629f328..c56503d 100644 --- a/finance/signals.py +++ b/finance/signals.py @@ -8,7 +8,7 @@ from access.models.other import Progress @receiver(pre_save, sender=Invoice) -def delete_dependencies(instance, **kwargs): +def invoice_signal(instance, **kwargs): """Отправка сообщения после сохранения платежа""" if instance.yandex_pay and instance.method == 'Y' and instance.status == 'P': msg = EmailMessage( diff --git a/journals/models.py b/journals/models.py index 46868bb..5eb7ba0 100755 --- a/journals/models.py +++ b/journals/models.py @@ -70,7 +70,7 @@ class Thread(models.Model): def check_perm(self, user): res = user in self.subscribers.all() for i in self.groups.all(): - res = res or i in user.groups.all() + res = res or (i in user.groups.all()) return res or sum([int(i.check_perm(user)) for i in self.parent.all()]) def child_thread_count(self): diff --git a/journals/views.py b/journals/views.py index b1059d7..6d66d80 100644 --- a/journals/views.py +++ b/journals/views.py @@ -1,5 +1,6 @@ from django.contrib.auth import get_user_model from django.contrib.contenttypes.models import ContentType +from rest_framework.permissions import IsAuthenticated from rest_framework.views import APIView from rest_framework.renderers import JSONRenderer from rest_framework.response import Response @@ -9,6 +10,7 @@ from django.http import HttpResponse, HttpResponseForbidden from access.models.other import Progress from journals.models import Thread, Journal from journals.serilizers import ThreadDetailSerializer, ThreadAdminSerializer, JournalSerializer +from lms.global_decorators import transaction_decorator from lms.tools import decode_base64 from storage.models import Storage @@ -26,6 +28,7 @@ class ThreadAdminListView(APIView): class ThreadDetailView(APIView): renderer_classes = (JSONRenderer,) + permission_classes = () status_code = 200 def post(self, request, key): @@ -89,8 +92,10 @@ def get_pay_stat(request, pk): class JournalCreateView(APIView): renderer_classes = (JSONRenderer,) + permission_classes = (IsAuthenticated,) status_code = 200 + @transaction_decorator def post(self, request): pk = request.JSON.get('thread_id', None) try: @@ -116,12 +121,11 @@ class JournalCreateView(APIView): s = Storage.objects.create(original=decode_base64(i['data']), name=i['name']) journal.files.add(s) - if journal.action_type == 'yes': + if action_type == 'yes': p = Progress.objects.get(course=journal.content_object.course, user=journal.thread.subscribers.all()[0]) - p.active_obj = journal.content_object.get_next(['tutorial', 'task']) - p.save() + p.add_vertex(journal.content_object) - return Response(ThreadDetailSerializer(thread).data, status=200) + return Response(JournalSerializer(journal).data, status=200) return Response("permission denied", status=403) except Thread.DoesNotExist: return Response("Thread doesn't exist.", self.status_code,)