Added new admin commands to make next housewars easier
This commit is contained in:
parent
12e6edc3dc
commit
cbabafb492
5 changed files with 60 additions and 12 deletions
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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}.'
|
||||
|
|
|
|||
Reference in a new issue