vkk.workhours.allprojects.views

  1from django.utils.translation import gettext_lazy as _
  2from django.views.generic import FormView, RedirectView
  3from django.urls import reverse
  4from django.db.models import Max
  5from django.utils import timezone
  6from vkk.generic.views import CustomListView, CustomSuccessView
  7from vkk.users.models import User
  8from vkk.workhours.models import Period
  9from .mixins import ProjectManagerRequiredMixin
 10from .forms import AssigneeForm, YearSelectForm, AssgineeClosureForm
 11
 12
 13class AllProjectYearRedirectView(ProjectManagerRequiredMixin, RedirectView):
 14    def get_redirect_url(self, *args, **kwargs):
 15        # Catches Period Selection from GET
 16        if 'year' in self.request.GET:
 17            form = YearSelectForm(data=self.request.GET)
 18            if form.is_valid():
 19                year = int(form.cleaned_data['year'])
 20        else:
 21            year = Period.objects.aggregate(Max('start'))['start__max'].year
 22        return reverse('vkk:workhours:allprojects:overview', kwargs={'year': year})
 23
 24
 25class AllProjectAssigneesOverView(ProjectManagerRequiredMixin, CustomListView):
 26    model = User
 27    fields = ['first_name', 'last_name', 'email']
 28    action_options = {'update': _('Details')}
 29    ordering = ['last_name', 'first_name']
 30    template_name = 'vkk/workhours/allprojects/overview.html'
 31
 32    def get_context_data(self, **kwargs):
 33        context = super().get_context_data(**kwargs)
 34        context["form"] = YearSelectForm(
 35            initial={'year': self.kwargs['year']}
 36        )
 37        return context
 38
 39    def get_queryset(self):
 40        query_set = super().get_queryset().filter(
 41            projectassignment__project__projectmanager__manager=self.request.user,
 42            projectassignment__project__projectmanager__end__gte=timezone.now().date(),
 43        ).distinct()
 44        return query_set
 45
 46
 47class AssigneeUpdate(ProjectManagerRequiredMixin, FormView):
 48    form_class = AssigneeForm
 49    template_name = 'vkk/workhours/allprojects/assignee_update.html'
 50
 51    def get_form_kwargs(self):
 52        kwargs = super().get_form_kwargs()
 53        kwargs.update({
 54            'assignee': self.kwargs['pk'],
 55            'manager': self.request.user,
 56            'year': self.kwargs['year'],
 57        })
 58        return kwargs
 59
 60    def get_context_data(self, **kwargs):
 61        context = super().get_context_data(**kwargs)
 62        context["assignee"] = User.objects.get(id=self.kwargs['pk'])
 63        return context
 64
 65    def get_success_url(self):
 66        return reverse(
 67            'vkk:workhours:allprojects:update_success', kwargs={'year': self.kwargs['year']},
 68        )
 69
 70    def form_valid(self, form):
 71        form.save()
 72        return super().form_valid(form)
 73
 74
 75class AssigneeClosureView(ProjectManagerRequiredMixin, FormView):
 76    form_class = AssgineeClosureForm
 77    template_name = 'vkk/workhours/contributor/closure.html'
 78
 79    def post(self, request, *args, **kwargs):
 80        form = self.form_class(
 81            data={
 82                'period': self.kwargs['period_pk'],
 83                'assignee': self.kwargs['assignee_pk'],
 84                'manager': self.request.user
 85            },
 86        )
 87        if form.is_valid:
 88            form.save()
 89            return self.form_valid(form)
 90        else:
 91            return self.handle_no_permission()
 92
 93    def get_context_data(self, **kwargs):
 94        context = super().get_context_data(**kwargs)
 95        context.pop('form')
 96        return context
 97
 98    def get_success_url(self):
 99        url = reverse(
100            'vkk:workhours:allprojects:closure_success',
101            args=[self.kwargs['year'], self.kwargs['assignee_pk']],
102        )
103        return url
104
105
106class AssigneeUpdateSuccessView(ProjectManagerRequiredMixin, CustomSuccessView):
107    pass
108
109
110class AssigneeClosureSuccessView(ProjectManagerRequiredMixin, CustomSuccessView):
111
112    def get_success_url(self):
113        url = reverse(
114            'vkk:workhours:allprojects:update',
115            args=[self.kwargs['year'], self.kwargs['assignee_pk']],
116        )
117        return url
class AllProjectYearRedirectView(vkk.workhours.allprojects.mixins.ProjectManagerRequiredMixin, django.views.generic.base.RedirectView):
14class AllProjectYearRedirectView(ProjectManagerRequiredMixin, RedirectView):
15    def get_redirect_url(self, *args, **kwargs):
16        # Catches Period Selection from GET
17        if 'year' in self.request.GET:
18            form = YearSelectForm(data=self.request.GET)
19            if form.is_valid():
20                year = int(form.cleaned_data['year'])
21        else:
22            year = Period.objects.aggregate(Max('start'))['start__max'].year
23        return reverse('vkk:workhours:allprojects:overview', kwargs={'year': year})

