added material models and admin interface
parent
af614f9927
commit
95e8b9a409
@ -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)
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class MaterialConfig(AppConfig):
|
||||||
|
name = 'material'
|
||||||
@ -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')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -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'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -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)
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
# Create your views here.
|
||||||
Loading…
Reference in New Issue