From 461f7bbdc1ca24a763b3cc6cd711f0a0fd77003b Mon Sep 17 00:00:00 2001 From: flavis Date: Tue, 20 Sep 2022 12:14:55 +0200 Subject: [PATCH] add a bunch of new fields for LBAlpin termine --- jdav_web/ludwigsburgalpin/admin.py | 56 ++++++++++---- jdav_web/ludwigsburgalpin/models.py | 109 +++++++++++++++++++++++++++- jdav_web/ludwigsburgalpin/views.py | 62 ++++++++++++++-- 3 files changed, 202 insertions(+), 25 deletions(-) diff --git a/jdav_web/ludwigsburgalpin/admin.py b/jdav_web/ludwigsburgalpin/admin.py index d267995..d7a2035 100644 --- a/jdav_web/ludwigsburgalpin/admin.py +++ b/jdav_web/ludwigsburgalpin/admin.py @@ -10,7 +10,7 @@ import xlsxwriter class TerminAdmin(admin.ModelAdmin): - list_display = ('title','start_date', 'end_date', 'group', 'responsible') + list_display = ('title','start_date', 'end_date', 'group', 'category', 'responsible') list_filter = ('group',) ordering = ('start_date','end_date') actions = ['make_overview'] @@ -21,22 +21,48 @@ class TerminAdmin(admin.ModelAdmin): bold = workbook.add_format({'bold': True}) worksheet = workbook.add_worksheet() worksheet.write(0, 0, "Titel", bold) - worksheet.write(0, 1, "Von", bold) - worksheet.write(0, 2, "Bis", bold) - worksheet.write(0, 3, "Gruppe", bold) - worksheet.write(0, 4, "Organisator", bold) - worksheet.write(0, 5, "Telefonnummer", bold) - worksheet.write(0, 6, "Emailadresse", bold) - worksheet.write(0, 7, "Tourenbeschreibung/Anforderung", bold) + worksheet.write(0, 1, "Untertitel", bold) + worksheet.write(0, 2, "Von", bold) + worksheet.write(0, 3, "Bis", bold) + worksheet.write(0, 4, "Gruppe", bold) + worksheet.write(0, 5, "Kategorie", bold) + worksheet.write(0, 6, "Technik", bold) + worksheet.write(0, 7, "Kondition", bold) + worksheet.write(0, 8, "Saison", bold) + worksheet.write(0, 9, "Eventart", bold) + worksheet.write(0, 10, "Klassifizierung", bold) + worksheet.write(0, 11, "Höhenmeter (Meter)", bold) + worksheet.write(0, 12, "Strecke (Kilometer)", bold) + worksheet.write(0, 13, "Etappendauer (Stunden)", bold) + worksheet.write(0, 14, "Voraussetzungen", bold) + worksheet.write(0, 15, "Beschreibung", bold) + worksheet.write(0, 16, "Ausrüstung", bold) + worksheet.write(0, 17, "Max. Teilnehmerzahl", bold) + worksheet.write(0, 18, "Organisator", bold) + worksheet.write(0, 19, "Telefonnummer", bold) + worksheet.write(0, 20, "Emailadresse", bold) for row, termin in enumerate(queryset): worksheet.write(row+2, 0, termin.title) - worksheet.write(row+2, 1, termin.start_date.strftime('%d.%m.%Y')) - worksheet.write(row+2, 2, termin.end_date.strftime('%d.%m.%Y')) - worksheet.write(row+2, 3, termin.group) - worksheet.write(row+2, 4, termin.responsible) - worksheet.write(row+2, 5, termin.phone) - worksheet.write(row+2, 6, termin.email) - worksheet.write(row+2, 7, termin.description) + worksheet.write(row+2, 1, termin.subtitle) + worksheet.write(row+2, 2, termin.start_date.strftime('%d.%m.%Y')) + worksheet.write(row+2, 3, termin.end_date.strftime('%d.%m.%Y')) + worksheet.write(row+2, 4, termin.group) + worksheet.write(row+2, 5, termin.category) + worksheet.write(row+2, 6, termin.technik) + worksheet.write(row+2, 7, termin.condition) + worksheet.write(row+2, 8, termin.saison) + worksheet.write(row+2, 9, termin.eventart) + worksheet.write(row+2, 10, termin.klassifizierung) + worksheet.write(row+2, 11, termin.anforderung_hoehe) + worksheet.write(row+2, 12, termin.anforderung_strecke) + worksheet.write(row+2, 13, termin.anforderung_dauer) + worksheet.write(row+2, 14, termin.voraussetzungen) + worksheet.write(row+2, 15, termin.description) + worksheet.write(row+2, 16, termin.equipment) + worksheet.write(row+2, 17, termin.max_participants) + worksheet.write(row+2, 18, termin.responsible) + worksheet.write(row+2, 19, termin.phone) + worksheet.write(row+2, 20, termin.email) workbook.close() with open(media_path(filename), 'rb') as xls: response = HttpResponse(FileWrapper(xls)) diff --git a/jdav_web/ludwigsburgalpin/models.py b/jdav_web/ludwigsburgalpin/models.py index 0240539..27159c3 100644 --- a/jdav_web/ludwigsburgalpin/models.py +++ b/jdav_web/ludwigsburgalpin/models.py @@ -1,16 +1,117 @@ from django.db import models +from django.core.validators import MinValueValidator + +GRUPPE = [ + ('ASG', 'Alpinsportgruppe'), + ('OGB', 'Ortsgruppe Bietigheim'), + ('OGV', 'Ortsgruppe Vaihingen'), + ('JUG', 'Jugend'), + ('FAM', 'Familen'), + ('Ü30', 'Ü30'), + ('MTB', 'Mountainbike'), + ('RA', 'RegioAktiv'), + ('SEK', 'Sektion'), +] +KATEGORIE = [ + ('WAN', 'Wandern'), + ('BW', 'Bergwandern'), + ('KST', 'Klettersteig'), + ('KL', 'Klettern'), + ('SKI', 'Piste, Loipe'), + ('SCH', 'Schneeschuhgehen'), + ('ST', 'Skitour'), + ('STH', 'Skihochtour'), + ('HT', 'Hochtour'), + ('MTB', 'Montainbike'), + ('AUS', 'Ausbildung'), + ('SON', 'Sonstiges z.B. Treffen') +] +KONDITION = [ + ('gering', 'gering'), + ('mittel', 'mittel'), + ('groß', 'groß'), + ('sehr groß', 'sehr groß'), +] +TECHNIK = [ + ('leicht', 'leicht'), + ('mittel', 'mittel'), + ('schwer', 'schwer'), + ('sehr schwer', 'sehr schwer'), +] +SAISON = [ + ('ganzjährig','ganzjährig'), + ('Indoor', 'Indoor'), + ('Sommer', 'Sommer'), + ('Winter', 'Winter'), +] +EVENTART = [ + ('Einzeltermin', 'Einzeltermin',), + ('Mehrtagesevent', 'Mehrtagesevent',), + ('Regelmäßiges Event/Training', 'Regelmäßiges Event/Training',), + ('Tagesevent', 'Tagesevent',), + ('Wochenendevent', 'Wochenendevent',), +] +KLASSIFIZIERUNG = [ + ('Gemeinschaftstour', 'Gemeinschaftstour'), + ('Ausbildung', 'Ausbildung'), +] # Create your models here. class Termin(models.Model): title = models.CharField('Titel', max_length=100) + subtitle = models.CharField('Untertitel', max_length=100, blank=True) start_date = models.DateField('Von') end_date = models.DateField('Bis') - group = models.CharField(verbose_name='Gruppe', max_length=100, default="", blank=True) - responsible = models.CharField('Organisator', max_length=100, blank=True) + group = models.CharField('Gruppe', + choices=GRUPPE, + max_length=100) + responsible = models.CharField('Organisator', max_length=100, blank=False) phone = models.CharField(max_length=20, verbose_name='Telefonnumer', blank=True) - email = models.EmailField(max_length=100, verbose_name='Email', blank=True) - description = models.TextField('Tourenbeschreibung/Anforderung', blank=True) + email = models.EmailField(max_length=100, verbose_name='Email', blank=False) + category = models.CharField('Kategorie', blank=False, choices=KATEGORIE, max_length=100, + default='SON') + condition = models.CharField('Kondition', blank=False, choices=KONDITION, max_length=100, + default='mittel') + technik = models.CharField('Technik', blank=False, choices=TECHNIK, max_length=100, + default='mittel') + saison = models.CharField('Saison', blank=False, choices=SAISON, max_length=100, + default='ganzjährig') + eventart = models.CharField('Eventart', blank=False, choices=EVENTART, max_length=100, + default='Einzeltermin') + klassifizierung = models.CharField('Klassifizierung', blank=False, choices=KLASSIFIZIERUNG, + max_length=100, + default='Gemeinschaftstour') + equipment = models.TextField('Ausrüstung', + blank=True) + voraussetzungen = models.TextField('Voraussetzungen', + blank=True) + description = models.TextField('Beschreibung', + blank=True) + max_participants = models.IntegerField('Max. Teilnehmerzahl', + blank=False, + validators=[ + MinValueValidator(1) + ], + default=10) + anforderung_hoehe = models.IntegerField('Höhenmeter in Meter', + blank=True, + validators=[ + MinValueValidator(0) + ], + default=0) + anforderung_strecke = models.IntegerField('Strecke in Kilometer', + blank=True, + validators=[ + MinValueValidator(0) + ], + default=0) + anforderung_dauer = models.IntegerField('Etappendauer in Stunden', + blank=True, + validators=[ + MinValueValidator(0) + ], + default=0) def __str__(self): return "{} {}".format(self.title, str(self.group)) diff --git a/jdav_web/ludwigsburgalpin/views.py b/jdav_web/ludwigsburgalpin/views.py index 18a0ef1..66dfadc 100644 --- a/jdav_web/ludwigsburgalpin/views.py +++ b/jdav_web/ludwigsburgalpin/views.py @@ -2,28 +2,65 @@ from django.shortcuts import render from django import forms from django.http import HttpResponseRedirect from django.contrib.admin import widgets -from .models import Termin +from django.core.validators import MinValueValidator +from .models import Termin, GRUPPE, KATEGORIE, KONDITION, TECHNIK, SAISON, EVENTART, KLASSIFIZIERUNG datepicker = forms.TextInput(attrs={'class': 'datepicker'}) class TerminForm(forms.Form): + + title = forms.CharField(label='Titel') + subtitle = forms.CharField(label='Untertitel') start_date = forms.DateField(label='Von', widget=datepicker) end_date = forms.DateField(label='Bis', widget=datepicker) - group = forms.CharField(label='Gruppe', - required=False) + group = forms.ChoiceField(label='Gruppe', + required=True, + choices=GRUPPE) + category = forms.ChoiceField(label='Kategorie', required=True, choices=KATEGORIE) + condition = forms.ChoiceField(label='Kondition', required=True, choices=KONDITION) + technik = forms.ChoiceField(label='Technik', required=True, choices=TECHNIK) + saison = forms.ChoiceField(label='Saison', required=True, choices=SAISON) + eventart = forms.ChoiceField(label='Eventart', required=True, choices=EVENTART) + klassifizierung = forms.ChoiceField(label='Klassifizierung', required=True, choices=KLASSIFIZIERUNG) + anforderung_hoehe = forms.IntegerField(label='Höhenmeter in Meter', + required=True, + validators=[ + MinValueValidator(0) + ]) + anforderung_strecke = forms.IntegerField(label='Strecke in Kilometer', + required=True, + validators=[ + MinValueValidator(0) + ]) + anforderung_dauer = forms.IntegerField(label='Etappendauer in Stunden', + required=True, + validators=[ + MinValueValidator(0) + ]) + equipment = forms.CharField(label='Ausrüstung', + widget=forms.Textarea, + required=False) + voraussetzungen = forms.CharField(label='Voraussetzungen', + widget=forms.Textarea, + required=False) + description = forms.CharField(label='Beschreibung', + widget=forms.Textarea, + required=False) + max_participants = forms.IntegerField(label='Max. Teilnehmerzahl', + required=True, + validators=[ + MinValueValidator(1) + ]) responsible = forms.CharField(label='Organisator', max_length=100, required=False) phone = forms.CharField(max_length=20, label='Telefonnumer', required=False) email = forms.EmailField(max_length=100, label='Email', required=False) - description = forms.CharField(label='Tourenbeschreibung/Anforderung', - widget=forms.Textarea, - required=False) # Create your views here. @@ -32,12 +69,25 @@ def index(request): form = TerminForm(request.POST) if form.is_valid(): termin = Termin(title=form.cleaned_data["title"], + subtitle=form.cleaned_data["subtitle"], start_date=form.cleaned_data["start_date"], end_date=form.cleaned_data["end_date"], group=form.cleaned_data["group"], responsible=form.cleaned_data["responsible"], phone=form.cleaned_data["phone"], email=form.cleaned_data["email"], + category=form.cleaned_data["category"], + condition=form.cleaned_data["condition"], + technik=form.cleaned_data["technik"], + saison=form.cleaned_data["saison"], + eventart=form.cleaned_data["eventart"], + klassifizierung=form.cleaned_data["klassifizierung"], + equipment=form.cleaned_data["equipment"], + voraussetzungen=form.cleaned_data["voraussetzungen"], + max_participants=form.cleaned_data["max_participants"], + anforderung_hoehe=form.cleaned_data["anforderung_hoehe"], + anforderung_strecke=form.cleaned_data["anforderung_strecke"], + anforderung_dauer=form.cleaned_data["anforderung_dauer"], description=form.cleaned_data["description"]) termin.save() return published(request)