Refactoring to konova
This commit is contained in:
@@ -9,7 +9,6 @@ class InterventionAdmin(admin.ModelAdmin):
|
||||
"title",
|
||||
"process_type",
|
||||
"handler",
|
||||
"is_active",
|
||||
"created_on",
|
||||
"deleted_on",
|
||||
]
|
||||
|
||||
@@ -7,8 +7,11 @@ Created on: 17.11.20
|
||||
"""
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.gis.db import models
|
||||
from django.db import transaction
|
||||
from django.utils import timezone
|
||||
from django.utils.timezone import now
|
||||
|
||||
from compensation.models import Payment, Compensation
|
||||
from intervention.settings import INTERVENTION_IDENTIFIER_LENGTH, INTERVENTION_IDENTIFIER_TEMPLATE
|
||||
from konova.models import BaseObject, Geometry
|
||||
from konova.utils.generators import generate_random_string
|
||||
@@ -18,22 +21,23 @@ from organisation.models import Organisation
|
||||
class Intervention(BaseObject):
|
||||
"""
|
||||
Interventions are e.g. construction sites where nature used to be.
|
||||
|
||||
A process consists of exactly one intervention and one or more compensation
|
||||
"""
|
||||
registration_office = models.ForeignKey(Organisation, on_delete=models.SET_NULL, null=True)
|
||||
registration_office = models.ForeignKey(Organisation, on_delete=models.SET_NULL, null=True, related_name="+")
|
||||
registration_file_number = models.CharField(max_length=1000, blank=True, null=True)
|
||||
registration_date = models.DateTimeField(null=True, blank=True)
|
||||
|
||||
conservation_office = models.ForeignKey(Organisation, on_delete=models.SET_NULL, null=True)
|
||||
conservation_office = models.ForeignKey(Organisation, on_delete=models.SET_NULL, null=True, related_name="+")
|
||||
conservations_file_number = models.CharField(max_length=1000, blank=True, null=True)
|
||||
|
||||
process_type = models.CharField(max_length=500, null=True, blank=True)
|
||||
law = models.CharField(max_length=500, null=True, blank=True)
|
||||
handler = models.CharField(max_length=500, null=True, blank=True)
|
||||
geometry = models.ForeignKey(Geometry, null=True, blank=True, on_delete=models.SET_NULL)
|
||||
documents = models.ManyToManyField("konova.Document", blank=True)
|
||||
|
||||
# Refers to "zugelassen am"
|
||||
registration_date = models.DateField(null=True, blank=True)
|
||||
|
||||
# Refers to "Bestandskraft am"
|
||||
binding_on = models.DateField(null=True, blank=True)
|
||||
|
||||
# Refers to "verzeichnen"
|
||||
recorded_on = models.DateTimeField(default=None)
|
||||
recorded_by = models.ForeignKey(User, null=True, blank=True, on_delete=models.SET_NULL)
|
||||
@@ -41,14 +45,39 @@ class Intervention(BaseObject):
|
||||
# Holds which intervention is simply a newer version of this dataset
|
||||
next_version = models.ForeignKey("Intervention", null=True, on_delete=models.DO_NOTHING)
|
||||
|
||||
def __str__(self):
|
||||
return "{} by {}".format(self.type, self.handler)
|
||||
# Compensation or payments, one-directional
|
||||
payments = models.ManyToManyField(Payment, related_name="+")
|
||||
compensations = models.ManyToManyField(Compensation, related_name="+")
|
||||
|
||||
def delete(self, *args, **kwargs):
|
||||
super().delete(*args, **kwargs)
|
||||
""" Custom delete functionality
|
||||
|
||||
Does not delete from database but sets a timestamp for being deleted on and which user deleted the object
|
||||
|
||||
Args:
|
||||
*args ():
|
||||
**kwargs ():
|
||||
|
||||
Returns:
|
||||
|
||||
"""
|
||||
_now = timezone.now()
|
||||
_user = kwargs.get("user", None)
|
||||
|
||||
with transaction.atomic():
|
||||
# "Delete" related compensations as well
|
||||
coms = self.compensations.all()
|
||||
for com in coms:
|
||||
com.deleted_on = _now
|
||||
com.deleted_by = _user
|
||||
com.save()
|
||||
|
||||
self.deleted_on = _now
|
||||
self.deleted_by = _user
|
||||
self.save()
|
||||
|
||||
@staticmethod
|
||||
def __generate_new_identifier() -> str:
|
||||
def _generate_new_identifier() -> str:
|
||||
""" Generates a new identifier for the intervention object
|
||||
|
||||
Returns:
|
||||
@@ -66,8 +95,8 @@ class Intervention(BaseObject):
|
||||
def save(self, *args, **kwargs):
|
||||
if self.identifier is None or len(self.identifier) == 0:
|
||||
# Create new identifier
|
||||
new_id = self.__generate_new_identifier()
|
||||
new_id = self._generate_new_identifier()
|
||||
while Intervention.objects.filter(identifier=new_id).exists():
|
||||
new_id = self.__generate_new_identifier()
|
||||
new_id = self._generate_new_identifier()
|
||||
self.identifier = new_id
|
||||
super().save(*args, **kwargs)
|
||||
@@ -25,11 +25,6 @@ class InterventionTable(BaseTable):
|
||||
orderable=True,
|
||||
accessor="title",
|
||||
)
|
||||
p = tables.Column(
|
||||
verbose_name=_("Process"),
|
||||
orderable=True,
|
||||
accessor="process",
|
||||
)
|
||||
d = tables.Column(
|
||||
verbose_name=_("Created on"),
|
||||
orderable=True,
|
||||
|
||||
@@ -2,8 +2,7 @@ from django.contrib import messages
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.http import HttpRequest
|
||||
from django.shortcuts import render, get_object_or_404, redirect
|
||||
from django.urls import reverse
|
||||
from django.shortcuts import render, get_object_or_404
|
||||
|
||||
from intervention.forms import NewInterventionForm, EditInterventionForm, OpenInterventionForm
|
||||
from intervention.models import Intervention
|
||||
@@ -11,14 +10,12 @@ from intervention.tables import InterventionTable
|
||||
from konova.contexts import BaseContext
|
||||
from konova.decorators import *
|
||||
from konova.forms import RemoveForm
|
||||
from process.models import Process
|
||||
|
||||
|
||||
@login_required
|
||||
|
||||
def index_view(request: HttpRequest):
|
||||
"""
|
||||
Renders the index view for process
|
||||
Renders the index view for Interventions
|
||||
|
||||
Args:
|
||||
request (HttpRequest): The incoming request
|
||||
@@ -56,14 +53,8 @@ def new_view(request: HttpRequest):
|
||||
if request.method == "POST":
|
||||
if form.is_valid():
|
||||
intervention = form.save(request.user)
|
||||
if intervention.process is None:
|
||||
# An intervention can not be created without a process -> automatically create a new process
|
||||
process = Process.create_from_intervention(intervention)
|
||||
messages.info(request, _("Interventions must be part of a process. Please fill in the missing data for the process"))
|
||||
return redirect("process:edit", id=process.id)
|
||||
else:
|
||||
messages.success(request, _("Intervention {} added").format(intervention.title))
|
||||
return redirect("intervention:index")
|
||||
messages.success(request, _("Intervention {} added").format(intervention.title))
|
||||
return redirect("intervention:index")
|
||||
else:
|
||||
messages.error(request, _("Invalid input"))
|
||||
else:
|
||||
@@ -129,7 +120,7 @@ def edit_view(request: HttpRequest, id: str):
|
||||
|
||||
@login_required
|
||||
def remove_view(request: HttpRequest, id: str):
|
||||
""" Renders a remove view for this process
|
||||
""" Renders a remove view for this intervention
|
||||
|
||||
Args:
|
||||
request (HttpRequest): The incoming request
|
||||
@@ -139,29 +130,13 @@ def remove_view(request: HttpRequest, id: str):
|
||||
|
||||
"""
|
||||
template = "konova/form.html"
|
||||
# Since an intervention is always organized inside a process, we will call the process removing routine, which
|
||||
# disables all related elements by default
|
||||
obj = get_object_or_404(Intervention, id=id)
|
||||
process = obj.process
|
||||
if request.method == "POST":
|
||||
form = RemoveForm(
|
||||
request.POST or None,
|
||||
object_to_remove=obj,
|
||||
remove_post_url=reverse("process:remove", args=(process.id,)),
|
||||
cancel_url=reverse("intervention:index"),
|
||||
)
|
||||
if form.is_valid():
|
||||
confirmed = form.is_checked()
|
||||
if confirmed:
|
||||
process.deactivate()
|
||||
messages.success(request, _("Intervention {} removed").format(obj))
|
||||
return redirect("intervention:index")
|
||||
else:
|
||||
messages.error(request, _("Invalid input"))
|
||||
obj = Intervention.objects.get(id=id)
|
||||
|
||||
# ToDo
|
||||
|
||||
form = RemoveForm(
|
||||
object_to_remove=obj,
|
||||
remove_post_url=reverse("process:remove", args=(process.id,)),
|
||||
remove_post_url=reverse("intervention:remove", args=(id,)),
|
||||
cancel_url=reverse("intervention:index"),
|
||||
)
|
||||
context = {
|
||||
|
||||
Reference in New Issue
Block a user