You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
konova/intervention/views.py

162 lines
4.5 KiB
Python

3 years ago
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.utils.translation import gettext_lazy as _
from django.http import HttpRequest
from django.shortcuts import render, get_object_or_404
3 years ago
from intervention.forms import NewInterventionForm, EditInterventionForm, OpenInterventionForm
from intervention.models import Intervention
from intervention.tables import InterventionTable
from konova.contexts import BaseContext
from konova.decorators import *
from konova.forms import RemoveForm, SimpleGeomForm
3 years ago
@login_required
def index_view(request: HttpRequest):
"""
Renders the index view for Interventions
3 years ago
Args:
request (HttpRequest): The incoming request
Returns:
A rendered view
"""
template = "generic_index.html"
# Filtering by user access is performed in table filter inside of InterventionTableFilter class
interventions = Intervention.objects.filter(
deleted_on=None, # not deleted
next_version=None, # only newest versions
).order_by(
"-created_on"
)
3 years ago
table = InterventionTable(
request=request,
queryset=interventions
)
context = {
"table": table,
}
context = BaseContext(request, context).context
return render(request, template, context)
@login_required
def new_view(request: HttpRequest):
"""
Renders a view for a new intervention creation
Args:
request (HttpRequest): The incoming request
Returns:
"""
template = "konova/form.html"
form = NewInterventionForm(request.POST or None)
if request.method == "POST":
if form.is_valid():
intervention = form.save(request.user)
messages.success(request, _("Intervention {} added").format(intervention.title))
return redirect("intervention:index")
3 years ago
else:
messages.error(request, _("Invalid input"))
else:
# For clarification: nothing in this case
pass
context = {
"form": form,
}
context = BaseContext(request, context).context
return render(request, template, context)
@login_required
def open_view(request: HttpRequest, id: str):
""" Renders a detail view for viewing an intervention's data
3 years ago
Args:
request (HttpRequest): The incoming request
id (str): The intervention's id
Returns:
"""
template = "intervention/detail-view.html"
3 years ago
intervention = get_object_or_404(Intervention, id=id)
has_access = intervention.has_access(user=request.user)
if not has_access:
messages.info(request, _("Remember: This data has not been shared with you, yet. This means you can only read but can not edit or perform any actions like running a check or recording."))
geom_form = SimpleGeomForm(
instance=intervention
)
3 years ago
context = {
"intervention": intervention,
"has_access": has_access,
"geom_form": geom_form,
3 years ago
}
context = BaseContext(request, context).context
return render(request, template, context)
@login_required
def edit_view(request: HttpRequest, id: str):
"""
Renders a view for editing interventions
Args:
request (HttpRequest): The incoming request
Returns:
"""
template = "konova/form.html"
intervention = get_object_or_404(Intervention, id=id)
if request.method == "POST":
form = EditInterventionForm(request.POST or None, instance=intervention)
if form.is_valid():
intervention = form.save(request.user)
messages.success(request, _("{} edited").format(intervention))
return redirect("intervention:index")
else:
messages.error(request, _("Invalid input"))
form = EditInterventionForm(instance=intervention)
context = {
"form": form,
}
context = BaseContext(request, context).context
return render(request, template, context)
@login_required
def remove_view(request: HttpRequest, id: str):
""" Renders a remove view for this intervention
3 years ago
Args:
request (HttpRequest): The incoming request
id (str): The uuid id as string
Returns:
"""
template = "konova/form.html"
obj = Intervention.objects.get(id=id)
# ToDo
3 years ago
form = RemoveForm(
object_to_remove=obj,
remove_post_url=reverse("intervention:remove", args=(id,)),
3 years ago
cancel_url=reverse("intervention:index"),
)
context = {
"form": form,
}
context = BaseContext(request, context).context
return render(request, template, context)