/
views.py
116 lines (92 loc) · 3.18 KB
/
views.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
from django.contrib.auth.models import User, Permission
from rest_framework import viewsets, permissions, filters
import django_filters
from core.models import Client, Project, Entry, Task
from .serializers import (
UserSerializer,
ClientSerializer,
PermissionSerializer,
ProjectSerializer,
EntrySerializer,
TaskSerializer,
)
from .pagination import LimitOffsetPaginationWithTotals
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
pagination_class = None
def get_permissions(self):
# Prevent rest_framework from checking for the "view" perm.
return (permissions.IsAuthenticated(),)
def get_queryset(self):
if self.request.user.is_superuser:
queryset = User.objects.all()
else:
queryset = User.objects.filter(id=self.request.user.id)
return queryset
class PermissionViewSet(viewsets.ModelViewSet):
queryset = Permission.objects.all()
serializer_class = PermissionSerializer
pagination_class = None
def get_permissions(self):
# Prevent rest_framework from checking for the "view" perm.
return (permissions.IsAuthenticated(),)
def get_queryset(self):
if self.request.user.is_superuser:
queryset = Permission.objects.all()
else:
queryset = Permission.objects.filter(user=self.request.user)
return queryset
class ClientViewSet(viewsets.ModelViewSet):
queryset = Client.on_site.filter(archive=False)
serializer_class = ClientSerializer
pagination_class = None
filter_fields = ("id",)
def get_queryset(self):
return Client.on_site.all()
class ProjectViewSet(viewsets.ModelViewSet):
queryset = Project.objects.filter(archive=False)
serializer_class = ProjectSerializer
pagination_class = None
filter_fields = ("id", "client")
class EntryFilter(django_filters.rest_framework.FilterSet):
min_date = django_filters.DateFilter(field_name="date", lookup_expr="gte")
max_date = django_filters.DateFilter(field_name="date", lookup_expr="lte")
class Meta:
model = Entry
fields = ("id", "date", "user", "task", "project", "project__client")
class EntryViewSet(viewsets.ModelViewSet):
queryset = Entry.objects.all()
serializer_class = EntrySerializer
pagination_class = LimitOffsetPaginationWithTotals
filter_class = EntryFilter
filter_backends = (
filters.SearchFilter,
django_filters.rest_framework.DjangoFilterBackend,
filters.OrderingFilter,
)
ordering_fields = (
"date",
"user__username",
"task__name",
"project__name",
"project__client__name",
)
ordering = ("-date", "-id")
search_fields = (
"id",
"date",
"note",
"user__username",
"task__name",
"project__name",
"project__client__name",
)
def get_queryset(self):
return Entry.on_site.all()
class TaskViewSet(viewsets.ModelViewSet):
queryset = Task.objects.all()
serializer_class = TaskSerializer
pagination_class = None
def get_queryset(self):
return Task.on_site.all()