Eco Accounts
* adds related eco account withdraw detail view to intervention detail view * adds new route for removing withdraws using RemoveModalForm * adds EcoAccountWithdraw model * adds admin interfaces for EcoAccount and EcoAccountWithdraw * adds message_templates.py to konova/utils for reusable messages * splits related-documents.html and related-objects.html into separate templates for each related object type: compensations.html, documents.html, eco-account-withdraws.html and payments.html * adds translations
This commit is contained in:
parent
221f7dfb79
commit
98de05089e
@ -1,6 +1,7 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from compensation.models import Compensation, CompensationAction, CompensationState, CompensationControl, Payment
|
from compensation.models import Compensation, CompensationAction, CompensationState, CompensationControl, Payment, \
|
||||||
|
EcoAccountWithdraw, EcoAccount
|
||||||
|
|
||||||
|
|
||||||
class CompensationControlAdmin(admin.ModelAdmin):
|
class CompensationControlAdmin(admin.ModelAdmin):
|
||||||
@ -34,9 +35,23 @@ class CompensationActionAdmin(admin.ModelAdmin):
|
|||||||
class CompensationAdmin(admin.ModelAdmin):
|
class CompensationAdmin(admin.ModelAdmin):
|
||||||
list_display = [
|
list_display = [
|
||||||
"id",
|
"id",
|
||||||
|
"identifier",
|
||||||
|
"title",
|
||||||
"created_on",
|
"created_on",
|
||||||
|
"created_by",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class EcoAccountAdmin(admin.ModelAdmin):
|
||||||
|
list_display = [
|
||||||
|
"id",
|
||||||
|
"identifier",
|
||||||
|
"title",
|
||||||
|
"created_on",
|
||||||
|
"created_by",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
class PaymentAdmin(admin.ModelAdmin):
|
class PaymentAdmin(admin.ModelAdmin):
|
||||||
list_display = [
|
list_display = [
|
||||||
"id",
|
"id",
|
||||||
@ -47,8 +62,21 @@ class PaymentAdmin(admin.ModelAdmin):
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
class EcoAccountWithdrawAdmin(admin.ModelAdmin):
|
||||||
|
list_display = [
|
||||||
|
"id",
|
||||||
|
"account",
|
||||||
|
"intervention",
|
||||||
|
"amount",
|
||||||
|
"created_by",
|
||||||
|
"created_on",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(Compensation, CompensationAdmin)
|
admin.site.register(Compensation, CompensationAdmin)
|
||||||
admin.site.register(Payment, PaymentAdmin)
|
admin.site.register(Payment, PaymentAdmin)
|
||||||
admin.site.register(CompensationAction, CompensationActionAdmin)
|
admin.site.register(CompensationAction, CompensationActionAdmin)
|
||||||
admin.site.register(CompensationState, CompensationStateAdmin)
|
admin.site.register(CompensationState, CompensationStateAdmin)
|
||||||
admin.site.register(CompensationControl, CompensationControlAdmin)
|
admin.site.register(CompensationControl, CompensationControlAdmin)
|
||||||
|
admin.site.register(EcoAccount, EcoAccountAdmin)
|
||||||
|
admin.site.register(EcoAccountWithdraw, EcoAccountWithdrawAdmin)
|
||||||
|
@ -7,7 +7,7 @@ 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.core.validators import MinValueValidator
|
from django.core.validators import MinValueValidator, MaxValueValidator
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
|
|
||||||
@ -152,3 +152,40 @@ class EcoAccount(Compensation):
|
|||||||
"""
|
"""
|
||||||
# Users having access on this object
|
# Users having access on this object
|
||||||
users = models.ManyToManyField(User)
|
users = models.ManyToManyField(User)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return "{}".format(self.identifier)
|
||||||
|
|
||||||
|
|
||||||
|
class EcoAccountWithdraw(BaseResource):
|
||||||
|
"""
|
||||||
|
A withdraw object for eco accounts
|
||||||
|
"""
|
||||||
|
account = models.ForeignKey(
|
||||||
|
EcoAccount,
|
||||||
|
on_delete=models.SET_NULL,
|
||||||
|
null=True,
|
||||||
|
blank=True,
|
||||||
|
help_text="Withdrawn from",
|
||||||
|
related_name="eco_withdraws",
|
||||||
|
)
|
||||||
|
amount = models.FloatField(
|
||||||
|
null=True,
|
||||||
|
blank=True,
|
||||||
|
help_text="Amount withdrawn (percentage)",
|
||||||
|
validators=[
|
||||||
|
MinValueValidator(limit_value=0.00),
|
||||||
|
MaxValueValidator(limit_value=100),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
intervention = models.ForeignKey(
|
||||||
|
Intervention,
|
||||||
|
on_delete=models.CASCADE,
|
||||||
|
null=True,
|
||||||
|
blank=True,
|
||||||
|
help_text="Withdrawn for",
|
||||||
|
related_name="eco_withdraws",
|
||||||
|
)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return "{} of {}".format(self.amount, self.account)
|
||||||
|
@ -30,4 +30,8 @@ urlpatterns = [
|
|||||||
path('acc/<id>', account_open_view, name='acc-open'),
|
path('acc/<id>', account_open_view, name='acc-open'),
|
||||||
path('acc/<id>/edit', account_edit_view, name='acc-edit'),
|
path('acc/<id>/edit', account_edit_view, name='acc-edit'),
|
||||||
path('acc/<id>/remove', account_remove_view, name='acc-remove'),
|
path('acc/<id>/remove', account_remove_view, name='acc-remove'),
|
||||||
|
|
||||||
|
# Eco-account withdraws
|
||||||
|
path('acc/<id>/remove/<withdraw_id>', withdraw_remove_view, name='withdraw-remove'),
|
||||||
|
|
||||||
]
|
]
|
@ -1,5 +1,6 @@
|
|||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.http import HttpRequest
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
|
from django.http import HttpRequest, Http404
|
||||||
from django.shortcuts import render, get_object_or_404
|
from django.shortcuts import render, get_object_or_404
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
@ -10,6 +11,7 @@ from intervention.models import Intervention
|
|||||||
from konova.contexts import BaseContext
|
from konova.contexts import BaseContext
|
||||||
from konova.decorators import *
|
from konova.decorators import *
|
||||||
from konova.forms import RemoveModalForm
|
from konova.forms import RemoveModalForm
|
||||||
|
from konova.utils.message_templates import FORM_INVALID
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@ -139,7 +141,7 @@ def new_payment_view(request: HttpRequest, intervention_id: str):
|
|||||||
else:
|
else:
|
||||||
messages.info(
|
messages.info(
|
||||||
request,
|
request,
|
||||||
_("There was an error on this form.")
|
FORM_INVALID
|
||||||
)
|
)
|
||||||
return redirect(request.META.get("HTTP_REFERER", "home"))
|
return redirect(request.META.get("HTTP_REFERER", "home"))
|
||||||
elif request.method == "GET":
|
elif request.method == "GET":
|
||||||
@ -154,7 +156,7 @@ def new_payment_view(request: HttpRequest, intervention_id: str):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def payment_remove_view(request: HttpRequest, id: str):
|
def payment_remove_view(request: HttpRequest, id: str):
|
||||||
""" Renders a modal view for adding new payments
|
""" Renders a modal view for removing payments
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
request (HttpRequest): The incoming request
|
request (HttpRequest): The incoming request
|
||||||
@ -177,7 +179,51 @@ def payment_remove_view(request: HttpRequest, id: str):
|
|||||||
else:
|
else:
|
||||||
messages.info(
|
messages.info(
|
||||||
request,
|
request,
|
||||||
_("There was an error on this form.")
|
FORM_INVALID
|
||||||
|
)
|
||||||
|
return redirect(request.META.get("HTTP_REFERER", "home"))
|
||||||
|
elif request.method == "GET":
|
||||||
|
context = {
|
||||||
|
"form": form,
|
||||||
|
}
|
||||||
|
context = BaseContext(request, context).context
|
||||||
|
return render(request, template, context)
|
||||||
|
else:
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def withdraw_remove_view(request: HttpRequest, id: str, withdraw_id: str):
|
||||||
|
""" Renders a modal view for removing withdraws
|
||||||
|
|
||||||
|
Args:
|
||||||
|
request (HttpRequest): The incoming request
|
||||||
|
id (str): The eco account's id
|
||||||
|
withdraw_id (str): The withdraw's id
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
|
||||||
|
"""
|
||||||
|
acc = get_object_or_404(EcoAccount, id=id)
|
||||||
|
try:
|
||||||
|
eco_withdraw = acc.eco_withdraws.get(id=withdraw_id)
|
||||||
|
except ObjectDoesNotExist:
|
||||||
|
raise Http404("Unknown withdraw")
|
||||||
|
|
||||||
|
form = RemoveModalForm(request.POST or None, instance=eco_withdraw, user=request.user)
|
||||||
|
template = form.template
|
||||||
|
if request.method == "POST":
|
||||||
|
if form.is_valid():
|
||||||
|
form.save()
|
||||||
|
messages.success(
|
||||||
|
request,
|
||||||
|
_("Withdraw removed")
|
||||||
|
)
|
||||||
|
return redirect(request.META.get("HTTP_REFERER", "home"))
|
||||||
|
else:
|
||||||
|
messages.info(
|
||||||
|
request,
|
||||||
|
FORM_INVALID
|
||||||
)
|
)
|
||||||
return redirect(request.META.get("HTTP_REFERER", "home"))
|
return redirect(request.META.get("HTTP_REFERER", "home"))
|
||||||
elif request.method == "GET":
|
elif request.method == "GET":
|
||||||
|
@ -0,0 +1,49 @@
|
|||||||
|
{% load i18n l10n fontawesome_5 %}
|
||||||
|
<div id="related-compensations" class="card">
|
||||||
|
<div class="card-header rlp-r">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<h5>
|
||||||
|
<span class="badge badge-light">{{intervention.compensations.count}}</span>
|
||||||
|
{% trans 'Compensations' %}
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<div class="d-flex justify-content-end">
|
||||||
|
<a href="{% url 'compensation:new' %}" title="{% trans 'Add new compensation' %}">
|
||||||
|
<button class="btn btn-outline-default">
|
||||||
|
{% fa5_icon 'plus' %}
|
||||||
|
{% fa5_icon 'leaf' %}
|
||||||
|
</button>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-body scroll-300">
|
||||||
|
<table class="table table-hover">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">
|
||||||
|
{% trans 'Identifier' %}
|
||||||
|
</th>
|
||||||
|
<th scope="col">
|
||||||
|
{% trans 'Title' %}
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for comp in intervention.compensations.all %}
|
||||||
|
<tr>
|
||||||
|
<td class="align-middle">
|
||||||
|
<a href="{% url 'compensation:open' comp.id %}">
|
||||||
|
{{ comp.identifier }}
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td class="align-middle">{{ comp.title }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -0,0 +1,55 @@
|
|||||||
|
{% load i18n l10n fontawesome_5 %}
|
||||||
|
<div id="related-documents" class="card">
|
||||||
|
<div class="card-header rlp-r">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<h5>
|
||||||
|
<span class="badge badge-light">{{intervention.documents.count}}</span>
|
||||||
|
{% trans 'Documents' %}
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<div class="d-flex justify-content-end">
|
||||||
|
<button class="btn btn-outline-default btn-modal" data-form-url="{% url 'intervention:new-doc' intervention.id %}" title="{% trans 'Add new document' %}">
|
||||||
|
{% fa5_icon 'plus' %}
|
||||||
|
{% fa5_icon 'file' %}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-body scroll-300">
|
||||||
|
<table class="table table-hover">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">
|
||||||
|
{% trans 'Title' %}
|
||||||
|
</th>
|
||||||
|
<th scope="col">
|
||||||
|
{% trans 'Comment' %}
|
||||||
|
</th>
|
||||||
|
<th scope="col">
|
||||||
|
{% trans 'Action' %}
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for doc in intervention.documents.all %}
|
||||||
|
<tr>
|
||||||
|
<td class="align-middle">
|
||||||
|
<a href="{% url 'doc-open' doc.id %}">
|
||||||
|
{{ doc.title }}
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td class="align-middle">{{ doc.comment }}</td>
|
||||||
|
<td>
|
||||||
|
<button data-form-url="{% url 'doc-remove' doc.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove document' %}">
|
||||||
|
{% fa5_icon 'trash' %}
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -0,0 +1,57 @@
|
|||||||
|
{% load i18n l10n fontawesome_5 %}
|
||||||
|
<div id="related-eco-account-withdraws" class="card">
|
||||||
|
<div class="card-header rlp-r">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<h5>
|
||||||
|
<span class="badge badge-light">{{intervention.eco_withdraws.count}}</span>
|
||||||
|
{% trans 'Eco Account Withdraws' %}
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<div class="d-flex justify-content-end">
|
||||||
|
<a href="{% url 'compensation:new' %}" title="{% trans 'Add new withdraw' %}">
|
||||||
|
<button class="btn btn-outline-default">
|
||||||
|
{% fa5_icon 'plus' %}
|
||||||
|
{% fa5_icon 'tree' %}
|
||||||
|
</button>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-body scroll-300">
|
||||||
|
<table class="table table-hover">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">
|
||||||
|
{% trans 'Account Identifier' %}
|
||||||
|
</th>
|
||||||
|
<th scope="col">
|
||||||
|
{% trans 'Amount' %}
|
||||||
|
</th>
|
||||||
|
<th scope="col">
|
||||||
|
{% trans 'Action' %}
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for withdraw in intervention.eco_withdraws.all %}
|
||||||
|
<tr>
|
||||||
|
<td class="align-middle">
|
||||||
|
<a href="{% url 'compensation:acc-open' withdraw.account.id %}">
|
||||||
|
{{ withdraw.account.identifier }}
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td class="align-middle">{{ withdraw.amount }} %</td>
|
||||||
|
<td>
|
||||||
|
<button data-form-url="{% url 'compensation:withdraw-remove' withdraw.account.id withdraw.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove Withdraw' %}">
|
||||||
|
{% fa5_icon 'trash' %}
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -0,0 +1,59 @@
|
|||||||
|
{% load i18n l10n fontawesome_5 %}
|
||||||
|
<div id="related-payments" class="card">
|
||||||
|
<div class="card-header rlp-r">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<h5>
|
||||||
|
<span class="badge badge-light">{{intervention.payments.count}}</span>
|
||||||
|
{% trans 'Payments' %}
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<div class="d-flex justify-content-end">
|
||||||
|
<button class="btn btn-outline-default btn-modal" data-form-url="{% url 'compensation:pay-new' intervention.id %}" title="{% trans 'Add new payment' %}">
|
||||||
|
{% fa5_icon 'plus' %}
|
||||||
|
{% fa5_icon 'money-bill-wave' %}
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="card-body scroll-300">
|
||||||
|
<table class="table table-hover">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th scope="col">
|
||||||
|
{% trans 'Amount' context 'money' %}
|
||||||
|
</th>
|
||||||
|
<th scope="col">
|
||||||
|
{% trans 'Due on' %}
|
||||||
|
</th>
|
||||||
|
<th scope="col">
|
||||||
|
{% trans 'Transfer comment' %}
|
||||||
|
</th>
|
||||||
|
<th scope="col">
|
||||||
|
{% trans 'Action' %}
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
{% for pay in intervention.payments.all %}
|
||||||
|
<tr>
|
||||||
|
<td class="align-middle">
|
||||||
|
<a href="{% url 'compensation:pay-open' pay.id %}">
|
||||||
|
{{ pay.amount|floatformat:2 }} €
|
||||||
|
</a>
|
||||||
|
</td>
|
||||||
|
<td class="align-middle">{{ pay.due_on }}</td>
|
||||||
|
<td class="align-middle">{{ pay.comment }}</td>
|
||||||
|
<td>
|
||||||
|
<button data-form-url="{% url 'compensation:pay-remove' pay.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove payment' %}">
|
||||||
|
{% fa5_icon 'trash' %}
|
||||||
|
</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -1,59 +0,0 @@
|
|||||||
{% load i18n l10n fontawesome_5 %}
|
|
||||||
<div id="related-documents" class="row">
|
|
||||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
|
||||||
<div class="card">
|
|
||||||
<div class="card-header rlp-r">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-sm-6">
|
|
||||||
<h5>
|
|
||||||
<span class="badge badge-light">{{intervention.documents.count}}</span>
|
|
||||||
{% trans 'Documents' %}
|
|
||||||
</h5>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-6">
|
|
||||||
<div class="d-flex justify-content-end">
|
|
||||||
<button class="btn btn-outline-default btn-modal" data-form-url="{% url 'intervention:new-doc' intervention.id %}" title="{% trans 'Add new document' %}">
|
|
||||||
{% fa5_icon 'plus' %}
|
|
||||||
{% fa5_icon 'file' %}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="card-body scroll-300">
|
|
||||||
<table class="table table-hover">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th scope="col">
|
|
||||||
{% trans 'Title' %}
|
|
||||||
</th>
|
|
||||||
<th scope="col">
|
|
||||||
{% trans 'Comment' %}
|
|
||||||
</th>
|
|
||||||
<th scope="col">
|
|
||||||
{% trans 'Action' %}
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{% for doc in intervention.documents.all %}
|
|
||||||
<tr>
|
|
||||||
<td class="align-middle">
|
|
||||||
<a href="{% url 'doc-open' doc.id %}">
|
|
||||||
{{ doc.title }}
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td class="align-middle">{{ doc.comment }}</td>
|
|
||||||
<td>
|
|
||||||
<button data-form-url="{% url 'doc-remove' doc.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove document' %}">
|
|
||||||
{% fa5_icon 'trash' %}
|
|
||||||
</button>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@ -1,113 +0,0 @@
|
|||||||
{% load i18n l10n fontawesome_5 %}
|
|
||||||
<div id="related-objects" class="row">
|
|
||||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
|
||||||
<div id="related-compensations" class="card">
|
|
||||||
<div class="card-header rlp-r">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-sm-6">
|
|
||||||
<h5>
|
|
||||||
<span class="badge badge-light">{{intervention.compensations.count}}</span>
|
|
||||||
{% trans 'Compensations' %}
|
|
||||||
</h5>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-6">
|
|
||||||
<div class="d-flex justify-content-end">
|
|
||||||
<a href="{% url 'compensation:new' %}" title="{% trans 'Add new compensation' %}">
|
|
||||||
<button class="btn btn-outline-default">
|
|
||||||
{% fa5_icon 'plus' %}
|
|
||||||
{% fa5_icon 'leaf' %}
|
|
||||||
</button>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="card-body scroll-300">
|
|
||||||
<table class="table table-hover">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th scope="col">
|
|
||||||
{% trans 'Identifier' %}
|
|
||||||
</th>
|
|
||||||
<th scope="col">
|
|
||||||
{% trans 'Title' %}
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{% for comp in intervention.compensations.all %}
|
|
||||||
<tr>
|
|
||||||
<td class="align-middle">
|
|
||||||
<a href="{% url 'compensation:open' comp.id %}">
|
|
||||||
{{ comp.identifier }}
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td class="align-middle">{{ comp.title }}</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-12 col-md-12 col-lg-6">
|
|
||||||
<div id="related-payments" class="card">
|
|
||||||
<div class="card-header rlp-r">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-sm-6">
|
|
||||||
<h5>
|
|
||||||
<span class="badge badge-light">{{intervention.payments.count}}</span>
|
|
||||||
{% trans 'Payments' %}
|
|
||||||
</h5>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-6">
|
|
||||||
<div class="d-flex justify-content-end">
|
|
||||||
<button class="btn btn-outline-default btn-modal" data-form-url="{% url 'compensation:pay-new' intervention.id %}" title="{% trans 'Add new payment' %}">
|
|
||||||
{% fa5_icon 'plus' %}
|
|
||||||
{% fa5_icon 'money-bill-wave' %}
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="card-body scroll-300">
|
|
||||||
<table class="table table-hover">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th scope="col">
|
|
||||||
{% trans 'Amount' %}
|
|
||||||
</th>
|
|
||||||
<th scope="col">
|
|
||||||
{% trans 'Due on' %}
|
|
||||||
</th>
|
|
||||||
<th scope="col">
|
|
||||||
{% trans 'Transfer comment' %}
|
|
||||||
</th>
|
|
||||||
<th scope="col">
|
|
||||||
{% trans 'Action' %}
|
|
||||||
</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{% for pay in intervention.payments.all %}
|
|
||||||
<tr>
|
|
||||||
<td class="align-middle">
|
|
||||||
<a href="{% url 'compensation:pay-open' pay.id %}">
|
|
||||||
{{ pay.amount|floatformat:2 }} €
|
|
||||||
</a>
|
|
||||||
</td>
|
|
||||||
<td class="align-middle">{{ pay.due_on }}</td>
|
|
||||||
<td class="align-middle">{{ pay.comment }}</td>
|
|
||||||
<td>
|
|
||||||
<button data-form-url="{% url 'compensation:pay-remove' pay.id %}" class="btn btn-default btn-modal" title="{% trans 'Remove payment' %}">
|
|
||||||
{% fa5_icon 'trash' %}
|
|
||||||
</button>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
{% endfor %}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
@ -146,8 +146,22 @@
|
|||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
{% include 'intervention/detail/related-objects.html' %}
|
<div class="row">
|
||||||
{% include 'intervention/detail/related-documents.html' %}
|
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||||
|
{% include 'intervention/detail/includes/compensations.html' %}
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||||
|
{% include 'intervention/detail/includes/payments.html' %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||||
|
{% include 'intervention/detail/includes/eco-account-withdraws.html' %}
|
||||||
|
</div>
|
||||||
|
<div class="col-sm-12 col-md-12 col-lg-6">
|
||||||
|
{% include 'intervention/detail/includes/documents.html' %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
{% with 'btn-modal' as btn_class %}
|
{% with 'btn-modal' as btn_class %}
|
||||||
|
@ -10,6 +10,7 @@ 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 RemoveForm, SimpleGeomForm, NewDocumentForm
|
from konova.forms import RemoveForm, SimpleGeomForm, NewDocumentForm
|
||||||
|
from konova.utils.message_templates import FORM_INVALID
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@ -98,7 +99,7 @@ def new_document_view(request: HttpRequest, id: str):
|
|||||||
else:
|
else:
|
||||||
messages.info(
|
messages.info(
|
||||||
request,
|
request,
|
||||||
_("There was an error on this form.")
|
FORM_INVALID
|
||||||
)
|
)
|
||||||
return redirect(request.META.get("HTTP_REFERER", "home"))
|
return redirect(request.META.get("HTTP_REFERER", "home"))
|
||||||
elif request.method == "GET":
|
elif request.method == "GET":
|
||||||
|
11
konova/utils/message_templates.py
Normal file
11
konova/utils/message_templates.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
"""
|
||||||
|
Author: Michel Peltriaux
|
||||||
|
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
|
||||||
|
Contact: michel.peltriaux@sgdnord.rlp.de
|
||||||
|
Created on: 02.08.21
|
||||||
|
|
||||||
|
"""
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
|
FORM_INVALID = _("There was an error on this form.")
|
@ -18,6 +18,7 @@ from intervention.models import Intervention
|
|||||||
from konova.contexts import BaseContext
|
from konova.contexts import BaseContext
|
||||||
from konova.forms import RemoveModalForm
|
from konova.forms import RemoveModalForm
|
||||||
from konova.models import Document
|
from konova.models import Document
|
||||||
|
from konova.utils.message_templates import FORM_INVALID
|
||||||
from news.models import ServerMessage
|
from news.models import ServerMessage
|
||||||
from konova.settings import SSO_SERVER_BASE
|
from konova.settings import SSO_SERVER_BASE
|
||||||
|
|
||||||
@ -150,7 +151,7 @@ def remove_document_view(request: HttpRequest, id: str):
|
|||||||
else:
|
else:
|
||||||
messages.info(
|
messages.info(
|
||||||
request,
|
request,
|
||||||
_("There was an error on this form.")
|
FORM_INVALID
|
||||||
)
|
)
|
||||||
return redirect(request.META.get("HTTP_REFERER", "home"))
|
return redirect(request.META.get("HTTP_REFERER", "home"))
|
||||||
elif request.method == "GET":
|
elif request.method == "GET":
|
||||||
|
Binary file not shown.
@ -13,7 +13,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2021-07-30 15:00+0200\n"
|
"POT-Creation-Date: 2021-08-02 09:52+0200\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@ -24,16 +24,16 @@ msgstr ""
|
|||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: compensation/forms.py:26
|
#: compensation/forms.py:26
|
||||||
#: intervention/templates/intervention/detail/related-objects.html:78
|
#: intervention/templates/intervention/detail/includes/eco-account-withdraws.html:31
|
||||||
msgid "Amount"
|
msgid "Amount"
|
||||||
msgstr "Betrag"
|
msgstr "Menge"
|
||||||
|
|
||||||
#: compensation/forms.py:28
|
#: compensation/forms.py:28
|
||||||
msgid "Amount in Euro"
|
msgid "Amount in Euro"
|
||||||
msgstr "Betrag in Euro"
|
msgstr "Betrag in Euro"
|
||||||
|
|
||||||
#: compensation/forms.py:31
|
#: compensation/forms.py:31
|
||||||
#: intervention/templates/intervention/detail/related-objects.html:81
|
#: intervention/templates/intervention/detail/includes/payments.html:29
|
||||||
msgid "Due on"
|
msgid "Due on"
|
||||||
msgstr "Fällig am"
|
msgstr "Fällig am"
|
||||||
|
|
||||||
@ -59,14 +59,14 @@ msgstr "Neue Ersatzzahlung zu Eingriff '{}' hinzufügen"
|
|||||||
|
|
||||||
#: compensation/tables.py:24 compensation/tables.py:164
|
#: compensation/tables.py:24 compensation/tables.py:164
|
||||||
#: intervention/forms.py:26 intervention/tables.py:23
|
#: intervention/forms.py:26 intervention/tables.py:23
|
||||||
#: intervention/templates/intervention/detail/related-objects.html:30
|
#: intervention/templates/intervention/detail/includes/compensations.html:28
|
||||||
msgid "Identifier"
|
msgid "Identifier"
|
||||||
msgstr "Kennung"
|
msgstr "Kennung"
|
||||||
|
|
||||||
#: compensation/tables.py:29 compensation/tables.py:169
|
#: compensation/tables.py:29 compensation/tables.py:169
|
||||||
#: intervention/forms.py:33 intervention/tables.py:28
|
#: intervention/forms.py:33 intervention/tables.py:28
|
||||||
#: intervention/templates/intervention/detail/related-documents.html:28
|
#: intervention/templates/intervention/detail/includes/compensations.html:31
|
||||||
#: intervention/templates/intervention/detail/related-objects.html:33
|
#: intervention/templates/intervention/detail/includes/documents.html:26
|
||||||
#: intervention/templates/intervention/detail/view.html:60 konova/forms.py:181
|
#: intervention/templates/intervention/detail/view.html:60 konova/forms.py:181
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Bezeichnung"
|
msgstr "Bezeichnung"
|
||||||
@ -90,7 +90,7 @@ msgid "Last edit"
|
|||||||
msgstr "Zuletzt bearbeitet"
|
msgstr "Zuletzt bearbeitet"
|
||||||
|
|
||||||
#: compensation/tables.py:61
|
#: compensation/tables.py:61
|
||||||
#: intervention/templates/intervention/detail/related-objects.html:10
|
#: intervention/templates/intervention/detail/includes/compensations.html:8
|
||||||
msgid "Compensations"
|
msgid "Compensations"
|
||||||
msgstr "Kompensationen"
|
msgstr "Kompensationen"
|
||||||
|
|
||||||
@ -253,8 +253,7 @@ msgstr "Freigabelink"
|
|||||||
|
|
||||||
#: intervention/forms.py:241
|
#: intervention/forms.py:241
|
||||||
msgid "Send this link to users who you want to have writing access on the data"
|
msgid "Send this link to users who you want to have writing access on the data"
|
||||||
msgstr ""
|
msgstr "Andere Nutzer erhalten über diesen Link Zugriff auf die Daten"
|
||||||
"Andere Nutzer erhalten über diesen Link Zugriff auf die Daten"
|
|
||||||
|
|
||||||
#: intervention/forms.py:250
|
#: intervention/forms.py:250
|
||||||
msgid "Shared with"
|
msgid "Shared with"
|
||||||
@ -283,46 +282,60 @@ msgstr "Eingriffe"
|
|||||||
msgid "Intervention"
|
msgid "Intervention"
|
||||||
msgstr "Eingriff"
|
msgstr "Eingriff"
|
||||||
|
|
||||||
#: intervention/templates/intervention/detail/related-documents.html:10
|
#: intervention/templates/intervention/detail/includes/compensations.html:13
|
||||||
|
#: intervention/templates/intervention/detail/includes/eco-account-withdraws.html:13
|
||||||
|
msgid "Add new compensation"
|
||||||
|
msgstr "Neue Kompensation hinzufügen"
|
||||||
|
|
||||||
|
#: intervention/templates/intervention/detail/includes/documents.html:8
|
||||||
msgid "Documents"
|
msgid "Documents"
|
||||||
msgstr "Dokumente"
|
msgstr "Dokumente"
|
||||||
|
|
||||||
#: intervention/templates/intervention/detail/related-documents.html:15
|
#: intervention/templates/intervention/detail/includes/documents.html:13
|
||||||
#: konova/forms.py:222
|
#: konova/forms.py:222
|
||||||
msgid "Add new document"
|
msgid "Add new document"
|
||||||
msgstr "Neues Dokument hinzufügen"
|
msgstr "Neues Dokument hinzufügen"
|
||||||
|
|
||||||
#: intervention/templates/intervention/detail/related-documents.html:31
|
#: intervention/templates/intervention/detail/includes/documents.html:29
|
||||||
#: konova/forms.py:209
|
#: konova/forms.py:209
|
||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr "Kommentar"
|
msgstr "Kommentar"
|
||||||
|
|
||||||
#: intervention/templates/intervention/detail/related-documents.html:34
|
#: intervention/templates/intervention/detail/includes/documents.html:32
|
||||||
#: intervention/templates/intervention/detail/related-objects.html:87
|
#: intervention/templates/intervention/detail/includes/payments.html:35
|
||||||
msgid "Action"
|
msgid "Action"
|
||||||
msgstr "Aktionen"
|
msgstr "Aktionen"
|
||||||
|
|
||||||
#: intervention/templates/intervention/detail/related-documents.html:48
|
#: intervention/templates/intervention/detail/includes/documents.html:46
|
||||||
msgid "Remove document"
|
msgid "Remove document"
|
||||||
msgstr "Dokument löschen"
|
msgstr "Dokument löschen"
|
||||||
|
|
||||||
#: intervention/templates/intervention/detail/related-objects.html:15
|
#: intervention/templates/intervention/detail/includes/eco-account-withdraws.html:8
|
||||||
msgid "Add new compensation"
|
msgid "Eco Account Withdraws"
|
||||||
msgstr "Neue Kompensation hinzufügen"
|
msgstr "Ökokonto Abbuchungen"
|
||||||
|
|
||||||
#: intervention/templates/intervention/detail/related-objects.html:60
|
#: intervention/templates/intervention/detail/includes/eco-account-withdraws.html:28
|
||||||
|
msgid "Account Identifier"
|
||||||
|
msgstr "Ökokonto Kennung"
|
||||||
|
|
||||||
|
#: intervention/templates/intervention/detail/includes/payments.html:8
|
||||||
msgid "Payments"
|
msgid "Payments"
|
||||||
msgstr "Ersatzzahlungen"
|
msgstr "Ersatzzahlungen"
|
||||||
|
|
||||||
#: intervention/templates/intervention/detail/related-objects.html:65
|
#: intervention/templates/intervention/detail/includes/payments.html:13
|
||||||
msgid "Add new payment"
|
msgid "Add new payment"
|
||||||
msgstr "Neue Zahlung hinzufügen"
|
msgstr "Neue Zahlung hinzufügen"
|
||||||
|
|
||||||
#: intervention/templates/intervention/detail/related-objects.html:84
|
#: intervention/templates/intervention/detail/includes/payments.html:26
|
||||||
|
msgctxt "money"
|
||||||
|
msgid "Amount"
|
||||||
|
msgstr "Betrag"
|
||||||
|
|
||||||
|
#: intervention/templates/intervention/detail/includes/payments.html:32
|
||||||
msgid "Transfer comment"
|
msgid "Transfer comment"
|
||||||
msgstr "Verwendungszweck"
|
msgstr "Verwendungszweck"
|
||||||
|
|
||||||
#: intervention/templates/intervention/detail/related-objects.html:102
|
#: intervention/templates/intervention/detail/includes/payments.html:50
|
||||||
msgid "Remove payment"
|
msgid "Remove payment"
|
||||||
msgstr "Zahlung entfernen"
|
msgstr "Zahlung entfernen"
|
||||||
|
|
||||||
@ -473,20 +486,20 @@ msgstr "Sie sind dabei {} {} zu löschen"
|
|||||||
|
|
||||||
#: konova/forms.py:164
|
#: konova/forms.py:164
|
||||||
msgid "Are you sure?"
|
msgid "Are you sure?"
|
||||||
msgstr ""
|
msgstr "Sind Sie sicher?"
|
||||||
|
|
||||||
#: konova/forms.py:188
|
#: konova/forms.py:188
|
||||||
msgid "When has this file been created? Important for photos."
|
msgid "When has this file been created? Important for photos."
|
||||||
msgstr ""
|
msgstr "Wann wurde diese Datei erstellt oder das Foto aufgenommen?"
|
||||||
|
|
||||||
#: konova/forms.py:198
|
#: konova/forms.py:198
|
||||||
#: venv/lib/python3.7/site-packages/django/db/models/fields/files.py:231
|
#: venv/lib/python3.7/site-packages/django/db/models/fields/files.py:231
|
||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr ""
|
msgstr "Datei"
|
||||||
|
|
||||||
#: konova/forms.py:200
|
#: konova/forms.py:200
|
||||||
msgid "Must be smaller than 15 Mb"
|
msgid "Must be smaller than 15 Mb"
|
||||||
msgstr ""
|
msgstr "Muss kleiner als 15 Mb sein"
|
||||||
|
|
||||||
#: konova/forms.py:211
|
#: konova/forms.py:211
|
||||||
msgid "Additional comment on this file"
|
msgid "Additional comment on this file"
|
||||||
|
Loading…
Reference in New Issue
Block a user