[EcoAccount] See recorded state of withdraw #6
* adds prefiltering of withdraws --> excludes withdraws of as deleted flagged interventions * renders intervention-recorded icon into eco account withdraws details view * fixes bug in case of document deleting which does not contain any files * renames RecordForm into RecordModalForm for more clarity
This commit is contained in:
parent
c7fd0037bd
commit
280510d729
@ -239,7 +239,9 @@ class EcoAccount(AbstractCompensation):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
ret_val = 0
|
ret_val = 0
|
||||||
withdraws = self.withdraws.all()
|
withdraws = self.withdraws.filter(
|
||||||
|
intervention__deleted=None,
|
||||||
|
)
|
||||||
withdraw_surfaces = withdraws.aggregate(Sum("surface"))["surface__sum"] or 0
|
withdraw_surfaces = withdraws.aggregate(Sum("surface"))["surface__sum"] or 0
|
||||||
after_states_surfaces = self.after_states.all().aggregate(Sum("surface"))["surface__sum"] or withdraw_surfaces ## no division by zero
|
after_states_surfaces = self.after_states.all().aggregate(Sum("surface"))["surface__sum"] or withdraw_surfaces ## no division by zero
|
||||||
ret_val = after_states_surfaces - withdraw_surfaces
|
ret_val = after_states_surfaces - withdraw_surfaces
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-sm-6">
|
<div class="col-sm-6">
|
||||||
<h5>
|
<h5>
|
||||||
<span class="badge badge-light">{{obj.withdraws.count}}</span>
|
<span class="badge badge-light">{{withdraws.count}}</span>
|
||||||
{% trans 'Eco Account Withdraws' %}
|
{% trans 'Eco Account Withdraws' %}
|
||||||
</h5>
|
</h5>
|
||||||
</div>
|
</div>
|
||||||
@ -27,6 +27,9 @@
|
|||||||
<th scope="col">
|
<th scope="col">
|
||||||
{% trans 'Intervention Identifier' %}
|
{% trans 'Intervention Identifier' %}
|
||||||
</th>
|
</th>
|
||||||
|
<th scope="col">
|
||||||
|
{% trans 'Recorded' %}
|
||||||
|
</th>
|
||||||
<th scope="col">
|
<th scope="col">
|
||||||
{% trans 'Amount' %}
|
{% trans 'Amount' %}
|
||||||
</th>
|
</th>
|
||||||
@ -39,16 +42,20 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for withdraw in obj.withdraws.all %}
|
{% for withdraw in withdraws %}
|
||||||
<tr {% if withdraw.account.deleted %}class="align-middle alert-danger" title="{% trans 'Eco-account deleted! Withdraw invalid!' %}" {% elif not withdraw.account.recorded %}class="align-middle alert-danger" title="{% trans 'Eco-account not recorded! Withdraw invalid!' %}" {% endif %}>
|
<tr>
|
||||||
<td class="align-middle">
|
<td class="align-middle">
|
||||||
<a href="{% url 'intervention:open' withdraw.intervention.id %}">
|
<a href="{% url 'intervention:open' withdraw.intervention.id %}">
|
||||||
{% if withdraw.account.deleted or not withdraw.account.recorded %}
|
|
||||||
{% fa5_icon 'exclamation-triangle' %}
|
|
||||||
{% endif %}
|
|
||||||
{{ withdraw.intervention.identifier }}
|
{{ withdraw.intervention.identifier }}
|
||||||
</a>
|
</a>
|
||||||
</td>
|
</td>
|
||||||
|
<td class="align-middle">
|
||||||
|
{% if withdraw.intervention.recorded %}
|
||||||
|
<em title='{{ withdraw.intervention.recorded_tooltip }}' class='fas fa-bookmark registered-bookmark'></em>
|
||||||
|
{% else %}
|
||||||
|
<em title='{{ withdraw.intervention.recorded_tooltip }}' class='far fa-bookmark'></em>
|
||||||
|
{% endif %}
|
||||||
|
</td>
|
||||||
<td class="align-middle">{{ withdraw.surface|floatformat:2|intcomma }} m²</td>
|
<td class="align-middle">{{ withdraw.surface|floatformat:2|intcomma }} m²</td>
|
||||||
<td class="align-middle">{{ withdraw.created.timestamp|default_if_none:""|naturalday}}</td>
|
<td class="align-middle">{{ withdraw.created.timestamp|default_if_none:""|naturalday}}</td>
|
||||||
<td>
|
<td>
|
||||||
|
@ -19,7 +19,7 @@ from compensation.tables import EcoAccountTable
|
|||||||
from intervention.forms import NewWithdrawForm
|
from intervention.forms import NewWithdrawForm
|
||||||
from konova.contexts import BaseContext
|
from konova.contexts import BaseContext
|
||||||
from konova.decorators import any_group_check, default_group_required, conservation_office_group_required
|
from konova.decorators import any_group_check, default_group_required, conservation_office_group_required
|
||||||
from konova.forms import RemoveModalForm, SimpleGeomForm, NewDocumentForm, RecordForm
|
from konova.forms import RemoveModalForm, SimpleGeomForm, NewDocumentForm, RecordModalForm
|
||||||
from konova.settings import DEFAULT_GROUP, ZB_GROUP, ETS_GROUP
|
from konova.settings import DEFAULT_GROUP, ZB_GROUP, ETS_GROUP
|
||||||
from konova.utils.user_checks import in_group
|
from konova.utils.user_checks import in_group
|
||||||
|
|
||||||
@ -97,6 +97,10 @@ def open_view(request: HttpRequest, id: str):
|
|||||||
# Calculate rest of available surface for withdraws
|
# Calculate rest of available surface for withdraws
|
||||||
available = acc.get_available_rest(as_percentage=True)
|
available = acc.get_available_rest(as_percentage=True)
|
||||||
|
|
||||||
|
withdraws = acc.withdraws.filter(
|
||||||
|
intervention__deleted=None,
|
||||||
|
)
|
||||||
|
|
||||||
context = {
|
context = {
|
||||||
"obj": acc,
|
"obj": acc,
|
||||||
"geom_form": geom_form,
|
"geom_form": geom_form,
|
||||||
@ -111,6 +115,7 @@ def open_view(request: HttpRequest, id: str):
|
|||||||
"is_zb_member": in_group(_user, ZB_GROUP),
|
"is_zb_member": in_group(_user, ZB_GROUP),
|
||||||
"is_ets_member": in_group(_user, ETS_GROUP),
|
"is_ets_member": in_group(_user, ETS_GROUP),
|
||||||
"LANIS_LINK": acc.get_LANIS_link(),
|
"LANIS_LINK": acc.get_LANIS_link(),
|
||||||
|
"withdraws": withdraws,
|
||||||
}
|
}
|
||||||
context = BaseContext(request, context).context
|
context = BaseContext(request, context).context
|
||||||
return render(request, template, context)
|
return render(request, template, context)
|
||||||
@ -200,7 +205,7 @@ def record_view(request: HttpRequest, id:str):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
acc = get_object_or_404(EcoAccount, id=id)
|
acc = get_object_or_404(EcoAccount, id=id)
|
||||||
form = RecordForm(request.POST or None, instance=acc, user=request.user)
|
form = RecordModalForm(request.POST or None, instance=acc, user=request.user)
|
||||||
msg_succ = _("{} unrecorded") if acc.recorded else _("{} recorded")
|
msg_succ = _("{} unrecorded") if acc.recorded else _("{} recorded")
|
||||||
msg_succ = msg_succ.format(acc.identifier)
|
msg_succ = msg_succ.format(acc.identifier)
|
||||||
return form.process_request(
|
return form.process_request(
|
||||||
|
@ -11,7 +11,7 @@ from ema.tables import EmaTable
|
|||||||
from konova.contexts import BaseContext
|
from konova.contexts import BaseContext
|
||||||
from konova.decorators import conservation_office_group_required
|
from konova.decorators import conservation_office_group_required
|
||||||
from ema.models import Ema
|
from ema.models import Ema
|
||||||
from konova.forms import RemoveModalForm, NewDocumentForm, SimpleGeomForm, RecordForm
|
from konova.forms import RemoveModalForm, NewDocumentForm, SimpleGeomForm, RecordModalForm
|
||||||
from konova.settings import DEFAULT_GROUP, ZB_GROUP, ETS_GROUP
|
from konova.settings import DEFAULT_GROUP, ZB_GROUP, ETS_GROUP
|
||||||
from konova.utils.user_checks import in_group
|
from konova.utils.user_checks import in_group
|
||||||
|
|
||||||
@ -168,7 +168,7 @@ def record_view(request: HttpRequest, id: str):
|
|||||||
"""
|
"""
|
||||||
ema = get_object_or_404(Ema, id=id)
|
ema = get_object_or_404(Ema, id=id)
|
||||||
msg_succ = _("{} unrecorded") if ema.recorded else _("{} recorded")
|
msg_succ = _("{} unrecorded") if ema.recorded else _("{} recorded")
|
||||||
form = RecordForm(request.POST or None, instance=ema, user=request.user)
|
form = RecordModalForm(request.POST or None, instance=ema, user=request.user)
|
||||||
return form.process_request(
|
return form.process_request(
|
||||||
request=request,
|
request=request,
|
||||||
msg_success=msg_succ.format("EMA"),
|
msg_success=msg_succ.format("EMA"),
|
||||||
|
@ -413,6 +413,8 @@ class RunCheckForm(BaseModalForm):
|
|||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self.form_title = _("Run check")
|
self.form_title = _("Run check")
|
||||||
self.form_caption = _("I, {} {}, confirm that all necessary control steps have been performed by myself.").format(self.user.first_name, self.user.last_name)
|
self.form_caption = _("I, {} {}, confirm that all necessary control steps have been performed by myself.").format(self.user.first_name, self.user.last_name)
|
||||||
|
# Disable automatic w-100 setting for this type of modal form. Looks kinda strange
|
||||||
|
self.fields["confirm"].widget.attrs["class"] = ""
|
||||||
|
|
||||||
def is_valid(self):
|
def is_valid(self):
|
||||||
super_result = super().is_valid()
|
super_result = super().is_valid()
|
||||||
|
@ -7,10 +7,12 @@ Created on: 17.11.20
|
|||||||
"""
|
"""
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.contrib.gis.db import models
|
from django.contrib.gis.db import models
|
||||||
|
from django.utils.timezone import localtime
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from konova.models import BaseObject, Geometry, UuidModel, BaseResource
|
from konova.models import BaseObject, Geometry, UuidModel, BaseResource
|
||||||
from konova.settings import DEFAULT_SRID_RLP, LANIS_LINK_TEMPLATE
|
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 konova.utils import generators
|
||||||
from organisation.models import Organisation
|
from organisation.models import Organisation
|
||||||
from user.models import UserActionLogEntry
|
from user.models import UserActionLogEntry
|
||||||
@ -45,6 +47,7 @@ class Revocation(BaseResource):
|
|||||||
|
|
||||||
def delete(self):
|
def delete(self):
|
||||||
# Make sure related objects are being removed as well
|
# Make sure related objects are being removed as well
|
||||||
|
if self.document:
|
||||||
self.document.delete()
|
self.document.delete()
|
||||||
super().delete()
|
super().delete()
|
||||||
|
|
||||||
@ -248,3 +251,13 @@ class Intervention(BaseObject):
|
|||||||
x,
|
x,
|
||||||
y,
|
y,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def recorded_tooltip(self):
|
||||||
|
tooltip = _("Not recorded yet")
|
||||||
|
if self.recorded:
|
||||||
|
value = self.recorded.timestamp
|
||||||
|
value = localtime(value)
|
||||||
|
on = value.strftime(DEFAULT_DATE_TIME_FORMAT)
|
||||||
|
tooltip = _("Recorded on {} by {}").format(on, self.recorded.user)
|
||||||
|
return tooltip
|
@ -10,7 +10,7 @@ from intervention.models import Intervention, Revocation
|
|||||||
from intervention.tables import InterventionTable
|
from intervention.tables import InterventionTable
|
||||||
from konova.contexts import BaseContext
|
from konova.contexts import BaseContext
|
||||||
from konova.decorators import *
|
from konova.decorators import *
|
||||||
from konova.forms import SimpleGeomForm, NewDocumentForm, RemoveModalForm, RecordForm
|
from konova.forms import SimpleGeomForm, NewDocumentForm, RemoveModalForm, RecordModalForm
|
||||||
from konova.sub_settings.django_settings import DEFAULT_DATE_FORMAT
|
from konova.sub_settings.django_settings import DEFAULT_DATE_FORMAT
|
||||||
from konova.utils.message_templates import FORM_INVALID, INTERVENTION_INVALID
|
from konova.utils.message_templates import FORM_INVALID, INTERVENTION_INVALID
|
||||||
from konova.utils.user_checks import in_group
|
from konova.utils.user_checks import in_group
|
||||||
@ -372,7 +372,7 @@ def record_view(request: HttpRequest, id: str):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
intervention = get_object_or_404(Intervention, id=id)
|
intervention = get_object_or_404(Intervention, id=id)
|
||||||
form = RecordForm(request.POST or None, instance=intervention, user=request.user)
|
form = RecordModalForm(request.POST or None, instance=intervention, user=request.user)
|
||||||
msg_succ = _("{} unrecorded") if intervention.recorded else _("{} recorded")
|
msg_succ = _("{} unrecorded") if intervention.recorded else _("{} recorded")
|
||||||
msg_succ = msg_succ.format(intervention.identifier)
|
msg_succ = msg_succ.format(intervention.identifier)
|
||||||
return form.process_request(
|
return form.process_request(
|
||||||
|
@ -359,7 +359,7 @@ class NewDocumentForm(BaseModalForm):
|
|||||||
return doc
|
return doc
|
||||||
|
|
||||||
|
|
||||||
class RecordForm(BaseModalForm):
|
class RecordModalForm(BaseModalForm):
|
||||||
""" Modal form for recording data
|
""" Modal form for recording data
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@ -374,6 +374,8 @@ class RecordForm(BaseModalForm):
|
|||||||
super().__init__(*args, **kwargs)
|
super().__init__(*args, **kwargs)
|
||||||
self.form_title = _("Record data")
|
self.form_title = _("Record data")
|
||||||
self.form_caption = _("I, {} {}, confirm that all necessary control steps have been performed by myself.").format(self.user.first_name, self.user.last_name)
|
self.form_caption = _("I, {} {}, confirm that all necessary control steps have been performed by myself.").format(self.user.first_name, self.user.last_name)
|
||||||
|
# Disable automatic w-100 setting for this type of modal form. Looks kinda strange
|
||||||
|
self.fields["confirm"].widget.attrs["class"] = ""
|
||||||
|
|
||||||
if self.instance.recorded:
|
if self.instance.recorded:
|
||||||
# unrecord!
|
# unrecord!
|
||||||
|
Loading…
Reference in New Issue
Block a user