コード例 #1
0
ファイル: views.py プロジェクト: Poreykin/anytask
def profile(request, username=None, year=None):
    user = request.user

    user_to_show = user
    if username:
        user_to_show = get_object_or_404(User, username=username)

    teacher_in_courses = Course.objects.filter(is_active=True).filter(teachers=user_to_show)
    user_teacher_in_courses = Course.objects.filter(is_active=True).filter(teachers=user)
    if user_to_show != user:
        if len(teacher_in_courses) == 0 and len(user_teacher_in_courses) == 0:
            raise PermissionDenied

    if year:
        current_year = get_object_or_404(Year, start_year=year)
    else:
        current_year = get_current_year()

    tasks_taken = TaskTaken.objects.filter(user=user_to_show).filter(Q( Q(status=TaskTaken.STATUS_TAKEN) | Q(status=TaskTaken.STATUS_SCORED))).filter(task__course__is_active=True)

    course_x_tasks = {}
    course_x_scores = {}
    for task_taken in tasks_taken:
        course = task_taken.task.course
        course_x_scores.setdefault(course, 0)
        task_end_date = task_taken.added_time + datetime.timedelta(days=course.max_days_without_score)
        course_x_tasks.setdefault(course, [])
        course_x_tasks[course].append((task_taken.task, task_taken.task.score_max, task_taken.score, task_end_date))
        course_x_scores[course] += task_taken.score

    user_course_information = []
    for course in sorted(course_x_tasks.keys(), key=lambda x: x.name):
        user_course_information.append((course,course_x_scores[course],course_x_tasks[course]))

    groups = user_to_show.group_set.filter(year=current_year)
    can_generate_invites = user_to_show == user and Invite.user_can_generate_invite(user)

    issues = Issue.objects.filter(student=user_to_show).order_by('task__course')

    if request.method == 'POST':
        invite_form = InviteActivationForm(request.POST)
        if invite_form.is_valid():
            invite = get_object_or_404(Invite, key=invite_form.cleaned_data['invite'])
            if invite.group:
                invite.group.students.add(user)
                invite.invited_users.add(user)
    else:
        invite_form = InviteActivationForm()

    context = {
        'user_to_show'              : user_to_show,
        'groups'                    : groups,
        'user_course_information'   : user_course_information,
        'teacher_in_courses'        : teacher_in_courses,
        'can_generate_invites'      : can_generate_invites,
        'issues'                    : issues,
        'invite_form'               : invite_form,
    }

    return render_to_response('user_profile.html', context, context_instance=RequestContext(request))
コード例 #2
0
ファイル: views.py プロジェクト: yandexdataschool/anytask
def generate_invites(request):
    user = request.user

    if not Invite.user_can_generate_invite(user):
        return render_to_response('generate_forbidden.html', {},
                                  context_instance=RequestContext(request))

    if request.method == 'POST':
        return generate_invites_post(request)

    courses = Course.objects.filter(is_active=True)
    groups = Group.objects.filter(year=get_current_year())
    true_courses = []
    for course in courses:
        if user in course.teachers.all():
            true_courses.append(course)

    groups = groups.filter(course__in=true_courses).distinct().order_by('name')

    context = {
        'groups': groups,
        # 'courses'   : courses,
    }

    return render_to_response('generate.html',
                              context,
                              context_instance=RequestContext(request))
コード例 #3
0
ファイル: views.py プロジェクト: BooleT37/anytask
def index(request):
    
    current_year = get_current_year()
    courses = Course.objects.filter(is_active=True).order_by('name')
    archive_courses = Course.objects.exclude(is_active=True).order_by('year', 'name')
    
    context = {
        'current_year'  : current_year,
        'courses'       : courses,
        'archive_courses' : archive_courses,
    }
   
    return render_to_response('index.html', context, context_instance=RequestContext(request))
コード例 #4
0
def courses_list(request, year=None):
    if year is None:
        year_object = get_current_year()
    else:
        year_object = get_object_or_404(Year, start_year=year)

    if year_object is None:
        raise Http404

    courses_list = Course.objects.filter(year=year_object).order_by('name')

    context = {
        'courses_list': courses_list,
        'year': year_object,
    }

    return render_to_response('course_list.html', context, context_instance=RequestContext(request))
