From db16a8cae5dfb130fe0cfd32e0962e949662d0ee Mon Sep 17 00:00:00 2001 From: Tom Irgang Date: Mon, 17 Apr 2023 09:59:56 +0200 Subject: [PATCH] add candidate devices --- docs/index.md | 69 +++++++++++----------- rc_hip/repapp/admin.py | 4 +- rc_hip/repapp/migrations/0010_candidate.py | 27 +++++++++ rc_hip/repapp/models.py | 19 ++++++ 4 files changed, 83 insertions(+), 36 deletions(-) create mode 100644 rc_hip/repapp/migrations/0010_candidate.py diff --git a/docs/index.md b/docs/index.md index 07ceb39..2c951ac 100644 --- a/docs/index.md +++ b/docs/index.md @@ -10,42 +10,42 @@ Ein Gast ist ein Gerätebesitzer der ein oder mehrere Geräte zur Reparatur anme ### Reparateur -Ein Reparateur ist ein Mitglied des Repair-Cafés der die Gerätebesitzer bei der Reparatur ihrer Geräte unterstützt. +Ein Reparateur ist ein Mitglied des Repair-Cafés das die Gerätebesitzer bei der Reparatur ihrer Geräte unterstützt. ### Organisator -Ein Organisator ist Mitglied des Repair-Cafés der die Termine mit den Gästen organisiert und die Reparateure zu den Geräten zuordnet. +Ein Organisator ist Mitglied des Repair-Cafés das die Termine mit den Gästen organisiert und die Reparateure zu den Geräten zuordnet. -## Use-Cases +## Anwendungsfälle ### Gast -- [ ] Als Gast möchte ich einen Termin für eine Reparatur vereinbaren. Dafür Stelle ich Informationen zum Gerät und eine Fehlerbeschreibung zur Verfügung. -- [ ] Als Gast möchte ich eine Bestätigung für eine Reparaturanfrage bekommen. -- [ ] Als Gast möchte ich eine Terminbenachrichtigung oder eine Absage bekommen. -- [ ] Als Gast möchte ich mein angemeldetes Gerät und dessen Status einsehen können. -- [ ] Als Gast möchte ich Rückfragen zum Gerät empfangen und diese beantworten können. -- [ ] Als Gast möchte ich ein Gerät für eine Folgereparatur anmelden können +- [ ] (1) Als Gast möchte ich einen Termin für eine Reparatur vereinbaren. +- [ ] (2) Als Gast möchte ich eine Bestätigung für eine Reparaturanfrage bekommen. +- [ ] (3) Als Gast möchte ich eine Terminbenachrichtigung oder eine Absage bekommen. +- [ ] (4) Als Gast möchte ich mein angemeldetes Gerät und dessen Status einsehen können. +- [ ] (5) Als Gast möchte ich Rückfragen zum Gerät empfangen und diese beantworten können. +- [ ] (6) Als Gast möchte ich ein Gerät für eine Folgereparatur anmelden können ### Reparateur -- [ ] Als Reparateur möchte ich die angemeldeten Geräte ansehen können. -- [ ] Als Reparateur möchte ich mir ein angemeldetes Gerät zuordnen können. -- [ ] Als Reparateur möchte ich ein angemeldetes Gerät ablehnen können. -- [ ] Als Reparateur möchte ich Rückfragen zum Gerät stellen können. -- [ ] Als Reparateur möchte ich eine Benachrichtigung bekommen wenn eine Rückfrage beantwortet wird. -- [ ] Als Reparateur möchte ich eine Benachrichtigung bekommen wenn mir ein Gerät zugeordnet wird. -- [ ] Als Reparateur möchte ich mich für ein Repair-Café anmelden können. -- [ ] Als Reparateur möchte ich mich für ein Repair-Café abmelden können. +- [ ] (7) Als Reparateur möchte ich die angemeldeten Geräte ansehen können. +- [ ] (8) Als Reparateur möchte ich mir ein angemeldetes Gerät zuordnen können. +- [ ] (9) Als Reparateur möchte ich ein angemeldetes Gerät ablehnen können. +- [ ] (10) Als Reparateur möchte ich Rückfragen zum Gerät stellen können. +- [ ] (11) Als Reparateur möchte ich eine Benachrichtigung bekommen wenn eine Rückfrage beantwortet wird. +- [ ] (12) Als Reparateur möchte ich eine Benachrichtigung bekommen wenn mir ein Gerät zugeordnet wird. +- [ ] (13) Als Reparateur möchte ich mich für ein Repair-Café anmelden können. +- [ ] (14) Als Reparateur möchte ich mich für ein Repair-Café abmelden können. ### Organisator -- [ ] Als Organisator möchte ich ein Café anmelden können. -- [ ] Als Organisator möchte ich die Terminanfragen einsehen können. -- [ ] Als Organisator möchte ich eine Rückfrage zu einer Terminanfrage stellen können. -- [ ] Als Organisator möchte ich eine Terminanfrage ablehnen können. -- [ ] Als Organisator möchte ich eine Terminanfrage zu einem Termin zuordnen können. -- [ ] Als Organisator möchte ich einen Terminanfrage zu einem Reparateur zuordnen können. +- [ ] (15) Als Organisator möchte ich ein Repair-Café anlegen können. +- [ ] (16) Als Organisator möchte ich die Geräte einsehen können. +- [ ] (17) Als Organisator möchte ich eine Rückfrage zu einem Geräte stellen können. +- [ ] (18) Als Organisator möchte ich ein Geräte ablehnen können. +- [ ] (19) Als Organisator möchte ich ein Geräte zu einem Termin zuordnen können. +- [ ] (20) Als Organisator möchte ich einen Reparateur zu einem Termin zuordnen können. ## Daten @@ -61,7 +61,7 @@ Attribute: Annahmen: - Ein Repair-Café beginnt um 13:00 Uhr. -- Ein Repair-Café hat drei aufeinanderfolgende Slots mit je einer Stunde +- Ein Repair-Café hat drei aufeinanderfolgende Zeitslots pro Reparateur mit je einer Stunde ### Reparateur @@ -74,8 +74,8 @@ Attribute: Annahmen: -- Reparateure sind immer verfügbar, d.h. jeder Reparateur wird zu einem neuen Repair-Café Termin automatisch hinzugefügt. -- Reparateure können alles reparieren. Geräte Kategorien, Skills, ... können später hinzugefügt werden. +- Reparateure sind immer verfügbar, d.h. Zeitslots für jeden Reparateur werden zu einem neuen Repair-Café Termin automatisch hinzugefügt. +- Reparateure können alles reparieren. Geräte Kategorien, Skills, ... werden im Moment nicht berücksichtigt. ### Organisator @@ -101,10 +101,6 @@ Technische Attribute: - Identifier: SHA256 Hash aus Name + Wohnort + Timestamp -Annahmen: - -- Es gibt nur eine Geräteanmeldung pro Besitzer. Mehrere Geräte pro Besitzer kann später hinzugefügt werden. - ### Gerät Ein Gerät ist ein defekter Gegenstand der im Rahmen eines Repair-Cafés repariert werden soll. @@ -122,11 +118,12 @@ Technische Attribute: Annahmen: -- Für einen Folgetermin werden alle Daten neu eingegeben. Eine Folgereparatur auf Basis der ersten Anmeldung kann später hinzugefügt werden. +- Für einen Folgetermin werden alle Daten neu eingegeben. Eine Folgereparatur auf Basis der ersten Anmeldung kann später umgesetzt werden. ### Termin -Ein Termin ist eine Zuordnung von einem Gerät zu einem Zeitslot der Repair-Café Veranstaltung und einem Reparateur. Ein Termin ist bestätigt, wenn eine Organisator eine Termineinladung gesendet hat und er Gast diese bestätigt hat. +Ein Termin ist eine Zuordnung von einem Gerät zu einem Zeitslot der Repair-Café Veranstaltung und einem Reparateur. +Ein Termin ist bestätigt, wenn eine Organisator eine Termineinladung gesendet hat und er Gast diese bestätigt hat. Attribute: @@ -141,7 +138,7 @@ Technische Attribute: ### Frage -Eine Frage ist eine Zuordnung von einem Gerät zu einem Organisator oder einem Reparateur. +Eine Frage ist eine Rückfrage nach mehr Informationen zu einem Gerät, erstellt von einem Organisator oder einem Reparateur. Attribute: @@ -155,9 +152,11 @@ Technische Attribute: - ReparateurId: Referenz zum Reparateur oder NULL - GerätId: Referenz zum Gerät -### Warteliste +### Kandidat -Die Warteliste enthält Geräte ohne festen Termin. Diese Geräte werden von den Gästen zu Beginn des Repair-Café gebracht und am Ende abgeholt. Falls ein Reparateur Zeit hat kann er eines dieser Geräte reparieren. +Ein Kandidat ist ein Geräte ohne festen Termin. +Diese Geräte werden von den Gästen zu Beginn des Repair-Café gebracht und am Ende abgeholt. +Falls ein Reparateur Zeit hat kann er eines dieser Geräte reparieren. - Betätigt: Boolesches Flag. True wenn eine Einladung gesendet und bestätigt wurde. diff --git a/rc_hip/repapp/admin.py b/rc_hip/repapp/admin.py index 56a86b8..0bccd55 100644 --- a/rc_hip/repapp/admin.py +++ b/rc_hip/repapp/admin.py @@ -3,7 +3,8 @@ Admin interface configuration for RepApp. """ from django.contrib import admin -from .models import Organisator, Cafe, Question, Device, Reparateur, Appointment, Guest +from .models import (Organisator, Cafe, Question, Device, + Reparateur, Appointment, Guest, Candidate) admin.site.register(Organisator) admin.site.register(Cafe) @@ -12,3 +13,4 @@ admin.site.register(Guest) admin.site.register(Device) admin.site.register(Reparateur) admin.site.register(Appointment) +admin.site.register(Candidate) diff --git a/rc_hip/repapp/migrations/0010_candidate.py b/rc_hip/repapp/migrations/0010_candidate.py new file mode 100644 index 0000000..78ef11d --- /dev/null +++ b/rc_hip/repapp/migrations/0010_candidate.py @@ -0,0 +1,27 @@ +# Generated by Django 4.2 on 2023-04-17 07:57 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('repapp', '0009_rename_cafeid_appointment_cafe_id_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='Candidate', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('confirmed', models.BooleanField(verbose_name='bestätigt')), + ('cafe_id', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='repapp.cafe', verbose_name='Repair-Café')), + ('device_id', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='repapp.device', verbose_name='Gerät')), + ], + options={ + 'verbose_name': 'Kandidat', + 'verbose_name_plural': 'Kandidaten', + }, + ), + ] diff --git a/rc_hip/repapp/models.py b/rc_hip/repapp/models.py index fe1ebb1..f029e8e 100644 --- a/rc_hip/repapp/models.py +++ b/rc_hip/repapp/models.py @@ -110,6 +110,25 @@ class Appointment(models.Model): return f'Termin {self.cafe_id.event_date} {self.time} für Gerät {self.device_id.device}' +class Candidate(models.Model): + """ + A Candidate is a match of a broken Device and a Repair-Café without a fixed timeslot + or pre-assigned Reparateur. + """ + confirmed = models.BooleanField(verbose_name=_("bestätigt")) + cafe_id = models.ForeignKey( + Cafe, on_delete=models.CASCADE, verbose_name=_("Repair-Café")) + device_id = models.ForeignKey( + Device, on_delete=models.CASCADE, null=True, verbose_name=_("Gerät")) + + class Meta: + verbose_name = _('Kandidat') + verbose_name_plural = _('Kandidaten') + + def __str__(self): + return f'Kandidat {self.cafe_id.event_date} für Gerät {self.device_id.device}' + + class Question(models.Model): """ A Question is a request for information form a Organisator or a Reparateur for a Device.