Merge branch 'feture_statistic' into 'dev'

Feture statistic

See merge request !433
remotes/origin/autodeploy
Andrey 8 years ago
commit 3c692ed862
  1. 34
      finance/views.py
  2. 52
      progress/views.py

@ -186,16 +186,12 @@ class InvoiceDetailView(APIView):
) )
if invoice.status == "F": 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) return Response(InvoiceSerializer(invoice).data, status=200)
invoice.real_price = None
invoice.method = method invoice.method = method
invoice.status = status 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): if bill.check_pay() and (invoice.price < price):
return Response("""Нельзя менять стоимость по счёту в большую сторону, return Response("""Нельзя менять стоимость по счёту в большую сторону,
когда один из платежей оплачен""", status=400) когда один из платежей оплачен""", status=400)
@ -207,19 +203,21 @@ class InvoiceDetailView(APIView):
if pay_count > 1: if pay_count > 1:
invoice.create_child_pays(pay_count) invoice.create_child_pays(pay_count)
if invoice.method == 'Y' and invoice.yandex_pay is None: if invoice.method == 'Y' and invoice.status == 'P':
yandex_pay = Payment( if invoice.yandex_pay is None:
order_amount=invoice.price, yandex_pay = Payment(
shop_amount=0, order_amount=invoice.price,
customer_number=bill.user.id, shop_amount=0,
user=bill.user, customer_number=bill.user.id,
cps_email=bill.user.email, user=bill.user,
) cps_email=bill.user.email,
if pay_count > 1: )
yandex_pay.shop_id = settings.YANDEX_MONEY_REBILLING_SHOP_ID if pay_count > 1:
yandex_pay.scid = settings.YANDEX_MONEY_REBILLING_SCID yandex_pay.shop_id = settings.YANDEX_MONEY_REBILLING_SHOP_ID
yandex_pay.save() yandex_pay.scid = settings.YANDEX_MONEY_REBILLING_SCID
invoice.yandex_pay = yandex_pay yandex_pay.save()
invoice.yandex_pay = yandex_pay
invoice.send_link() invoice.send_link()
context = { context = {

@ -15,14 +15,16 @@ from rest_framework.permissions import IsAuthenticated
from rest_framework.renderers import JSONRenderer from rest_framework.renderers import JSONRenderer
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.views import APIView from rest_framework.views import APIView
from django.db.models import Q, Count from django.db.models import Q, Count, F
import jwt import jwt
from django.conf import settings 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 access.serializers import UserProgressSearchSerializer
from courses.models import Course, Lesson from courses.models import Course, Lesson
from progress.models import ProgressLesson, Progress from progress.models import ProgressLesson, Progress
from progress.serializers import ProgressAnalyticSerializer, ProgressLessonSerializer, ProgressSerializer, \ from progress.serializers import ProgressAnalyticSerializer, ProgressLessonSerializer, \
SecureProgressSerializer SecureProgressSerializer
from courses.api import CourseProgressApi, CourseParamsApi from courses.api import CourseProgressApi, CourseParamsApi
from progress.tasks import add_next_lesson from progress.tasks import add_next_lesson
@ -65,27 +67,45 @@ class CourseProgressDynamicView(APIView):
@staticmethod @staticmethod
def get(request): 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', '').lower()
from_date = int(request.GET.get('from', '7')) from_date = int(request.GET.get('from', '7'))
to_date = int(request.GET.get('to', '0')) 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: if request.user.is_authenticated() and request.user.is_staff:
progresses = ProgressLesson.objects.filter(status='done') progresses = ProgressLesson.objects.all()
if not course_token is None:
try: if only_hw:
progresses = progresses.filter(progress__course_token=course_token) progresses = progresses.filter(checker=F('progress__teacher'))
except ProgressLesson.DoesNotExist:
return Response('incorrect course token', status=404)
progresses = progresses.filter(finish_date__gt=timezone.now() - relativedelta(days=from_date)) if not course_token is '':
progresses = progresses.filter(finish_date__lt=timezone.now() - relativedelta(days=to_date)) progresses = progresses.filter(progress__course_token=course_token)
progresses = progresses.order_by('finish_date')
if not teacher_email is '':
progresses = progresses.filter(checker__email=teacher_email)
res = {} res = {}
progresses = progresses.extra({'finish_date_day': "date(finish_date)"})\
.values('progress__course_token', 'finish_date_day')\ progresses_finish = progresses.filter(finish_date__gt=timezone.now() - relativedelta(days=from_date))
.annotate(total=Count('progress')) progresses_finish = progresses_finish.filter(finish_date__lt=timezone.now() - relativedelta(days=to_date))
#TODO Доделать
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(res, status=200)
return Response('Доступно только персоналу', status=403) return Response('Доступно только персоналу', status=403)

Loading…
Cancel
Save