diff --git a/jdav_web/material/admin.py b/jdav_web/material/admin.py index 886b969..9f435b3 100644 --- a/jdav_web/material/admin.py +++ b/jdav_web/material/admin.py @@ -1,12 +1,22 @@ from django.contrib import admin -from .models import MaterialPart +from .models import MaterialPart, Ownership + # Register your models here. +class OwnershipInline(admin.StackedInline): + """ + This shows the ownership selection directly in the MaterialPart edit + view + """ + model = Ownership + extra = 0 class MaterialAdmin(admin.ModelAdmin): + """Edit view of a MaterialPart""" fields = ['name', 'buy_date'] list_display = ('name', 'buy_date', 'should_be_replaced') + inlines = [OwnershipInline] admin.site.register(MaterialPart, MaterialAdmin) diff --git a/jdav_web/material/migrations/0001_initial.py b/jdav_web/material/migrations/0001_initial.py index ae3a51b..7f71953 100644 --- a/jdav_web/material/migrations/0001_initial.py +++ b/jdav_web/material/migrations/0001_initial.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.10.2 on 2016-10-17 15:18 +# Generated by Django 1.10.2 on 2016-10-18 19:07 from __future__ import unicode_literals from django.db import migrations, models +import django.db.models.deletion class Migration(migrations.Migration): @@ -10,6 +11,7 @@ class Migration(migrations.Migration): initial = True dependencies = [ + ('members', '0004_auto_20161018_1744'), ] operations = [ @@ -18,7 +20,16 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=30)), - ('buy_date', models.DateTimeField(verbose_name='purchase date')), + ('buy_date', models.DateField(verbose_name='purchase date')), + ], + ), + migrations.CreateModel( + name='Ownership', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('count', models.IntegerField(default=1)), + ('material', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='material.MaterialPart')), + ('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='members.Member')), ], ), ] diff --git a/jdav_web/material/migrations/0002_auto_20161017_1522.py b/jdav_web/material/migrations/0002_auto_20161017_1522.py deleted file mode 100644 index d3dfed0..0000000 --- a/jdav_web/material/migrations/0002_auto_20161017_1522.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.10.2 on 2016-10-17 15:22 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('material', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='materialpart', - name='buy_date', - field=models.DateField(verbose_name='purchase date'), - ), - ] diff --git a/jdav_web/material/models.py b/jdav_web/material/models.py index 2b24ab9..5749e97 100644 --- a/jdav_web/material/models.py +++ b/jdav_web/material/models.py @@ -9,14 +9,19 @@ MAX_TIME_MATERIAL = 5 # Create your models here. class MaterialPart(models.Model): + """ + Represents one part of material, which is owned (and stored) by different + members of the association (Ownership) + """ name = models.CharField(max_length=30) buy_date = models.DateField('purchase date') - # owner = models.ForeignKey(Leiter) to be added later when there are user - def __repr__(self): + def __str__(self): + """String representation""" return self.name def should_be_replaced(self): + """Returns wether the part should be replaced cause of age""" buy_time = timezone.make_aware(datetime.combine(self.buy_date, datetime.min.time())) return yearsago(MAX_TIME_MATERIAL) >= buy_time @@ -26,7 +31,19 @@ class MaterialPart(models.Model): should_be_replaced.short_description = 'Should be replaced?' +class Ownership(models.Model): + """Represents the connection between a MaterialPart and a Member""" + material = models.ForeignKey(MaterialPart, on_delete=models.CASCADE) + owner = models.ForeignKey('members.Member') + count = models.IntegerField(default=1) + + def __str__(self): + """String representation""" + return str(self.owner) + + def yearsago(years, from_date=None): + """Function to return the date with a delta of years in the past""" if from_date is None: from_date = timezone.now() try: diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index 0fbb749..fee5bd0 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -2,21 +2,31 @@ from django.db import models class Group(models.Model): + """ + Represents one group of the association + e.g: J1, J2, Jugendleiter, etc. + """ name = models.CharField(max_length=20) # name of group e.g: J1 etc. min_age = models.IntegerField(default=5) # in years def __str__(self): - return "Group {0}".format(self.name) + """String representation""" + return self.name class Member(models.Model): + """ + Represents a member of the association + Might be a member of different groups: e.g. J1, J2, Jugendleiter, etc. + """ prename = models.CharField(max_length=20) lastname = models.CharField(max_length=20) email = models.EmailField(max_length=100, default="") birth_date = models.DateField('birth date') # to determine the age group = models.ManyToManyField(Group) - def __repr__(self): + def __str__(self): + """String representation""" return self.name @property