コード例 #1
0
def find_task(request):
    if request.method == "POST":
        if request.POST["id"]:
            try:
                task = get_task_filtered(request.user, request.POST["id"])
            except (InvalidTaskId):
                return HttpResponse(u"Неверный ID. Заявка № " + request.POST["id"] + u" не найдена.")
            except (TaskNotExists):
                return HttpResponse(u"Не существует Заявки. Заявка № " + request.POST["id"] + u" не найдена.")
            except TaskAccessDenied:
                return HttpResponse(u"Недостаточно прав для открытия заявки.")
            return redirect("/taskdetail/" + request.POST["id"] + "/")
        return HttpResponse(u"Номер заявки не задан.")
    return HttpResponse(u"Номер заявки не задан.")
コード例 #2
0
def edit_task(request, ptask_id=None, **kwargs):
    """
    редактирование задачи для манагера и Супера
    """
    is_manager = False
    is_customer = False
    role = None
    try:
        role = kwargs.pop("role")
        if role == "manager":
            is_manager = True
        if role == "customer":
            is_customer = True
    except:
        None
    # if ptask_id is None:
    # return HttpResponse(u'Не указан task_id.')
    task_id = ptask_id
    task = None
    if task_id:
        try:
            task = get_task_filtered(request.user, task_id)
        except (InvalidTaskId):
            return HttpResponse(u"Неверный ID. Заявка № " + request.POST["id"] + u" не найдена.")
        except (TaskNotExists):
            return HttpResponse(u"Не существует Заявки. Заявка № " + request.POST["id"] + u" не найдена.")
        except (TaskAccessDenied):
            return HttpResponse(u"Недостаточно прав для открытия заявки.")
    # прикреплённые файлы
    # files = task.base.all()
    c1 = {}
    c = {}
    c.update(csrf(request))
    if request.method == "GET":
        if task_id:
            if is_manager:
                form = TaskFormManager(
                    {
                        "id": task_id,
                        "name": task.name,
                        "descr": task.descr,
                        "date_open": task.date_open,
                        "start_date": task.start_date,
                        "module": task.module,
                        #'manager':task.manager,
                        "applicant": task.applicant,
                        "responsible": task.responsible,
                        "appoint_date": task.appoint_date,
                        "deadline": task.deadline,
                        "is_supervised": task.is_supervised,
                        "ready_date": task.ready_date,
                        "proj": task.proj,
                        "exe": task.exe,
                        "closing_type": task.closing_type,
                        "date_close": task.date_close,
                        "decision": task.decision,
                        "category": task.category.all(),
                        "urgent_important": task.urgent_important,
                    }
                )
            elif is_customer:
                form = TaskFormCustomer({"id": task_id, "name": task.name, "descr": task.descr})
            else:
                form = TaskForm(
                    {
                        "id": task_id,
                        "name": task.name,
                        "descr": task.descr,
                        "date_open": task.date_open,
                        "start_date": task.start_date,
                        "module": task.module,
                        "manager": task.manager,
                        "applicant": task.applicant,
                        "responsible": task.responsible,
                        "appoint_date": task.appoint_date,
                        "deadline": task.deadline,
                        "is_supervised": task.is_supervised,
                        "ready_date": task.ready_date,
                        "proj": task.proj,
                        "exe": task.exe,
                        "closing_type": task.closing_type,
                        "date_close": task.date_close,
                        "decision": task.decision,
                        "category": task.category.all(),
                        "urgent_important": task.urgent_important,
                    }
                )
        else:
            if is_manager:
                form = TaskFormManager({"date_open": date.today()})
            elif is_customer:
                form = TaskFormCustomer()
            else:
                form = TaskForm({"date_open": date.today()})
    else:  # POST
        if is_manager:
            form = TaskFormManager(request.POST)
        elif is_customer:
            form = TaskFormCustomer(request.POST)
        else:
            form = TaskForm(request.POST)
        if form.is_valid():
            task = form.save(commit=False)
            if not task.closing_type and task.date_close and task.responsible:
                task.closing_type = "C"
            if task_id:
                task.id = task_id
                if is_customer:
                    try:
                        task_temp = m.Task.objects.get(pk=task_id)
                        if not (task_temp.responsible or task_temp.manager):
                            if task_temp.applicant:
                                task.applicant = task_temp.applicant
                            else:
                                task.applicant = request.applicant
                        else:
                            return render_to_response(
                                "error.html",
                                {"curdate": CurDate(), "message": "Нельзя изменять заявку, принятую в работу."},
                                context_instance=RequestContext(request),
                            )

                    except:
                        task.applicant = request.user
                # task.applicant = form.cleaned_data['applicant']
            else:
                task.applicant = request.user
            if is_manager and not task.manager:
                task.manager = request.user
            if not task.date_open:
                task.date_open = date.today()
            if not task.appoint_date and task.responsible and task.manager:
                task.appoint_date = date.today()
            if not task.start_date and task.responsible:
                task.start_date = date.today()
            if task.closing_type:
                if not task.ready_date:
                    if task.date_close:
                        task.ready_date = task.date_close
                    else:
                        task.ready_date = date.today()
                if not task.date_close:
                    task.date_close = date.today()
            # 20.02.2013
            if task.name and not task.descr:
                task.descr = task.name

            # if not is_customer:
            #    task.deadline = form.cleaned_data['deadline']
            #    task.is_supervised = form.cleaned_data['is_supervised' ]
            #    task.urgent_important = form.cleaned_data['urgent_important']
            #    task.save()
            #    task.category = form.cleaned_data['category']
            #    task.save()
            # task.category.through.objects.all().delete()
            # for category in m.TaskCategory.objects.filter(pk__in=request.POST.getlist('category')):
            #  task.category.add(category)
            # else:
            #    task.urgent_important = 'D'
            #    task.save()
            task.save()
            if form.cleaned_data.has_key("category"):
                task.category = form.cleaned_data["category"]
                task.save()
            # переход на форму прикрепления файлов
            return redirect("/addfile/?" + "task_id=" + str(task.id))
        else:
            return HttpResponse("Форма не айс!")

    curdate = CurDate()
    return render_to_response(
        "edit_task.html",
        {"form": form, "curdate": CurDate(), "task_id": task_id, "curdate": curdate},
        context_instance=RequestContext(request, c),
    )
