예제 #1
0
def create_task(request):

    user = request.user
    profile = user.get_profile()

    context = {"user": user, "profile": profile}

    context.update(csrf(request))

    can_create_task = False if (profile.role == profile_models.ROLES_CHOICES[3][0]) else True
    if can_create_task:
        if request.method == "POST":
            form = taskapp_forms.CreateTaskForm(request.POST)
            if form.is_valid():
                data = form.cleaned_data.copy()
                data.update({"created_by": user, "creation_datetime": datetime.now()})

                task = taskapp_models.Task(**data)
                task.save()

                task_url = reverse("view_task", kwargs={"task_id": task.id})
                return shortcuts.redirect(task_url)
            else:
                context.update({"form": form})
                return shortcuts.render_to_response("task/edit.html", RequestContext(request, context))
        else:
            form = taskapp_forms.CreateTaskForm()
            context.update({"form": form})
            return shortcuts.render_to_response("task/edit.html", RequestContext(request, context))
    else:
        return show_msg(user, "You are not authorised to create a task.")
예제 #2
0
def select_user(request, task_id):
    """ first get the status of the task and then select one of claimed users
    generate list of claimed users by passing it as an argument to a function.
    """

    task_url = reverse("view_task", kwargs={"task_id": task_id})

    user = request.user
    profile = user.get_profile()
    task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id)

    context = {"user": user, "profile": profile, "task": task}

    context.update(csrf(request))

    reviewers = task.reviewers.all()
    claimed_users = task.claimed_users.all()

    is_reviewer = True if user in reviewers else False
    task_claimed = True if claimed_users else False

    is_creator = True if user == task.created_by else False

    if (
        is_creator
        or is_reviewer
        or profile.role in [profile_models.ROLES_CHOICES[0][0], profile_models.ROLES_CHOICES[1][0]]
        and task.status in [taskapp_models.TASK_STATUS_CHOICES[1][0], taskapp_models.TASK_STATUS_CHOICES[3][0]]
    ):

        if task_claimed:

            user_list = ((user.id, user.username) for user in claimed_users)

            if request.method == "POST":
                form = taskapp_forms.ChoiceForm(user_list, request.POST)
                if form.is_valid():
                    uid = form.cleaned_data["choice"]
                    selected_user = User.objects.get(id=uid)

                    task.selected_users.add(selected_user)
                    task.claimed_users.remove(selected_user)
                    task.status = taskapp_models.TASK_STATUS_CHOICES[3][0]
                    task.save()

                    return shortcuts.redirect(task_url)
                else:
                    context.update({"form": form})
                    return shortcuts.render_to_response("task/select_user.html", RequestContext(request, context))
            else:
                form = taskapp_forms.ChoiceForm(user_list)
                context.update({"form": form})
                return shortcuts.render_to_response("task/select_user.html", RequestContext(request, context))
        else:
            return show_msg(user, "There are no pending claims for this task", task_url, "view the task")
    else:
        raise exceptions.UnauthorizedAccess(NO_SELECT_USER)
예제 #3
0
def submit_report(request, task_id):
    """ Check if the work is in WR state and the user is in assigned_users.
    """
    task_url = reverse('view_task', kwargs={'task_id': task_id})
    task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id)

    user = request.user
    old_reports = task.reports.all()

    if not task.status == taskapp_models.TASK_STATUS_CHOICES[3][0]:
        raise http.Http404

    can_upload = True if user in task.selected_users.all() else False

    context = {
        'user': user,
        'task': task,
        'can_upload': can_upload,
    }

    context.update(csrf(request))

    if request.method == "POST":
        if not can_upload:
            return show_msg(
                user, "You are not authorised to upload data to this task",
                task_url, "view the task")

        form = taskapp_forms.WorkReportForm(request.POST, request.FILES)

        if form.is_valid():
            data = form.cleaned_data.copy()
            data.update({
                "task": task,
                "revision": old_reports.count(),
                "submitted_by": user,
                "submitted_at": datetime.now(),
            })
            r = taskapp_models.WorkReport(**data)
            r.save()

            report_url = reverse('view_report', kwargs={'report_id': r.id})
            return shortcuts.redirect(report_url)

        else:
            context.update({"form": form})
            return shortcuts.render_to_response(
                'task/submit_report.html', RequestContext(request, context))

    else:
        form = taskapp_forms.WorkReportForm()
        context.update({"form": form})
        return shortcuts.render_to_response('task/submit_report.html',
                                            RequestContext(request, context))
