Compare commits
2 Commits
3d31a13508
...
46e1a9af86
Author | SHA1 | Date | |
---|---|---|---|
|
46e1a9af86 | ||
|
d0aa125248 |
@ -22,6 +22,11 @@ from user.models import UserActionLogEntry, UserAction
|
|||||||
|
|
||||||
|
|
||||||
class NewCompensationForm(BaseForm):
|
class NewCompensationForm(BaseForm):
|
||||||
|
""" Form for creating new compensations.
|
||||||
|
|
||||||
|
Can be initialized with an intervention id for preselecting the related intervention.
|
||||||
|
|
||||||
|
"""
|
||||||
identifier = forms.CharField(
|
identifier = forms.CharField(
|
||||||
label=_("Identifier"),
|
label=_("Identifier"),
|
||||||
label_suffix="",
|
label_suffix="",
|
||||||
@ -145,3 +150,53 @@ class NewCompensationForm(BaseForm):
|
|||||||
return comp
|
return comp
|
||||||
|
|
||||||
|
|
||||||
|
class EditCompensationForm(NewCompensationForm):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.form_title = _("Edit compensation")
|
||||||
|
self.action_url = reverse("compensation:edit", args=(self.instance.id,))
|
||||||
|
self.cancel_redirect = reverse("compensation:open", args=(self.instance.id,))
|
||||||
|
|
||||||
|
# Initialize form data
|
||||||
|
form_data = {
|
||||||
|
"identifier": self.instance.identifier,
|
||||||
|
"title": self.instance.title,
|
||||||
|
"intervention": self.instance.intervention,
|
||||||
|
"fundings": self.instance.fundings.all(),
|
||||||
|
"comment": self.instance.comment,
|
||||||
|
}
|
||||||
|
disabled_fields = []
|
||||||
|
self.load_initial_data(
|
||||||
|
form_data,
|
||||||
|
disabled_fields
|
||||||
|
)
|
||||||
|
|
||||||
|
def save(self, user: User, geom_form: SimpleGeomForm):
|
||||||
|
with transaction.atomic():
|
||||||
|
# Fetch data from cleaned POST values
|
||||||
|
identifier = self.cleaned_data.get("identifier", None)
|
||||||
|
title = self.cleaned_data.get("title", None)
|
||||||
|
fundings = self.cleaned_data.get("fundings", None)
|
||||||
|
intervention = self.cleaned_data.get("intervention", None)
|
||||||
|
comment = self.cleaned_data.get("comment", None)
|
||||||
|
|
||||||
|
# Create log entry
|
||||||
|
action = UserActionLogEntry.objects.create(
|
||||||
|
user=user,
|
||||||
|
action=UserAction.EDITED,
|
||||||
|
)
|
||||||
|
|
||||||
|
# Process the geometry form
|
||||||
|
geometry = geom_form.save(action)
|
||||||
|
|
||||||
|
# Finally create main object
|
||||||
|
self.instance.identifier = identifier
|
||||||
|
self.instance.title = title
|
||||||
|
self.instance.intervention = intervention
|
||||||
|
self.instance.geometry = geometry
|
||||||
|
self.instance.comment = comment
|
||||||
|
self.instance.fundings.set(fundings)
|
||||||
|
self.instance.save()
|
||||||
|
|
||||||
|
self.instance.log.add(action)
|
||||||
|
return self.instance
|
@ -1,6 +1,6 @@
|
|||||||
{% load i18n fontawesome_5 %}
|
{% load i18n fontawesome_5 %}
|
||||||
|
|
||||||
{% if intervention.comment %}
|
{% if obj.comment %}
|
||||||
<div class="w-100">
|
<div class="w-100">
|
||||||
<div class="card mt-3">
|
<div class="card mt-3">
|
||||||
<div class="card-header rlp-r">
|
<div class="card-header rlp-r">
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
</a>
|
</a>
|
||||||
{% if has_access %}
|
{% if has_access %}
|
||||||
{% if is_default_member %}
|
{% if is_default_member %}
|
||||||
<a href="{% url 'home' %}" class="mr-2">
|
<a href="{% url 'compensation:edit' obj.id %}" class="mr-2">
|
||||||
<button class="btn btn-default" title="{% trans 'Edit' %}">
|
<button class="btn btn-default" title="{% trans 'Edit' %}">
|
||||||
{% fa5_icon 'edit' %}
|
{% fa5_icon 'edit' %}
|
||||||
</button>
|
</button>
|
||||||
|
@ -75,7 +75,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<br>
|
<br>
|
||||||
{% empty %}
|
{% empty %}
|
||||||
None
|
{% trans 'None' %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.db.models import Sum
|
from django.db.models import Sum
|
||||||
from django.http import HttpRequest, JsonResponse
|
from django.http import HttpRequest, JsonResponse
|
||||||
from django.shortcuts import render, get_object_or_404
|
from django.shortcuts import render
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from compensation.forms.forms import NewCompensationForm
|
from compensation.forms.forms import NewCompensationForm, EditCompensationForm
|
||||||
from compensation.forms.modalForms import NewStateModalForm, NewDeadlineModalForm, NewActionModalForm
|
from compensation.forms.modalForms import NewStateModalForm, NewDeadlineModalForm, NewActionModalForm
|
||||||
from compensation.models import Compensation, CompensationState, CompensationAction, CompensationDocument
|
from compensation.models import Compensation, CompensationState, CompensationAction, CompensationDocument
|
||||||
from compensation.tables import CompensationTable
|
from compensation.tables import CompensationTable
|
||||||
@ -110,8 +110,38 @@ def new_id_view(request: HttpRequest):
|
|||||||
@login_required
|
@login_required
|
||||||
@default_group_required
|
@default_group_required
|
||||||
def edit_view(request: HttpRequest, id: str):
|
def edit_view(request: HttpRequest, id: str):
|
||||||
# ToDo
|
"""
|
||||||
pass
|
Renders a view for editing compensations
|
||||||
|
|
||||||
|
Args:
|
||||||
|
request (HttpRequest): The incoming request
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
|
||||||
|
"""
|
||||||
|
template = "compensation/new/view.html"
|
||||||
|
# Get object from db
|
||||||
|
comp = get_object_or_404(Compensation, id=id)
|
||||||
|
# Create forms, initialize with values from db/from POST request
|
||||||
|
data_form = EditCompensationForm(request.POST or None, instance=comp)
|
||||||
|
geom_form = SimpleGeomForm(request.POST or None, read_only=False, instance=comp)
|
||||||
|
if request.method == "POST":
|
||||||
|
if data_form.is_valid() and geom_form.is_valid():
|
||||||
|
# The data form takes the geom form for processing, as well as the performing user
|
||||||
|
comp = data_form.save(request.user, geom_form)
|
||||||
|
messages.success(request, _("Compensation {} edited").format(comp.identifier))
|
||||||
|
return redirect("compensation:open", id=comp.id)
|
||||||
|
else:
|
||||||
|
messages.error(request, FORM_INVALID)
|
||||||
|
else:
|
||||||
|
# For clarification: nothing in this case
|
||||||
|
pass
|
||||||
|
context = {
|
||||||
|
"form": data_form,
|
||||||
|
"geom_form": geom_form,
|
||||||
|
}
|
||||||
|
context = BaseContext(request, context).context
|
||||||
|
return render(request, template, context)
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@ -275,10 +275,28 @@ class SimpleGeomForm(BaseForm):
|
|||||||
self.fields["geom"].disabled = True
|
self.fields["geom"].disabled = True
|
||||||
|
|
||||||
def save(self, action: UserActionLogEntry):
|
def save(self, action: UserActionLogEntry):
|
||||||
geometry = Geometry.objects.create(
|
""" Saves the form's geometry
|
||||||
geom=self.cleaned_data.get("geom", MultiPolygon(srid=DEFAULT_SRID)),
|
|
||||||
created=action,
|
Creates a new geometry entry if none is set, yet
|
||||||
)
|
|
||||||
|
Args:
|
||||||
|
action ():
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
|
||||||
|
"""
|
||||||
|
if self.instance.geometry is None:
|
||||||
|
geometry = Geometry.objects.create(
|
||||||
|
geom=self.cleaned_data.get("geom", MultiPolygon(srid=DEFAULT_SRID)),
|
||||||
|
created=action,
|
||||||
|
)
|
||||||
|
self.instance.geometry = geometry
|
||||||
|
self.instance.save()
|
||||||
|
else:
|
||||||
|
geometry = self.instance.geometry
|
||||||
|
geometry.geom = self.cleaned_data.get("geom", MultiPolygon(srid=DEFAULT_SRID))
|
||||||
|
geometry.modified = action
|
||||||
|
geometry.save()
|
||||||
return geometry
|
return geometry
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user