Verify that the current user is a manager of at least one project.

def get_redirect_url(self, *args, **kwargs):
15    def get_redirect_url(self, *args, **kwargs):
16        # Catches Period Selection from GET
17        if 'year' in self.request.GET:
18            form = YearSelectForm(data=self.request.GET)
19            if form.is_valid():
20                year = int(form.cleaned_data['year'])
21        else:
22            year = Period.objects.aggregate(Max('start'))['start__max'].year
23        return reverse('vkk:workhours:allprojects:overview', kwargs={'year': year})

Return the URL redirect to. Keyword arguments from the URL pattern match generating the redirect request are provided as kwargs to this method.

Inherited Members
django.views.generic.base.View
View
view_is_async
as_view
setup
http_method_not_allowed
vkk.workhours.allprojects.mixins.ProjectManagerRequiredMixin
dispatch
django.contrib.auth.mixins.AccessMixin
get_login_url
get_permission_denied_message
get_redirect_field_name
handle_no_permission
django.views.generic.base.RedirectView
get
head
post
options
delete
put
patch
26class AllProjectAssigneesOverView(ProjectManagerRequiredMixin, CustomListView):
27    model = User
28    fields = ['first_name', 'last_name', 'email']
29    action_options = {'update': _('Details')}
30    ordering = ['last_name', 'first_name']
31    template_name = 'vkk/workhours/allprojects/overview.html'
32
33    def get_context_data(self, **kwargs):
34        context = super().get_context_data(**kwargs)
35        context["form"] = YearSelectForm(
36            initial={'year': self.kwargs['year']}
37        )
38        return context
39
40    def get_queryset(self):
41        query_set = super().get_queryset().filter(
42            projectassignment__project__projectmanager__manager=self.request.user,
43            projectassignment__project__projectmanager__end__gte=timezone.now().date(),
44        ).distinct()
45        return query_set

Verify that the current user is a manager of at least one project.

def get_context_data(self, **kwargs):
33    def get_context_data(self, **kwargs):
34        context = super().get_context_data(**kwargs)
35        context["form"] = YearSelectForm(
36            initial={'year': self.kwargs['year']}
37        )
38        return context

Get the context for this view.

def get_queryset(self):
40    def get_queryset(self):
41        query_set = super().get_queryset().filter(
42            projectassignment__project__projectmanager__manager=self.request.user,
43            projectassignment__project__projectmanager__end__gte=timezone.now().date(),
44        ).distinct()
45        return query_set

Return the list of items for this view.

The return value must be an iterable and may be an instance of QuerySet in which case QuerySet specific behavior will be enabled.

