combined member and material system

v1-0-stable
Christian Merten 9 years ago
parent 6dd141b3fa
commit 0f02570657

@ -1,12 +1,22 @@
from django.contrib import admin from django.contrib import admin
from .models import MaterialPart from .models import MaterialPart, Ownership
# Register your models here. # 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): class MaterialAdmin(admin.ModelAdmin):
"""Edit view of a MaterialPart"""
fields = ['name', 'buy_date'] fields = ['name', 'buy_date']
list_display = ('name', 'buy_date', 'should_be_replaced') list_display = ('name', 'buy_date', 'should_be_replaced')
inlines = [OwnershipInline]
admin.site.register(MaterialPart, MaterialAdmin) admin.site.register(MaterialPart, MaterialAdmin)

@ -1,8 +1,9 @@
# -*- coding: utf-8 -*- # -*- 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 __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration): class Migration(migrations.Migration):
@ -10,6 +11,7 @@ class Migration(migrations.Migration):
initial = True initial = True
dependencies = [ dependencies = [
('members', '0004_auto_20161018_1744'),
] ]
operations = [ operations = [
@ -18,7 +20,16 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=30)), ('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')),
], ],
), ),
] ]

@ -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'),
),
]

@ -9,14 +9,19 @@ MAX_TIME_MATERIAL = 5
# Create your models here. # Create your models here.
class MaterialPart(models.Model): 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) name = models.CharField(max_length=30)
buy_date = models.DateField('purchase date') 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 return self.name
def should_be_replaced(self): 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, buy_time = timezone.make_aware(datetime.combine(self.buy_date,
datetime.min.time())) datetime.min.time()))
return yearsago(MAX_TIME_MATERIAL) >= buy_time return yearsago(MAX_TIME_MATERIAL) >= buy_time
@ -26,7 +31,19 @@ class MaterialPart(models.Model):
should_be_replaced.short_description = 'Should be replaced?' 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): def yearsago(years, from_date=None):
"""Function to return the date with a delta of years in the past"""
if from_date is None: if from_date is None:
from_date = timezone.now() from_date = timezone.now()
try: try:

@ -2,21 +2,31 @@ from django.db import models
class Group(models.Model): 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. name = models.CharField(max_length=20) # name of group e.g: J1 etc.
min_age = models.IntegerField(default=5) # in years min_age = models.IntegerField(default=5) # in years
def __str__(self): def __str__(self):
return "Group {0}".format(self.name) """String representation"""
return self.name
class Member(models.Model): 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) prename = models.CharField(max_length=20)
lastname = models.CharField(max_length=20) lastname = models.CharField(max_length=20)
email = models.EmailField(max_length=100, default="") email = models.EmailField(max_length=100, default="")
birth_date = models.DateField('birth date') # to determine the age birth_date = models.DateField('birth date') # to determine the age
group = models.ManyToManyField(Group) group = models.ManyToManyField(Group)
def __repr__(self): def __str__(self):
"""String representation"""
return self.name return self.name
@property @property

Loading…
Cancel
Save