예제 #4
0
파일: task.py 프로젝트: FOSSEE/pytask
def submit_report(request, task_id):
    """ Check if the work is in WR state and the user is in assigned_users.
    """
    task_url = reverse('view_task', kwargs={'task_id': task_id})
    task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id)

    user = request.user
    old_reports = task.reports.all()

    if not task.status == taskapp_models.TASK_STATUS_CHOICES[3][0]:
        raise http.Http404

    can_upload = True if user in task.selected_users.all() else False

    context = {
        'user': user,
        'task': task,
        'can_upload': can_upload,
    }

    context.update(csrf(request))

    if request.method == "POST":
        if not can_upload:
            return show_msg(user, "You are not authorised to upload data to this task", task_url, "view the task")

        form = taskapp_forms.WorkReportForm(request.POST, request.FILES)

        if form.is_valid():
            data = form.cleaned_data.copy()
            data.update({"task":task,
                         "revision": old_reports.count(),
                         "submitted_by": user,
                         "submitted_at": datetime.now(),
                        })
            r = taskapp_models.WorkReport(**data)
            r.save()

            report_url = reverse('view_report', kwargs={'report_id': r.id})
            return shortcuts.redirect(report_url)

        else:
            context.update({"form":form})
            return shortcuts.render_to_response(
              'task/submit_report.html', RequestContext(request, context))

    else:
        form = taskapp_forms.WorkReportForm()
        context.update({"form":form})
        return shortcuts.render_to_response(
          'task/submit_report.html', RequestContext(request, context))
예제 #5
0
def create_task(request):

    user = request.user
    profile = user.get_profile()

    context = {
        "user": user,
        "profile": profile,
    }

    context.update(csrf(request))

    can_create_task = False if (
        profile.role == profile_models.ROLES_CHOICES[3][0]) else True
    if can_create_task:
        if request.method == "POST":
            form = taskapp_forms.CreateTaskForm(request.POST)
            if form.is_valid():
                data = form.cleaned_data.copy()
                data.update({
                    "created_by": user,
                    "creation_datetime": datetime.now(),
                })

                task = taskapp_models.Task(**data)
                task.save()

                task_url = reverse('view_task', kwargs={'task_id': task.id})
                return shortcuts.redirect(task_url)
            else:
                context.update({'form': form})
                return shortcuts.render_to_response(
                    'task/edit.html', RequestContext(request, context))
        else:
            form = taskapp_forms.CreateTaskForm()
            context.update({'form': form})
            return shortcuts.render_to_response(
                'task/edit.html', RequestContext(request, context))
    else:
        return show_msg(user, 'You are not authorised to create a task.')