Inherited Members
django.views.generic.base.View
View
view_is_async
as_view
setup
http_method_not_allowed
options
vkk.workhours.allprojects.mixins.ProjectManagerRequiredMixin
dispatch
django.contrib.auth.mixins.AccessMixin
get_login_url
get_permission_denied_message
get_redirect_field_name
handle_no_permission
django.views.generic.list.MultipleObjectTemplateResponseMixin
get_template_names
django.views.generic.base.TemplateResponseMixin
render_to_response
django.views.generic.list.BaseListView
get
django.views.generic.list.MultipleObjectMixin
get_ordering
paginate_queryset
get_paginate_by
get_paginator
get_paginate_orphans
get_allow_empty
get_context_object_name
class AssigneeUpdate(vkk.workhours.allprojects.mixins.ProjectManagerRequiredMixin, django.views.generic.edit.FormView):
48class AssigneeUpdate(ProjectManagerRequiredMixin, FormView):
49    form_class = AssigneeForm
50    template_name = 'vkk/workhours/allprojects/assignee_update.html'
51
52    def get_form_kwargs(self):
53        kwargs = super().get_form_kwargs()
54        kwargs.update({
55            'assignee': self.kwargs['pk'],
56            'manager': self.request.user,
57            'year': self.kwargs['year'],
58        })
59        return kwargs
60
61    def get_context_data(self, **kwargs):
62        context = super().get_context_data(**kwargs)
63        context["assignee"] = User.objects.get(id=self.kwargs['pk'])
64        return context
65
66    def get_success_url(self):
67        return reverse(
68            'vkk:workhours:allprojects:update_success', kwargs={'year': self.kwargs['year']},
69        )
70
71    def form_valid(self, form):
72        form.save()
73        return super().form_valid(form)

Verify that the current user is a manager of at least one project.

def get_form_kwargs(self):
52    def get_form_kwargs(self):
53        kwargs = super().get_form_kwargs()
54        kwargs.update({
55            'assignee': self.kwargs['pk'],
56            'manager': self.request.user,
57            'year': self.kwargs['year'],
58        })
59        return kwargs

Return the keyword arguments for instantiating the form.

def get_context_data(self, **kwargs):
61    def get_context_data(self, **kwargs):
62        context = super().get_context_data(**kwargs)
63        context["assignee"] = User.objects.get(id=self.kwargs['pk'])
64        return context

Insert the form into the context dict.

def get_success_url(self):
66    def get_success_url(self):
67        return reverse(
68            'vkk:workhours:allprojects:update_success', kwargs={'year': self.kwargs['year']},
69        )

Return the URL to redirect to after processing a valid form.

def form_valid(self, form):
71    def form_valid(self, form):
72        form.save()
73        return super().form_valid(form)

If the form is valid, redirect to the supplied URL.

Inherited Members
django.views.generic.base.View
View
view_is_async
as_view
setup
http_method_not_allowed
options
vkk.workhours.allprojects.mixins.ProjectManagerRequiredMixin
dispatch
django.contrib.auth.mixins.AccessMixin
get_login_url
get_permission_denied_message
get_redirect_field_name
handle_no_permission
django.views.generic.base.TemplateResponseMixin
render_to_response
get_template_names
django.views.generic.edit.FormMixin
get_initial
get_prefix
get_form_class
get_form
form_invalid
django.views.generic.edit.ProcessFormView
get
post
put
class AssigneeClosureView(vkk.workhours.allprojects.mixins.ProjectManagerRequiredMixin, django.views.generic.edit.FormView):
 76class AssigneeClosureView(ProjectManagerRequiredMixin, FormView):
 77    form_class = AssgineeClosureForm
 78    template_name = 'vkk/workhours/contributor/closure.html'
 79
 80    def post(self, request, *args, **kwargs):
 81        form = self.form_class(
 82            data={
 83                'period': self.kwargs['period_pk'],
 84                'assignee': self.kwargs['assignee_pk'],
 85                'manager': self.request.user
 86            },
 87        )
 88        if form.is_valid:
 89            form.save()
 90            return self.form_valid(form)
 91        else:
 92            return self.handle_no_permission()
 93
 94    def get_context_data(self, **kwargs):
 95        context = super().get_context_data(**kwargs)
 96        context.pop('form')
 97        return context
 98
 99    def get_success_url(self):