コード例 #5
0
ファイル: views.py プロジェクト: znick/anytask
def courses_list(request, year=None):
    if year is None:
        year_object = get_current_year()
    else:
        year_object = get_object_or_404(Year, start_year=year)

    if year_object is None:
        raise Http404

    courses_list = Course.objects.filter(year=year_object).order_by('name')

    context = {
        'courses_list': courses_list,
        'year': year_object,
    }

    return render_to_response('course_list.html', context, context_instance=RequestContext(request))
コード例 #6
0
ファイル: views.py プロジェクト: BooleT37/anytask
def generate_invites(request):
    user = request.user
    
    if not Invite.user_can_generate_invite(user):
        return render_to_response('generate_forbidden.html', {}, context_instance=RequestContext(request)) 
    
    if request.method == 'POST':
        return generate_invites_post(request)
    
    
    groups = Group.objects.filter(year=get_current_year())
    
    context = {
        'groups'    : groups,
    }
    
    return render_to_response('generate.html', context, context_instance=RequestContext(request))
コード例 #7
0
ファイル: views.py プロジェクト: gebetix/anytask
def profile(request, username=None, year=None):
    user = request.user

    user_to_show = user
    if username:
        user_to_show = get_object_or_404(User, username=username)

    if year:
        current_year = get_object_or_404(Year, start_year=year)
    else:
        current_year = get_current_year()

    tasks_taken = TaskTaken.objects.filter(user=user_to_show).filter(Q( Q(status=TaskTaken.STATUS_TAKEN) | Q(status=TaskTaken.STATUS_SCORED))).filter(task__cource__is_active=True)

    cource_x_tasks = {}
    cource_x_scores = {}
    for task_taken in tasks_taken:
        cource = task_taken.task.cource
        cource_x_scores.setdefault(cource, 0)
        task_end_date = task_taken.added_time + datetime.timedelta(days=cource.max_days_without_score)
        cource_x_tasks.setdefault(cource, [])
        cource_x_tasks[cource].append((task_taken.task, task_taken.task.score_max, task_taken.score, task_end_date))
        cource_x_scores[cource] += task_taken.score

    user_cource_information = []
    for cource in sorted(cource_x_tasks.keys(), key=lambda x: x.name):
        user_cource_information.append((cource,cource_x_scores[cource],cource_x_tasks[cource]))

    groups = user_to_show.group_set.filter(year=current_year)
    teacher_in_cources = Cource.objects.filter(is_active=True).filter(teachers=user_to_show)
    can_generate_invites = user_to_show == user and Invite.user_can_generate_invite(user)

    context = {
        'user_to_show'              : user_to_show,
        'groups'                    : groups,
        'user_cource_information'   : user_cource_information,
        'teacher_in_cources'        : teacher_in_cources,
        'can_generate_invites'      : can_generate_invites,
    }

    return render_to_response('user_profile.html', context, context_instance=RequestContext(request))
コード例 #8
0
ファイル: views.py プロジェクト: Poreykin/anytask
def generate_invites(request):
    user = request.user

    if not Invite.user_can_generate_invite(user):
        return render_to_response('generate_forbidden.html', {}, context_instance=RequestContext(request)) 

    if request.method == 'POST':
        return generate_invites_post(request)

    courses = Course.objects.filter(is_active=True)
    groups = Group.objects.filter(year=get_current_year())
    true_courses = []
    for course in courses:
        if user in course.teachers.all():
            true_courses.append(course)

    groups = set(groups.filter(course__in=true_courses))

    context = {
        'groups'    : groups,
        #'courses'   : courses,
    }
    
    return render_to_response('generate.html', context, context_instance=RequestContext(request))
コード例 #9
0
ファイル: models.py プロジェクト: znick/anytask
 def is_current_year_student(self):
     return Group.objects.filter(year=get_current_year()).filter(students=self.user).count() > 0
