def serve_base_file(request): """ Выполняет download файла, имя (URL) которого передано через параметр 'fname' запросом GET Файл загружается, если: 1. или текущий юзер является манагером либо заявителем либо исполнителем по соотв. таскам """ # Выбираем имя файла fname = "" if request.method == "GET": fname = request.GET.get("fname") else: return HttpResponse(u"Неверно передано имя файла.") if fname == "": return HttpResponse(u"Неверно передано имя файла.") docs = m.Doc.objects.filter(file=fname) if not docs: return HttpResponse(u"Указанный файл не существует.") # Проверка уникальности документа if len(docs) > 1: return HttpResponse(u"Переданному имени соответствует более одного файла.\n Загрузка невозможна.") # выбираем документ в виде документа а не в виде списка doc = m.Doc.objects.get(file=fname) # выбираем связанные задачи if not get_filtered_tasklist(request.user, doc): return HttpResponse(u"Недостаточно прав для открытия этого документа.") # определяем строгий mime-type файла import mimetypes ctype = mimetypes.guess_type(fname) f = open(settings.MEDIA_ROOT + fname, "rb") data = FileWrapper(f) response = HttpResponse(data, content_type=ctype) import urllib response["Content-Disposition"] = "attachment; filename=" + urllib.quote(fname.encode("utf-8")) return response
def common_tasklist(request, page_number=None, p_qs=None): """ Список задач для всех пользователей p_qs - query set, передаваемый из обработчика формы фильтра """ # проверяем, передан ли требуемый статус status = None if p_qs: status = "filter" if request.method == "GET" and not status: if request.GET.get("status"): status = request.GET.get("status") # ищем статус и page_number в куки if not status: if request.COOKIES.has_key("status"): status = request.COOKIES["status"] if not p_qs and status == "filter": status = "" c = {} all_cols = False template_file = "common_tasklist.html" # Получение номера страницы# if page_number is None: if status and status != "filter": return redirect("/tasklist/1/?status=" + status) # return redirect('/tasklist/1/') p = 1 else: try: p = int(page_number) except ValueError: p = 1 # формирование QuerySet и контекста c.update(all_cols=True) qs = [] status_name = u" - ВСЕ" if status == "filter": ls = list(set(p_qs).intersection(set(get_filtered_tasklist(request.user)))) qs = m.Task.objects.filter(pk__in=[li.id for li in ls]) # lambda? status_name = u" - Фильтр задан пользователем" elif status == "new": qs = get_filtered_tasklist(request.user).filter(responsible__isnull=True).exclude(closing_type="P") status_name = u" - НОВЫЕ" elif status == "not_open": # return HttpResponse('>'+status+'<') qs = ( get_filtered_tasklist(request.user) .filter(date_close__isnull=True, ready_date__isnull=True, start_date__isnull=True) .exclude(closing_type="P") ) status_name = u" - ВСЕ ЕЩЁ НЕ В ОБРАБОТКЕ" elif status == "not_ready": # return HttpResponse('>'+status+'<') qs = ( get_filtered_tasklist(request.user) .filter(date_close__isnull=True, ready_date__isnull=True) .exclude(closing_type="P") ) status_name = u" - ВСЕ ЕЩЁ НЕ ГОТОВЫЕ" elif status == "not_closed": # return HttpResponse('>'+status+'<') qs = get_filtered_tasklist(request.user).filter(date_close__isnull=True).exclude(closing_type="P") status_name = u" - ВСЕ ЕЩЁ НЕ ЗАКРЫТЫЕ" elif status == "closed": qs = ( get_filtered_tasklist(request.user) .filter(responsible__isnull=False, date_close__isnull=False) .exclude(closing_type="P") ) status_name = u" - ЗАКРЫТЫЕ" elif status == "ready": qs = ( get_filtered_tasklist(request.user) .filter(responsible__isnull=False, date_close__isnull=True, ready_date__isnull=False) .exclude(closing_type="P") ) status_name = u" - ГОТОВЫЕ" elif status == "open": qs = ( get_filtered_tasklist(request.user) .filter( responsible__isnull=False, date_close__isnull=True, ready_date__isnull=True, start_date__isnull=False ) .exclude(closing_type="P") ) status_name = u" - В ОБРАБОТКЕ" elif status == "set": qs = ( get_filtered_tasklist(request.user) .filter( responsible__isnull=False, date_close__isnull=True, ready_date__isnull=True, start_date__isnull=True, appoint_date__isnull=False, ) .exclude(closing_type="P") ) status_name = u" - НАЗАЧЕННЫЕ" elif status == "pending": qs = get_filtered_tasklist(request.user).filter(closing_type="P") status_name = u" - ОТЛОЖЕННЫЕ" else: qs = get_filtered_tasklist(request.user) cd = CurDate() # ; fi=FilterIndicator() c.update(curdate=cd, status_name=status_name, status=status) response = HttpResponse( object_list(request, qs, paginate_by=10, page=p, template_name=template_file, extra_context=c) ) response.set_cookie("status", value=status) return response