vkk.workhours.accounting.periods.views
1from django.db.models import Count, Q, Value, IntegerField, F 2from django.shortcuts import get_object_or_404 3from vkk.workhours.accounting.views import AccountingDetailView 4from vkk.workhours.models import Period, Project, Department 5 6 7class AccountingPeriodDetailView(AccountingDetailView): 8 model = Period 9 fields = ['start', 'end', 'dead_line', 'dead_line_final'] 10 template_name = "vkk/workhours/accounting/period/details.html" 11 12 def get_context_data(self, **kwargs): 13 context = super().get_context_data(**kwargs) 14 projects_open = Project.objects.exclude( 15 Q(projectassignment__isnull=True) | Q(projectassignment__periodclosure__period=kwargs["object"]) & Q( 16 projectassignment__periodclosure__is_closed_contributor=True) & Q(projectassignment__periodclosure__is_closed_manager=True) 17 ).exclude( 18 Q(start__lt=kwargs["object"].start) & Q(end__lt=kwargs["object"].end) | Q( 19 start__gt=kwargs["object"].start) & Q(start__gt=kwargs["object"].end) 20 ).values( 21 'department__name', 'department__pk' 22 ).annotate( 23 projects_not_closed=Count('department__pk') 24 ).exclude(department__pk=None) 25 26 projects_closed = Project.objects.filter( 27 Q(projectassignment__isnull=True) | Q(projectassignment__periodclosure__period=kwargs["object"]) & Q( 28 projectassignment__periodclosure__is_closed_contributor=True) & Q(projectassignment__periodclosure__is_closed_manager=True) 29 ).exclude( 30 Q(start__lt=kwargs["object"].start) & Q(end__lt=kwargs["object"].end) | Q( 31 start__gt=kwargs["object"].start) & Q(start__gt=kwargs["object"].end) 32 ).distinct( 33 'department__pk' 34 ).values( 35 'department__name', 'department__pk' 36 ).exclude( 37 department__pk__in=projects_open.values('department__pk') 38 ).annotate( 39 projects_not_closed=Value(0, IntegerField()) 40 ).exclude(department__pk=None) 41 42 projects = projects_open.union( 43 projects_closed).order_by('department__name') 44 45 context["projects"] = projects 46 return context 47 48 49class AccountingPeriodDetailDepartmentView(AccountingDetailView): 50 model = Period 51 fields = ['start', 'end', 'dead_line', 'dead_line_final'] 52 template_name = "vkk/workhours/accounting/period/projects.html" 53 54 def get_context_data(self, **kwargs): 55 context = super().get_context_data(**kwargs) 56 department = get_object_or_404( 57 Department, pk=self.kwargs["department_pk"]) 58 projects_open = Project.objects.exclude( 59 Q(projectassignment__isnull=True) | Q(projectassignment__periodclosure__period=kwargs["object"]) & Q( 60 projectassignment__periodclosure__is_closed_contributor=True) & Q(projectassignment__periodclosure__is_closed_manager=True) 61 ).filter( 62 department=department, 63 ).exclude( 64 Q(start__lt=kwargs["object"].start) & Q(end__lt=kwargs["object"].end) | Q( 65 start__gt=kwargs["object"].start) & Q(start__gt=kwargs["object"].end) 66 ) 67 68 projects_closed = Project.objects.filter( 69 Q(projectassignment__isnull=True) | Q(projectassignment__periodclosure__period=kwargs["object"]) & Q( 70 projectassignment__periodclosure__is_closed_contributor=True) & Q(projectassignment__periodclosure__is_closed_manager=True), 71 department=department, 72 ).exclude( 73 Q(start__lt=kwargs["object"].start) & Q(end__lt=kwargs["object"].end) | Q( 74 start__gt=kwargs["object"].start) & Q(start__gt=kwargs["object"].end) 75 ) 76 77 context["department"] = department 78 context["projects_open"] = projects_open.distinct().order_by( 79 'invoice_number') 80 context["projects_closed"] = projects_closed.distinct().order_by( 81 'invoice_number') 82 return context
8class AccountingPeriodDetailView(AccountingDetailView): 9 model = Period 10 fields = ['start', 'end', 'dead_line', 'dead_line_final'] 11 template_name = "vkk/workhours/accounting/period/details.html" 12 13 def get_context_data(self, **kwargs): 14 context = super().get_context_data(**kwargs) 15 projects_open = Project.objects.exclude( 16 Q(projectassignment__isnull=True) | Q(projectassignment__periodclosure__period=kwargs["object"]) & Q( 17 projectassignment__periodclosure__is_closed_contributor=True) & Q(projectassignment__periodclosure__is_closed_manager=True) 18 ).exclude( 19 Q(start__lt=kwargs["object"].start) & Q(end__lt=kwargs["object"].end) | Q( 20 start__gt=kwargs["object"].start) & Q(start__gt=kwargs["object"].end) 21 ).values( 22 'department__name', 'department__pk' 23 ).annotate( 24 projects_not_closed=Count('department__pk') 25 ).exclude(department__pk=None) 26 27 projects_closed = Project.objects.filter( 28 Q(projectassignment__isnull=True) | Q(projectassignment__periodclosure__period=kwargs["object"]) & Q( 29 projectassignment__periodclosure__is_closed_contributor=True) & Q(projectassignment__periodclosure__is_closed_manager=True) 30 ).exclude( 31 Q(start__lt=kwargs["object"].start) & Q(end__lt=kwargs["object"].end) | Q( 32 start__gt=kwargs["object"].start) & Q(start__gt=kwargs["object"].end) 33 ).distinct( 34 'department__pk' 35 ).values( 36 'department__name', 'department__pk' 37 ).exclude( 38 department__pk__in=projects_open.values('department__pk') 39 ).annotate( 40 projects_not_closed=Value(0, IntegerField()) 41 ).exclude(department__pk=None) 42 43 projects = projects_open.union( 44 projects_closed).order_by('department__name') 45 46 context["projects"] = projects 47 return context
Verify that the current user has accountant rights.
def
get_context_data(self, **kwargs):
13 def get_context_data(self, **kwargs): 14 context = super().get_context_data(**kwargs) 15 projects_open = Project.objects.exclude( 16 Q(projectassignment__isnull=True) | Q(projectassignment__periodclosure__period=kwargs["object"]) & Q( 17 projectassignment__periodclosure__is_closed_contributor=True) & Q(projectassignment__periodclosure__is_closed_manager=True) 18 ).exclude( 19 Q(start__lt=kwargs["object"].start) & Q(end__lt=kwargs["object"].end) | Q( 20 start__gt=kwargs["object"].start) & Q(start__gt=kwargs["object"].end) 21 ).values( 22 'department__name', 'department__pk' 23 ).annotate( 24 projects_not_closed=Count('department__pk') 25 ).exclude(department__pk=None) 26 27 projects_closed = Project.objects.filter( 28 Q(projectassignment__isnull=True) | Q(projectassignment__periodclosure__period=kwargs["object"]) & Q( 29 projectassignment__periodclosure__is_closed_contributor=True) & Q(projectassignment__periodclosure__is_closed_manager=True) 30 ).exclude( 31 Q(start__lt=kwargs["object"].start) & Q(end__lt=kwargs["object"].end) | Q( 32 start__gt=kwargs["object"].start) & Q(start__gt=kwargs["object"].end) 33 ).distinct( 34 'department__pk' 35 ).values( 36 'department__name', 'department__pk' 37 ).exclude( 38 department__pk__in=projects_open.values('department__pk') 39 ).annotate( 40 projects_not_closed=Value(0, IntegerField()) 41 ).exclude(department__pk=None) 42 43 projects = projects_open.union( 44 projects_closed).order_by('department__name') 45 46 context["projects"] = projects 47 return context
Insert the single object into the context dict.
Inherited Members
- django.views.generic.base.View
- View
- view_is_async
- as_view
- setup
- http_method_not_allowed
- options
- django.contrib.auth.mixins.AccessMixin
- get_login_url
- get_permission_denied_message
- get_redirect_field_name
- handle_no_permission
- django.views.generic.detail.SingleObjectTemplateResponseMixin
- get_template_names
- django.views.generic.base.TemplateResponseMixin
- render_to_response
- django.views.generic.detail.BaseDetailView
- get
- django.views.generic.detail.SingleObjectMixin
- get_object
- get_queryset
- get_slug_field
- get_context_object_name
50class AccountingPeriodDetailDepartmentView(AccountingDetailView): 51 model = Period 52 fields = ['start', 'end', 'dead_line', 'dead_line_final'] 53 template_name = "vkk/workhours/accounting/period/projects.html" 54 55 def get_context_data(self, **kwargs): 56 context = super().get_context_data(**kwargs) 57 department = get_object_or_404( 58 Department, pk=self.kwargs["department_pk"]) 59 projects_open = Project.objects.exclude( 60 Q(projectassignment__isnull=True) | Q(projectassignment__periodclosure__period=kwargs["object"]) & Q( 61 projectassignment__periodclosure__is_closed_contributor=True) & Q(projectassignment__periodclosure__is_closed_manager=True) 62 ).filter( 63 department=department, 64 ).exclude( 65 Q(start__lt=kwargs["object"].start) & Q(end__lt=kwargs["object"].end) | Q( 66 start__gt=kwargs["object"].start) & Q(start__gt=kwargs["object"].end) 67 ) 68 69 projects_closed = Project.objects.filter( 70 Q(projectassignment__isnull=True) | Q(projectassignment__periodclosure__period=kwargs["object"]) & Q( 71 projectassignment__periodclosure__is_closed_contributor=True) & Q(projectassignment__periodclosure__is_closed_manager=True), 72 department=department, 73 ).exclude( 74 Q(start__lt=kwargs["object"].start) & Q(end__lt=kwargs["object"].end) | Q( 75 start__gt=kwargs["object"].start) & Q(start__gt=kwargs["object"].end) 76 ) 77 78 context["department"] = department 79 context["projects_open"] = projects_open.distinct().order_by( 80 'invoice_number') 81 context["projects_closed"] = projects_closed.distinct().order_by( 82 'invoice_number') 83 return context
Verify that the current user has accountant rights.
def
get_context_data(self, **kwargs):
55 def get_context_data(self, **kwargs): 56 context = super().get_context_data(**kwargs) 57 department = get_object_or_404( 58 Department, pk=self.kwargs["department_pk"]) 59 projects_open = Project.objects.exclude( 60 Q(projectassignment__isnull=True) | Q(projectassignment__periodclosure__period=kwargs["object"]) & Q( 61 projectassignment__periodclosure__is_closed_contributor=True) & Q(projectassignment__periodclosure__is_closed_manager=True) 62 ).filter( 63 department=department, 64 ).exclude( 65 Q(start__lt=kwargs["object"].start) & Q(end__lt=kwargs["object"].end) | Q( 66 start__gt=kwargs["object"].start) & Q(start__gt=kwargs["object"].end) 67 ) 68 69 projects_closed = Project.objects.filter( 70 Q(projectassignment__isnull=True) | Q(projectassignment__periodclosure__period=kwargs["object"]) & Q( 71 projectassignment__periodclosure__is_closed_contributor=True) & Q(projectassignment__periodclosure__is_closed_manager=True), 72 department=department, 73 ).exclude( 74 Q(start__lt=kwargs["object"].start) & Q(end__lt=kwargs["object"].end) | Q( 75 start__gt=kwargs["object"].start) & Q(start__gt=kwargs["object"].end) 76 ) 77 78 context["department"] = department 79 context["projects_open"] = projects_open.distinct().order_by( 80 'invoice_number') 81 context["projects_closed"] = projects_closed.distinct().order_by( 82 'invoice_number') 83 return context
Insert the single object into the context dict.
Inherited Members
- django.views.generic.base.View
- View
- view_is_async
- as_view
- setup
- http_method_not_allowed
- options
- django.contrib.auth.mixins.AccessMixin
- get_login_url
- get_permission_denied_message
- get_redirect_field_name
- handle_no_permission
- django.views.generic.detail.SingleObjectTemplateResponseMixin
- get_template_names
- django.views.generic.base.TemplateResponseMixin
- render_to_response
- django.views.generic.detail.BaseDetailView
- get
- django.views.generic.detail.SingleObjectMixin
- get_object
- get_queryset
- get_slug_field
- get_context_object_name