feat: merge street + person created field

This commit is contained in:
relikd
2023-06-06 01:15:11 +02:00
parent 3761ffd6a9
commit 2f5645907e
3 changed files with 63 additions and 8 deletions

View File

@@ -0,0 +1,51 @@
# Generated by Django 4.2 on 2023-06-05 22:19
import app.base.forms.fields
from django.db import migrations, models
def merge_street(apps, schema_editor):
Person = apps.get_model('base', 'Person')
for x in Person.objects.all():
x.street = f'{x.street} {x.house_nr}'
x.save()
def split_street(apps, schema_editor):
Person = apps.get_model('app.base', 'Person')
for x in Person.objects.all():
if ' ' in x.street:
street, nr = x.street.rsplit(' ', 1)
else:
street, nr = x.street, '?'
x.street = street.strip()
x.house_nr = nr.strip()
x.save()
class Migration(migrations.Migration):
dependencies = [
('base', '0003_alter_transaction_time_stamp'),
]
operations = [
migrations.RunPython(merge_street, split_street),
migrations.RemoveField(
model_name='person',
name='house_nr',
),
migrations.AddField(
model_name='person',
name='created',
field=app.base.forms.fields.DateField(
default='1970-01-01', editable=False, verbose_name='Angelegt'),
preserve_default=False,
),
migrations.AlterField(
model_name='person',
name='street',
field=models.CharField(
max_length=200, verbose_name='Straße & Hausnummer'),
),
]

View File

@@ -6,20 +6,20 @@ from app.base.forms.fields import DateField
from app.base.models.course import Course from app.base.models.course import Course
from app.base.models.booking import Booking from app.base.models.booking import Booking
from datetime import datetime from datetime import datetime, date
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
if TYPE_CHECKING: if TYPE_CHECKING:
from app.base.models import Account, Note, CourseVisit, TraitMapping from app.base.models import Account, Note, CourseVisit, TraitMapping
class Person(models.Model): class Person(models.Model):
uuid = models.CharField('Karten-ID', max_length=200, blank=True) created: 'models.DateField[date]' = DateField('Angelegt', editable=False)
uuid = models.CharField('Karten-ID', max_length=200, blank=True)
first_name = models.CharField('Vorname', max_length=200) first_name = models.CharField('Vorname', max_length=200)
last_name = models.CharField('Nachname', max_length=200) last_name = models.CharField('Nachname', max_length=200)
birth_date: 'models.DateField[date]' = DateField('Geburtsdatum') birth_date: 'models.DateField[date]' = DateField('Geburtsdatum')
street = models.CharField('Straße', max_length=200) street = models.CharField('Straße & Hausnummer', max_length=200)
house_nr = models.CharField('Hausnummer', max_length=10)
zip_code = models.CharField('PLZ', max_length=10) zip_code = models.CharField('PLZ', max_length=10)
city = models.CharField('Stadt', max_length=200) city = models.CharField('Stadt', max_length=200)
email = models.EmailField('Email', blank=True, null=True) email = models.EmailField('Email', blank=True, null=True)
@@ -52,13 +52,18 @@ class Person(models.Model):
def __str__(self): def __str__(self):
return f'{self.first_name} {self.last_name}' return f'{self.first_name} {self.last_name}'
def save(self, *args, **kwargs):
if not self.pk:
self.created = date.today()
return super().save(*args, **kwargs)
@property @property
def display_name(self): def display_name(self):
return f'{self.first_name} {self.last_name}' return f'{self.first_name} {self.last_name}'
@property @property
def address(self): def address(self):
return f'{self.street} {self.house_nr}, {self.zip_code} {self.city}' return f'{self.street}, {self.zip_code} {self.city}'
@property @property
def missing_courses(self): def missing_courses(self):

View File

@@ -11,9 +11,8 @@ from app.base.views.model_views.base import (
) )
FORM_FIELDS = [ # hide UUID, and many-to-many mappings FORM_FIELDS = [ # hide UUID, and many-to-many mappings
'first_name', 'last_name', 'birth_date', 'street', 'house_nr', 'first_name', 'last_name', 'birth_date', 'street', 'zip_code', 'city',
'zip_code', 'city', 'email', 'phone', 'identified', 'email', 'phone', 'identified', 'agreed_to_terms_of_service',
'agreed_to_terms_of_service',
] ]