feature/fix_generate_pass
Andrey 8 years ago
parent 68bd99bf3c
commit 693895a90a
  1. 6
      access/models/other.py
  2. 1
      access/models/user.py
  3. 2
      access/views.py
  4. 2
      finance/signals.py
  5. 2
      journals/models.py
  6. 12
      journals/views.py

@ -2,6 +2,8 @@ from django.conf import settings
from django.db import models from django.db import models
from courses.models import Course, Vertex from courses.models import Course, Vertex
from journals.models import Thread
from lms.global_decorators import transaction_decorator
from maps.models import CourseRoute from maps.models import CourseRoute
from django.db.models import Q from django.db.models import Q
@ -59,13 +61,15 @@ class Progress(models.Model):
self.course.title, self.course.title,
) )
@transaction_decorator
def add_vertex(self, vertex): def add_vertex(self, vertex):
self.progress_list.add(vertex) self.progress_list.add(vertex)
parent = vertex.vertex_set.first() if vertex.vertex_set.all().exists() else None parent = vertex.vertex_set.first() if vertex.vertex_set.all().exists() else None
if parent: if parent:
children_ids = self.progress_list.values_list('id', flat=True) children_ids = self.progress_list.values_list('id', flat=True)
_flt = ~Q(id__in=children_ids) _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): def get_template(self):
return self.template if self.template else self.course.route return self.template if self.template else self.course.route

@ -9,6 +9,7 @@ from django.utils import timezone
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from access.models.other import Invite, Account from access.models.other import Invite, Account
from courses.models import Vertex
from journals.models import Thread from journals.models import Thread
from lms.global_decorators import transaction_decorator from lms.global_decorators import transaction_decorator

@ -254,7 +254,7 @@ class UpdateProgress(APIView):
return res_403 return res_403
try: 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) progress.add_vertex(vertex)
return Response(status=204) return Response(status=204)
except Progress.DoesNotExist: except Progress.DoesNotExist:

@ -8,7 +8,7 @@ from access.models.other import Progress
@receiver(pre_save, sender=Invoice) @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': if instance.yandex_pay and instance.method == 'Y' and instance.status == 'P':
msg = EmailMessage( msg = EmailMessage(

@ -70,7 +70,7 @@ class Thread(models.Model):
def check_perm(self, user): def check_perm(self, user):
res = user in self.subscribers.all() res = user in self.subscribers.all()
for i in self.groups.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()]) return res or sum([int(i.check_perm(user)) for i in self.parent.all()])
def child_thread_count(self): def child_thread_count(self):

@ -1,5 +1,6 @@
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView from rest_framework.views import APIView
from rest_framework.renderers import JSONRenderer from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response from rest_framework.response import Response
@ -9,6 +10,7 @@ from django.http import HttpResponse, HttpResponseForbidden
from access.models.other import Progress from access.models.other import Progress
from journals.models import Thread, Journal from journals.models import Thread, Journal
from journals.serilizers import ThreadDetailSerializer, ThreadAdminSerializer, JournalSerializer from journals.serilizers import ThreadDetailSerializer, ThreadAdminSerializer, JournalSerializer
from lms.global_decorators import transaction_decorator
from lms.tools import decode_base64 from lms.tools import decode_base64
from storage.models import Storage from storage.models import Storage
@ -26,6 +28,7 @@ class ThreadAdminListView(APIView):
class ThreadDetailView(APIView): class ThreadDetailView(APIView):
renderer_classes = (JSONRenderer,) renderer_classes = (JSONRenderer,)
permission_classes = ()
status_code = 200 status_code = 200
def post(self, request, key): def post(self, request, key):
@ -89,8 +92,10 @@ def get_pay_stat(request, pk):
class JournalCreateView(APIView): class JournalCreateView(APIView):
renderer_classes = (JSONRenderer,) renderer_classes = (JSONRenderer,)
permission_classes = (IsAuthenticated,)
status_code = 200 status_code = 200
@transaction_decorator
def post(self, request): def post(self, request):
pk = request.JSON.get('thread_id', None) pk = request.JSON.get('thread_id', None)
try: try:
@ -116,12 +121,11 @@ class JournalCreateView(APIView):
s = Storage.objects.create(original=decode_base64(i['data']), name=i['name']) s = Storage.objects.create(original=decode_base64(i['data']), name=i['name'])
journal.files.add(s) 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 = 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.add_vertex(journal.content_object)
p.save()
return Response(ThreadDetailSerializer(thread).data, status=200) return Response(JournalSerializer(journal).data, status=200)
return Response("permission denied", status=403) return Response("permission denied", status=403)
except Thread.DoesNotExist: except Thread.DoesNotExist:
return Response("Thread doesn't exist.", self.status_code,) return Response("Thread doesn't exist.", self.status_code,)

Loading…
Cancel
Save