# serializers.py in Osina app from rest_framework import serializers from osinacore.models import * class BusinessTypeSerializer(serializers.ModelSerializer): class Meta: model = BusinessType fields = "__all__" class StaffProfileSerializer(serializers.ModelSerializer): class Meta: model = StaffProfile fields = "__all__" class DepartmentSerializer(serializers.ModelSerializer): class Meta: model = Department fields = "__all__" class JobPositionSerializer(serializers.ModelSerializer): department = DepartmentSerializer() class Meta: model = JobPosition fields = "__all__" class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = "__all__" class CustomerProfileSerializer(serializers.ModelSerializer): user = UserSerializer() reference_name = serializers.CharField(source='reference.name', read_only=True) class Meta: model = CustomerProfile fields = "__all__" class StaffProfileSerializer(serializers.ModelSerializer): user = UserSerializer() class Meta: model = StaffProfile fields = "__all__" class ProjectTypeSerializer(serializers.ModelSerializer): class Meta: model = ProjectType fields = "__all__" class ProjectStatusSerializer(serializers.ModelSerializer): class Meta: model = ProjectStatus fields = "__all__" class ProjectSerializer(serializers.ModelSerializer): #types = ProjectTypeSerializer(read_only=True, many=True, source="project_type") #members = StaffProfileSerializer(read_only=True, many=True) #manager = StaffProfileSerializer(read_only=True, many=False) #statuses = ProjectStatusSerializer(read_only=True, many=True, source="projectstatus_set") class Meta: model = Project fields = "__all__" #def to_representation(self, instance): #representation = super().to_representation(instance) # Exclude manager from members list #manager_id = representation.get("manager", {}).get("id") #if manager_id: #representation["members"] = [ #member for member in representation["members"] #if member.get("id") != manager_id #] #return representation class EpicSerializer(serializers.ModelSerializer): project = ProjectSerializer(read_only=True) class Meta: model = Epic fields = "__all__" class UserStorySerializer(serializers.ModelSerializer): class Meta: model = UserStory fields = "__all__" class MileStoneSerializer(serializers.ModelSerializer): project = ProjectSerializer(read_only=True) class Meta: model = Milestone fields = "__all__" class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = "__all__" class UserStorySerializer(serializers.ModelSerializer): project = ProjectSerializer(read_only=True) user = UserSerializer(read_only=True) milestone = MileStoneSerializer(read_only=True) confirmed_date = serializers.SerializerMethodField() completed_date = serializers.SerializerMethodField() class Meta: model = UserStory fields = "__all__" def get_confirmed_date(self, obj): last_task = Task.objects.filter(userstory=obj).order_by("-id").first() if last_task: last_point = PointActivity.objects.filter(point__task=last_task).order_by("-start_time").first() if last_point: # or "Confirmed" if that's your label return last_point.start_time return None def get_completed_date(self, obj): last_task = Task.objects.filter(userstory=obj).order_by("-id").first() if last_task: last_point = PointActivity.objects.filter(point__task=last_task).order_by("-start_time").first() if last_point: # completed means Closed return last_point.end_time or last_point.start_time return None