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"Номер заявки не задан.")
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), )
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, }, ) )
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) )