vkk.workhours.allprojects.views

This submodule contains all of the class based views of this module.

  1"""
  2This submodule contains all of the class based views of this module.
  3"""
  4
  5from django.utils.translation import gettext_lazy as _
  6from django.views.generic import FormView, RedirectView
  7from django.urls import reverse
  8from django.db.models import Max
  9from django.utils import timezone
 10from vkk.generic.views import CustomListView, CustomSuccessView
 11from vkk.users.models import User
 12from vkk.workhours.models import Period
 13from .mixins import ProjectManagerRequiredMixin
 14from .forms import AssigneeForm, YearSelectForm, AssgineeClosureForm
 15
 16
 17class AllProjectYearRedirectView(ProjectManagerRequiredMixin, RedirectView):
 18    """
 19    A class based `View` providing a functionality for selecting and redirecting for a given year.
 20    """
 21    def get_redirect_url(self, *args, **kwargs):
 22        """
 23        Returns an URL for redirecting.
 24        """
 25        # Catches Period Selection from GET
 26        if 'year' in self.request.GET:
 27            form = YearSelectForm(data=self.request.GET)
 28            if form.is_valid():
 29                year = int(form.cleaned_data['year'])
 30        else:
 31            year = Period.objects.aggregate(Max('start'))['start__max'].year
 32        return reverse('vkk:workhours:allprojects:overview', kwargs={'year': year})
 33
 34
 35class AllProjectAssigneesOverView(ProjectManagerRequiredMixin, CustomListView):
 36    """
 37    A class based `View` providing functionality for listing all contributors to be 
 38    managed by the given project manager no matter the specific project.
 39    """
 40    model = User
 41    fields = ['first_name', 'last_name', 'email']
 42    action_options = {'update': _('Details')}
 43    ordering = ['last_name', 'first_name']
 44    template_name = 'vkk/workhours/allprojects/overview.html'
 45
 46    def get_context_data(self, **kwargs):
 47        """
 48        Returns a context for rendering the page.
 49        """
 50        context = super().get_context_data(**kwargs)
 51        context["form"] = YearSelectForm(
 52            initial={'year': self.kwargs['year']}
 53        )
 54        return context
 55
 56    def get_queryset(self):
 57        """
 58        Returns a query set containing all contributors which are assigned to projects, which
 59        are managed by the given user as a project manager.
 60        """
 61        query_set = super().get_queryset().filter(
 62            projectassignment__project__projectmanager__manager=self.request.user,
 63            projectassignment__project__projectmanager__end__gte=timezone.now().date(),
 64        ).distinct()
 65        return query_set
 66
 67
 68class AssigneeUpdate(ProjectManagerRequiredMixin, FormView):
 69    """
 70    A class based `View` providing functionality for updating work hours 
 71    of a selected contributor.
 72    """
 73    form_class = AssigneeForm
 74    template_name = 'vkk/workhours/allprojects/assignee_update.html'
 75
 76    def get_form_kwargs(self):
 77        """
 78        Returns the keyword arguments meant for initializing the associated `Form`.
 79        """
 80        kwargs = super().get_form_kwargs()
 81        kwargs.update({
 82            'assignee': self.kwargs['pk'],
 83            'manager': self.request.user,
 84            'year': self.kwargs['year'],
 85        })
 86        return kwargs
 87
 88    def get_context_data(self, **kwargs):
 89        """
 90        Returns a context for rendering the page.
 91        """
 92        context = super().get_context_data(**kwargs)
 93        context["assignee"] = User.objects.get(id=self.kwargs['pk'])
 94        return context
 95
 96    def get_success_url(self):
 97        """
 98        Returns an URL to redirect to after a successfull action.
 99        """
