From e9f25e50ac2744f96c77d2fe916a4e819ce6de3f Mon Sep 17 00:00:00 2001 From: mipel Date: Fri, 30 Jul 2021 12:20:23 +0200 Subject: [PATCH] Compensation model refactoring * splits Intervention model into main components * Compensation (main object) * ResponsibilityData (holds organizations and handler) - same as used for intervention * This way data can be extended more easily in the future * refactors deadlines --- compensation/models.py | 27 +++++++++++++-------------- konova/admin.py | 12 +++++++++++- konova/enums.py | 6 ++++++ konova/models.py | 4 +++- 4 files changed, 33 insertions(+), 16 deletions(-) diff --git a/compensation/models.py b/compensation/models.py index f83e598e..e7c439b5 100644 --- a/compensation/models.py +++ b/compensation/models.py @@ -12,8 +12,8 @@ from django.utils import timezone from django.utils.timezone import now from compensation.settings import COMPENSATION_IDENTIFIER_LENGTH, COMPENSATION_IDENTIFIER_TEMPLATE -from intervention.models import Intervention -from konova.models import BaseObject, BaseResource, Geometry +from intervention.models import Intervention, ResponsibilityData +from konova.models import BaseObject, BaseResource, Geometry, UuidModel from konova.utils.generators import generate_random_string from organisation.models import Organisation @@ -73,18 +73,19 @@ class Compensation(BaseObject): The compensation holds information about which actions have to be performed until which date, who is in charge of this, which legal authority is the point of contact, and so on. """ - registration_office = models.ForeignKey(Organisation, on_delete=models.SET_NULL, null=True, related_name="+") - conservation_office = models.ForeignKey(Organisation, on_delete=models.SET_NULL, null=True, related_name="+") + responsible = models.OneToOneField( + ResponsibilityData, + on_delete=models.SET_NULL, + null=True, + blank=True, + help_text="Holds data on responsible organizations ('Zulassungsbehörde', 'Eintragungsstelle') and handler", + ) - ground_definitions = models.CharField(max_length=500, null=True, blank=True) # ToDo: Need to be M2M to laws! - action_definitions = models.CharField(max_length=500, null=True, blank=True) # ToDo: Need to be M2M to laws! + before_states = models.ManyToManyField(CompensationState, blank=True, related_name='+', help_text="Refers to 'Ausgangszustand Biotop'") + after_states = models.ManyToManyField(CompensationState, blank=True, related_name='+', help_text="Refers to 'Zielzustand Biotop'") + actions = models.ManyToManyField(CompensationAction, help_text="Refers to 'Maßnahmen'") - before_states = models.ManyToManyField(CompensationState, blank=True, related_name='+') - after_states = models.ManyToManyField(CompensationState, blank=True, related_name='+') - actions = models.ManyToManyField(CompensationAction) - - deadline_creation = models.ForeignKey("konova.Deadline", on_delete=models.SET_NULL, null=True, blank=True, related_name="+") - deadline_maintaining = models.ForeignKey("konova.Deadline", on_delete=models.SET_NULL, null=True, blank=True, related_name="+") + deadlines = models.ManyToManyField("konova.Deadline", null=True, blank=True, related_name="+") geometry = models.ForeignKey(Geometry, null=True, blank=True, on_delete=models.SET_NULL) documents = models.ManyToManyField("konova.Document", blank=True) @@ -149,7 +150,5 @@ class EcoAccount(Compensation): An eco account is a kind of 'prepaid' compensation. It can be compared to an account that already has been filled with some kind of currency. From this account one is able to 'withdraw' currency for current projects. """ - handler = models.CharField(max_length=500, null=True, blank=True, help_text="Who is responsible for handling the actions") - # Users having access on this object users = models.ManyToManyField(User) diff --git a/konova/admin.py b/konova/admin.py index 6fc31b76..e53a7fa3 100644 --- a/konova/admin.py +++ b/konova/admin.py @@ -7,7 +7,7 @@ Created on: 22.07.21 """ from django.contrib import admin -from konova.models import Geometry, Document +from konova.models import Geometry, Document, Deadline class GeometryAdmin(admin.ModelAdmin): @@ -28,5 +28,15 @@ class DocumentAdmin(admin.ModelAdmin): ] +class DeadlineAdmin(admin.ModelAdmin): + list_display = [ + "id", + "type", + "date", + "comment", + ] + + admin.site.register(Geometry, GeometryAdmin) admin.site.register(Document, DocumentAdmin) +admin.site.register(Deadline, DeadlineAdmin) diff --git a/konova/enums.py b/konova/enums.py index 1f54cf9a..f2209350 100644 --- a/konova/enums.py +++ b/konova/enums.py @@ -55,3 +55,9 @@ class UserActionLogEntryEnum(BaseEnum): """ CHECKED = "Checked" RECORDED = "Recorded" + + +class DeadlineTypeEnum(BaseEnum): + MAINTAIN = "Maintain" + CONTROL = "Control" + OTHER = "Other" \ No newline at end of file diff --git a/konova/models.py b/konova/models.py index 53d7bcca..e47764f7 100644 --- a/konova/models.py +++ b/konova/models.py @@ -12,6 +12,7 @@ from django.contrib.auth.models import User from django.contrib.gis.db.models import MultiPolygonField from django.db import models +from konova.enums import DeadlineTypeEnum from konova.settings import DEFAULT_SRID @@ -59,8 +60,9 @@ class Deadline(BaseResource): """ Defines a deadline, which can be used to define dates with a semantic meaning """ - type = models.CharField(max_length=500, null=True, blank=True) + type = models.CharField(max_length=255, null=True, blank=True, choices=DeadlineTypeEnum.as_choices(drop_empty_choice=True)) date = models.DateField(null=True, blank=True) + comment = models.CharField(max_length=1000, null=True, blank=True) def __str__(self): return self.type