コード例 #3
0
def task_detail(request, ptask_id):
    """
    Детализация задачи
    """
    # проверка task_id
    if ptask_id is None:
        return HttpResponse(u"Не указан task_id.")
    task_id = ptask_id
    task = None
    try:
        task = get_task_filtered(request.user, task_id)
    except (InvalidTaskId):
        return HttpResponse(u"Неверный ID. Заявка № " + request.POST["id"] + u" не найдена.")
    except (TaskNotExists):
        return HttpResponse(u"Не существует Заявки. Заявка № " + request.POST["id"] + u" не найдена.")
    except (TaskAccessDenied):
        return HttpResponse(u"Недостаточно прав для открытия заявки.")
    qs = m.Task.objects.filter(pk=task_id)  # Task в форме списка
    files = task.base.all()
    # если требуется только view, то view и выдаём (как подтверждение
    # сохранения)
    st, status = task.get_status()
    if request.method == "GET":
        if request.GET.get("view") == "yes":
            if request.user.is_superuser or request.user.groups.filter(name="manager"):  # могут смотреть и менять всё

                return HttpResponse(
                    object_detail(
                        request,
                        queryset=qs,
                        object_id=task_id,
                        template_name="task_detail.html",
                        extra_context={
                            "curdate": CurDate(),
                            "header": "Задача " + str(task_id) + " сохранена.",
                            "appoint_date": task.appoint_date,
                            "files": files,
                            "show_all": "Y",
                            "full_edit": "Y",
                        },
                    )
                )

            elif request.user.groups.filter(name="developer"):  # может смотреть и менять только своё
                if (
                    task.responsible.id == User.objects.get(username=request.user.username).id
                    or task.applicant.id == User.objects.get(username=request.user.username).id
                ):

                    return HttpResponse(
                        object_detail(
                            request,
                            queryset=qs,
                            object_id=task_id,
                            template_name="task_detail.html",
                            extra_context={
                                "curdate": CurDate(),
                                "header": "Задача " + str(task_id),
                                "appoint_date": task.appoint_date,
                                "files": files,
                                "show_all": "Y",
                                "full_edit": "Y",
                            },
                        )
                    )
                else:
                    return render_to_response(
                        "error.html",
                        {"curdate": CurDate(), "message": "Недостаточно прав."},
                        context_instance=RequestContext(request),
                    )

            else:
                # Клиент и девелопер видят только свои задачки
                if task.applicant == request.user and task.responsible != request.user:
                    # Клиент не может редактировать, если у задачки есть манагер или ответственный (не он сам)
                    if task.manager or task.responsible:
                        return HttpResponse(
                            object_detail(
                                request,
                                queryset=qs,
                                object_id=task_id,
                                template_name="task_detail.html",
                                extra_context={
                                    "curdate": CurDate(),
                                    "header": "Задача " + str(task_id) + " сохранена.",
                                    "appoint_date": task.appoint_date,
                                    "files": files,
                                },
                            )
                        )
                    else:
                        return HttpResponse(
                            object_detail(
                                request,
                                queryset=qs,
                                object_id=task_id,
                                template_name="task_detail.html",
                                extra_context={
                                    "curdate": CurDate(),
                                    "header": "Задача " + str(task_id) + " сохранена.",
                                    "appoint_date": task.appoint_date,
                                    "files": files,
                                    "short_edit": "Y",
                                },
                            )
                        )

                elif task.responsible == request.user:
                    #  Девелопер может смотреть и редактировать только свои ещё не закрытые задачки
                    if task.status != "closed":
                        return HttpResponse(
                            object_detail(
                                request,
                                queryset=qs,
                                object_id=task_id,
                                template_name="task_detail.html",
                                extra_context={
                                    "curdate": CurDate(),
                                    "header": "Задача " + str(task_id) + " сохранена.",
                                    "appoint_date": task.appoint_date,
                                    "files": files,
                                    "short_edit": "Y",
                                },
                            )
                        )
                    else:  # закрытые - только просмотр
                        return HttpResponse(
                            object_detail(
                                request,
                                queryset=qs,
                                object_id=task_id,
                                template_name="task_detail.html",
                                extra_context={
                                    "curdate": CurDate(),
                                    "header": "Задача " + str(task_id) + " сохранена.",
                                    "appoint_date": task.appoint_date,
                                    "files": files,
                                },
                            )
                        )

    # POST - часть
    # если не назначен исполнитель
    if st == "new":
        # чужую - может посмотреть манагер через форму назначения
        if request.user.is_superuser:
            return edit_task(request, task_id)
        if request.user.groups.filter(name="manager"):
            # return redirect('/appointtask/' + str(task_id) + '/')
            return edit_task(request, task_id, role="manager")  # redirect('/edittask/' + str(task_id) + '/')
        # свою заявку можно редактировать свободно
        if task.applicant.id == User.objects.get(username=request.user.username).id:
            # return HttpResponse('Почему')
            return redirect("/addtask/" + task_id + "/")
    # если назначен исполнитель, обрабатываем в зависимости от статуса
    # заявки
    # если заявка открыта или ожидает закрытия
    if st in ("set", "open", "ready"):
        # если манагер - то можно отредактировать назначение
        if request.user.is_superuser:
            return edit_task(request, task_id)
        if request.user.groups.filter(name="manager"):
            return edit_task(
                request, task_id, role="manager"
            )  #            return redirect('/appointtask/' + str(task_id) +'/')
        # если открыта исполнителем - не манагером
        if task.responsible.id == User.objects.get(username=request.user.username).id:
            return redirect("/executetask/" + str(task_id) + "/")
        # Иначе - пользователь смотрит детали только своей!!! заявки
        if task.applicant.id == User.objects.get(username=request.user.username).id:
            return HttpResponse(
                object_detail(
                    request,
                    queryset=qs,
                    object_id=task_id,
                    template_name="task_detail.html",
                    extra_context={
                        "curdate": CurDate(),
                        "header": "Задача " + str(task_id),
                        "appoint_date": task.appoint_date,
                        "files": files,
                    },
                )
            )
    # если заявка закрыта
    if st in ("closed", "pending"):
        # манагер может переназначить и изменить статус
        if request.user.is_superuser:
            return edit_task(request, task_id)  #            return redirect('/appointtask/' + str(task_id) +'/')
        if request.user.groups.filter(name="manager"):
            return edit_task(
                request, task_id, role="manager"
            )  #            return redirect('/appointtask/' + str(task_id) +'/')
        # заявитель и исполнитель могут смотреть детали заявки
        # каждый своей заявки
        if (
            task.responsible.id == User.objects.get(username=request.user.username).id
            or task.applicant.id == User.objects.get(username=request.user.username).id
        ):
            return HttpResponse(
                object_detail(
                    request,
                    queryset=qs,
                    object_id=task_id,
                    template_name="task_detail.html",
                    extra_context={
                        "curdate": CurDate(),
                        "header": "Задача " + str(task_id),
                        "appoint_date": task.appoint_date,
                        "files": files,
                    },
                )
            )
