Gruppenübersicht erstellen
#118
Merged
christian.merten
merged 10 commits from MK/group_overview into main 11 months ago
@ -0,0 +1,69 @@
|
||||
from datetime import datetime
|
||||
import os
|
||||
import xlsxwriter
|
||||
from django.conf import settings
|
||||
from contrib.media import media_path
|
||||
from .models import WEEKDAYS
|
||||
|
||||
def generate_group_overview(all_groups, limit_to_public = True):
|
||||
"""
|
||||
Creates an Excel Sheet with an overview of all the groups, their dates, times, age range and
|
||||
number of members, etc.
|
||||
|
||||
arguments:
|
||||
limit_to_public (optional, default is True): If False, all groups are returned in the overview,
|
||||
including technical ones. If True, only groups with the flag "show_on_website" are returned.
|
||||
|
||||
"""
|
||||
today = f"{datetime.today():%d.%m.%Y}"
|
||||
filename = f"gruppenuebersicht_jdav_{settings.SEKTION}_{today}.xlsx"
|
||||
workbook = xlsxwriter.Workbook(media_path(filename))
|
||||
default = workbook.add_format({'text_wrap' : True, 'border': 1})
|
||||
bold = workbook.add_format({'bold': True, 'border': 1})
|
||||
title = workbook.add_format({'bold': True, 'font_size': 16, 'align': 'center'})
|
||||
right = workbook.add_format({'bold': True, 'align': 'right'})
|
||||
worksheet = workbook.add_worksheet()
|
||||
|
||||
worksheet.merge_range(0, 0, 0, 6, f"Gruppenübersicht JDAV {settings.SEKTION}", title)
|
||||
row = 1
|
||||
worksheet.write(row, 0, "Gruppe", bold)
|
||||
worksheet.write(row, 1, "Wochentag", bold)
|
||||
worksheet.write(row, 2, "Uhrzeit", bold)
|
||||
worksheet.write(row, 3, "Altersgruppe", bold)
|
||||
worksheet.write(row, 4, "TN", bold)
|
||||
worksheet.write(row, 5, "JL", bold)
|
||||
worksheet.write(row, 6, "Jugendleiter*innen", bold)
|
||||
|
||||
for group in all_groups:
|
||||
# choose if only official youth groups on the website are shown
|
||||
if limit_to_public and not group.show_website:
|
||||
continue
|
||||
|
||||
row = row + 1
|
||||
wd = f"{WEEKDAYS[group.weekday][1]}" if group.weekday else 'kein Wochentag'
|
||||
times = f"{group.start_time:%H:%M} - {group.end_time:%H:%M}" if group.start_time and group.end_time else 'keine Zeiten'
|
||||
yl_count = len([member for member in group.member_set.all() if member in group.leiters.all()])
|
||||
tn_count = group.member_set.count() - yl_count
|
||||
members = f"JG {group.year_from} - {group.year_to}"
|
||||
leaders = f"{', '.join([yl.name for yl in group.leiters.all()])}"
|
||||
|
||||
worksheet.write(row, 0, group.name, default)
|
||||
worksheet.write(row, 1, wd, default)
|
||||
worksheet.write(row, 2, times, default)
|
||||
worksheet.write(row, 3, members, default)
|
||||
worksheet.write(row, 4, tn_count, default)
|
||||
worksheet.write(row, 5, yl_count, default)
|
||||
worksheet.write(row, 6, leaders, default)
|
||||
|
||||
worksheet.write(row+2, 6, f"Stand: {today}", right)
|
||||
# set column width
|
||||
worksheet.set_column_pixels(0, 0, 100)
|
||||
worksheet.set_column_pixels(1, 1, 80)
|
||||
worksheet.set_column_pixels(2, 2, 90)
|
||||
worksheet.set_column_pixels(3, 3, 120)
|
||||
worksheet.set_column_pixels(4, 4, 20)
|
||||
worksheet.set_column_pixels(5, 5, 20)
|
||||
worksheet.set_column_pixels(6, 6, 140)
|
||||
workbook.close()
|
||||
|
||||
return filename
|
||||
@ -0,0 +1,15 @@
|
||||
{% extends "admin/change_list.html" %}
|
||||
{% load i18n admin_urls %}
|
||||
|
||||
{% block object-tools-items %}
|
||||
|
||||
<li>
|
||||
<form method="post" action="{% url 'admin:members_group_action' %}">
|
||||
{% csrf_token %}
|
||||
<input type="submit" name="group_overview" value="{% trans 'Generate group overview' %}">
|
||||
</form>
|
||||
</li>
|
||||
{{block.super}}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
Loading…
Reference in New Issue