Intervention tables and model adjustments

* adds user access relation to certain models
* adds pagination to tables
* adds checked_on/_by attributes to intervention model
* adds custom column rendering for checked and registered columns
* adds first simple index filtering of default interventions for user
* adds translations
This commit is contained in:
mipel
2021-07-21 15:40:34 +02:00
parent 8f0db2ae3e
commit 67f415c2e3
10 changed files with 170 additions and 43 deletions

View File

@@ -33,22 +33,29 @@ class Intervention(BaseObject):
geometry = models.ForeignKey(Geometry, null=True, blank=True, on_delete=models.SET_NULL)
documents = models.ManyToManyField("konova.Document", blank=True)
# Checks
checked_on = models.DateTimeField(default=None, null=True, blank=True)
checked_by = models.ForeignKey(User, null=True, blank=True, on_delete=models.SET_NULL, related_name='+')
# Refers to "zugelassen am"
registration_date = models.DateField(null=True, blank=True)
# Refers to "Bestandskraft am"
binding_date = models.DateField(null=True, blank=True)
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)
recorded_on = models.DateTimeField(default=None, null=True, blank=True)
recorded_by = models.ForeignKey(User, null=True, blank=True, on_delete=models.SET_NULL, related_name='+')
# Holds which intervention is simply a newer version of this dataset
next_version = models.ForeignKey("Intervention", null=True, on_delete=models.DO_NOTHING)
next_version = models.ForeignKey("Intervention", null=True, blank=True, on_delete=models.DO_NOTHING)
# Compensation or payments, one-directional
payments = models.ManyToManyField(Payment, related_name="+")
compensations = models.ManyToManyField(Compensation, related_name="+")
payments = models.ManyToManyField(Payment, related_name="+", blank=True)
compensations = models.ManyToManyField(Compensation, related_name="+", blank=True)
# Users having access on this object
users = models.ManyToManyField(User)
def delete(self, *args, **kwargs):
""" Custom delete functionality

View File

@@ -7,9 +7,11 @@ Created on: 01.12.20
"""
from django.urls import reverse
from django.utils.html import format_html
from django.utils.timezone import localtime
from django.utils.translation import gettext_lazy as _
from intervention.models import Intervention
from konova.sub_settings.django_settings import DEFAULT_DATE_TIME_FORMAT
from konova.utils.tables import BaseTable
import django_tables2 as tables
@@ -28,11 +30,13 @@ class InterventionTable(BaseTable):
c = tables.Column(
verbose_name=_("Checked"),
orderable=True,
accessor="recorded_on",
empty_values=[],
accessor="checked_on",
)
r = tables.Column(
verbose_name=_("Registered"),
orderable=True,
empty_values=[],
accessor="recorded_on",
)
lm = tables.Column(
@@ -52,7 +56,7 @@ class InterventionTable(BaseTable):
"""
class Meta(BaseTable.Meta):
pass
template_name = "django_tables2/bootstrap4.html"
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
@@ -78,6 +82,52 @@ class InterventionTable(BaseTable):
)
return format_html(html)
def render_c(self, value, record: Intervention):
""" Renders the checked column for an intervention
Args:
value (str): The identifier value
record (Intervention): The intervention record
Returns:
"""
html = ""
checked = value is not None
tooltip = _("Not checked yet")
if checked:
value = localtime(value)
checked_on = value.strftime(DEFAULT_DATE_TIME_FORMAT)
tooltip = _("Checked on {} by {}").format(checked_on, record.checked_by)
html += self.render_checked_star(
tooltip=tooltip,
icn_filled=checked,
)
return format_html(html)
def render_r(self, value, record: Intervention):
""" Renders the registered column for an intervention
Args:
value (str): The identifier value
record (Intervention): The intervention record
Returns:
"""
html = ""
checked = value is not None
tooltip = _("Not registered yet")
if checked:
value = localtime(value)
checked_on = value.strftime(DEFAULT_DATE_TIME_FORMAT)
tooltip = _("Registered on {} by {}").format(checked_on, record.checked_by)
html += self.render_bookmark(
tooltip=tooltip,
icn_filled=checked,
)
return format_html(html)
def render_ac(self, value, record):
"""
Renders possible actions for this record, such as delete.

View File

@@ -26,7 +26,9 @@ def index_view(request: HttpRequest):
template = "generic_index.html"
user = request.user
interventions = Intervention.objects.filter(
deleted_on=None, # not deleted
next_version=None, # only newest versions
users__in=[user], # requesting user has access
)
table = InterventionTable(
request=request,