From e723375d7cc82e4ff200bd3cc805625cc2905b5f Mon Sep 17 00:00:00 2001 From: Andrey Date: Wed, 25 Apr 2018 16:58:00 +0300 Subject: [PATCH] finance logging --- finance/views.py | 6 +----- progress/views.py | 52 ++++++++++++++++++++++++++++++++--------------- 2 files changed, 37 insertions(+), 21 deletions(-) diff --git a/finance/views.py b/finance/views.py index bfb195b..357ed78 100644 --- a/finance/views.py +++ b/finance/views.py @@ -186,16 +186,12 @@ class InvoiceDetailView(APIView): ) if invoice.status == "F": + invoice.real_price = invoice.real_price if real_price is None else real_price return Response(InvoiceSerializer(invoice).data, status=200) - invoice.real_price = None invoice.method = method invoice.status = status - if invoice.status == "F": - # TODO это никогда не выполнится - invoice.real_price = invoice.real_price if real_price is None else real_price - if bill.check_pay() and (invoice.price < price): return Response("""Нельзя менять стоимость по счёту в большую сторону, когда один из платежей оплачен""", status=400) diff --git a/progress/views.py b/progress/views.py index 0d95585..eb1f45a 100644 --- a/progress/views.py +++ b/progress/views.py @@ -15,14 +15,16 @@ from rest_framework.permissions import IsAuthenticated from rest_framework.renderers import JSONRenderer from rest_framework.response import Response from rest_framework.views import APIView -from django.db.models import Q, Count +from django.db.models import Q, Count, F import jwt from django.conf import settings +from django.db.models.functions import Cast +from django.db.models.fields import DateField from access.serializers import UserProgressSearchSerializer from courses.models import Course, Lesson from progress.models import ProgressLesson, Progress -from progress.serializers import ProgressAnalyticSerializer, ProgressLessonSerializer, ProgressSerializer, \ +from progress.serializers import ProgressAnalyticSerializer, ProgressLessonSerializer, \ SecureProgressSerializer from courses.api import CourseProgressApi, CourseParamsApi from progress.tasks import add_next_lesson @@ -65,27 +67,45 @@ class CourseProgressDynamicView(APIView): @staticmethod def get(request): - course_token = request.GET.get('course_token', None) + course_token = request.GET.get('course_token', '') + teacher_email = request.GET.get('teacher_email', '') from_date = int(request.GET.get('from', '7')) to_date = int(request.GET.get('to', '0')) + only_hw = request.GET.get('only_hw', 'yes') == 'yes' if request.user.is_authenticated() and request.user.is_staff: - progresses = ProgressLesson.objects.filter(status='done') - if not course_token is None: - try: - progresses = progresses.filter(progress__course_token=course_token) - except ProgressLesson.DoesNotExist: - return Response('incorrect course token', status=404) + progresses = ProgressLesson.objects.all() + + if only_hw: + progresses = progresses.filter(checker=F('progress__teacher')) - progresses = progresses.filter(finish_date__gt=timezone.now() - relativedelta(days=from_date)) - progresses = progresses.filter(finish_date__lt=timezone.now() - relativedelta(days=to_date)) - progresses = progresses.order_by('finish_date') + if not course_token is '': + progresses = progresses.filter(progress__course_token=course_token) + + if not (teacher_email is '' or only_hw): + progresses = progresses.filter(checker__email=teacher_email) res = {} - progresses = progresses.extra({'finish_date_day': "date(finish_date)"})\ - .values('progress__course_token', 'finish_date_day')\ - .annotate(total=Count('progress')) - #TODO Доделать + + progresses_finish = progresses.filter(finish_date__gt=timezone.now() - relativedelta(days=from_date)) + progresses_finish = progresses_finish.filter(finish_date__lt=timezone.now() - relativedelta(days=to_date)) + + progresses_start = progresses.filter(start_date__gt=timezone.now() - relativedelta(days=from_date)) + progresses_start = progresses_start.filter(start_date__lt=timezone.now() - relativedelta(days=to_date)) + + progresses_finish = progresses_finish.annotate(name=Cast('finish_date', DateField())) \ + .values('name') \ + .annotate(value=Count('id')) + + progresses_start = progresses_start.annotate(name=Cast('start_date', DateField())) \ + .values('name') \ + .annotate(value=Count('id')) + + progresses_finish = progresses_finish.order_by('name') + progresses_start = progresses_start.order_by('name') + + res['finish'] = progresses_finish + res['start'] = progresses_start return Response(res, status=200) return Response('Доступно только персоналу', status=403)