Refactoring
* splits intervention/models.py into subpackage
This commit is contained in:
87
intervention/models/revocation.py
Normal file
87
intervention/models/revocation.py
Normal file
@@ -0,0 +1,87 @@
|
||||
"""
|
||||
Author: Michel Peltriaux
|
||||
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
|
||||
Contact: michel.peltriaux@sgdnord.rlp.de
|
||||
Created on: 15.11.21
|
||||
|
||||
"""
|
||||
|
||||
import shutil
|
||||
|
||||
from django.contrib.gis.db import models
|
||||
from konova.models import BaseResource, AbstractDocument, generate_document_file_upload_path
|
||||
|
||||
|
||||
class Revocation(BaseResource):
|
||||
"""
|
||||
Holds revocation data e.g. for intervention objects
|
||||
"""
|
||||
date = models.DateField(null=True, blank=True, help_text="Revocation from")
|
||||
legal = models.ForeignKey("Legal", null=False, blank=False, on_delete=models.CASCADE, help_text="Refers to 'Widerspruch am'", related_name="revocations")
|
||||
comment = models.TextField(null=True, blank=True)
|
||||
|
||||
def delete(self, *args, **kwargs):
|
||||
# Make sure related objects are being removed as well
|
||||
if self.document:
|
||||
self.document.delete(*args, **kwargs)
|
||||
super().delete()
|
||||
|
||||
|
||||
class RevocationDocument(AbstractDocument):
|
||||
"""
|
||||
Specializes document upload for revocations with certain path
|
||||
"""
|
||||
instance = models.OneToOneField(
|
||||
Revocation,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="document",
|
||||
)
|
||||
file = models.FileField(
|
||||
upload_to=generate_document_file_upload_path,
|
||||
max_length=1000,
|
||||
)
|
||||
|
||||
@property
|
||||
def intervention(self):
|
||||
"""
|
||||
Shortcut for opening the related intervention
|
||||
|
||||
Returns:
|
||||
intervention (Intervention)
|
||||
"""
|
||||
return self.instance.legal.intervention
|
||||
|
||||
def delete(self, *args, **kwargs):
|
||||
"""
|
||||
Custom delete functionality for RevocationDocuments.
|
||||
Removes the folder from the file system if there are no further documents for this entry.
|
||||
|
||||
Args:
|
||||
*args ():
|
||||
**kwargs ():
|
||||
|
||||
Returns:
|
||||
|
||||
"""
|
||||
revoc_docs, other_intervention_docs = self.intervention.get_documents()
|
||||
|
||||
# Remove the file itself
|
||||
super().delete(*args, **kwargs)
|
||||
|
||||
# Always remove 'revocation' folder if the one revocation we just processed is the only one left
|
||||
folder_path = self.file.path.split("/")
|
||||
if revoc_docs.count() == 0:
|
||||
try:
|
||||
shutil.rmtree("/".join(folder_path[:-1]))
|
||||
except FileNotFoundError:
|
||||
# Revocation subfolder seems to be missing already
|
||||
pass
|
||||
|
||||
if other_intervention_docs.count() == 0:
|
||||
# If there are no further documents for the intervention, we can simply remove the whole folder as well!
|
||||
try:
|
||||
shutil.rmtree("/".join(folder_path[:-2]))
|
||||
except FileNotFoundError:
|
||||
# Folder seems to be missing already
|
||||
pass
|
||||
|
||||
Reference in New Issue
Block a user