# Logbuch: Baseball Organisator Dieses Logbuch dient dazu, den Entwicklungsfortschritt und die getroffenen Entscheidungen während der Erstellung der "Baseball Organisator"-App festzuhalten. ## Phase 1: Projektvorbereitung und Basiskonfiguration **Ziel:** Schaffung einer sauberen Arbeitsumgebung und Initialisierung des Django-Projekts. - **Projektverzeichnis:** Das Projekt wurde im Verzeichnis `baseball_organisator` initialisiert. - **Virtuelle Umgebung:** Eine virtuelle Python-Umgebung wurde im Verzeichnis `venv` erstellt, um die Projektabhängigkeiten zu isolieren. - **Django-Installation:** Django und `mysqlclient` wurden als Abhängigkeiten installiert. - **Django-Projekt:** Ein neues Django-Projekt namens `baseball_organisator` wurde erstellt. - **Django-Apps:** Die grundlegenden Apps `accounts`, `clubs`, `calendars` und `dashboard` wurden erstellt. - **URL-Konfiguration:** Die URLs der neuen Apps wurden in der Haupt-`urls.py` des Projekts registriert. - **Datenbank:** Die Datenbank wurde für die Entwicklung auf `sqlite3` konfiguriert. - **Git-Initialisierung:** Ein Git-Repository wurde initialisiert und der initiale Stand des Projekts wurde committed. ## Phase 2: Benutzer- und Rollenmodell **Ziel:** Erstellung der Benutzerprofile und Definition der verschiedenen Rollen. - **Benutzerdefiniertes User-Modell:** Ein `CustomUser`-Modell wurde in der `accounts`-App erstellt, das von `AbstractUser` erbt. Es wurden Felder für `birth_date` und `player_number` hinzugefügt. - **Einladungscode-Modell:** Ein `InvitationCode`-Modell wurde erstellt, um die Registrierung neuer Benutzer über Einladungscodes zu steuern. - **Registrierungslogik:** Die Logik für die Registrierung mittels Einladungscode wurde implementiert, einschließlich der entsprechenden Formulare, Ansichten und Vorlagen. - **Datumsformat:** Das Format für das Geburtsdatumsfeld wurde auf `dd.mm.YYYY` angepasst. ## Phase 3: Organisationsstruktur **Ziel:** Erstellung der Modelle für Clubs, Mannschaften und Teams. - **Club- und Team-Modelle:** Die Modelle `Club` und `Team` wurden in der `clubs`-App erstellt. - **Beziehungen:** Beziehungen zwischen `User`, `Club` und `Team` wurden definiert, um Administratoren, Trainer und Spieler zuzuordnen. - **Admin-Interface:** Die neuen Modelle wurden im Django-Admin-Bereich registriert, um die Verwaltung zu erleichtern. - **Profilbearbeitung:** Eine Ansicht zum Bearbeiten des eigenen Benutzerprofils wurde hinzugefügt. ## Phase 4: Terminverwaltung und Google Maps API **Ziel:** Implementierung der Kalenderfunktionalität. - **Termin-Modelle:** Ein Basis-`Event`-Modell wurde erstellt, von dem die Modelle `Training` und `Game` erben (Multi-Table-Inheritance). - **Spiel-Logik:** Das `Game`-Modell wurde um Felder wie `opponent`, `meeting_minutes_before_game` und `season` erweitert. Ein `GameResult`-Modell wurde zur Speicherung von Ergebnissen erstellt. - **Google Maps Integration:** Eine einfache Logik zur Erstellung von Google Maps-Links aus Adressen wurde implementiert. - **Dashboard-Ansicht:** Die Dashboard-Ansicht wurde entwickelt, um Termine basierend auf der Benutzerrolle anzuzeigen. - **Zugriffsrechte für Trainer:** Ansichten zum Erstellen, Bearbeiten und Löschen von Terminen wurden für Trainer implementiert. ## Phase 5: Fortgeschrittene Funktionen und Backend **Ziel:** Implementierung komplexerer Features. - **Spielererstellung durch Headcoaches:** Ein Workflow wurde implementiert, der es Headcoaches ermöglicht, neue Spieler anzulegen und Einladungscodes für sie und ihre Eltern zu generieren. - **Abwesenheitsfunktion:** Ein `AbsencePeriod`-Modell wurde erstellt. Eine Signal-basierte Logik sorgt dafür, dass die Teilnahme an Terminen während dieser Periode automatisch auf "abgelehnt" gesetzt wird. - **Admin-Zugriffsbeschränkung:** Der Zugriff auf den Django-Admin-Bereich wurde auf Superuser und Club-Admins beschränkt. - **Eltern-Kind-Beziehung:** Das `CustomUser`-Modell wurde um eine `parents`-Beziehung erweitert, um Eltern mit ihren Kindern zu verknüpfen. ## Phase 6: Frontend und finale Anpassungen **Ziel:** Optimierung des Layouts und der Leistung. - **Bootstrap-Integration:** Das Frontend wurde mit dem Bootstrap-Framework neu gestaltet, um ein modernes und responsives Layout zu gewährleisten. - **Statische Dateien:** Die Verwaltung von statischen Dateien (CSS, JS) wurde konfiguriert. - **Performance-Optimierung:** Der Signal-Handler für Abwesenheitsperioden wurde optimiert, um die Anzahl der Datenbankabfragen zu reduzieren. - **MySQL-Vorbereitung:** Die `settings.py` wurde um eine auskommentierte MySQL-Konfiguration für die spätere Bereitstellung erweitert. ## Zusätzliche Anpassungen - **Eltern-Funktionalität:** Eltern können jetzt auf dem Dashboard die Termine ihrer Kinder sehen und für diese zu- oder absagen. - **Anzeige der Spieler-Teilnahme:** Trainer sehen auf dem Dashboard, welche Spieler für einen Termin zu- oder abgesagt haben. Die Namen werden farblich markiert. - **"Spiel öffnen"-Funktionalität:** Headcoaches können Spiele, bei denen nicht genügend Spieler zugesagt haben, für andere Teams des Clubs öffnen. Diese "Unterstützer-Spiele" werden auf dem Dashboard entsprechend hervorgehoben. - **Verbesserte Benutzersuche:** Bei der Erstellung eines Spielers wurde die Auswahl von Elternteilen durch ein Autocomplete-Suchfeld verbessert. - **Lokalisierung:** Das Datumsformat auf dem Dashboard wurde auf das deutsche Format umgestellt. - **Fehlerbehebungen:** Diverse Fehler im Zusammenhang mit Importen, Template-Syntax und Datenbank-Inkonsistenzen wurden behoben.