GeriLife/caregiving

View on GitHub
residents/views.py

Summary

Maintainability
C
1 day
Test Coverage
F
53%
from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import get_object_or_404
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView
from django.views.generic.edit import UpdateView
from django.views.generic.list import ListView

from residents.charts import (
    prepare_activity_hours_by_caregiver_role_chart,
    prepare_activity_hours_by_type_chart,
    prepare_daily_activity_minutes_scatter_chart,
)
from .models import Resident


class ResidentCreateView(CreateView):
    model = Resident
    fields = ["first_name", "last_initial", "on_hiatus"]


class ResidentDetailView(LoginRequiredMixin, DetailView):
    model = Resident
    context_object_name = "resident"
    template_name = "residents/resident_detail.html"

    def get_object(self, queryset=None):
        if queryset is None:
            queryset = self.get_queryset()

        url_uuid = self.kwargs.get("url_uuid")  # Get the url_uuid from the URL

        if url_uuid is not None:
            queryset = queryset.filter(
                url_uuid=url_uuid,
            )  # Filter the queryset based on url_uuid

        obj = get_object_or_404(
            queryset,
        )  # Get the object or return a 404 error if not found

        return obj

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        activities = self.object.resident_activities.all()

        if activities:
            context[
                "resident_activities_by_date_chart"
            ] = prepare_daily_activity_minutes_scatter_chart(activities)

            context[
                "activity_hours_by_type_chart"
            ] = prepare_activity_hours_by_type_chart(
                activities,
            )

            context[
                "activity_hours_by_caregiver_role_chart"
            ] = prepare_activity_hours_by_caregiver_role_chart(
                activities,
            )

        return context


class ResidentUpdateView(LoginRequiredMixin, UpdateView):
    model = Resident
    fields = ["first_name", "last_initial", "on_hiatus"]

    def get_object(self, queryset=None):
        if queryset is None:
            queryset = self.get_queryset()

        url_uuid = self.kwargs.get("url_uuid")  # Get the url_uuid from the URL

        if url_uuid is not None:
            queryset = queryset.filter(
                url_uuid=url_uuid,
            )  # Filter the queryset based on url_uuid

        obj = get_object_or_404(
            queryset,
        )  # Get the object or return a 404 error if not found

        return obj


class ResidentListView(ListView):
    model = Resident
    context_object_name = "residents"