repos
/ timestrap-django master

timestrap-django

mirror archived upstream

Time tracking you can host anywhere, built on Django. Full export support in multiple formats and easily extensible.

djangodockerhandcodedpythonself-hostedtime-trackingtimetracker

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