[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
 | 
			
		||||
        withdraws = self.withdraws.all()
 | 
			
		||||
        withdraws = self.withdraws.filter(
 | 
			
		||||
            intervention__deleted=None,
 | 
			
		||||
        )
 | 
			
		||||
        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
 | 
			
		||||
        ret_val = after_states_surfaces - withdraw_surfaces
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@
 | 
			
		||||
        <div class="row">
 | 
			
		||||
            <div class="col-sm-6">
 | 
			
		||||
                <h5>
 | 
			
		||||
                    <span class="badge badge-light">{{obj.withdraws.count}}</span>
 | 
			
		||||
                    <span class="badge badge-light">{{withdraws.count}}</span>
 | 
			
		||||
                    {% trans 'Eco Account Withdraws' %}
 | 
			
		||||
                </h5>
 | 
			
		||||
            </div>
 | 
			
		||||
@ -27,6 +27,9 @@
 | 
			
		||||
                <th scope="col">
 | 
			
		||||
                    {% trans 'Intervention Identifier' %}
 | 
			
		||||
                </th>
 | 
			
		||||
                <th scope="col">
 | 
			
		||||
                    {% trans 'Recorded' %}
 | 
			
		||||
                </th>
 | 
			
		||||
                <th scope="col">
 | 
			
		||||
                    {% trans 'Amount' %}
 | 
			
		||||
                </th>
 | 
			
		||||
@ -39,16 +42,20 @@
 | 
			
		||||
            </tr>
 | 
			
		||||
            </thead>
 | 
			
		||||
            <tbody>
 | 
			
		||||
            {% for withdraw in obj.withdraws.all %}
 | 
			
		||||
            <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 %}>
 | 
			
		||||
            {% for withdraw in withdraws %}
 | 
			
		||||
            <tr>
 | 
			
		||||
                <td class="align-middle">
 | 
			
		||||
                    <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 }}
 | 
			
		||||
                    </a>
 | 
			
		||||
                </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.created.timestamp|default_if_none:""|naturalday}}</td>
 | 
			
		||||
                <td>
 | 
			
		||||
 | 
			
		||||
@ -19,7 +19,7 @@ from compensation.tables import EcoAccountTable
 | 
			
		||||
from intervention.forms import NewWithdrawForm
 | 
			
		||||
from konova.contexts import BaseContext
 | 
			
		||||
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.utils.user_checks import in_group
 | 
			
		||||
 | 
			
		||||
@ -97,6 +97,10 @@ def open_view(request: HttpRequest, id: str):
 | 
			
		||||
    # Calculate rest of available surface for withdraws
 | 
			
		||||
    available = acc.get_available_rest(as_percentage=True)
 | 
			
		||||
 | 
			
		||||
    withdraws = acc.withdraws.filter(
 | 
			
		||||
        intervention__deleted=None,
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    context = {
 | 
			
		||||
        "obj": acc,
 | 
			
		||||
        "geom_form": geom_form,
 | 
			
		||||
@ -111,6 +115,7 @@ def open_view(request: HttpRequest, id: str):
 | 
			
		||||
        "is_zb_member": in_group(_user, ZB_GROUP),
 | 
			
		||||
        "is_ets_member": in_group(_user, ETS_GROUP),
 | 
			
		||||
        "LANIS_LINK": acc.get_LANIS_link(),
 | 
			
		||||
        "withdraws": withdraws,
 | 
			
		||||
    }
 | 
			
		||||
    context = BaseContext(request, context).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)
 | 
			
		||||
    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 = msg_succ.format(acc.identifier)
 | 
			
		||||
    return form.process_request(
 | 
			
		||||
 | 
			
		||||
@ -11,7 +11,7 @@ from ema.tables import EmaTable
 | 
			
		||||
from konova.contexts import BaseContext
 | 
			
		||||
from konova.decorators import conservation_office_group_required
 | 
			
		||||
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.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)
 | 
			
		||||
    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(
 | 
			
		||||
        request=request,
 | 
			
		||||
        msg_success=msg_succ.format("EMA"),
 | 
			
		||||
 | 
			
		||||
@ -413,6 +413,8 @@ class RunCheckForm(BaseModalForm):
 | 
			
		||||
        super().__init__(*args, **kwargs)
 | 
			
		||||
        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)
 | 
			
		||||
        # Disable automatic w-100 setting for this type of modal form. Looks kinda strange
 | 
			
		||||
        self.fields["confirm"].widget.attrs["class"] = ""
 | 
			
		||||
 | 
			
		||||
    def is_valid(self):
 | 
			
		||||
        super_result = super().is_valid()
 | 
			
		||||
 | 
			
		||||
@ -7,10 +7,12 @@ Created on: 17.11.20
 | 
			
		||||
"""
 | 
			
		||||
from django.contrib.auth.models import User
 | 
			
		||||
from django.contrib.gis.db import models
 | 
			
		||||
from django.utils.timezone import localtime
 | 
			
		||||
from django.utils.translation import gettext_lazy as _
 | 
			
		||||
 | 
			
		||||
from konova.models import BaseObject, Geometry, UuidModel, BaseResource
 | 
			
		||||
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
 | 
			
		||||
@ -45,7 +47,8 @@ class Revocation(BaseResource):
 | 
			
		||||
 | 
			
		||||
    def delete(self):
 | 
			
		||||
        # Make sure related objects are being removed as well
 | 
			
		||||
        self.document.delete()
 | 
			
		||||
        if self.document:
 | 
			
		||||
            self.document.delete()
 | 
			
		||||
        super().delete()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -248,3 +251,13 @@ class Intervention(BaseObject):
 | 
			
		||||
            x,
 | 
			
		||||
            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 konova.contexts import BaseContext
 | 
			
		||||
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.utils.message_templates import FORM_INVALID, INTERVENTION_INVALID
 | 
			
		||||
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)
 | 
			
		||||
    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 = msg_succ.format(intervention.identifier)
 | 
			
		||||
    return form.process_request(
 | 
			
		||||
 | 
			
		||||
@ -359,7 +359,7 @@ class NewDocumentForm(BaseModalForm):
 | 
			
		||||
            return doc
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class RecordForm(BaseModalForm):
 | 
			
		||||
class RecordModalForm(BaseModalForm):
 | 
			
		||||
    """ Modal form for recording data
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
@ -374,6 +374,8 @@ class RecordForm(BaseModalForm):
 | 
			
		||||
        super().__init__(*args, **kwargs)
 | 
			
		||||
        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)
 | 
			
		||||
        # Disable automatic w-100 setting for this type of modal form. Looks kinda strange
 | 
			
		||||
        self.fields["confirm"].widget.attrs["class"] = ""
 | 
			
		||||
 | 
			
		||||
        if self.instance.recorded:
 | 
			
		||||
            # unrecord!
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user