Beispiel #1
0
class BookingHistorySerializer(serializers.ModelSerializer):

    author = serializers.StringRelatedField(read_only=True)
    history_user = serializers.StringRelatedField(read_only=True)
    
    class Meta:
        model = models.Booking.history.model
        fields = '__all__'
Beispiel #2
0
class TicketHistorySerializer(serializers.ModelSerializer):

    history_user = serializers.StringRelatedField(read_only=True)
    author = serializers.StringRelatedField(read_only=True)

    class Meta:
        model =  models.Ticket.history.model
        fields = '__all__'
Beispiel #3
0
class BookingSerializer(serializers.ModelSerializer):

    title = serializers.CharField(max_length=64)
    remark = serializers.CharField(required=False, allow_blank=True, allow_null=True, max_length=1024)
    author = serializers.StringRelatedField(read_only=True)
    author_id = serializers.IntegerField(default=serializers.CreateOnlyDefault(CurrentUserDefault()))

    # messages = MessageSerializer(read_only=True, many=True)
    messages = serializers.SerializerMethodField()
    comments = CommentSerializer(read_only=True, many=True)
    uploads = UpLoadSerializer(read_only=True, many=True)
    itineraries = serializers.SerializerMethodField()
    
    class Meta:
        model = models.Booking
        fields = '__all__'

    def get_itineraries(self, obj):
        query = None
        if self.context['request'].user.has_perm('ticket.view_itinerary'):
            query = obj.itineraries.all()
        else:
            query = obj.itineraries.filter(user_id=self.context['request'].user.id)

        serializer = ItinerarySerializer(instance=query, many=True)

        return serializer.data

    def get_messages(self, obj):
        query = obj.messages.filter(user_id=self.context['request'].user.id)
        serializer = MessageSerializer(instance=query, many=True)
        return serializer.data
Beispiel #4
0
class TicketSerializer(serializers.ModelSerializer):
    serial_no = serializers.CharField(max_length=32)
    remark = serializers.CharField(required=False, allow_blank=True, allow_null=True, max_length=1024)
    author_id = serializers.IntegerField(default=serializers.CreateOnlyDefault(CurrentUserDefault()))
    author = serializers.StringRelatedField(read_only=True)
    
    itinerary = ItinerarySerializer(read_only=True, many=False)
    itinerary_id = serializers.IntegerField(required=True)
    
    # messages = MessageSerializer(read_only=True, many=True)
    messages = serializers.SerializerMethodField()
    comments = CommentSerializer(read_only=True, many=True)
    uploads = UpLoadSerializer(read_only=True, many=True) 
    
    parent_id = serializers.IntegerField(required=False, allow_null=True)

    class Meta:
        model = models.Ticket
        fields = '__all__'

    def get_fields(self):
        fields = super(TicketSerializer, self).get_fields()
        fields['children'] = TicketSerializer(many=True, read_only=True)
        return fields 

    def get_messages(self, obj):
        query = obj.messages.filter(user_id=self.context['request'].user.id)
        serializer = MessageSerializer(instance=query, many=True)
        return serializer.data
Beispiel #5
0
class ItinerarySerializer(serializers.ModelSerializer):
    serial_no = serializers.CharField(max_length=32)
    remark = serializers.CharField(required=False, allow_blank=True, allow_null=True, max_length=1024)
    author_id = serializers.IntegerField(default=serializers.CreateOnlyDefault(CurrentUserDefault()))
    booking_id = serializers.IntegerField(required=True)
    ticket = serializers.StringRelatedField(read_only=True)
    
    author = serializers.StringRelatedField(read_only=True)

    class Meta:
        model = models.Itinerary
        fields = '__all__'

    def validate(self, validate_data):
        email = validate_data.get('email', None)

        if email:
            try:
                user = UserModel.objects.get(email=email)
                validate_data['user_id'] = user.id
            except UserModel.DoesNotExist:
                raise serializers.ValidationError({'email': 'No user for such email'})

        return validate_data

    def create(self, validated_data):
        if not self.context['request'].user.has_perm('ticket.lock_itinerary'):
            validated_data['is_lock'] = True
        
        return super().create(validated_data)

    def update(self, instance, validated_data):
        if not self.context['request'].user.has_perm('ticket.lock_itinerary'):
            validated_data.pop('is_lock', None)

        return super().update(instance, validated_data)