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)
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
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)
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)