Example #1
0
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
Example #2
0
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