コード例 #10
0
ファイル: views.py プロジェクト: neychev/anytask
def user_courses(request, username=None, year=None):
    user = request.user
    lang = user.profile.language

    user_to_show = user
    if username:
        user_to_show = get_object_or_404(User, username=username)

    if user_to_show != user:
        user_school_teach_user_to_show = False

        groups_user_to_show = user_to_show.group_set.all()

        courses_user_to_show = Course.objects.filter(
            groups__in=groups_user_to_show)
        schools_user_to_show = School.objects.filter(
            courses__in=courses_user_to_show)

        courses_teacher = Course.objects.filter(teachers=user)
        schools_teacher = School.objects.filter(courses__in=courses_teacher)

        if schools_teacher & schools_user_to_show:
            user_school_teach_user_to_show = True

        if not (user.is_staff or user_school_teach_user_to_show):
            raise PermissionDenied

    if year:
        current_year = get_object_or_404(Year, start_year=year)
    else:
        current_year = get_current_year()

    groups = user_to_show.group_set.all()

    courses = Course.objects.filter(groups__in=groups).distinct()

    tables = [{}, {}]

    for course in courses:

        tasks = Task.objects\
            .filter(course=course, groups__in=groups, is_hidden=False) \
            .exclude(type=Task.TYPE_MATERIAL)\
            .distinct()
        issues = Issue.objects.filter(student=user_to_show, task__in=tasks)

        if StudentCourseMark.objects.filter(student=user_to_show,
                                            course=course):
            mark = StudentCourseMark.objects.get(student=user_to_show,
                                                 course=course).mark
        else:
            mark = None

        student_summ_score = issues \
            .filter(task__parent_task__isnull=True) \
            .filter(
                Q(task__type=Task.TYPE_SEMINAR)
                | Q(task__score_after_deadline=True)
                | ~Q(task__score_after_deadline=False, status_field__tag=IssueStatus.STATUS_ACCEPTED_AFTER_DEADLINE)
            ) \
            .distinct() \
            .aggregate(Sum('mark'))['mark__sum'] or 0

        new_course_statistics = dict()
        new_course_statistics['name'] = course.name
        new_course_statistics['url'] = course.get_absolute_url()

        new_course_statistics['issues_count'] = []
        for status in course.issue_status_system.statuses.all():
            new_course_statistics['issues_count'].append(
                (status.color, status.get_name(lang),
                 issues.filter(status_field=status).count()))

        new_course_statistics['tasks'] = tasks.exclude(
            type=Task.TYPE_SEMINAR).count()
        new_course_statistics['mark'] = mark if mark else '--'
        new_course_statistics['summ_score'] = student_summ_score

        is_archive = int(not course.is_active)
        table_year = unicode(course.year)
        table_key = course.issue_status_system.id

        if table_year not in tables[is_archive]:
            tables[is_archive][table_year] = dict()

        if table_key in tables[is_archive][table_year]:
            tables[is_archive][table_year][table_key].append(
                new_course_statistics)
        else:
            tables[is_archive][table_year][table_key] = [new_course_statistics]

    context = {
        'tables': [sorted(x.iteritems()) for x in tables],
        'current_year':
        unicode(current_year) if current_year is not None else '',
        'user_to_show': user_to_show,
        'user': user,
    }

    return render(request, 'user_courses.html', context)
