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 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 @login_required def index_view(request: HttpRequest): """ Renders the index view for Interventions 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" ) 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") 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 Args: request (HttpRequest): The incoming request id (str): The intervention's id Returns: """ template = "intervention/detail-view.html" intervention = get_object_or_404(Intervention, id=id) has_access = intervention.has_access(user=request.user) geom_form = SimpleGeomForm( instance=intervention ) context = { "intervention": intervention, "has_access": has_access, "geom_form": geom_form, } 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.")) 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 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 form = RemoveForm( object_to_remove=obj, remove_post_url=reverse("intervention:remove", args=(id,)), cancel_url=reverse("intervention:index"), ) context = { "form": form, } context = BaseContext(request, context).context return render(request, template, context)