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.1 KB · 127 lines · Python Raw History
  1from django.contrib.auth.models import User, Permission
  2
  3from rest_framework import serializers
  4
  5from core.models import Client, Project, Entry
  6from core.fields import DurationField
  7
  8from core.models import Task
  9
 10
 11class PermissionSerializer(serializers.HyperlinkedModelSerializer):
 12    class Meta:
 13        model = Permission
 14        fields = ("id", "url", "name", "codename")
 15
 16
 17class UserSerializer(serializers.HyperlinkedModelSerializer):
 18    perms = serializers.SerializerMethodField()
 19
 20    class Meta:
 21        model = User
 22        fields = (
 23            "id",
 24            "url",
 25            "username",
 26            "is_active",
 27            "is_staff",
 28            "is_superuser",
 29            "perms",
 30            # "groups",
 31        )
 32
 33    def get_perms(self, obj):
 34        perms = {}
 35        if obj.is_superuser:
 36            queryset = Permission.objects.all()
 37        else:
 38            queryset = Permission.objects.filter(user=obj)
 39        for perm in queryset.values():
 40            perms[perm["codename"]] = perm
 41        return perms
 42
 43
 44class ClientSerializer(serializers.HyperlinkedModelSerializer):
 45    total_projects = serializers.SerializerMethodField()
 46    total_duration = serializers.SerializerMethodField()
 47
 48    class Meta:
 49        model = Client
 50        fields = (
 51            "id",
 52            "url",
 53            "name",
 54            "payment_id",
 55            "archive",
 56            "total_projects",
 57            "total_duration",
 58        )
 59
 60    def get_queryset(self):
 61        queryset = super().get_queryset()
 62        return queryset.filter(archive=False)
 63
 64    def get_total_projects(self, obj):
 65        return obj.get_total_projects()
 66
 67    def get_total_duration(self, obj):
 68        return obj.get_total_duration()
 69
 70
 71class ProjectSerializer(serializers.HyperlinkedModelSerializer):
 72    total_entries = serializers.SerializerMethodField()
 73    total_duration = serializers.SerializerMethodField()
 74    percent_done = serializers.SerializerMethodField()
 75
 76    class Meta:
 77        model = Project
 78        fields = (
 79            "id",
 80            "url",
 81            "client",
 82            "name",
 83            "archive",
 84            "estimate",
 85            "total_entries",
 86            "total_duration",
 87            "percent_done",
 88        )
 89
 90    def get_queryset(self):
 91        queryset = super().get_queryset()
 92        return queryset.filter(archive=False)
 93
 94    def get_total_entries(self, obj):
 95        return obj.get_total_entries()
 96
 97    def get_total_duration(self, obj):
 98        return obj.get_total_duration()
 99
100    def get_percent_done(self, obj):
101        return obj.get_percent_done()
102
103
104class TaskSerializer(serializers.HyperlinkedModelSerializer):
105    class Meta:
106        model = Task
107        fields = ("id", "url", "name", "hourly_rate")
108
109
110class EntrySerializer(serializers.HyperlinkedModelSerializer):
111    duration = DurationField()
112
113    class Meta:
114        model = Entry
115        fields = (
116            "id",
117            "url",
118            "project",
119            "task",
120            "user",
121            "date",
122            "duration",
123            "datetime_start",
124            "datetime_end",
125            "note",
126        )