コード例 #11
0
ファイル: views.py プロジェクト: neychev/anytask
def profile(request, username=None, year=None):
    user = request.user

    user_to_show = user
    if username:
        user_to_show = get_object_or_404(User, username=username)

    user_to_show_profile = user_to_show.profile

    show_email = True
    user_above_user_to_show = True

    if user_to_show != user:
        user_teach_user_to_show = False
        user_to_show_teach_user = False
        user_school_user_to_show = False
        user_school_teach_user_to_show = False

        groups_user_to_show = user_to_show.group_set.all()
        groups = user.group_set.all()

        courses_user_to_show = Course.objects.filter(
            groups__in=groups_user_to_show)
        schools_user_to_show = School.objects.filter(
            courses__in=courses_user_to_show)
        courses_user_to_show_teacher = Course.objects.filter(
            teachers=user_to_show)
        schools_user_to_show_teacher = School.objects.filter(
            courses__in=courses_user_to_show_teacher)

        courses = Course.objects.filter(groups__in=groups)
        schools = School.objects.filter(courses__in=courses)
        courses_teacher = Course.objects.filter(teachers=user)
        schools_teacher = School.objects.filter(courses__in=courses_teacher)

        if courses_user_to_show_teacher & courses:
            user_to_show_teach_user = True

        if courses_teacher & courses_user_to_show:
            user_teach_user_to_show = True

        if (schools_user_to_show
                | schools_user_to_show_teacher) & (schools | schools_teacher):
            user_school_user_to_show = True

        if schools_teacher & schools_user_to_show:
            user_school_teach_user_to_show = True

        if not (user.is_staff or user_school_user_to_show):
            if not ((courses_user_to_show | courses_user_to_show_teacher) &
                    (courses | courses_teacher)):
                if not (groups_user_to_show & groups):
                    raise PermissionDenied

        show_email = \
            user.is_staff or \
            user_to_show_profile.show_email or \
            user_teach_user_to_show or \
            user_to_show_teach_user
        user_above_user_to_show = \
            user.is_staff or \
            user_school_teach_user_to_show

    teacher_in_courses = Course.objects.filter(is_active=True).filter(
        teachers=user_to_show).distinct()

    if year:
        current_year = get_object_or_404(Year, start_year=year)
    else:
        current_year = get_current_year()

    groups = user_to_show.group_set.all().distinct()

    courses = Course.objects.filter(is_active=True).filter(
        groups__in=groups).distinct()

    can_generate_invites = user_to_show == user and Invite.user_can_generate_invite(
        user)

    invite_form = InviteActivationForm()

    if request.method == 'POST':
        user_profile = user.profile
        if 'update-avatar' in request.POST:
            filename = 'avatar'
            if 'input-avatar' in request.FILES:
                image_content = request.FILES['input-avatar']
                user_profile.avatar.save(filename, image_content)
            elif request.POST['delete-avatar']:
                user_profile.avatar.delete()
            # elif request.POST['gravatar-link']:
            #     image_content = ContentFile(requests.get(request.POST['gravatar-link']).content)
            #     user_profile.avatar.save(filename, image_content)

            user_profile.save()
        else:
            invite_form = InviteActivationForm(request.POST)
            if invite_form.is_valid():
                invite = get_object_or_404(
                    Invite, key=invite_form.cleaned_data['invite'])
                if invite.group:
                    invite.group.students.add(user)
                    invite.invited_users.add(user)

    teacher_in_courses_archive = Course.objects.filter(is_active=False).filter(
        teachers=user_to_show).distinct()
    courses_archive = Course.objects.filter(is_active=False).filter(
        groups__in=groups).distinct()

    if len(teacher_in_courses or teacher_in_courses_archive) != 0 \
            and len(courses or courses_archive) != 0 \
            and len(groups) != 0:
        card_width = 'col-md-4'
    elif len(teacher_in_courses or teacher_in_courses_archive) != 0 \
            and len(courses or courses_archive) != 0 or len(teacher_in_courses or teacher_in_courses_archive) != 0 \
            and len(groups) != 0 or len(courses or courses_archive) != 0 \
            and len(groups) != 0:
        card_width = 'col-md-6'
    else:
        card_width = 'col-md-12'

    age = 0
    if user.is_staff and user_to_show_profile.birth_date:
        age = relativedelta(datetime.datetime.now(),
                            user_to_show_profile.birth_date).years
        age = age if age > 0 else 0

    context = {
        'user_to_show': user_to_show,
        'courses': group_by_year(courses),
        'courses_archive': group_by_year(courses_archive),
        'groups': group_by_year(groups),
        'teacher_in_courses': group_by_year(teacher_in_courses),
        'teacher_in_courses_archive':
        group_by_year(teacher_in_courses_archive),
        'current_year':
        unicode(current_year) if current_year is not None else '',
        'can_generate_invites': can_generate_invites,
        'invite_form': invite_form,
        'user_to_show_profile': user_to_show_profile,
        'card_width': card_width,
        'show_email': show_email,
        'user_above_user_to_show': user_above_user_to_show,
        'age': age,
    }

    return render(request, 'user_profile.html', context)
コード例 #12
0
ファイル: models.py プロジェクト: hariton27sy/anytask
 def is_current_year_student(self):
     return Group.objects.filter(year=get_current_year()).filter(students=self.user).count() > 0
