class PrivateTicketSerializer(serializers.ModelSerializer): addressed_users = UserSerializer(many=True, read_only=True) parent_ticket = serializers.IntegerField(write_only=True) private_attachment = PrivateAttachmentSerializer(many=True, source='get_private_attachments', read_only=True) class Meta: model = PrivateTicket fields = ( 'id', 'parent_ticket', 'body', 'addressed_users', 'private_attachment', ) read_only_fields = ( 'body', ) def create(self, validated_data): ticket = Ticket.objects.get(id=validated_data['parent_ticket']) pt = PrivateTicket( parent_ticket = ticket, body = '' ) pt.save() return pt
def get_in_list_contributers(self, ticket): queryset = [] requested_user = self.context['request'].user if requested_user in ticket.contributers.all() or \ requested_user in ticket.in_list_contributers.all(): queryset = ticket.in_list_contributers.all() serializer = UserSerializer(instance=queryset, many=True) return serializer.data
class BaseActivitySerializer(serializers.ModelSerializer): user = UserSerializer(read_only=True) class Meta: model = BaseActivity fields = ( 'id', 'user', 'time', )
class PrivateTickettDetailsSerializer(serializers.ModelSerializer): addressed_users = UserSerializer(many=True) # parent_ticket = serializers.IntegerField(write_only=True) private_attachment = PrivateAttachmentSerializer(many=True, source='get_private_attachments') class Meta: model = PrivateTicket fields = ( # 'parent_ticket', 'body', 'addressed_users', 'private_attachment', ) def update(self, instance, validated_data): instance.body = validated_data['body'] for addressed_user in validated_data['addressed_users']: instance.addressed_users.add(addressed_user) return instance
class TicketDetailsSerializer(serializers.ModelSerializer): #TODO: ye field hayi ham bayad ezafe beshe vase inke masalan ray ma chi bode o ina! known_approvers = UserSerializer(many=True, read_only=True) known_denials = UserSerializer(many=True, read_only=True) ticket_type = TypeSerializer(read_only=True) #TODO: baraye write bayad avaz beshe approvers_count = serializers.ReadOnlyField(source='get_approvers_count') denials_count = serializers.ReadOnlyField(source='get_denials_count') addressed_users = UserSerializer(many=True, read_only=True) #TODO: test konim ke in kar mikone asan ya na! cc_users = UserSerializer(many=True, read_only=True) #TODO: test konim ke in kar mikone asan ya na! tag_list = TagSerializer(many=True, read_only=True) public_attachments = PublicAttachmentSerializer(many=True, source="get_public_attachments") private_ticket = PrivateTicketSerializer(many=True, source='get_private_ticket') comments = serializers.SerializerMethodField() #DONE: edit name contributers = serializers.SerializerMethodField() #DONE: edit name in_list_contributers = serializers.SerializerMethodField() #DONE: edit name activities = serializers.SerializerMethodField() #DONE: edit name def get_activities(self, ticket): referral = ReferralActivitySerializer(instance=ReferralActiviy.objects.filter(Q(ticket=ticket)), many=True) setConfirmationLimit = SetConfirmationLimitActivitySerializer(instance=SetConfirmationLimitActiviy.objects.filter(Q(ticket=ticket)), many=True) editTicket = EditTicketActivitySerializer(instance=EditTicketActivity.objects.filter(Q(ticket=ticket)), many=True) changeStatus = ChangeStatusActivitySerializer(instance=ChangeStatusActivity.objects.filter(Q(ticket=ticket)), many=True) reopen = ReopenActivitySerializer(instance=ReopenActivity.objects.filter(Q(ticket=ticket)), many=True) return { 'referral': referral.data, 'setConfirmationLimit': setConfirmationLimit.data, 'editTicket': editTicket.data, 'changeStatus': changeStatus.data, 'reopen': reopen.data } def get_comments(self, ticket): queryset = [] requested_user = self.context['request'].user if requested_user in ticket.contributers.all(): queryset = Comment.objects.filter(Q(ticket=ticket) & Q(deleted=False)) else: queryset = Comment.objects.filter(Q(ticket=ticket) & Q(verified=True) & Q(deleted=False)) serializer = CommentSerializer(instance=queryset, many=True) return serializer.data def get_contributers(self, ticket): queryset = [] requested_user = self.context['request'].user if not ticket.being_unknown or \ requested_user in ticket.contributers.all() or \ requested_user in ticket.in_list_contributers.all(): queryset = ticket.contributers.all() serializer = UserSerializer(instance=queryset, many=True) return serializer.data def get_in_list_contributers(self, ticket): queryset = [] requested_user = self.context['request'].user if requested_user in ticket.contributers.all() or \ requested_user in ticket.in_list_contributers.all(): queryset = ticket.in_list_contributers.all() serializer = UserSerializer(instance=queryset, many=True) return serializer.data class Meta: model = Ticket fields = ( 'id', 'title', 'body', 'summary_len', 'ticket_type', 'priority', 'known_approvers', 'known_denials', 'approvers_count', 'denials_count', 'addressed_users', 'cc_users', 'contributers', 'in_list_contributers', 'is_public', 'being_unknown', 'tag_list', 'creation_time', 'status', 'need_to_confirmed', 'minimum_approvers_count', 'parent', 'activities', 'comments', 'is_draft', 'public_attachments', 'private_ticket', ) read_only_fields = ( 'id', # 'title', # 'body', # 'summary_len', # 'ticket_type', # 'priority', 'known_approvers', 'known_denials', 'approvers_count', 'denials_count', 'addressed_users', 'cc_users', 'contributers', 'in_list_contributers', #TODO: edit in ham bayad ezafe beshe! 'is_public', # 'being_unknown', # 'tag_list', 'creation_time', 'status', 'need_to_confirmed', 'minimum_approvers_count', 'parent', 'activities', 'comments', )
class TicketSerializer(serializers.ModelSerializer): contributers = UserSerializer(many=True, read_only=True, source='get_contributers') # ticket_type = TypeSerializer() #TODO: baraye write bayad avaz beshe summary = serializers.ReadOnlyField(source='get_summary_body') approvers_count = serializers.ReadOnlyField(source='get_approvers_count') denials_count = serializers.ReadOnlyField(source='get_denials_count') addressed_users = UserSerializer(many=True) #TODO: test konim ke in kar mikone asan ya na! cc_users = UserSerializer(many=True) #TODO: test konim ke in kar mikone asan ya na! tag_list = TagSerializer(many=True) class Meta: model = Ticket fields = ( 'id', 'title', 'body', # write_only 'summary_len', # write_only 'in_list_contributers', # write_only 'summary', 'ticket_type', 'priority', 'approvers_count', 'denials_count', 'addressed_users', 'cc_users', 'is_public', 'being_unknown', 'tag_list', 'creation_time', # read_only 'status', # read_only 'contributers', # read_only 'need_to_confirmed', # read_only 'minimum_approvers_count', # read_only 'parent', ) read_only_fields = ('creation_time', 'contributers', 'status', 'need_to_confirmed', 'minimum_approvers_count') extra_kwargs = { 'body': {'write_only': True}, 'summary_len': {'write_only': True}, 'in_list_contributers': {'write_only': True} } def create(self, validated_data): ticket = Ticket( title = validated_data['title'], body = validated_data['body'], summary_len = validated_data['summary_len'], ticket_type = validated_data['ticket_type'], priority = validated_data['priority'], being_unknown = validated_data['being_unknown'], creation_time = datetime.datetime.now(), status = Ticket.OPEN, is_public = validated_data['is_public'], parent = validated_data['parent'], ) ticket.save() # ticket.public_attachments.add(PublicAttachmentSerializer.save(parent_ticket=ticket)) # TODO: khode user ro az list 'in_list_contributers' o 'addressed_users' o 'cc_users' ina hazf konim! ticket.contributers.add(self.context['request'].user) map(lambda user: ticket.addressed_users.add(user), validated_data['addressed_users']) map(lambda user: ticket.cc_users.add(user), validated_data['cc_users']) map(lambda user: ticket.in_list_contributers.add(user), validated_data['in_list_contributers']) map(lambda tag: ticket.tag_list.add(tag), validated_data['tag_list']) if not validated_data['being_unknown']: ticket.known_approvers.add(self.context['request'].user) else: ticket.unknown_approvers.add(self.context['request'].user) return ticket
def get_user(self, comment): if not comment.being_unknown: serializer = UserSerializer(instance=comment.user) return serializer.data return None