From 95e8b9a40956c3877cea96fe6c517c1be91e8ed8 Mon Sep 17 00:00:00 2001 From: erichhasl Date: Mon, 17 Oct 2016 17:54:19 +0200 Subject: [PATCH] added material models and admin interface --- jdav_web/jdav_web/settings.py | 1 + jdav_web/material/__init__.py | 0 jdav_web/material/admin.py | 12 ++++++ jdav_web/material/apps.py | 5 +++ jdav_web/material/migrations/0001_initial.py | 24 ++++++++++++ .../migrations/0002_auto_20161017_1522.py | 20 ++++++++++ jdav_web/material/migrations/__init__.py | 0 jdav_web/material/models.py | 37 +++++++++++++++++++ jdav_web/material/tests.py | 3 ++ jdav_web/material/views.py | 3 ++ 10 files changed, 105 insertions(+) create mode 100644 jdav_web/material/__init__.py create mode 100644 jdav_web/material/admin.py create mode 100644 jdav_web/material/apps.py create mode 100644 jdav_web/material/migrations/0001_initial.py create mode 100644 jdav_web/material/migrations/0002_auto_20161017_1522.py create mode 100644 jdav_web/material/migrations/__init__.py create mode 100644 jdav_web/material/models.py create mode 100644 jdav_web/material/tests.py create mode 100644 jdav_web/material/views.py diff --git a/jdav_web/jdav_web/settings.py b/jdav_web/jdav_web/settings.py index 6f3cd4b..1ebd78c 100644 --- a/jdav_web/jdav_web/settings.py +++ b/jdav_web/jdav_web/settings.py @@ -32,6 +32,7 @@ ALLOWED_HOSTS = [] INSTALLED_APPS = [ 'startpage.apps.StartpageConfig', + 'material.apps.MaterialConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', diff --git a/jdav_web/material/__init__.py b/jdav_web/material/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jdav_web/material/admin.py b/jdav_web/material/admin.py new file mode 100644 index 0000000..886b969 --- /dev/null +++ b/jdav_web/material/admin.py @@ -0,0 +1,12 @@ +from django.contrib import admin + +from .models import MaterialPart + +# Register your models here. + + +class MaterialAdmin(admin.ModelAdmin): + fields = ['name', 'buy_date'] + list_display = ('name', 'buy_date', 'should_be_replaced') + +admin.site.register(MaterialPart, MaterialAdmin) diff --git a/jdav_web/material/apps.py b/jdav_web/material/apps.py new file mode 100644 index 0000000..347c729 --- /dev/null +++ b/jdav_web/material/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class MaterialConfig(AppConfig): + name = 'material' diff --git a/jdav_web/material/migrations/0001_initial.py b/jdav_web/material/migrations/0001_initial.py new file mode 100644 index 0000000..ae3a51b --- /dev/null +++ b/jdav_web/material/migrations/0001_initial.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.2 on 2016-10-17 15:18 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='MaterialPart', + 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')), + ], + ), + ] diff --git a/jdav_web/material/migrations/0002_auto_20161017_1522.py b/jdav_web/material/migrations/0002_auto_20161017_1522.py new file mode 100644 index 0000000..d3dfed0 --- /dev/null +++ b/jdav_web/material/migrations/0002_auto_20161017_1522.py @@ -0,0 +1,20 @@ +# -*- 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/migrations/__init__.py b/jdav_web/material/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jdav_web/material/models.py b/jdav_web/material/models.py new file mode 100644 index 0000000..270a794 --- /dev/null +++ b/jdav_web/material/models.py @@ -0,0 +1,37 @@ +from datetime import date, datetime + +from django.db import models +from django.utils import timezone + +# maximum time in years of a material part until being replaced +MAX_TIME_MATERIAL = 5 + + +# Create your models here. +class MaterialPart(models.Model): + 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): + return self.name + + def should_be_replaced(self): + buy_time = timezone.make_aware(datetime.combine(self.buy_date, + datetime.min.time())) + return yearsago(MAX_TIME_MATERIAL) >= buy_time + + should_be_replaced.admin_order_field = 'buy_date' + should_be_replaced.boolean = True + should_be_replaced.short_description = 'Should be replaced?' + + +def yearsago(years, from_date=None): + if from_date is None: + from_date = timezone.now() + try: + return from_date.replace(year=from_date.year - years) + except ValueError: + # 29.02 -> use 28.02 + assert from_date.month == 2 and from_date.day == 29 + return from_date.replace(month=2, day=28, year=from_date.year - years) diff --git a/jdav_web/material/tests.py b/jdav_web/material/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/jdav_web/material/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/jdav_web/material/views.py b/jdav_web/material/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/jdav_web/material/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here.