コード例 #13
0
ファイル: views.py プロジェクト: znick/anytask
def profile(request, username=None, year=None):
    user = request.user

    user_to_show = user
    if username:
        user_to_show = get_object_or_404(User, username=username)

    user_to_show_profile = user_to_show.get_profile()

    show_email = True
    user_above_user_to_show = True

    if user_to_show != user:
        user_teach_user_to_show = False
        user_to_show_teach_user = False
        user_school_user_to_show = False
        user_school_teach_user_to_show = False

        groups_user_to_show = user_to_show.group_set.all()
        groups = user.group_set.all()

        courses_user_to_show = Course.objects.filter(groups__in=groups_user_to_show)
        schools_user_to_show = School.objects.filter(courses__in=courses_user_to_show)
        courses_user_to_show_teacher = Course.objects.filter(teachers=user_to_show)
        schools_user_to_show_teacher = School.objects.filter(courses__in=courses_user_to_show_teacher)

        courses = Course.objects.filter(groups__in=groups)
        schools = School.objects.filter(courses__in=courses)
        courses_teacher = Course.objects.filter(teachers=user)
        schools_teacher = School.objects.filter(courses__in=courses_teacher)

        if courses_user_to_show_teacher & courses:
            user_to_show_teach_user = True

        if courses_teacher & courses_user_to_show:
            user_teach_user_to_show = True

        if (schools_user_to_show | schools_user_to_show_teacher) & (schools | schools_teacher):
            user_school_user_to_show = True

        if schools_teacher & schools_user_to_show:
            user_school_teach_user_to_show = True

        if not (user.is_staff or user_school_user_to_show):
            if not ((courses_user_to_show | courses_user_to_show_teacher) & (courses | courses_teacher)):
                if not (groups_user_to_show & groups):
                    raise PermissionDenied

        show_email = \
            user.is_staff or \
            user_to_show_profile.show_email or \
            user_teach_user_to_show or \
            user_to_show_teach_user
        user_above_user_to_show = \
            user.is_staff or \
            user_school_teach_user_to_show

    teacher_in_courses = Course.objects.filter(is_active=True).filter(teachers=user_to_show).distinct()

    if year:
        current_year = get_object_or_404(Year, start_year=year)
    else:
        current_year = get_current_year()

    groups = user_to_show.group_set.all().distinct()

    courses = Course.objects.filter(is_active=True).filter(groups__in=groups).distinct()

    can_generate_invites = user_to_show == user and Invite.user_can_generate_invite(user)

    invite_form = InviteActivationForm()

    if request.method == 'POST':
        user_profile = user.get_profile()
        if 'update-avatar' in request.POST:
            filename = 'avatar'
            if 'input-avatar' in request.FILES:
                image_content = request.FILES['input-avatar']
                user_profile.avatar.save(filename, image_content)
            elif request.POST['delete-avatar']:
                user_profile.avatar.delete()
            # elif request.POST['gravatar-link']:
            #     image_content = ContentFile(requests.get(request.POST['gravatar-link']).content)
            #     user_profile.avatar.save(filename, image_content)

            user_profile.save()
        else:
            invite_form = InviteActivationForm(request.POST)
            if invite_form.is_valid():
                invite = get_object_or_404(Invite, key=invite_form.cleaned_data['invite'])
                if invite.group:
                    invite.group.students.add(user)
                    invite.invited_users.add(user)

    teacher_in_courses_archive = Course.objects.filter(is_active=False).filter(teachers=user_to_show).distinct()
    courses_archive = Course.objects.filter(is_active=False).filter(groups__in=groups).distinct()

    if len(teacher_in_courses or teacher_in_courses_archive) != 0 \
            and len(courses or courses_archive) != 0 \
            and len(groups) != 0:
        card_width = 'col-md-4'
    elif len(teacher_in_courses or teacher_in_courses_archive) != 0 \
            and len(courses or courses_archive) != 0 or len(teacher_in_courses or teacher_in_courses_archive) != 0 \
            and len(groups) != 0 or len(courses or courses_archive) != 0 \
            and len(groups) != 0:
        card_width = 'col-md-6'
    else:
        card_width = 'col-md-12'

    age = 0
    if user.is_staff and user_to_show_profile.birth_date:
        age = relativedelta(datetime.datetime.now(), user_to_show_profile.birth_date).years
        age = age if age > 0 else 0

    context = {
        'user_to_show': user_to_show,
        'courses': group_by_year(courses),
        'courses_archive': group_by_year(courses_archive),
        'groups': group_by_year(groups),
        'teacher_in_courses': group_by_year(teacher_in_courses),
        'teacher_in_courses_archive': group_by_year(teacher_in_courses_archive),
        'current_year': unicode(current_year) if current_year is not None else '',
        'can_generate_invites': can_generate_invites,
        'invite_form': invite_form,
        'user_to_show_profile': user_to_show_profile,
        'card_width': card_width,
        'show_email': show_email,
        'user_above_user_to_show': user_above_user_to_show,
        'age': age,
    }

    return render_to_response('user_profile.html', context, context_instance=RequestContext(request))