예제 #6
0
파일: task.py 프로젝트: FOSSEE/pytask
def view_task(request, task_id, **kwargs):
    """View to get the requested.

    Checks for authentication and add a comment if it is a post request.
    """

    context = {}

    if 'context' in kwargs:
        context.update(kwargs['context'])

    task_url = kwargs.get(
      'task_url', reverse('view_task', kwargs={'task_id': task_id}))

    task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id)

    user = request.user

    if not user.is_authenticated():
        return shortcuts.render_to_response(
          'task/view.html', RequestContext(request, {'task': task}))

    profile = user.get_profile()

    context.update({
      'user': user,
      'profile': profile,
      'task': task,
      })

    context.update(csrf(request))

    if task.status == taskapp_models.TASK_STATUS_CHOICES[5][0]:
        return show_msg(user, 'This task no longer exists',
                        reverse('browse_tasks'), 'browse the tasks')

    if ((task.status != taskapp_models.TASK_STATUS_CHOICES[0][0] )
      or profile.role != profile_models.ROLES_CHOICES[3][0]):
        task_viewable = True
    else:
        task_viewable = False

    if not task_viewable:
        return show_msg(user, 'You are not authorised to view this task',
                        reverse('browse_tasks'), 'browse the tasks')

    reviewers = task.reviewers.all()
    is_reviewer = True if user in task.reviewers.all() else False
    comments = task.comments.filter(
      is_deleted=False).order_by('comment_datetime')
    reports = task.reports.order_by('submitted_at')

    context.update({'is_reviewer':is_reviewer,
                    'comments':comments,
                    'reviewers':reviewers,
                    'reports': reports,
                   })

    selected_users = task.selected_users.all()

    user_role = user.get_profile().role
    is_creator = True if user == task.created_by else False

    context['selected_users'] = selected_users

    context['is_selected'] = True if user in selected_users else False

    if (task.status == taskapp_models.TASK_STATUS_CHOICES[0][0] and
      profile.role in [profile_models.ROLES_CHOICES[0][0],
      profile_models.ROLES_CHOICES[1][0]]):
        context['can_approve'] = True
    else:
        context['can_approve'] = False

    if ((is_creator or user_role != profile_models.ROLES_CHOICES[3][0])
      and task.status in [taskapp_models.TASK_STATUS_CHOICES[0][0],
      taskapp_models.TASK_STATUS_CHOICES[1][0]]):
        context['can_edit'] = True
    else:
        context['can_edit'] = False

    if (task.status not in [taskapp_models.TASK_STATUS_CHOICES[0][0],
      taskapp_models.TASK_STATUS_CHOICES[4][0],
      taskapp_models.TASK_STATUS_CHOICES[6][0]] and is_reviewer):
        context['can_close'] = True
    else:
        context['can_close'] = False

    if task.status == taskapp_models.TASK_STATUS_CHOICES[0][0] and is_creator:
        context['can_delete'] = True
    else:
        context['can_delete'] = False

    if (task.status in [taskapp_models.TASK_STATUS_CHOICES[1][0],
      taskapp_models.TASK_STATUS_CHOICES[3][0]] and is_reviewer):
        context['can_assign_pynts'] = True
    else:
        context['can_assign_pynts'] = False

    if (task.status in [taskapp_models.TASK_STATUS_CHOICES[1][0],
      taskapp_models.TASK_STATUS_CHOICES[3][0]]):
        context['task_claimable'] = True
    else:
        context['task_claimable'] = False

    if (task.status != taskapp_models.TASK_STATUS_CHOICES[0][0] or\
      profile.role != profile_models.ROLES_CHOICES[3][0]):
        context['can_comment'] = True
    else:
        context['can_comment'] = False

    if (profile.role in [profile_models.ROLES_CHOICES[0][0],
      profile_models.ROLES_CHOICES[1][0]]):
        context['can_mod_reviewers'] = True
    else:
        context['can_mod_reviewers'] = False

    if (profile.role == profile_models.ROLES_CHOICES[3][0] and
      profile.user in task.selected_users.all()):
        context['can_report'] = True
    else:
        context['can_report'] = False

    if request.method == 'POST':
        if not request.FILES:
            comment_form = taskapp_forms.TaskCommentForm(request.POST)
            if comment_form.is_valid():
                data = comment_form.cleaned_data['data']
                new_comment = taskapp_forms.TaskComment(
                  task=task, data=data, commented_by=user,
                  comment_datetime=datetime.now())
                new_comment.save()
                return shortcuts.redirect(task_url)

        if context['can_report']:
          work_report_form = taskapp_forms.WorkReportForm(request.POST,
                                                          request.FILES)
          if work_report_form.is_valid():
              data = work_report_form.cleaned_data['data']
              summary = work_report_form.cleaned_data['summary']
              new_work_report = taskapp_models.WorkReport(
                task=task, data=data, submitted_by=user,
                summary=summary, attachment=request.FILES['attachment'])
              new_work_report.save()
              return shortcuts.redirect(task_url)

        if not comment_form.is_valid() or (
          context['can_report'] and not work_report_form.is_valid()):
            context['comment_form'] = comment_form
            context['work_report_form'] = work_report_form
            return shortcuts.render_to_response(
              'task/view.html', RequestContext(request, context))
    else:
        context['comment_form'] = taskapp_forms.TaskCommentForm()
        if context['can_report']:
            context['work_report_form'] = taskapp_forms.WorkReportForm
        return shortcuts.render_to_response(
          'task/view.html', RequestContext(request, context))
