#18 File upload in certain folders
* refactors documents and file upload to be distributed into different subfolders, depending on the type of document (InterventionDocument, RevocationDocument, ...) * refactors Document model into AbstractDocument * subclasses RevocationDocument, InterventionDocument, COmpensationDocument, EmaDocument and EcoAccountDocument from AbstractDocument to provide proper functionality for each * adds new specialized routes for each new document type (opening, removing) * drops generic get and remove routes for documents
This commit is contained in:
+38
-10
@@ -13,11 +13,11 @@ from django.utils.translation import gettext_lazy as _
|
||||
from codelist.models import KonovaCode
|
||||
from codelist.settings import CODELIST_REGISTRATION_OFFICE_ID, CODELIST_CONSERVATION_OFFICE_ID, CODELIST_LAW_ID, \
|
||||
CODELIST_PROCESS_TYPE_ID
|
||||
from konova.models import BaseObject, Geometry, UuidModel, BaseResource
|
||||
from konova.models import BaseObject, Geometry, UuidModel, BaseResource, AbstractDocument, \
|
||||
generate_document_file_upload_path
|
||||
from konova.settings import DEFAULT_SRID_RLP, LANIS_LINK_TEMPLATE
|
||||
from konova.sub_settings.django_settings import DEFAULT_DATE_TIME_FORMAT
|
||||
from konova.utils import generators
|
||||
from organisation.models import Organisation
|
||||
from user.models import UserActionLogEntry
|
||||
|
||||
|
||||
@@ -68,15 +68,32 @@ class Revocation(BaseResource):
|
||||
"""
|
||||
date = models.DateField(null=True, blank=True, help_text="Revocation from")
|
||||
comment = models.TextField(null=True, blank=True)
|
||||
document = models.ForeignKey("konova.Document", blank=True, null=True, on_delete=models.SET_NULL)
|
||||
|
||||
def delete(self):
|
||||
def delete(self, *args, **kwargs):
|
||||
# Make sure related objects are being removed as well
|
||||
if self.document:
|
||||
self.document.delete()
|
||||
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
|
||||
)
|
||||
|
||||
@property
|
||||
def intervention(self):
|
||||
return self.instance.legaldata.intervention
|
||||
|
||||
|
||||
class LegalData(UuidModel):
|
||||
"""
|
||||
Holds intervention legal data such as important dates, laws or responsible handler
|
||||
@@ -112,7 +129,7 @@ class LegalData(UuidModel):
|
||||
}
|
||||
)
|
||||
|
||||
revocation = models.ForeignKey(Revocation, null=True, blank=True, help_text="Refers to 'Widerspruch am'", on_delete=models.SET_NULL)
|
||||
revocation = models.OneToOneField(Revocation, null=True, blank=True, help_text="Refers to 'Widerspruch am'", on_delete=models.SET_NULL)
|
||||
|
||||
def __str__(self):
|
||||
return "{} | {} | {}".format(
|
||||
@@ -131,7 +148,6 @@ class Intervention(BaseObject):
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
related_name='+',
|
||||
help_text="Holds data on responsible organizations ('Zulassungsbehörde', 'Eintragungsstelle')"
|
||||
)
|
||||
legal = models.OneToOneField(
|
||||
@@ -139,11 +155,9 @@ class Intervention(BaseObject):
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
related_name='+',
|
||||
help_text="Holds data on legal dates or law"
|
||||
)
|
||||
geometry = models.ForeignKey(Geometry, null=True, blank=True, on_delete=models.SET_NULL)
|
||||
documents = models.ManyToManyField("konova.Document", blank=True)
|
||||
|
||||
# Checks - Refers to "Genehmigen" but optional
|
||||
checked = models.OneToOneField(
|
||||
@@ -307,4 +321,18 @@ class Intervention(BaseObject):
|
||||
value = localtime(value)
|
||||
on = value.strftime(DEFAULT_DATE_TIME_FORMAT)
|
||||
tooltip = _("Recorded on {} by {}").format(on, self.recorded.user)
|
||||
return tooltip
|
||||
return tooltip
|
||||
|
||||
|
||||
class InterventionDocument(AbstractDocument):
|
||||
"""
|
||||
Specializes document upload for an intervention with certain path
|
||||
"""
|
||||
instance = models.ForeignKey(
|
||||
Intervention,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="documents",
|
||||
)
|
||||
file = models.FileField(
|
||||
upload_to=generate_document_file_upload_path
|
||||
)
|
||||
Reference in New Issue
Block a user