コード例 #14
0
ファイル: views.py プロジェクト: znick/anytask
def user_courses(request, username=None, year=None):
    user = request.user
    lang = user.get_profile().language

    user_to_show = user
    if username:
        user_to_show = get_object_or_404(User, username=username)

    if user_to_show != user:
        user_school_teach_user_to_show = False

        groups_user_to_show = user_to_show.group_set.all()

        courses_user_to_show = Course.objects.filter(groups__in=groups_user_to_show)
        schools_user_to_show = School.objects.filter(courses__in=courses_user_to_show)

        courses_teacher = Course.objects.filter(teachers=user)
        schools_teacher = School.objects.filter(courses__in=courses_teacher)

        if schools_teacher & schools_user_to_show:
            user_school_teach_user_to_show = True

        if not (user.is_staff or user_school_teach_user_to_show):
            raise PermissionDenied

    if year:
        current_year = get_object_or_404(Year, start_year=year)
    else:
        current_year = get_current_year()

    groups = user_to_show.group_set.all()

    courses = Course.objects.filter(groups__in=groups).distinct()

    tables = [{}, {}]

    for course in courses:

        tasks = Task.objects\
            .filter(course=course, groups__in=groups, is_hidden=False) \
            .exclude(type=Task.TYPE_MATERIAL)\
            .distinct()
        issues = Issue.objects.filter(student=user_to_show, task__in=tasks)

        if StudentCourseMark.objects.filter(student=user_to_show, course=course):
            mark = StudentCourseMark.objects.get(student=user_to_show, course=course).mark
        else:
            mark = None

        student_summ_score = issues \
            .filter(task__parent_task__isnull=True) \
            .filter(
                Q(task__type=Task.TYPE_SEMINAR)
                | Q(task__score_after_deadline=True)
                | ~Q(task__score_after_deadline=False, status_field__tag=IssueStatus.STATUS_ACCEPTED_AFTER_DEADLINE)
            ) \
            .distinct() \
            .aggregate(Sum('mark'))['mark__sum'] or 0

        new_course_statistics = dict()
        new_course_statistics['name'] = course.name
        new_course_statistics['url'] = course.get_absolute_url()

        new_course_statistics['issues_count'] = []
        for status in course.issue_status_system.statuses.all():
            new_course_statistics['issues_count'].append((status.color, status.get_name(lang),
                                                          issues.filter(status_field=status).count()))

        new_course_statistics['tasks'] = tasks.exclude(type=Task.TYPE_SEMINAR).count()
        new_course_statistics['mark'] = mark if mark else '--'
        new_course_statistics['summ_score'] = student_summ_score

        is_archive = int(not course.is_active)
        table_year = unicode(course.year)
        table_key = course.issue_status_system.id

        if table_year not in tables[is_archive]:
            tables[is_archive][table_year] = dict()

        if table_key in tables[is_archive][table_year]:
            tables[is_archive][table_year][table_key].append(new_course_statistics)
        else:
            tables[is_archive][table_year][table_key] = [new_course_statistics]

    context = {
        'tables': [sorted(x.iteritems()) for x in tables],
        'current_year': unicode(current_year) if current_year is not None else '',
        'user_to_show': user_to_show,
        'user': user,
    }

    return render_to_response('user_courses.html', context, context_instance=RequestContext(request))