示例#1
0
def approve(request, project_id=None):
    context = {
        'content': 'approver/approve.html',
        'project_id': project_id,
        'toast_text': utils.get_and_reset_toast(request.session)
    }
    current_user = request.user 
    if request.method == 'POST':
        question_form = request.POST
        project = project_crud.get_project_or_none(project_id)
        project = approve_workflow.save_project_with_form(project, question_form, request)

        request.access_log.model = project

        return approve_workflow.approve_or_next_steps(project, current_user)

    else:
        now = timezone.now()
        if(project_id):
            project = project_crud.get_project_or_none(project_id)
            if(project is None):
                return utils.dashboard_redirect_and_toast(request, 'Project with id {} does not exist.'.format(project_id))
            else:
                if(project_crud.is_current_project_editable_by_user(current_user,project)):
                    question_form = QuestionForm(project_id=project_id)
                    context['sorted_questions'] = question_form.get_random_questions()

                    return utils.layout_render(request, context)
                else:
                    return utils.dashboard_redirect_and_toast(request, 'You are not authorized to edit this project.')
        else:
            return utils.dashboard_redirect_and_toast(request, 'You need to have a project.')
示例#2
0
def approve(request, project_id=None):
    context = {
        'content': 'approver/approve.html',
        'project_id': project_id,
    }
    current_user = User.objects.get(username=utils.get_current_user_gatorlink(request.session))
    if request.method == 'POST':
        question_form = request.POST
        project = project_crud.get_project_or_none(project_id)
        approve_workflow.save_project_with_form(project, question_form, request.session)
        return approve_workflow.approve_or_next_steps(project, current_user)

    else:
        now = timezone.now()
        if(project_id is not None):
            project = project_crud.get_project_or_none(project_id)
            if(project is None):
                return utils.dashboard_redirect_and_toast(request, 'Project with id {} does not exist.'.format(project_id))
            else:
                if(project_crud.curent_user_is_project_owner(current_user, project) is not True
                   or project.get_is_editable() is not True):
                    return utils.dashboard_redirect_and_toast(request, 'You are not authorized to edit this project.')
                else:
                    # need to be able to prefill this in case people have already
                    # started approving their project but left
                    question_form = QuestionForm(project_id=project_id)
                    context['sorted_questions'] = question_form.get_sorted_questions()
                    return utils.layout_render(request, context)
        else:
            return utils.dashboard_redirect_and_toast(request, 'You need to have a project.')
def similar_projects(request, project_id=None, from_page=None):

    project = project_crud.get_project_or_none(project_id)

    if project is None:
        utils.dashboard_redirect_and_toast(
            request, 'Invalid request'.format(project_id))
    elif request.method == 'GET':
        project_scores = project_crud.get_similar_projects(project)

        if (len(project_scores) == 0):
            utils.set_toast(request.session,
                            'No relevant projects were found!')
            if (from_page == "dashboard"):
                return redirect(reverse("approver:dashboard"))
            else:
                return redirect(
                    reverse("approver:approve") + str(project.id) + '/')

        context = {
            'content': 'approver/similar_projects.html',
            'project_scores': project_scores,
            'project_id': project_id,
            'registry_search_url': constants.registry_search_path
        }
        return utils.layout_render(request, context)

    elif request.method == 'POST':
        return redirect(reverse("approver:approve") + str(project.id) + '/')
示例#4
0
def project(request, project_id=None):
    context = {
        'content': 'approver/project.html',
        'project_id': project_id,
    }
    current_user = User.objects.get(
        username=utils.get_current_user_gatorlink(request.session))
    if request.method == 'POST':
        project_form = request.POST
        title = project_form.get('title')
        project = project_crud.get_project_or_none(project_id)
        if (project is None):
            project = project_crud.create_or_update_project(
                current_user, project_form, project_id)
        else:
            if project_crud.curent_user_is_project_owner(
                    current_user,
                    project) is True and project.get_is_editable():
                project = project_crud.create_or_update_project(
                    current_user, project_form, project_id)
            else:
                return utils.dashboard_redirect_and_toast(
                    request, 'You are not allowed to edit this project'.format(
                        project_id))
        return redirect(reverse("approver:approve") + str(project.id) + '/')

    else:
        now = timezone.now()
        project_form = ProjectForm()
        context['form'] = project_form
        if (project_id is not None):
            project = project_crud.get_project_or_none(project_id)
            if (project is None):
                return utils.dashboard_redirect_and_toast(
                    request,
                    'Project with id {} does not exist.'.format(project_id))
            else:
                if (project_crud.curent_user_is_project_owner(
                        current_user, project) is not True):
                    if project_crud.current_user_is_project_advisor_or_collaborator(
                            current_user, project):
                        context['form'] = ProjectForm(project,
                                                      is_disabled=True)
                        return utils.layout_render(request, context)
                    else:
                        return utils.dashboard_redirect_and_toast(
                            request,
                            'You are not authorized to edit this project.')
                else:
                    if (project.get_is_editable() is not True):
                        context['form'] = ProjectForm(project,
                                                      is_disabled=True)
                        return utils.layout_render(request, context)
                    else:
                        context['form'] = ProjectForm(project)
                        return utils.layout_render(request, context)
        else:
            return utils.layout_render(request, context)