100        return reverse(
101            'vkk:workhours:allprojects:update_success', kwargs={'year': self.kwargs['year']},
102        )
103
104    def form_valid(self, form):
105        """
106        Saves the Information associated with the `Form`, after valididating it, and returns
107        said instance. 
108        """
109        form.save()
110        return super().form_valid(form)
111
112
113class AssigneeClosureView(ProjectManagerRequiredMixin, FormView):
114    """
115    A class based `View` providing functionality for closing a period for a contributor.
116    """
117    form_class = AssgineeClosureForm
118    template_name = 'vkk/workhours/contributor/closure.html'
119
120    def post(self, request, *args, **kwargs):
121        """
122        Handler for POST request. Returns either a 403 response or redirection after
123        a sucsessful action.
124        """
125        form = self.form_class(
126            data={
127                'period': self.kwargs['period_pk'],
128                'assignee': self.kwargs['assignee_pk'],
129                'manager': self.request.user
130            },
131        )
132        if form.is_valid:
133            form.save()
134            return self.form_valid(form)
135        else:
136            return self.handle_no_permission()
137
138    def get_context_data(self, **kwargs):
139        """
140        Returns a context for rednering the page.
141        """
142        context = super().get_context_data(**kwargs)
143        context.pop('form')
144        return context
145
146    def get_success_url(self):
147        """
148        Returns an URL to redirect to after a successful action.
149        """
150        url = reverse(
151            'vkk:workhours:allprojects:closure_success',
152            args=[self.kwargs['year'], self.kwargs['assignee_pk']],
153        )
154        return url
155
156
157class AssigneeUpdateSuccessView(ProjectManagerRequiredMixin, CustomSuccessView):
158    """
159    A class based `View` providing a success page after updating a contributors workhours.
160    """
161    pass
162
163
164class AssigneeClosureSuccessView(ProjectManagerRequiredMixin, CustomSuccessView):
165    """
166    A class based `View` providing a success page after closing a contributors period.
167    """
168    def get_success_url(self):
169        """
170        Returns a URL for a hyperlink.
171        """
172        url = reverse(
173            'vkk:workhours:allprojects:update',
174            args=[self.kwargs['year'], self.kwargs['assignee_pk']],
175        )
176        return url
class AllProjectYearRedirectView(vkk.workhours.allprojects.mixins.ProjectManagerRequiredMixin, django.views.generic.base.RedirectView):
18class AllProjectYearRedirectView(ProjectManagerRequiredMixin, RedirectView):
19    """
20    A class based `View` providing a functionality for selecting and redirecting for a given year.
21    """
22    def get_redirect_url(self, *args, **kwargs):
23        """
24        Returns an URL for redirecting.
25        """
26        # Catches Period Selection from GET
27        if 'year' in self.request.GET:
28            form = YearSelectForm(data=self.request.GET)
29            if form.is_valid():
30                year = int(form.cleaned_data['year'])
31        else:
32            year = Period.objects.aggregate(Max('start'))['start__max'].year
33        return reverse('vkk:workhours:allprojects:overview', kwargs={'year': year})

A class based View providing a functionality for selecting and redirecting for a given year.

def get_redirect_url(self, *args, **kwargs):
22    def get_redirect_url(self, *args, **kwargs):
23        """
24        Returns an URL for redirecting.
25        """
26        # Catches Period Selection from GET
27        if 'year' in self.request.GET:
28            form = YearSelectForm(data=self.request.GET)
29            if form.is_valid():
30                year = int(form.cleaned_data['year'])
31        else:
32            year = Period.objects.aggregate(Max('start'))['start__max'].year
33        return reverse('vkk:workhours:allprojects:overview', kwargs={'year': year})

Returns an URL for redirecting.

Inherited Members
django.views.generic.base.View
View
http_method_names
view_is_async
as_view
setup
http_method_not_allowed
vkk.workhours.allprojects.mixins.ProjectManagerRequiredMixin
check_field
dispatch
django.contrib.auth.mixins.AccessMixin
login_url
permission_denied_message
raise_exception
redirect_field_name
get_login_url
get_permission_denied_message
get_redirect_field_name
handle_no_permission
django.views.generic.base.RedirectView
permanent
url
pattern_name
query_string
get
head
post
options
delete
put
patch
36class AllProjectAssigneesOverView(ProjectManagerRequiredMixin, CustomListView):
37    """
38    A class based `View` providing functionality for listing all contributors to be 
39    managed by the given project manager no matter the specific project.
40    """
41    model = User
42    fields = ['first_name', 'last_name', 'email']
43    action_options = {'update': _('Details')}
44    ordering = ['last_name', 'first_name']
45    template_name = 'vkk/workhours/allprojects/overview.html'
46
47    def get_context_data(self, **kwargs):
48        """
49        Returns a context for rendering the page.
50        """
51        context = super().get_context_data(**kwargs)
52        context["form"] = YearSelectForm(
53            initial={'year': self.kwargs['year']}
54        )
55        return context
56
57    def get_queryset(self):
58        """
59        Returns a query set containing all contributors which are assigned to projects, which
60        are managed by the given user as a project manager.
61        """
62        query_set = super().get_queryset().filter(
63            projectassignment__project__projectmanager__manager=self.request.user,
64            projectassignment__project__projectmanager__end__gte=timezone.now().date(),
65        ).distinct()
66        return query_set

