def get_final_evaluation_top_level_tasks(course): # final_top_level_tasks = [] # top_level_tasks = Elaboration.get_top_level_tasks(course) # for elaboration in top_level_tasks: # # cache_key = str(elaboration.user.id) + '_submitted_points' # if (cache.has_key(cache_key)): # submitted_points = cache.get(cache_key) # else: # submitted_points = elaboration.user.total_points_submitted(course) # cache.set(cache_key, submitted_points, 60*30) # # if submitted_points >= 57: # final_top_level_tasks.append(elaboration) # # return final_top_level_tasks from Challenge.models import Challenge final_challenge_ids = Challenge.get_course_final_challenge_ids(course) possible_user_ids = CourseUserRelation.objects.filter( course=course, positive_completion_possible=True).values_list('user_id', flat=True) final_top_level_challenges = (Elaboration.objects.filter( challenge__id__in=final_challenge_ids, submission_time__isnull=False, user__is_staff=False, user_id__in=possible_user_ids).annotate( evaluated=Min('evaluation__submission_time')).filter( evaluated=None).order_by('-submission_time')) return final_top_level_challenges
def final_tasks(course): final_task_ids = Challenge.get_course_final_challenge_ids(course) result = [] for id in final_task_ids: data = {} data['id'] = id data['title'] = ( Challenge.objects.get(pk=id).title ) a = Challenge.objects.get(pk=id).get_stack() data['challenge'] = ( Challenge.objects.get(pk=id).get_stack().title ) data['evaluated'] = ( Evaluation.objects .filter(submission__challenge__course=course) .filter(submission_time__isnull=False) .filter(submission__challenge__id=id) .count() ) data['not_evaluated'] = ( Elaboration.get_top_level_tasks(course) .filter(challenge__id=id) .count() ) result.append(data) return result
def get_extra_reviews(user, course): from Challenge.models import Challenge user_submitted_challenge_ids = Elaboration.objects.filter(user_id=user.id, submission_time__isnull=False).values_list('challenge_id', flat=True) final_challenge_ids = Challenge.get_course_final_challenge_ids(course) already_written_review_elaboration_ids = Review.objects.filter(reviewer_id=user.id).values_list('elaboration_id', flat=True) missing_reviews = ( Elaboration.objects .annotate(num_reviews=Count('review')) .filter(challenge__id__in=user_submitted_challenge_ids, submission_time__isnull=False, user__is_staff=False, challenge__course=course, num_reviews__lt=2) .exclude(challenge__id__in=final_challenge_ids) .exclude(id__in=already_written_review_elaboration_ids) .exclude(user=user) .order_by('num_reviews', 'submission_time') ) missing_reviews = list(missing_reviews) missing_reviews.sort(key=lambda e: e.user.review_karma(course)) # Add Open Reviews to top of list has_open_review = False open_reviews = Review.objects.filter(submission_time__isnull=True, reviewer=user) for review in open_reviews: print(review.id) has_open_review = True missing_reviews = [review.elaboration] + missing_reviews return { 'has_open_review': has_open_review, 'missing_reviews': missing_reviews[:7] }
def get_final_evaluation_top_level_tasks(course): # final_top_level_tasks = [] # top_level_tasks = Elaboration.get_top_level_tasks(course) # for elaboration in top_level_tasks: # # cache_key = str(elaboration.user.id) + '_submitted_points' # if (cache.has_key(cache_key)): # submitted_points = cache.get(cache_key) # else: # submitted_points = elaboration.user.total_points_submitted(course) # cache.set(cache_key, submitted_points, 60*30) # # if submitted_points >= 57: # final_top_level_tasks.append(elaboration) # # return final_top_level_tasks from Challenge.models import Challenge final_challenge_ids = Challenge.get_course_final_challenge_ids(course) possible_user_ids = CourseUserRelation.objects.filter(course=course, positive_completion_possible=True).values_list('user_id', flat=True) final_top_level_challenges = ( Elaboration.objects .filter(challenge__id__in=final_challenge_ids, submission_time__isnull=False, user__is_staff=False, user_id__in=possible_user_ids) .annotate(evaluated=Min('evaluation__submission_time')) .filter(evaluated=None) .order_by('-submission_time') ) return final_top_level_challenges
def get_top_level_tasks(course): from Challenge.models import Challenge final_challenge_ids = Challenge.get_course_final_challenge_ids(course) top_level_challenges = (Elaboration.objects.filter( challenge__id__in=final_challenge_ids, submission_time__isnull=False, user__is_staff=False).annotate( evaluated=Min('evaluation__submission_time')).filter( evaluated=None).order_by('-submission_time')) return top_level_challenges
def get_top_level_tasks(course): from Challenge.models import Challenge final_challenge_ids = Challenge.get_course_final_challenge_ids(course) top_level_challenges = ( Elaboration.objects .filter(challenge__id__in=final_challenge_ids, submission_time__isnull=False, user__is_staff=False) .annotate(evaluated=Min('evaluation__submission_time')) .filter(evaluated=None) .order_by('-submission_time') ) return top_level_challenges
def final_tasks(course): final_task_ids = Challenge.get_course_final_challenge_ids(course) result = [] for id in final_task_ids: data = {} data['id'] = id data['title'] = (Challenge.objects.get(pk=id).title) data['evaluated'] = (Evaluation.objects.filter( submission__challenge__course=course).filter( submission_time__isnull=False).filter( submission__challenge__id=id).count()) data['not_evaluated'] = ( Elaboration.get_top_level_tasks(course).filter( challenge__id=id).count()) result.append(data) return result
def get_missing_reviews(course): from Challenge.models import Challenge final_challenge_ids = Challenge.get_course_final_challenge_ids(course) missing_reviews = ( Elaboration.objects .filter(submission_time__lte=datetime.now() - timedelta(days=1), user__is_staff=False, challenge__course=course) .annotate(num_reviews=Count('review')) .exclude(challenge__id__in=final_challenge_ids) ) final_elaborations = [] for elaboration in missing_reviews: if elaboration.num_reviews < 2: final_elaborations.append(elaboration.id) else: if Review.objects.filter(elaboration=elaboration, submission_time__isnull=False).count() < 2: final_elaborations.append(elaboration.id) missing_reviews = Elaboration.objects.filter(id__in=final_elaborations) return missing_reviews
def get_extra_reviews(user, course): from Challenge.models import Challenge user_submitted_challenge_ids = Elaboration.objects.filter( user_id=user.id, submission_time__isnull=False).values_list('challenge_id', flat=True) final_challenge_ids = Challenge.get_course_final_challenge_ids(course) already_written_review_elaboration_ids = Review.objects.filter( reviewer_id=user.id).values_list('elaboration_id', flat=True) missing_reviews = (Elaboration.objects.annotate( num_reviews=Count('review')).filter( challenge__id__in=user_submitted_challenge_ids, submission_time__isnull=False, user__is_staff=False, challenge__course=course, num_reviews__lt=2).exclude( challenge__id__in=final_challenge_ids).exclude( id__in=already_written_review_elaboration_ids).exclude( user=user).order_by('num_reviews', 'submission_time')) missing_reviews = list(missing_reviews) missing_reviews.sort(key=lambda e: e.user.review_karma(course)) # Add Open Reviews to top of list has_open_review = False open_reviews = Review.objects.filter(submission_time__isnull=True, reviewer=user) for review in open_reviews: print(review.id) has_open_review = True missing_reviews = [review.elaboration] + missing_reviews return { 'has_open_review': has_open_review, 'missing_reviews': missing_reviews[:7] }
def get_missing_reviews(course): from Challenge.models import Challenge final_challenge_ids = Challenge.get_course_final_challenge_ids(course) missing_reviews = (Elaboration.objects.filter( submission_time__lte=datetime.now() - timedelta(days=1), user__is_staff=False, challenge__course=course).annotate( num_reviews=Count('review')).exclude( challenge__id__in=final_challenge_ids)) final_elaborations = [] for elaboration in missing_reviews: if elaboration.num_reviews < 2: final_elaborations.append(elaboration.id) else: if Review.objects.filter( elaboration=elaboration, submission_time__isnull=False).count() < 2: final_elaborations.append(elaboration.id) missing_reviews = Elaboration.objects.filter(id__in=final_elaborations) return missing_reviews