From 8762a51d27707a754b8fd70053e05dea42d3fbac Mon Sep 17 00:00:00 2001 From: Tom Irgang Date: Mon, 17 Apr 2023 09:41:34 +0200 Subject: [PATCH] improve field naming, add cspell config --- RepApp.code-workspace | 8 +-- docs/index.md | 4 +- rc_hip/repapp/admin.py | 6 +- ...evice_mail_remove_device_owner_and_more.py | 50 +++++++++++++++ ...ame_cafeid_appointment_cafe_id_and_more.py | 48 ++++++++++++++ rc_hip/repapp/models.py | 62 +++++++++++++++---- 6 files changed, 156 insertions(+), 22 deletions(-) create mode 100644 rc_hip/repapp/migrations/0008_guest_remove_device_mail_remove_device_owner_and_more.py create mode 100644 rc_hip/repapp/migrations/0009_rename_cafeid_appointment_cafe_id_and_more.py diff --git a/RepApp.code-workspace b/RepApp.code-workspace index f03a73e..876a149 100644 --- a/RepApp.code-workspace +++ b/RepApp.code-workspace @@ -4,11 +4,5 @@ "path": "." } ], - "settings": { - "cSpell.words": [ - "Reparateur", - "Reparateure", - "Reparateurs" - ] - } + "settings": {} } \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index 8795154..07ceb39 100644 --- a/docs/index.md +++ b/docs/index.md @@ -74,8 +74,8 @@ Attribute: Annahmen: -- Reparatuere sind immmer verfügbar, d.h. jeder Reparatuer wird zu einem neuen Repair-Café Termin automatisch hinzugefügt. -- Reparatuere können alles reparieren. Greäte Kategorien, Skills, ... können später hinzugefügt werden. +- 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. ### Organisator diff --git a/rc_hip/repapp/admin.py b/rc_hip/repapp/admin.py index c618799..56a86b8 100644 --- a/rc_hip/repapp/admin.py +++ b/rc_hip/repapp/admin.py @@ -1,10 +1,14 @@ +""" +Admin interface configuration for RepApp. +""" from django.contrib import admin -from .models import Organisator, Cafe, Question, Device, Reparateur, Appointment +from .models import Organisator, Cafe, Question, Device, Reparateur, Appointment, Guest admin.site.register(Organisator) admin.site.register(Cafe) admin.site.register(Question) +admin.site.register(Guest) admin.site.register(Device) admin.site.register(Reparateur) admin.site.register(Appointment) diff --git a/rc_hip/repapp/migrations/0008_guest_remove_device_mail_remove_device_owner_and_more.py b/rc_hip/repapp/migrations/0008_guest_remove_device_mail_remove_device_owner_and_more.py new file mode 100644 index 0000000..77829c8 --- /dev/null +++ b/rc_hip/repapp/migrations/0008_guest_remove_device_mail_remove_device_owner_and_more.py @@ -0,0 +1,50 @@ +# Generated by Django 4.2 on 2023-04-17 05:26 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('repapp', '0007_alter_device_phone_alter_device_residence'), + ] + + operations = [ + migrations.CreateModel( + name='Guest', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('identifier', models.CharField(max_length=200, verbose_name='ID')), + ('name', models.CharField(max_length=200, verbose_name='Name')), + ('phone', models.CharField(max_length=200, verbose_name='Telefonnummer')), + ('residence', models.CharField(max_length=200, verbose_name='Wohnort')), + ('mail', models.CharField(max_length=200, verbose_name='eMail')), + ], + options={ + 'verbose_name': 'Gast', + 'verbose_name_plural': 'Gäste', + }, + ), + migrations.RemoveField( + model_name='device', + name='mail', + ), + migrations.RemoveField( + model_name='device', + name='owner', + ), + migrations.RemoveField( + model_name='device', + name='phone', + ), + migrations.RemoveField( + model_name='device', + name='residence', + ), + migrations.AddField( + model_name='device', + name='guestid', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='repapp.guest', verbose_name='Gast'), + ), + ] diff --git a/rc_hip/repapp/migrations/0009_rename_cafeid_appointment_cafe_id_and_more.py b/rc_hip/repapp/migrations/0009_rename_cafeid_appointment_cafe_id_and_more.py new file mode 100644 index 0000000..bb3ed52 --- /dev/null +++ b/rc_hip/repapp/migrations/0009_rename_cafeid_appointment_cafe_id_and_more.py @@ -0,0 +1,48 @@ +# Generated by Django 4.2 on 2023-04-17 07:40 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('repapp', '0008_guest_remove_device_mail_remove_device_owner_and_more'), + ] + + operations = [ + migrations.RenameField( + model_name='appointment', + old_name='cafeid', + new_name='cafe_id', + ), + migrations.RenameField( + model_name='appointment', + old_name='deviceid', + new_name='device_id', + ), + migrations.RenameField( + model_name='appointment', + old_name='reparateurid', + new_name='reparateur_id', + ), + migrations.RenameField( + model_name='device', + old_name='guestid', + new_name='guest_id', + ), + migrations.RenameField( + model_name='question', + old_name='deviceid', + new_name='device_id', + ), + migrations.RenameField( + model_name='question', + old_name='organisatorid', + new_name='organisator_id', + ), + migrations.RenameField( + model_name='question', + old_name='reparateurid', + new_name='reparateur_id', + ), + ] diff --git a/rc_hip/repapp/models.py b/rc_hip/repapp/models.py index 9b8cc6b..fe1ebb1 100644 --- a/rc_hip/repapp/models.py +++ b/rc_hip/repapp/models.py @@ -1,8 +1,14 @@ +""" +This module implements the models of RepApp. +""" from django.db import models from django.utils.translation import gettext_lazy as _ class Cafe(models.Model): + """ + A Cafe is a "Repair-Café event. + """ location = models.CharField( max_length=200, verbose_name=_("Ort")) event_date = models.DateField(verbose_name=_("Datum")) @@ -16,6 +22,9 @@ class Cafe(models.Model): class Reparateur(models.Model): + """ + A Reparateur is a member of the Repair-Café who supports guests with fixing their devices. + """ name = models.CharField(max_length=200, verbose_name=_("Name")) mail = models.CharField(max_length=200, verbose_name=_("eMail")) @@ -24,10 +33,13 @@ class Reparateur(models.Model): verbose_name_plural = _('Reparateure') def __str__(self): - return f'Reparatuer {self.name} (eMail: {self.mail})' + return f'Reparateur {self.name} (eMail: {self.mail})' class Organisator(models.Model): + """ + A Organisator is a member of the Repair-Café who arranges repair appointments with guests. + """ name = models.CharField(max_length=200, verbose_name=_("Name")) mail = models.CharField(max_length=200, verbose_name=_("eMail")) @@ -39,32 +51,55 @@ class Organisator(models.Model): return f'Organisator {self.name} (eMail: {self.mail})' -class Device(models.Model): +class Guest(models.Model): + """ + A guest is a owner of a broken device who wants support in context of a Repair-Café. + """ identifier = models.CharField(max_length=200, verbose_name=_("ID")) - owner = models.CharField(max_length=200, verbose_name=_("Besitzer")) + name = models.CharField(max_length=200, verbose_name=_("Name")) phone = models.CharField(max_length=200, verbose_name=_("Telefonnummer")) residence = models.CharField(max_length=200, verbose_name=_("Wohnort")) mail = models.CharField(max_length=200, verbose_name=_("eMail")) + + class Meta: + verbose_name = _('Gast') + verbose_name_plural = _('Gäste') + + def __str__(self): + return f'Gast {self.name} (eMail: {self.mail})' + + +class Device(models.Model): + """ + A Device is a broken device owned by a guest which shall be repaired during a Repair-Café. + """ + identifier = models.CharField(max_length=200, verbose_name=_("ID")) device = models.CharField(max_length=200, verbose_name=_("Gerät")) error = models.TextField(verbose_name=_("Fehler")) follow_up = models.BooleanField(verbose_name=_("Folgetermin")) + guest_id = models.ForeignKey( + Guest, on_delete=models.CASCADE, null=True, verbose_name=_("Gast")) class Meta: verbose_name = _('Gerät') verbose_name_plural = _('Geräte') def __str__(self): - return f'Gerät {self.device} von {self.owner} (eMail: {self.mail})' + return f'Gerät {self.device} von {self.guest_id.name}' class Appointment(models.Model): + """ + A Appointment is a match of a broken Device and a Reparateur during a Repair-Café + with a defined time slot. + """ time = models.TimeField(verbose_name=_("Zeit")) confirmed = models.BooleanField(verbose_name=_("bestätigt")) - cafeid = models.ForeignKey( + cafe_id = models.ForeignKey( Cafe, on_delete=models.CASCADE, verbose_name=_("Repair-Café")) - reparateurid = models.ForeignKey( + reparateur_id = models.ForeignKey( Reparateur, on_delete=models.CASCADE, verbose_name=_("Reparateur")) - deviceid = models.ForeignKey( + device_id = models.ForeignKey( Device, on_delete=models.CASCADE, null=True, verbose_name=_("Gerät")) class Meta: @@ -72,18 +107,21 @@ class Appointment(models.Model): verbose_name_plural = _('Termine') def __str__(self): - return f'Termin {self.cafeid.event_date} {self.time} für Gerät {self.deviceid.device} von {self.deviceid.owner}' + return f'Termin {self.cafe_id.event_date} {self.time} 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. + """ question = models.TextField(verbose_name=_("Frage")) answer = models.TextField(verbose_name=_("Antwort")) date = models.DateField(verbose_name=_("Erstellungsdatum")) - organisatorid = models.ForeignKey( + organisator_id = models.ForeignKey( Organisator, on_delete=models.CASCADE, null=True, verbose_name=_("Organisator")) - reparateurid = models.ForeignKey( + reparateur_id = models.ForeignKey( Reparateur, on_delete=models.CASCADE, null=True, verbose_name=_("Reparateur")) - deviceid = models.ForeignKey( + device_id = models.ForeignKey( Device, on_delete=models.CASCADE, verbose_name=_("Gerät")) class Meta: @@ -91,4 +129,4 @@ class Question(models.Model): verbose_name_plural = _('Fragen') def __str__(self): - return f'Frage vom {self.date} zum Gerät {self.deviceid.device}' + return f'Frage vom {self.date} zum Gerät {self.device_id.device}'