示例#5
0
def about_you(request):
    context = {
        'content': 'approver/about_you.html',
        'toast_text': utils.get_and_reset_toast(request.session),
        'su_edit':False,
    }
    if request.method == 'POST':
        about_you_form = request.POST

        person = request.user.person
        editing_user = request.user
        person = user_crud.update_user_from_about_you_form(person, about_you_form, editing_user)

        request.access_log.model = person

        if (not person.first_name.strip() or not person.last_name.strip()):
            return utils.about_you_redirect_and_toast(request, "First and last name are required.")
        return utils.dashboard_redirect_and_toast(request, 'Profile Saved!')

    else:
        user = request.user
        about_you_form = AboutYouForm(user=user)
        context['form'] = about_you_form
        context['empty_address'] = Address()

    return utils.layout_render(request, context)
示例#6
0
def about_you(request):
    context = {
        'content': 'approver/about_you.html',
        'toast_text': utils.get_and_reset_toast(request.session),
        'su_edit': False,
    }
    if request.method == 'POST':
        about_you_form = request.POST

        person = request.user.person
        editing_user = request.user
        person = user_crud.update_user_from_about_you_form(
            person, about_you_form, editing_user)

        request.access_log.model = person

        if (not person.first_name.strip() or not person.last_name.strip()):
            return utils.about_you_redirect_and_toast(
                request, "First and last name are required.")
        return utils.dashboard_redirect_and_toast(request, 'Profile Saved!')

    else:
        user = request.user
        about_you_form = AboutYouForm(user=user)
        context['form'] = about_you_form
        context['empty_address'] = Address()

    return utils.layout_render(request, context)
示例#7
0
def approve(request, project_id=None):
    context = {
        'content': 'approver/approve.html',
        'project_id': project_id,
        'toast_text': utils.get_and_reset_toast(request.session)
    }
    current_user = request.user
    if request.method == 'POST':
        question_form = request.POST
        project = project_crud.get_project_or_none(project_id)
        project = approve_workflow.save_project_with_form(
            project, question_form, request)

        request.access_log.model = project

        return approve_workflow.approve_or_next_steps(project, current_user)

    else:
        now = timezone.now()
        if (project_id):
            project = project_crud.get_project_or_none(project_id)
            if (project is None):
                return utils.dashboard_redirect_and_toast(
                    request,
                    'Project with id {} does not exist.'.format(project_id))
            else:
                if (project_crud.is_current_project_editable_by_user(
                        current_user, project)):
                    question_form = QuestionForm(project_id=project_id)
                    context[
                        'sorted_questions'] = question_form.get_random_questions(
                        )

                    return utils.layout_render(request, context)
                else:
                    return utils.dashboard_redirect_and_toast(
                        request,
                        'You are not authorized to edit this project.')
        else:
            return utils.dashboard_redirect_and_toast(
                request, 'You need to have a project.')
示例#8
0
def dashboard(request, project_id=None):
    if request.method == 'GET' or request.POST.get('search') is not None:
        return __shared_GET(request, project_id)

    elif request.method == 'POST':
        current_user = request.user
        project = project_crud.get_project_or_none(project_id)
        if (project_id is not None):
            toast_text = project_crud.current_user_can_perform_project_delete(
                current_user, project)
            return utils.dashboard_redirect_and_toast(request, toast_text)
        else:
            return redirect(reverse("approver:dashboard"))
示例#9
0
def about_you(request):
    context = {
        'content': 'approver/about_you.html',
        'toast_text': None,
    }
    if request.method == 'POST':
        about_you_form = request.POST
        user = User.objects.get(username=about_you_form.get('user_name'))
        editing_user = User.objects.get(
            username=utils.get_current_user_gatorlink(request.session))

        user_crud.update_user_from_about_you_form(user, about_you_form,
                                                  editing_user)
        return utils.dashboard_redirect_and_toast(request, 'Profile Saved!')

    else:
        username = request.session.get(constants.SESSION_VARS['gatorlink'])
        user = User.objects.get(username=username)
        about_you_form = AboutYouForm(user=user)
        context['form'] = about_you_form
        context['empty_address'] = Address()

    return utils.layout_render(request, context)