예제 #7
0
def view_task(request, task_id, **kwargs):
    """View to get the requested.

    Checks for authentication and add a comment if it is a post request.
    """

    context = {}

    if "context" in kwargs:
        context.update(kwargs["context"])

    task_url = kwargs.get("task_url", reverse("view_task", kwargs={"task_id": task_id}))

    task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id)

    user = request.user

    if not user.is_authenticated():
        return shortcuts.render_to_response("task/view.html", {"task": task})

    profile = user.get_profile()

    context.update({"user": user, "profile": profile, "task": task})

    context.update(csrf(request))

    if task.status == taskapp_models.TASK_STATUS_CHOICES[5][0]:
        return show_msg(user, "This task no longer exists", reverse("browse_tasks"), "browse the tasks")

    if (task.status != taskapp_models.TASK_STATUS_CHOICES[0][0]) or profile.role != profile_models.ROLES_CHOICES[3][0]:
        task_viewable = True
    else:
        task_viewable = False

    if not task_viewable:
        return show_msg(user, "You are not authorised to view this task", reverse("browse_tasks"), "browse the tasks")

    reviewers = task.reviewers.all()
    is_reviewer = True if user in task.reviewers.all() else False
    comments = task.comments.filter(is_deleted=False).order_by("comment_datetime")

    context.update({"is_reviewer": is_reviewer, "comments": comments, "reviewers": reviewers})

    selected_users = task.selected_users.all()

    user_role = user.get_profile().role
    is_creator = True if user == task.created_by else False

    context["selected_users"] = selected_users

    context["is_selected"] = True if user in selected_users else False

    if task.status == taskapp_models.TASK_STATUS_CHOICES[0][0] and profile.role in [
        profile_models.ROLES_CHOICES[0][0],
        profile_models.ROLES_CHOICES[1][0],
    ]:
        context["can_approve"] = True
    else:
        context["can_approve"] = False

    if (is_creator or user_role != profile_models.ROLES_CHOICES[3][0]) and task.status in [
        taskapp_models.TASK_STATUS_CHOICES[0][0],
        taskapp_models.TASK_STATUS_CHOICES[1][0],
    ]:
        context["can_edit"] = True
    else:
        context["can_edit"] = False

    if (
        task.status
        not in [
            taskapp_models.TASK_STATUS_CHOICES[0][0],
            taskapp_models.TASK_STATUS_CHOICES[4][0],
            taskapp_models.TASK_STATUS_CHOICES[6][0],
        ]
        and is_reviewer
    ):
        context["can_close"] = True
    else:
        context["can_close"] = False

    if task.status == taskapp_models.TASK_STATUS_CHOICES[0][0] and is_creator:
        context["can_delete"] = True
    else:
        context["can_delete"] = False

    if (
        task.status in [taskapp_models.TASK_STATUS_CHOICES[1][0], taskapp_models.TASK_STATUS_CHOICES[3][0]]
        and is_reviewer
    ):
        context["can_assign_pynts"] = True
    else:
        context["can_assign_pynts"] = False

    if task.status in [taskapp_models.TASK_STATUS_CHOICES[1][0], taskapp_models.TASK_STATUS_CHOICES[3][0]]:
        context["task_claimable"] = True
    else:
        context["task_claimable"] = False

    if task.status != taskapp_models.TASK_STATUS_CHOICES[0][0] or profile.role != profile_models.ROLES_CHOICES[3][0]:
        context["can_comment"] = True
    else:
        context["can_comment"] = False

    if profile.role in [profile_models.ROLES_CHOICES[0][0], profile_models.ROLES_CHOICES[1][0]]:
        context["can_mod_reviewers"] = True
    else:
        context["can_mod_reviewers"] = False

    if request.method == "POST":
        form = taskapp_forms.TaskCommentForm(request.POST)
        if form.is_valid():
            data = form.cleaned_data["data"]
            new_comment = taskapp_forms.TaskComment(
                task=task, data=data, commented_by=user, comment_datetime=datetime.now()
            )
            new_comment.save()
            return shortcuts.redirect(task_url)
        else:
            context["form"] = form
            return shortcuts.render_to_response("task/view.html", RequestContext(request, context))
    else:
        form = taskapp_forms.TaskCommentForm()
        context["form"] = form
        return shortcuts.render_to_response("task/view.html", RequestContext(request, context))
