From e723375d7cc82e4ff200bd3cc805625cc2905b5f Mon Sep 17 00:00:00 2001 From: Andrey Date: Wed, 25 Apr 2018 16:58:00 +0300 Subject: [PATCH 1/2] 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) From 6a2aa819db63cf8621206ab7731e3a2483cd9fda Mon Sep 17 00:00:00 2001 From: Andrey Date: Thu, 26 Apr 2018 12:41:29 +0300 Subject: [PATCH 2/2] finance logging --- finance/views.py | 28 +++++++++++++++------------- progress/views.py | 4 ++-- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/finance/views.py b/finance/views.py index 357ed78..e9566a1 100644 --- a/finance/views.py +++ b/finance/views.py @@ -203,19 +203,21 @@ class InvoiceDetailView(APIView): if pay_count > 1: invoice.create_child_pays(pay_count) - if invoice.method == 'Y' and invoice.yandex_pay is None: - yandex_pay = Payment( - order_amount=invoice.price, - shop_amount=0, - customer_number=bill.user.id, - user=bill.user, - cps_email=bill.user.email, - ) - if pay_count > 1: - yandex_pay.shop_id = settings.YANDEX_MONEY_REBILLING_SHOP_ID - yandex_pay.scid = settings.YANDEX_MONEY_REBILLING_SCID - yandex_pay.save() - invoice.yandex_pay = yandex_pay + if invoice.method == 'Y' and invoice.status == 'P': + if invoice.yandex_pay is None: + yandex_pay = Payment( + order_amount=invoice.price, + shop_amount=0, + customer_number=bill.user.id, + user=bill.user, + cps_email=bill.user.email, + ) + if pay_count > 1: + yandex_pay.shop_id = settings.YANDEX_MONEY_REBILLING_SHOP_ID + yandex_pay.scid = settings.YANDEX_MONEY_REBILLING_SCID + yandex_pay.save() + invoice.yandex_pay = yandex_pay + invoice.send_link() context = { diff --git a/progress/views.py b/progress/views.py index eb1f45a..43705f4 100644 --- a/progress/views.py +++ b/progress/views.py @@ -68,7 +68,7 @@ class CourseProgressDynamicView(APIView): @staticmethod def get(request): course_token = request.GET.get('course_token', '') - teacher_email = request.GET.get('teacher_email', '') + teacher_email = request.GET.get('teacher_email', '').lower() 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' @@ -82,7 +82,7 @@ class CourseProgressDynamicView(APIView): if not course_token is '': progresses = progresses.filter(progress__course_token=course_token) - if not (teacher_email is '' or only_hw): + if not teacher_email is '': progresses = progresses.filter(checker__email=teacher_email) res = {}