A class based View providing functionality for listing all contributors to be managed by the given project manager no matter the specific project.

model = <class 'vkk.users.models.User'>
fields = ['first_name', 'last_name', 'email']
action_options = {'update': 'Details'}
ordering = ['last_name', 'first_name']
template_name = 'vkk/workhours/allprojects/overview.html'
def get_context_data(self, **kwargs):
47    def get_context_data(self, **kwargs):
48        """
49        Returns a context for rendering the page.
50        """
51        context = super().get_context_data(**kwargs)
52        context["form"] = YearSelectForm(
53            initial={'year': self.kwargs['year']}
54        )
55        return context

Returns a context for rendering the page.

def get_queryset(self):
57    def get_queryset(self):
58        """
59        Returns a query set containing all contributors which are assigned to projects, which
60        are managed by the given user as a project manager.
61        """
62        query_set = super().get_queryset().filter(
63            projectassignment__project__projectmanager__manager=self.request.user,
64            projectassignment__project__projectmanager__end__gte=timezone.now().date(),
65        ).distinct()
66        return query_set

Returns a query set containing all contributors which are assigned to projects, which are managed by the given user as a project manager.

Inherited Members
django.views.generic.base.View
View
http_method_names
view_is_async
as_view
setup
http_method_not_allowed
options
vkk.workhours.allprojects.mixins.ProjectManagerRequiredMixin
check_field
dispatch
django.contrib.auth.mixins.AccessMixin
login_url
permission_denied_message
raise_exception
redirect_field_name
get_login_url
get_permission_denied_message
get_redirect_field_name
handle_no_permission
vkk.generic.views.CustomListView
keys
paginate_by
django.views.generic.list.MultipleObjectTemplateResponseMixin
template_name_suffix
get_template_names
django.views.generic.base.TemplateResponseMixin
template_engine
response_class
content_type
render_to_response
django.views.generic.list.BaseListView
get
django.views.generic.list.MultipleObjectMixin
allow_empty
queryset
paginate_orphans
context_object_name
paginator_class
page_kwarg
get_ordering
paginate_queryset
get_paginate_by
get_paginator
get_paginate_orphans
get_allow_empty
get_context_object_name
django.views.generic.base.ContextMixin
extra_context
class AssigneeUpdate(vkk.workhours.allprojects.mixins.ProjectManagerRequiredMixin, django.views.generic.edit.FormView):
 69class AssigneeUpdate(ProjectManagerRequiredMixin, FormView):
 70    """
 71    A class based `View` providing functionality for updating work hours 
 72    of a selected contributor.
 73    """
 74    form_class = AssigneeForm
 75    template_name = 'vkk/workhours/allprojects/assignee_update.html'
 76
 77    def get_form_kwargs(self):
 78        """
 79        Returns the keyword arguments meant for initializing the associated `Form`.
 80        """
 81        kwargs = super().get_form_kwargs()
 82        kwargs.update({
 83            'assignee': self.kwargs['pk'],
 84            'manager': self.request.user,
 85            'year': self.kwargs['year'],
 86        })
 87        return kwargs
 88
 89    def get_context_data(self, **kwargs):
 90        """
 91        Returns a context for rendering the page.
 92        """
 93        context = super().get_context_data(**kwargs)
 94        context["assignee"] = User.objects.get(id=self.kwargs['pk'])
 95        return context
 96
 97    def get_success_url(self):
 98        """
 99        Returns an URL to redirect to after a successfull action.
100        """
101        return reverse(
102            'vkk:workhours:allprojects:update_success', kwargs={'year': self.kwargs['year']},
103        )
104
105    def form_valid(self, form):
106        """
107        Saves the Information associated with the `Form`, after valididating it, and returns
108        said instance. 
109        """
110        form.save()
111        return super().form_valid(form)