예제 #8
0
def select_user(request, task_id):
    """ first get the status of the task and then select one of claimed users
    generate list of claimed users by passing it as an argument to a function.
    """

    task_url = reverse('view_task', kwargs={'task_id': task_id})

    user = request.user
    profile = user.get_profile()
    task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id)

    context = {
        'user': user,
        'profile': profile,
        'task': task,
    }

    context.update(csrf(request))

    reviewers = task.reviewers.all()
    claimed_users = task.claimed_users.all()

    is_reviewer = True if user in reviewers else False
    task_claimed = True if claimed_users else False

    is_creator = True if user == task.created_by else False

    if (is_creator or is_reviewer or profile.role in [
            profile_models.ROLES_CHOICES[0][0],
            profile_models.ROLES_CHOICES[1][0]
    ] and task.status in [
            taskapp_models.TASK_STATUS_CHOICES[1][0],
            taskapp_models.TASK_STATUS_CHOICES[3][0]
    ]):

        if task_claimed:

            user_list = ((user.id, user.username) for user in claimed_users)

            if request.method == "POST":
                form = taskapp_forms.ChoiceForm(user_list, request.POST)
                if form.is_valid():
                    uid = form.cleaned_data['choice']
                    selected_user = User.objects.get(id=uid)

                    task.selected_users.add(selected_user)
                    task.claimed_users.remove(selected_user)
                    task.status = taskapp_models.TASK_STATUS_CHOICES[3][0]
                    task.save()

                    return shortcuts.redirect(task_url)
                else:
                    context.update({"form": form})
                    return shortcuts.render_to_response(
                        'task/select_user.html',
                        RequestContext(request, context))
            else:
                form = taskapp_forms.ChoiceForm(user_list)
                context.update({"form": form})
                return shortcuts.render_to_response(
                    'task/select_user.html', RequestContext(request, context))
        else:
            return show_msg(user, 'There are no pending claims for this task',
                            task_url, 'view the task')
    else:
        raise exceptions.UnauthorizedAccess(NO_SELECT_USER)