示例#10
0
def project(request, project_id=None):
    '''Project can be viewed only if it is not archived. SuperUser can edit the archived project'''
    context = {
        'content': 'approver/project.html',
        'project_id': project_id,
        'toast_text': utils.get_and_reset_toast(request.session),
    }
    current_user = request.user
    if request.method == 'POST':
        project_form = request.POST
        title = project_form.get('title')
        project = project_crud.get_project_or_none(project_id)
        if(project is None):
            project = project_crud.create_or_update_project(current_user, project_form, project_id)
            request.access_log.model = project

        else:
            if project.archived and not project_crud.current_user_is_superuser(current_user):
                return utils.dashboard_redirect_and_toast(request, 'Project is Archived.')
            if project_crud.current_user_is_superuser(current_user):
                project = project_crud.create_or_update_project(current_user, project_form, project_id)
                request.access_log.model = project
                return utils.dashboard_su_redirect_and_toast(request, 'Project is Saved.')

            if (project_crud.current_user_is_project_owner(current_user, project) is True and project.get_is_editable() and not project.archived):
                project = project_crud.create_or_update_project(current_user, project_form, project_id)
                request.access_log.model = project
            else:
                return utils.dashboard_redirect_and_toast(request, 'You are not allowed to edit this project'.format(project_id))

        if (not project.title.strip() or not project.description.strip()):
            return utils.project_redirect_and_toast(request, project.id, "Title and Description are required.")

        return redirect(reverse("approver:similar_projects", args=[str(project.id)]))

    else:
        now = timezone.now()
        project_form = ProjectForm()
        context['form'] = project_form
        if(project_id is not None):
            project = project_crud.get_project_or_none(project_id)
            if(project is None):
                return utils.dashboard_redirect_and_toast(request, 'Project with id {} does not exist.'.format(project_id))
            else:
                if project.archived and not project_crud.current_user_is_superuser(current_user) :
                    return utils.dashboard_redirect_and_toast(request, 'Project is Archived.')
                if(project_crud.is_current_project_editable(current_user, project) is not True):
                    if project_crud.current_user_is_project_advisor_or_collaborator(current_user,project):
                        context['form'] = ProjectForm(project,is_disabled=True)
                        return utils.layout_render(request,context)
                    else:
                        return utils.dashboard_redirect_and_toast(request, 'You are not authorized to edit this project.')
                else:
                    if (project.get_is_editable() is not True):
                        if (project_crud.current_user_is_superuser(current_user)):
                            context['form'] = ProjectForm(project,is_disabled=False)
                        else:
                            context['form'] = ProjectForm(project,is_disabled=True)
                        return utils.layout_render(request,context)
                    else:
                        context['form'] = ProjectForm(project)
                        return utils.layout_render(request, context)
        else:
            return utils.layout_render(request, context)
示例#11
0
def project(request, project_id=None):
    '''Project can be viewed only if it is not archived. SuperUser can edit the archived project'''
    context = {
        'content': 'approver/project.html',
        'project_id': project_id,
        'toast_text': utils.get_and_reset_toast(request.session),
    }
    current_user = request.user
    if request.method == 'POST':
        project_form = request.POST
        title = project_form.get('title')
        project = project_crud.get_project_or_none(project_id)
        if (project is None):
            project = project_crud.create_or_update_project(
                current_user, project_form, project_id)
            request.access_log.model = project

        else:
            if project.archived and not project_crud.current_user_is_superuser(
                    current_user):
                return utils.dashboard_redirect_and_toast(
                    request, 'Project is Archived.')
            if project_crud.current_user_is_superuser(current_user):
                project = project_crud.create_or_update_project(
                    current_user, project_form, project_id)
                request.access_log.model = project
                return utils.dashboard_su_redirect_and_toast(
                    request, 'Project is Saved.')

            if (project_crud.current_user_is_project_owner(
                    current_user, project) is True
                    and project.get_is_editable() and not project.archived):
                project = project_crud.create_or_update_project(
                    current_user, project_form, project_id)
                request.access_log.model = project
            else:
                return utils.dashboard_redirect_and_toast(
                    request, 'You are not allowed to edit this project'.format(
                        project_id))

        if (not project.title.strip() or not project.description.strip()):
            return utils.project_redirect_and_toast(
                request, project.id, "Title and Description are required.")

        return redirect(
            reverse("approver:similar_projects", args=[str(project.id)]))

    else:
        project_form = ProjectForm()
        context['form'] = project_form
        if (project_id is not None):
            project = project_crud.get_project_or_none(project_id)
            if (project is None):
                return utils.dashboard_redirect_and_toast(
                    request,
                    'Project with id {} does not exist.'.format(project_id))
            else:
                user_can_edit = project_crud.is_current_project_editable_by_user(
                    current_user, project)
                if project_crud.current_user_is_superuser(current_user):
                    context['form'] = ProjectForm(
                        project, is_disabled=not user_can_edit)
                    return utils.layout_render(request, context)

                elif project.archived:
                    toast_message = 'Project is archived.'
                    return utils.dashboard_redirect_and_toast(
                        request, 'Project is Archived.')

                else:
                    context['form'] = ProjectForm(
                        project, is_disabled=not user_can_edit)
                    return utils.layout_render(request, context)
        else:
            #new form
            return utils.layout_render(request, context)