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
class AccountingPeriodDetailView(vkk.workhours.accounting.views.AccountingDetailView):
 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
vkk.workhours.accounting.mixins.AccountantRequiredMixin
dispatch
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
class AccountingPeriodDetailDepartmentView(vkk.workhours.accounting.views.AccountingDetailView):
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
vkk.workhours.accounting.mixins.AccountantRequiredMixin
dispatch
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