Пример #1
0
def body(request, pk):
    body = get_object_or_404(Body, id=pk)
    context = {
        'body': body,
        'map': build_map_object(body),
    }
    return render(request, "mainapp/body.html", context)
def meeting(request, pk):
    selected_meeting = get_object_or_404(Meeting, id=pk)

    if selected_meeting.location and selected_meeting.location.geometry:
        location_geom = selected_meeting.location.geometry
    else:
        location_geom = None

    agenda_items = selected_meeting.agendaitem_set.prefetch_related(
        "consultation__paper__main_file").all()

    # The persons can be listed both in the organization and in the meeting,
    # but we're only interested in the ones only in the meeting
    meeting_persons = set(
        Person.objects.filter(
            membership__organization__meeting=selected_meeting).all())
    extra_persons = set(selected_meeting.persons.all()) - meeting_persons

    if selected_meeting.end:
        end = get_current_timezone().normalize(selected_meeting.end)
    else:
        end = None

    context = {
        "meeting": selected_meeting,
        # Workaround missing timezone support in sqlite and mariadb
        "start": get_current_timezone().normalize(selected_meeting.start),
        "end": end,
        "map": build_map_object(),
        "location_json": json.dumps(location_geom),
        "agenda_items": agenda_items,
        "extra_persons": extra_persons,
    }
    # Try to find a previous or following meetings using the organization
    # Excludes meetings with more than one organization
    if selected_meeting.organizations.count() == 1:
        organization = selected_meeting.organizations.first()
        query = (Meeting.objects.annotate(count=Count("organizations")).filter(
            count=1).filter(organizations=organization).order_by("start"))

        context["previous"] = query.filter(
            start__lt=selected_meeting.start).last()
        context["following"] = query.filter(
            start__gt=selected_meeting.start).first()

    if selected_meeting.location:
        for_maps = selected_meeting.location.for_maps()
        context["google_maps_url"] = "http://maps.google.de/maps?" + urlencode(
            {"q": for_maps})
        context[
            "osm_url"] = "https://www.openstreetmap.org/search?" + urlencode(
                {"query": for_maps})

    return render(request, "mainapp/meeting.html", context)
def index(request):
    main_body = Body.objects.filter(pk=settings.SITE_DEFAULT_BODY).first()

    if not main_body:
        if Body.objects.count() == 0:
            return render(request, "mainapp/installation_successful.html")
        else:
            context = {
                "site_default_body": settings.SITE_DEFAULT_BODY,
                "bodies": Body.objects.all(),
            }
            return render(request, "mainapp/default_body_missing.html",
                          context)

    latest_paper = Paper.objects.order_by("-sort_date")[:10]
    for paper in latest_paper:
        # The mixed results view needs those
        setattr(paper, "type", "paper")
        setattr(paper, "name_escaped", html.escape(paper.name))
        setattr(paper, "type_translated", DOCUMENT_TYPE_NAMES[paper.type])
        setattr(paper, "url", paper.get_default_link())

    geo_papers = (Paper.objects.order_by("-sort_date").prefetch_related(
        "main_file").prefetch_related("main_file__locations").prefetch_related(
            "files").prefetch_related("files__locations")[:50])

    stats = {
        "file": File.objects.count(),
        "meeting": Meeting.objects.count(),
        "organization": Organization.objects.count(),
        "paper": Paper.objects.count(),
        "person": Person.objects.count(),
    }

    map_object = build_map_object(main_body, geo_papers)

    context = {
        "map":
        map_object,
        "latest_paper":
        latest_paper,
        "next_meetings":
        Meeting.objects.filter(start__gt=timezone.now()).order_by("start")[:2],
        "stats":
        stats,
        "body_name":
        main_body.short_name,
    }

    if request.GET.get("version", "v2") == "v2":
        return render(request, "mainapp/index_v2/index.html", context)
    else:
        return render(request, "mainapp/index/index.html", context)
Пример #4
0
def _search_to_context(query, main_search: MainappSearch, executed, results, request):
    context = {
        "query": query,
        "results": results,
        "options": main_search.options,
        "document_types": DOCUMENT_TYPE_NAMES,
        "map": build_map_object(),
        "pagination_length": settings.SEARCH_PAGINATION_LENGTH,
        "total_hits": executed.hits.total,
        "subscribable": params_are_subscribable(main_search.params),
        "is_subscribed": is_subscribed_to_search(request.user, main_search.params)
    }

    return context