100        url = reverse(
101            'vkk:workhours:allprojects:closure_success',
102            args=[self.kwargs['year'], self.kwargs['assignee_pk']],
103        )
104        return url

Verify that the current user is a manager of at least one project.

def post(self, request, *args, **kwargs):
80    def post(self, request, *args, **kwargs):
81        form = self.form_class(
82            data={
83                'period': self.kwargs['period_pk'],
84                'assignee': self.kwargs['assignee_pk'],
85                'manager': self.request.user
86            },
87        )
88        if form.is_valid:
89            form.save()
90            return self.form_valid(form)
91        else:
92            return self.handle_no_permission()

Handle POST requests: instantiate a form instance with the passed POST variables and then check if it's valid.

def get_context_data(self, **kwargs):
94    def get_context_data(self, **kwargs):
95        context = super().get_context_data(**kwargs)
96        context.pop('form')
97        return context

Insert the form into the context dict.

def get_success_url(self):
 99    def get_success_url(self):
100        url = reverse(
101            'vkk:workhours:allprojects:closure_success',
102            args=[self.kwargs['year'], self.kwargs['assignee_pk']],
103        )
104        return url

Return the URL to redirect to after processing a valid form.

Inherited Members
django.views.generic.base.View
View
view_is_async
as_view
setup
http_method_not_allowed
options
vkk.workhours.allprojects.mixins.ProjectManagerRequiredMixin
dispatch
django.contrib.auth.mixins.AccessMixin
get_login_url
get_permission_denied_message
get_redirect_field_name
handle_no_permission
django.views.generic.base.TemplateResponseMixin
render_to_response
get_template_names
django.views.generic.edit.FormMixin
get_initial
get_prefix
get_form_class
get_form
get_form_kwargs
form_valid
form_invalid
django.views.generic.edit.ProcessFormView
get
put
107class AssigneeUpdateSuccessView(ProjectManagerRequiredMixin, CustomSuccessView):
108    pass

Verify that the current user is a manager of at least one project.

Inherited Members
django.views.generic.base.View
View
view_is_async
as_view
setup
http_method_not_allowed
options
vkk.workhours.allprojects.mixins.ProjectManagerRequiredMixin
dispatch
django.contrib.auth.mixins.AccessMixin
get_login_url
get_permission_denied_message
get_redirect_field_name
handle_no_permission
vkk.generic.mixins.OnSuccessMixin
get_success_url
django.views.generic.base.TemplateView
get
django.views.generic.base.TemplateResponseMixin
render_to_response
get_template_names
django.views.generic.base.ContextMixin
get_context_data
111class AssigneeClosureSuccessView(ProjectManagerRequiredMixin, CustomSuccessView):
112
113    def get_success_url(self):
114        url = reverse(
115            'vkk:workhours:allprojects:update',
116            args=[self.kwargs['year'], self.kwargs['assignee_pk']],
117        )
118        return url

Verify that the current user is a manager of at least one project.

def get_success_url(self):
113    def get_success_url(self):
114        url = reverse(
115            'vkk:workhours:allprojects:update',
116            args=[self.kwargs['year'], self.kwargs['assignee_pk']],
117        )
118        return url

Return the URL meant for redirecting after a successful action.

Inherited Members
django.views.generic.base.View
View
view_is_async
as_view
setup
http_method_not_allowed
options
vkk.workhours.allprojects.mixins.ProjectManagerRequiredMixin
dispatch
django.contrib.auth.mixins.AccessMixin
get_login_url
get_permission_denied_message
get_redirect_field_name
handle_no_permission
django.views.generic.base.TemplateView
get
django.views.generic.base.TemplateResponseMixin
render_to_response
get_template_names
django.views.generic.base.ContextMixin
get_context_data