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
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.
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
- 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.
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.
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
- 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.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
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.
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
.
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.
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.
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
- 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
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.
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.
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.
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
- 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
- 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.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.
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
- 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.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