Beispiel #1
0
def main(request):
    form = ReportForm(request.GET or None)
    tickets = []
    if form.is_valid():
        milestone = form.cleaned_data.get('milestone')
        number = form.cleaned_data.get('number')
        keyword = form.cleaned_data.get('keyword')
        dt_from = form.cleaned_data.get('dt_from')
        dt_to = form.cleaned_data.get('dt_to')
        tickets = Ticket.objects.all().order_by('-time')
        if milestone:
            tickets = Ticket.objects.filter(milestone=milestone)
        if keyword:
            tickets = tickets.filter(keywords__icontains=keyword)
        if dt_from:
            tickets = tickets.filter(time__gte=timestamp_from_date(dt_from))
        if dt_to:
            tickets = tickets.filter(time__lte=timestamp_from_date(dt_to))
        if number:
            tickets = Ticket.objects.filter(id=number)
    else:
        pass
    c = {
        'milestones': Milestone.objects.all(),
        'form': form,
        'tickets': tickets
    }
    return render(request, 'index.html', c)
Beispiel #2
0
def main(request):
    if not request.GET:
        current_milestone = models.ProjectMilestone.objects.filter(is_current=True).first()
        if current_milestone:
            return redirect(
                "%s?%s"
                % (
                    reverse("djtrac.views.main.main"),
                    urllib.urlencode({"milestone": current_milestone.milestone.encode("utf-8")}),
                )
            )
    form = forms.ReportForm(request.GET or None, user=request.user)
    tickets = []
    group_by_components = None
    group_by_milestone = None
    show_description = None
    grouped_tickets = OrderedDict()
    if form.is_valid():
        milestone = form.cleaned_data.get("milestone")
        component = form.cleaned_data.get("component")
        number = form.cleaned_data.get("number")
        keyword = form.cleaned_data.get("keyword")
        dt_from = form.cleaned_data.get("dt_from")
        dt_to = form.cleaned_data.get("dt_to")
        group_by_components = form.cleaned_data.get("group_by_components")
        group_by_milestone = form.cleaned_data.get("group_by_milestone")
        show_description = form.cleaned_data.get("show_description")

        tickets = (
            models.Ticket.objects.get_allowed(request.user)
            .extra(
                select={
                    "is_closed": "status='closed'",
                    "priority_index": "case "
                    "priority when 'низкий' then 1 "
                    "when 'нормальный' then 2 "
                    "when 'высокий' then 3 "
                    "when 'блокирующий' then 4 "
                    "end",
                }
            )
            .order_by("is_closed", "-priority_index")
        )
        if milestone:
            tickets = tickets.filter(milestone=milestone)
        if component:
            tickets = tickets.filter(component=component)
        if keyword:
            tickets = tickets.filter(keywords__icontains=keyword)
        if dt_from:
            tickets = tickets.filter(time__gte=timestamp_from_date(dt_from))
        if dt_to:
            tickets = tickets.filter(time__lte=timestamp_from_date(dt_to))
        if number:
            tickets = tickets.filter(id=number)
        sort_key = request.GET.get("sort", None)
        if sort_key:
            tickets = tickets.order_by(sort_key)

        # Логика группировок
        components = set(tickets.values_list("component", flat=True).distinct()) - set((""))
        milestones = set(tickets.values_list("milestone", flat=True).distinct()) - set((""))
        if group_by_components and group_by_milestone:
            for component in components:
                grouped_tickets[component] = OrderedDict()
                for milestone in milestones:
                    if tickets.filter(component=component, milestone=milestone).exists():
                        grouped_tickets[component][milestone] = tickets.filter(component=component, milestone=milestone)

        elif group_by_components:
            for component in components:
                grouped_tickets[component] = tickets.filter(component=component)

        elif group_by_milestone:
            for milestone in milestones:
                grouped_tickets[milestone] = tickets.filter(milestone=milestone)

    have_release_notes = (
        models.TicketReleaseNote.objects.filter(ticket__in=[t.id for t in tickets])
        .filter(Q(target_users__isnull=False) | Q(target_groups__isnull=False))
        .exclude(description="")
        .exists()
    )

    c = {
        "form": form,
        "tickets": tickets,
        "sort_params": prepare_sort_params(
            ("id", "summary", "time", "changetime", "milestone", "priority_index", "owner", "status", "keywords"),
            request,
        ),
        "page": get_page(request, tickets, 100) if not group_by_components and not group_by_milestone else [],
        "group_by_components": group_by_components,
        "group_by_milestone": group_by_milestone,
        "grouped_tickets": grouped_tickets,
        "show_description": show_description,
        "HTTP_PATH_TO_TRAC": settings.HTTP_PATH_TO_TRAC,
        "have_release_notes": have_release_notes,
    }

    return render(request, "djtrac/index.html", c)