コード例 #4
0
def add_task_form(request, ptask_id=None):
    """
    Вызов формы ввода заявки
    
    если задан ptask_id, то форма открывается на ред-е
    """
    # проверяем ptask_id
    if ptask_id:
        try:
            x = int(ptask_id)
        except ValueError:
            pass
    c = {}
    c.update(csrf(request))
    if request.method == "POST":
        if request.user.is_superuser:  # могут смотреть и менять всё
            return edit_task(request, ptask_id)
        if request.user.groups.filter(name="manager"):  # могут смотреть и менять всё
            # кроме ссылки на себя
            return edit_task(request, ptask_id, role="manager")
        # иначе - если не манагер
        if request.user.groups.filter(name="customer"):
            return edit_task(request, ptask_id, role="customer")
        form = AddTaskForm(request.POST)
        if form.is_valid():

            task = m.Task(id=form.cleaned_data["id"], name=form.cleaned_data["name"], descr=form.cleaned_data["desc"])
            task.applicant = User.objects.get(username=request.user.username)
            task.save()
            # переход на форму прикрепления файлов
            return redirect("/addfile/?" + "task_id=" + str(task.id))
    else:
        # если новая заявка иль возврат из формы прикрепления докуметов,
        # то открываем форму на редактирование
        if ptask_id:
            task = None
            try:
                task = get_task_filtered(request.user, ptask_id)
            except (InvalidTaskId):
                return HttpResponse(u"Неверный ID. Заявка № " + request.POST["id"] + u" не найдена.")
            except (TaskNotExists):
                return HttpResponse(u"Не существует Заявки. Заявка № " + request.POST["id"] + u" не найдена.")
            except TaskAccessDenied:
                return HttpResponse(u"Недостаточно прав для открытия заявки.")
            if request.user.is_superuser:
                return edit_task(request, ptask_id)
            if request.user.groups.filter(name="manager"):  # могут смотреть и менять всё
                return edit_task(request, ptask_id, role="manager")
            if request.user.groups.filter(name="customer"):
                return edit_task(request, ptask_id, role="customer")
            form = AddTaskForm({"id": task.id, "name": task.name, "descr": task.descr})
        else:
            if request.user.is_superuser:
                return edit_task(request, ptask_id)
            if request.user.groups.filter(name="manager"):  # могут смотреть и менять всё
                return edit_task(request, ptask_id, role="manager")
            if request.user.groups.filter(name="customer"):
                return edit_task(request, ptask_id, role="customer")
            form = AddTaskForm()
    return render_to_response(
        "addtask4user.html", {"form": form, "curdate": CurDate()}, context_instance=RequestContext(request, c)
    )