|
|
@ -130,6 +130,7 @@ class MyCourseListAPIView(ListAPIView): |
|
|
|
|
|
|
|
|
) |
|
|
) |
|
|
def get(self, request, *args, **kwargs): |
|
|
def get(self, request, *args, **kwargs): |
|
|
|
|
|
print(f'--> my-course-> {request}/ {kwargs}') |
|
|
return super().get(request, *args, **kwargs) |
|
|
return super().get(request, *args, **kwargs) |
|
|
|
|
|
|
|
|
def get_queryset(self): |
|
|
def get_queryset(self): |
|
|
@ -139,8 +140,9 @@ class MyCourseListAPIView(ListAPIView): |
|
|
student = self.request.user |
|
|
student = self.request.user |
|
|
qs = queryset.filter(participants__student=student) |
|
|
qs = queryset.filter(participants__student=student) |
|
|
completed_only = filters.get('completed', '').lower() == 'true' |
|
|
completed_only = filters.get('completed', '').lower() == 'true' |
|
|
if completed_only: |
|
|
|
|
|
queryset = qs.annotate( |
|
|
|
|
|
|
|
|
if completed_only == True: |
|
|
|
|
|
# نمایش دورههایی که همه درسهایشان توسط کاربر تکمیل شدهاند |
|
|
|
|
|
qs = qs.annotate( |
|
|
total_lessons=Count('lessons', distinct=True), |
|
|
total_lessons=Count('lessons', distinct=True), |
|
|
completed_lessons=Count( |
|
|
completed_lessons=Count( |
|
|
'lessons__completions', |
|
|
'lessons__completions', |
|
|
@ -148,11 +150,25 @@ class MyCourseListAPIView(ListAPIView): |
|
|
distinct=True |
|
|
distinct=True |
|
|
) |
|
|
) |
|
|
).filter(total_lessons=F('completed_lessons')) |
|
|
).filter(total_lessons=F('completed_lessons')) |
|
|
if certificate := filters.get('certificate', '').lower() == 'true': |
|
|
|
|
|
queryset = qs.exclude( |
|
|
|
|
|
|
|
|
elif completed_only == False: |
|
|
|
|
|
# نمایش دورههایی که همه درسهایشان تکمیل نشدهاند |
|
|
|
|
|
qs = qs.annotate( |
|
|
|
|
|
total_lessons=Count('lessons', distinct=True), |
|
|
|
|
|
completed_lessons=Count( |
|
|
|
|
|
'lessons__completions', |
|
|
|
|
|
filter=Q(lessons__completions__student=student), |
|
|
|
|
|
distinct=True |
|
|
|
|
|
) |
|
|
|
|
|
).filter(total_lessons__gt=F('completed_lessons')) |
|
|
|
|
|
|
|
|
|
|
|
if 'completed' not in filters: |
|
|
|
|
|
certificate = filters.get('certificate', '').lower() == 'true' |
|
|
|
|
|
if certificate: |
|
|
|
|
|
qs = qs.exclude( |
|
|
course_certificates__student=student, |
|
|
course_certificates__student=student, |
|
|
course_certificates__status__in=['pending', 'approved'] |
|
|
course_certificates__status__in=['pending', 'approved'] |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
return qs |
|
|
return qs |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|