Added new admin commands to make next housewars easier

This commit is contained in:
Ceferino Patino 2023-05-23 13:35:52 -05:00
commit cbabafb492
5 changed files with 60 additions and 12 deletions

View file

@ -6,7 +6,7 @@ from .defaults import *
SECRET_KEY = os.environ.get('SECRET_KEY')
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False
DEBUG = True
ALLOWED_HOSTS = [
'housewars.c4thebomb101.com',

View file

@ -8,7 +8,6 @@ import zipfile
from housewars.utils import get_random_string, load_pdf
from housewars.models import Activity, Award, Quota, UserEntry
from housewars.utils import load_pdf
class QuotaInline(admin.TabularInline):
@ -34,7 +33,8 @@ class ActivityAdmin(admin.ModelAdmin):
inlines = [QuotaInline, AwardsInline]
actions = ['generate_passwords', 'export_a1_to_pdf', 'export_a2_to_pdf']
actions = ['generate_passwords', 'remove_room_number',
'export_a1_to_pdf', 'export_a2_to_pdf']
@admin.display(description='Hawk')
def hawk_signups(self, obj):
@ -72,6 +72,16 @@ class ActivityAdmin(admin.ModelAdmin):
queryset.count(),
) % queryset.count(), messages.SUCCESS)
@admin.action(description='Remove room number from selected activities')
def remove_room_number(self, request, queryset):
queryset.update(room_number=None)
self.message_user(request, ngettext(
'Removed room number for %d activity.',
'Removed room numbers for %d activities.',
queryset.count(),
) % queryset.count(), messages.SUCCESS)
@admin.action(description='Export activity 1 attendance to pdf')
def export_a1_to_pdf(self, request, queryset):
file_list = {}
@ -87,7 +97,7 @@ class ActivityAdmin(admin.ModelAdmin):
headers = ['first_name', 'last_name', 'grade', 'house',
'activity1', 'a1_room', 'activity2', 'a2_room']
file = load_pdf(user_entries, headers)
file = load_pdf(user_entries, headers, f"{activity.name} - 1")
file_list[f"{activity.name} - 1"] = file
@ -118,7 +128,7 @@ class ActivityAdmin(admin.ModelAdmin):
headers = ['first_name', 'last_name', 'grade', 'house',
'activity1', 'a1_room', 'activity2', 'a2_room']
file = load_pdf(user_entries, headers)
file = load_pdf(user_entries, headers, f"{activity.name} - 2")
file_list[f"{activity.name} - 2"] = file

View file

@ -1,6 +1,7 @@
from django.contrib import admin
from django.contrib import admin, messages
from django.http import HttpResponse
from django.db.models import F
from django.utils.translation import ngettext
import io
import zipfile
@ -20,7 +21,37 @@ class TeacherAdmin(admin.ModelAdmin):
list_display = ('first_name', 'last_name', 'house', 'grade', 'activity')
actions = ['generate_passwords', 'export_mentor_to_pdf']
actions = ['export_mentor_to_pdf']
@admin.action(description='Remove activity from selected teachers')
def remove_activity(self, request, queryset):
queryset.update(activity=None)
self.message_user(request, ngettext(
'Removed activity for %d teacher.',
'Removed activities for %d teachers.',
queryset.count(),
) % queryset.count(), messages.SUCCESS)
@admin.action(description='Remove house from selected teachers')
def remove_activity(self, request, queryset):
queryset.update(house=None)
self.message_user(request, ngettext(
'Removed house for %d teacher.',
'Removed houses for %d teachers.',
queryset.count(),
) % queryset.count(), messages.SUCCESS)
@admin.action(description='Remove grade from selected teachers')
def remove_activity(self, request, queryset):
queryset.update(grade=None)
self.message_user(request, ngettext(
'Removed grade for %d teacher.',
'Removed grades for %d teachers.',
queryset.count(),
) % queryset.count(), messages.SUCCESS)
@admin.action(description='Export mentor to pdf')
def export_mentor_to_pdf(self, request, queryset):
@ -38,7 +69,8 @@ class TeacherAdmin(admin.ModelAdmin):
headers = ['first_name', 'last_name', 'grade', 'house',
'activity1', 'a1_room', 'activity2', 'a2_room']
file = load_pdf(user_entries, headers)
file = load_pdf(user_entries, headers,
f"{teacher.last_name}, {teacher.first_name}")
file_list[f"{teacher.last_name}, {teacher.first_name}"] = file

View file

@ -1,4 +1,4 @@
from reportlab.platypus import Table, TableStyle, SimpleDocTemplate
from reportlab.platypus import Table, TableStyle, SimpleDocTemplate, Paragraph
from reportlab.lib.pagesizes import letter
from reportlab.lib.colors import black
@ -7,7 +7,7 @@ import io
from housewars.utils import unpack_values
def load_pdf(data, headers):
def load_pdf(data, headers, title=""):
"""Loads data from queryset into a pdf file
:param queryset: The queryset that will be unpacked
@ -20,6 +20,12 @@ def load_pdf(data, headers):
doc = SimpleDocTemplate(buffer, pagesize=letter)
elements = []
# Create the page title
title = Paragraph(title)
# Load title into PDF file
elements.append(title)
# Unpack queryset data
data = unpack_values(data, headers)

View file

@ -57,7 +57,7 @@ class EntryCreateView(SessionWizardView):
activity1_room = activity1.room_number
if (activity1_room != None):
a1_string += f' in Room {activity1_room}'
a1_string += f' in {activity1_room}'
if (hasattr(activity1, 'teacher')):
activity1_teacher = activity1.teacher
@ -71,7 +71,7 @@ class EntryCreateView(SessionWizardView):
activity2_room = activity2.room_number
if (activity2_room != None):
a2_string += f' in Room {activity2_room}'
a2_string += f' in {activity2_room}'
if (hasattr(activity2, 'teacher')):
activity2_teacher = activity2.teacher.last_name
a2_string += f' with {activity2_teacher}.'