A class based View providing functionality for updating work hours of a selected contributor.

template_name = 'vkk/workhours/allprojects/assignee_update.html'
def get_form_kwargs(self):
77    def get_form_kwargs(self):
78        """
79        Returns the keyword arguments meant for initializing the associated `Form`.
80        """
81        kwargs = super().get_form_kwargs()
82        kwargs.update({
83            'assignee': self.kwargs['pk'],
84            'manager': self.request.user,
85            'year': self.kwargs['year'],
86        })
87        return kwargs

Returns the keyword arguments meant for initializing the associated Form.

def get_context_data(self, **kwargs):
89    def get_context_data(self, **kwargs):
90        """
91        Returns a context for rendering the page.
92        """
93        context = super().get_context_data(**kwargs)
94        context["assignee"] = User.objects.get(id=self.kwargs['pk'])
95        return context

Returns a context for rendering the page.

def get_success_url(self):
 97    def get_success_url(self):
 98        """
 99        Returns an URL to redirect to after a successfull action.
100        """
101        return reverse(
102            'vkk:workhours:allprojects:update_success', kwargs={'year': self.kwargs['year']},
103        )

Returns an URL to redirect to after a successfull action.

def form_valid(self, form):
105    def form_valid(self, form):
106        """
107        Saves the Information associated with the `Form`, after valididating it, and returns
108        said instance. 
109        """
110        form.save()
111        return super().form_valid(form)

Saves the Information associated with the Form, after valididating it, and returns said instance.

Inherited Members
django.views.generic.base.View
View
http_method_names
view_is_async
as_view
setup
http_method_not_allowed
options
vkk.workhours.allprojects.mixins.ProjectManagerRequiredMixin
check_field
dispatch
django.contrib.auth.mixins.AccessMixin
login_url
permission_denied_message
raise_exception
redirect_field_name
get_login_url
get_permission_denied_message
get_redirect_field_name
handle_no_permission
django.views.generic.base.TemplateResponseMixin
template_engine
response_class
content_type
render_to_response
get_template_names
django.views.generic.edit.FormMixin
initial
success_url
prefix
get_initial
get_prefix
get_form_class
get_form
form_invalid
django.views.generic.base.ContextMixin
extra_context
django.views.generic.edit.ProcessFormView
get
post
put
class AssigneeClosureView(vkk.workhours.allprojects.mixins.ProjectManagerRequiredMixin, django.views.generic.edit.FormView):
114class AssigneeClosureView(ProjectManagerRequiredMixin, FormView):
115    """
116    A class based `View` providing functionality for closing a period for a contributor.
117    """
118    form_class = AssgineeClosureForm
119    template_name = 'vkk/workhours/contributor/closure.html'
120
121    def post(self, request, *args, **kwargs):
122        """
123        Handler for POST request. Returns either a 403 response or redirection after
124        a sucsessful action.
125        """
126        form = self.form_class(
127            data={
128                'period': self.kwargs['period_pk'],
129                'assignee': self.kwargs['assignee_pk'],
130                'manager': self.request.user
131            },
132        )
133        if form.is_valid:
134            form.save()
135            return self.form_valid(form)
136        else:
137            return self.handle_no_permission()
138
139    def get_context_data(self, **kwargs):
140        """
141        Returns a context for rednering the page.
142        """
143        context = super().get_context_data(**kwargs)
144        context.pop('form')
145        return context
146
147    def get_success_url(self):
148        """
149        Returns an URL to redirect to after a successful action.
150        """
151        url = reverse(
152            'vkk:workhours:allprojects:closure_success',
153            args=[self.kwargs['year'], self.kwargs['assignee_pk']],
154        )
155        return url

A class based View providing functionality for closing a period for a contributor.

template_name = 'vkk/workhours/contributor/closure.html'
def post(self, request, *args, **kwargs):
121    def post(self, request, *args, **kwargs):
122        """
123        Handler for POST request. Returns either a 403 response or redirection after
124        a sucsessful action.
125        """
126        form = self.form_class(
127            data={
128                'period': self.kwargs['period_pk'],
129                'assignee': self.kwargs['assignee_pk'],
130                'manager': self.request.user
131            },
132        )
133        if form.is_valid:
134            form.save()
135            return self.form_valid(form)
136        else:
137            return self.handle_no_permission()