Пример #5
0
def meeting(request, pk):
    selected_meeting = get_object_or_404(Meeting, id=pk)

    # Format the time frame
    if selected_meeting.start:
        begin = selected_meeting.start.astimezone(tz.tzlocal()).strftime(settings.DATETIME_FORMAT)
    else:
        begin = None
    if selected_meeting.end:
        end = selected_meeting.end.astimezone(tz.tzlocal()).strftime(settings.DATETIME_FORMAT)
    else:
        end = None

    if not selected_meeting.end:
        time = begin
    elif selected_meeting.start.date() == selected_meeting.end.date():
        # We don't need to repeat the date
        time = "{} - {}".format(begin, selected_meeting.end.astimezone(tz.tzlocal()).strftime(settings.TIME_FORMAT))
    else:
        time = "{} - {}".format(begin, end)

    if selected_meeting.location and selected_meeting.location.geometry:
        location_geom = selected_meeting.location.geometry
    else:
        location_geom = None

    # Try to find a previous or following meetings using the organization
    # Excludes meetings with more than one organization
    context = {
        "meeting": selected_meeting,
        "time": time,
        'map': build_map_object(),
        "location_json": json.dumps(location_geom),
    }
    if selected_meeting.organizations.count() == 1:
        organization = selected_meeting.organizations.first()
        query = Meeting.objects \
            .annotate(count=Count("organizations")) \
            .filter(count=1) \
            .filter(organizations=organization) \
            .order_by("start")

        context["previous"] = query.filter(start__lt=selected_meeting.start).last()
        context["following"] = query.filter(start__gt=selected_meeting.start).first()

    return render(request, 'mainapp/meeting.html', context)
Пример #6
0
def index(request):
    main_body = Body.objects.get(id=settings.SITE_DEFAULT_BODY)

    latest_paper = Paper.objects.order_by("-sort_date", "-legal_date")[:10]
    for paper in latest_paper:
        # The mixed results view needs those
        setattr(paper, "type", "paper")
        setattr(paper, "name_escaped", html.escape(paper.name))
        setattr(paper, "type_translated", DOCUMENT_TYPE_NAMES[paper.type])
        setattr(paper, "url", paper.get_default_link())

    geo_papers = Paper \
                     .objects \
                     .order_by("-sort_date", "-legal_date") \
                     .prefetch_related('files') \
                     .prefetch_related('files__locations')[:50]

    stats = {
        "file": File.objects.count(),
        "meeting": Meeting.objects.count(),
        "organization": Organization.objects.count(),
        "paper": Paper.objects.count(),
        "person": Person.objects.count()
    }

    context = {
        'map': build_map_object(main_body, geo_papers),
        'latest_paper': latest_paper,
        'next_meetings': Meeting.objects.filter(start__gt=timezone.now()).order_by("start")[:2],
        'stats': stats,
        'body_name': main_body.name
    }

    if request.GET.get('version', 'v2') == 'v2':
        return render(request, 'mainapp/index_v2/index.html', context)
    else:
        return render(request, 'mainapp/index/index.html', context)
def meeting(request, pk):
    selected_meeting = get_object_or_404(Meeting, id=pk)

    start = selected_meeting.start
    if start:
        # FIXME: That ain't nice for localization
        start_date = start.astimezone(tz.tzlocal()).strftime("%d.%m.%Y")
        start_time = formats.time_format(start.astimezone(tz.tzlocal()))
    else:
        start_date = None
        start_time = None

    end = selected_meeting.end
    if end:
        end_date = end.astimezone(tz.tzlocal()).strftime("%d.%m.%Y")
        end_time = formats.time_format(end.astimezone(tz.tzlocal()))
    else:
        end_date = None
        end_time = None

    if start_date and start_date == end_date:
        # Don't repeat the date
        time = "{} {} - {}".format(start_date, start_time, end_time)
    elif end_date:
        time = "{} {} - {} {}".format(start_date, start_time, end_date,
                                      end_time)
    elif start_date:
        time = "{} {}".format(start_date, start_time)
    else:
        time = _("Unknown")

    if selected_meeting.location and selected_meeting.location.geometry:
        location_geom = selected_meeting.location.geometry
    else:
        location_geom = None

    agenda_items = selected_meeting.agendaitem_set.prefetch_related(
        "consultation__paper__main_file").all()

    # The persons can be listed both in the organization and in the meeting,
    # but we're only interested in the ones only in the meeting
    meeting_persons = set(
        Person.objects.filter(
            membership__organization__meeting=selected_meeting).all())
    extra_persons = set(selected_meeting.persons.all()) - meeting_persons

    # Try to find a previous or following meetings using the organization
    # Excludes meetings with more than one organization
    context = {
        "meeting": selected_meeting,
        "time": time,
        "map": build_map_object(),
        "location_json": json.dumps(location_geom),
        "agenda_items": agenda_items,
        "extra_persons": extra_persons,
    }
    if selected_meeting.organizations.count() == 1:
        organization = selected_meeting.organizations.first()
        query = (Meeting.objects.annotate(count=Count("organizations")).filter(
            count=1).filter(organizations=organization).order_by("start"))

        context["previous"] = query.filter(start__lt=start).last()
        context["following"] = query.filter(start__gt=start).first()

    if selected_meeting.location:
        for_maps = selected_meeting.location.for_maps()
        context["google_maps_url"] = "http://maps.google.de/maps?" + urlencode(
            {"q": for_maps})
        context[
            "osm_url"] = "https://www.openstreetmap.org/search?" + urlencode(
                {"query": for_maps})

    return render(request, "mainapp/meeting.html", context)