예제 #9
0
def view_task(request, task_id, **kwargs):
    """View to get the requested.

    Checks for authentication and add a comment if it is a post request.
    """

    context = {}

    if 'context' in kwargs:
        context.update(kwargs['context'])

    task_url = kwargs.get('task_url',
                          reverse('view_task', kwargs={'task_id': task_id}))

    task = shortcuts.get_object_or_404(taskapp_models.Task, pk=task_id)

    user = request.user

    if not user.is_authenticated():
        return shortcuts.render_to_response(
            'task/view.html', RequestContext(request, {'task': task}))

    profile = user.get_profile()

    context.update({
        'user': user,
        'profile': profile,
        'task': task,
    })

    context.update(csrf(request))

    if task.status == taskapp_models.TASK_STATUS_CHOICES[5][0]:
        return show_msg(user, 'This task no longer exists',
                        reverse('browse_tasks'), 'browse the tasks')

    if ((task.status != taskapp_models.TASK_STATUS_CHOICES[0][0])
            or profile.role != profile_models.ROLES_CHOICES[3][0]):
        task_viewable = True
    else:
        task_viewable = False

    if not task_viewable:
        return show_msg(user, 'You are not authorised to view this task',
                        reverse('browse_tasks'), 'browse the tasks')

    reviewers = task.reviewers.all()
    is_reviewer = True if user in task.reviewers.all() else False
    comments = task.comments.filter(
        is_deleted=False).order_by('comment_datetime')
    reports = task.reports.order_by('submitted_at')

    context.update({
        'is_reviewer': is_reviewer,
        'comments': comments,
        'reviewers': reviewers,
        'reports': reports,
    })

    selected_users = task.selected_users.all()

    user_role = user.get_profile().role
    is_creator = True if user == task.created_by else False

    context['selected_users'] = selected_users

    context['is_selected'] = True if user in selected_users else False

    if (task.status == taskapp_models.TASK_STATUS_CHOICES[0][0]
            and profile.role in [
                profile_models.ROLES_CHOICES[0][0],
                profile_models.ROLES_CHOICES[1][0]
            ]):
        context['can_approve'] = True
    else:
        context['can_approve'] = False

    if ((is_creator or user_role != profile_models.ROLES_CHOICES[3][0])
            and task.status in [
                taskapp_models.TASK_STATUS_CHOICES[0][0],
                taskapp_models.TASK_STATUS_CHOICES[1][0]
            ]):
        context['can_edit'] = True
    else:
        context['can_edit'] = False

    if (task.status not in [
            taskapp_models.TASK_STATUS_CHOICES[0][0],
            taskapp_models.TASK_STATUS_CHOICES[4][0],
            taskapp_models.TASK_STATUS_CHOICES[6][0]
    ] and is_reviewer):
        context['can_close'] = True
    else:
        context['can_close'] = False

    if task.status == taskapp_models.TASK_STATUS_CHOICES[0][0] and is_creator:
        context['can_delete'] = True
    else:
        context['can_delete'] = False

    if (task.status in [
            taskapp_models.TASK_STATUS_CHOICES[1][0],
            taskapp_models.TASK_STATUS_CHOICES[3][0]
    ] and is_reviewer):
        context['can_assign_pynts'] = True
    else:
        context['can_assign_pynts'] = False

    if (task.status in [
            taskapp_models.TASK_STATUS_CHOICES[1][0],
            taskapp_models.TASK_STATUS_CHOICES[3][0]
    ]):
        context['task_claimable'] = True
    else:
        context['task_claimable'] = False

    if (task.status != taskapp_models.TASK_STATUS_CHOICES[0][0] or\
      profile.role != profile_models.ROLES_CHOICES[3][0]):
        context['can_comment'] = True
    else:
        context['can_comment'] = False

    if (profile.role in [
            profile_models.ROLES_CHOICES[0][0],
            profile_models.ROLES_CHOICES[1][0]
    ]):
        context['can_mod_reviewers'] = True
    else:
        context['can_mod_reviewers'] = False

    if (profile.role == profile_models.ROLES_CHOICES[3][0]
            and profile.user in task.selected_users.all()):
        context['can_report'] = True
    else:
        context['can_report'] = False

    if request.method == 'POST':
        if not request.FILES:
            comment_form = taskapp_forms.TaskCommentForm(request.POST)
            if comment_form.is_valid():
                data = comment_form.cleaned_data['data']
                new_comment = taskapp_forms.TaskComment(
                    task=task,
                    data=data,
                    commented_by=user,
                    comment_datetime=datetime.now())
                new_comment.save()
                return shortcuts.redirect(task_url)

        if context['can_report']:
            work_report_form = taskapp_forms.WorkReportForm(
                request.POST, request.FILES)
            if work_report_form.is_valid():
                data = work_report_form.cleaned_data['data']
                summary = work_report_form.cleaned_data['summary']
                new_work_report = taskapp_models.WorkReport(
                    task=task,
                    data=data,
                    submitted_by=user,
                    summary=summary,
                    attachment=request.FILES['attachment'])
                new_work_report.save()
                return shortcuts.redirect(task_url)

        if not comment_form.is_valid() or (context['can_report'] and
                                           not work_report_form.is_valid()):
            context['comment_form'] = comment_form
            context['work_report_form'] = work_report_form
            return shortcuts.render_to_response(
                'task/view.html', RequestContext(request, context))
    else:
        context['comment_form'] = taskapp_forms.TaskCommentForm()
        if context['can_report']:
            context['work_report_form'] = taskapp_forms.WorkReportForm
        return shortcuts.render_to_response('task/view.html',
                                            RequestContext(request, context))