Handler for POST request. Returns either a 403 response or redirection after a sucsessful action.

def get_context_data(self, **kwargs):
139    def get_context_data(self, **kwargs):
140        """
141        Returns a context for rednering the page.
142        """
143        context = super().get_context_data(**kwargs)
144        context.pop('form')
145        return context

Returns a context for rednering the page.

def get_success_url(self):
147    def get_success_url(self):
148        """
149        Returns an URL to redirect to after a successful action.
150        """
151        url = reverse(
152            'vkk:workhours:allprojects:closure_success',
153            args=[self.kwargs['year'], self.kwargs['assignee_pk']],
154        )
155        return url

Returns an URL to redirect to after a successful action.

Inherited Members
django.views.generic.base.View
View
http_method_names
view_is_async
as_view
setup
http_method_not_allowed
options
vkk.workhours.allprojects.mixins.ProjectManagerRequiredMixin
check_field
dispatch
django.contrib.auth.mixins.AccessMixin
login_url
permission_denied_message
raise_exception
redirect_field_name
get_login_url
get_permission_denied_message
get_redirect_field_name
handle_no_permission
django.views.generic.base.TemplateResponseMixin
template_engine
response_class
content_type
render_to_response
get_template_names
django.views.generic.edit.FormMixin
initial
success_url
prefix
get_initial
get_prefix
get_form_class
get_form
get_form_kwargs
form_valid
form_invalid
django.views.generic.base.ContextMixin
extra_context
django.views.generic.edit.ProcessFormView
get
put
158class AssigneeUpdateSuccessView(ProjectManagerRequiredMixin, CustomSuccessView):
159    """
160    A class based `View` providing a success page after updating a contributors workhours.
161    """
162    pass

A class based View providing a success page after updating a contributors workhours.

Inherited Members
django.views.generic.base.View
View
http_method_names
view_is_async
as_view
setup
http_method_not_allowed
options
vkk.workhours.allprojects.mixins.ProjectManagerRequiredMixin
check_field
dispatch
django.contrib.auth.mixins.AccessMixin
login_url
permission_denied_message
raise_exception
redirect_field_name
get_login_url
get_permission_denied_message
get_redirect_field_name
handle_no_permission
vkk.generic.views.CustomSuccessView
model
on_success
vkk.generic.mixins.OnSuccessMixin
drop_key
kwarg_override
get_success_url
django.views.generic.base.TemplateView
get
django.views.generic.base.TemplateResponseMixin
template_name
template_engine
response_class
content_type
render_to_response
get_template_names
django.views.generic.base.ContextMixin
extra_context
get_context_data
165class AssigneeClosureSuccessView(ProjectManagerRequiredMixin, CustomSuccessView):
166    """
167    A class based `View` providing a success page after closing a contributors period.
168    """
169    def get_success_url(self):
170        """
171        Returns a URL for a hyperlink.
172        """
173        url = reverse(
174            'vkk:workhours:allprojects:update',
175            args=[self.kwargs['year'], self.kwargs['assignee_pk']],
176        )
177        return url

A class based View providing a success page after closing a contributors period.

def get_success_url(self):
169    def get_success_url(self):
170        """
171        Returns a URL for a hyperlink.
172        """
173        url = reverse(
174            'vkk:workhours:allprojects:update',
175            args=[self.kwargs['year'], self.kwargs['assignee_pk']],
176        )
177        return url

Returns a URL for a hyperlink.

Inherited Members
django.views.generic.base.View
View
http_method_names
view_is_async
as_view
setup
http_method_not_allowed
options
vkk.workhours.allprojects.mixins.ProjectManagerRequiredMixin
check_field
dispatch
django.contrib.auth.mixins.AccessMixin
login_url
permission_denied_message
raise_exception
redirect_field_name
get_login_url
get_permission_denied_message
get_redirect_field_name
handle_no_permission
vkk.generic.views.CustomSuccessView
model
on_success
vkk.generic.mixins.OnSuccessMixin
drop_key
kwarg_override
django.views.generic.base.TemplateView
get
django.views.generic.base.TemplateResponseMixin
template_name
template_engine
response_class
content_type
render_to_response
get_template_names
django.views.generic.base.ContextMixin
extra_context
get_context_data