class NotificationsSerializer(serializers.ModelSerializer):
    actor = SimpleUserSerializer()
    recipient = SimpleUserSerializer()
    unread = serializers.BooleanField(read_only=True)
    target = RideListSerializer()

    class Meta:
        model = Notification
        fields = ('id', 'actor', 'recipient', 'verb', 'target', 'unread', 'timestamp')
        depth = 1
class OwnerSingleRideSerializer(serializers.ModelSerializer):
    uploader = SimpleUserSerializer(read_only=True)
    request = RequestsSerializer(read_only=True, many=True)
    car = CarSerializer()

    class Meta:
        model = Ride
        fields = ('pk', 'origin', 'destination', 'type',
                  'date', 'time', 'periodic', 'vacant_seats',
                  'uploader', 'request', 'car',)

        depth = 1

    def create(self, validated_data):
        print('create', flush=True)
        return Ride.objects.create(**validated_data)

    def update(self, instance, validated_data):
        print('update', flush=True)
        print(validated_data, flush=True)
        instance.origin = validated_data.get('origin', instance.origin)
        instance.destination = validated_data.get('destination', instance.destination)
        instance.date = validated_data.get('date', instance.date)
        instance.time = validated_data.get('time', instance.time)
        instance.vacant_seats = validated_data.get('vacant_seats', instance.vacant_seats)
        # instance.car = validated_data.get('origin', instance.origin)
        car = validated_data.get('car')
        print(car['plate'], flush=True)
        instance.car = Car.objects.all().get(plate=car['plate'])
        instance.save()

        return instance
Beispiel #3
0
class AgreementDetailSerializer(serializers.ModelSerializer):

    partner_name = serializers.CharField(source='partner.name', read_only=True)
    authorized_officers = PartnerStaffMemberNestedSerializer(many=True,
                                                             read_only=True)
    amendments = AgreementAmendmentCreateUpdateSerializer(many=True,
                                                          read_only=True)
    unicef_signatory = SimpleUserSerializer(source='signed_by')
    partner_signatory = SimpleStaffMemberSerializer(source='partner_manager')
    attached_agreement_file = serializers.FileField(
        source="attached_agreement", read_only=True)
    attachment = AttachmentSingleFileField(read_only=True)
    permissions = serializers.SerializerMethodField(read_only=True)

    def get_permissions(self, obj):
        user = self.context['request'].user
        ps = Agreement.permission_structure()
        permissions = AgreementPermissions(user=user,
                                           instance=self.instance,
                                           permission_structure=ps)
        return permissions.get_permissions()

    class Meta:
        model = Agreement
        fields = "__all__"
Beispiel #4
0
class CourseScheduleSerializer(serializers.ModelSerializer):
    course = CourseSerializer(required=False)
    student = SimpleUserSerializer(many=True, required=False)
    schedule_created_by = serializers.CharField(required=False)
    schedule_recurring_user = serializers.PrimaryKeyRelatedField(many=True, read_only=True, required=False)

    class Meta:
        model = CourseSchedule
        fields = ('id', 'course', 'student', 'schedule_date', 'schedule_start_time', 'schedule_end_time', 'schedule_created', 'schedule_created_by', 'schedule_updated', 'schedule_updated_by', 'schedule_recurring_user',)

    def create(self, validated_data):
        student = validated_data.pop('student')
        user = validated_data.pop('user')
        recurring = validated_data.pop('recurring')
        course_schedule, created = CourseSchedule.objects.get_or_create(**validated_data)
        if student not in course_schedule.student.all():
            if course_schedule.student.count() < int(course_schedule.course.max_student):
                course_schedule.student.add(student)
                course_schedule.save()
                send_schedule_course_confirm.delay(course_schedule.id, student.id)
                credit = int(student.user_credit) - int(course_schedule.course.course_credit)
                student.user_credit = credit
                student.save()
                if recurring:
                    course_schedule.schedule_recurring_user.add(user)
                    course_schedule.save()
        if created:
            course_schedule.schedule_created_by = user
        return course_schedule
class AnonymousSingleRideSerializer(serializers.ModelSerializer):
    uploader = SimpleUserSerializer(read_only=True)

    class Meta:
        model = Ride
        fields = ('pk', 'origin', 'destination', 'type',
                  'date', 'time', 'periodic', 'vacant_seats', 'uploader',
                  )
        depth = 1
class RideListSerializer(serializers.ModelSerializer):
    uploader = SimpleUserSerializer(read_only=True)
    time = serializers.TimeField(required=False)

    class Meta:
        model = Ride
        fields = ('pk', 'origin', 'destination', 'type',
                  'date', 'time', 'periodic', 'vacant_seats', 'uploader',
                  )

        depth = 1
class TestRideSerializer(serializers.ModelSerializer):
    uploader = SimpleUserSerializer(read_only=True)
    request = RequestsSerializer(read_only=True, many=True)

    class Meta:
        model = Ride
        fields = ('pk', 'origin', 'destination', 'type',
                  'date', 'time', 'periodic', 'vacant_seats',
                  'car', 'uploader', 'request')

        depth = 1
Beispiel #8
0
class AgreementCreateUpdateSerializer(SnapshotModelSerializer):

    partner_name = serializers.CharField(source='partner.name', read_only=True)
    agreement_type = serializers.CharField(required=True)
    amendments = AgreementAmendmentCreateUpdateSerializer(many=True,
                                                          read_only=True)
    country_programme = serializers.PrimaryKeyRelatedField(
        queryset=CountryProgramme.objects.all(),
        required=False,
        allow_null=True)
    unicef_signatory = SimpleUserSerializer(source='signed_by', read_only=True)
    partner_signatory = SimpleStaffMemberSerializer(source='partner_manager',
                                                    read_only=True)
    agreement_number = serializers.CharField(read_only=True)
    attached_agreement_file = serializers.FileField(
        source="attached_agreement", read_only=True)
    attachment = AttachmentSingleFileField(read_only=True)

    class Meta:
        model = Agreement
        fields = "__all__"

    def validate(self, data):
        data = super(AgreementCreateUpdateSerializer, self).validate(data)
        agreement_type = data.get('agreement_type',
                                  None) or self.instance.agreement_type

        if agreement_type == Agreement.PCA:
            # Look for country programme in data and on instance.
            country_programme = data.get('country_programme')
            if not country_programme and self.instance:
                country_programme = self.instance.country_programme

            if country_programme is None:
                raise ValidationError({
                    'country_programme':
                    'Country Programme is required for PCAs!'
                })

        # When running validations in the serializer.. keep in mind that the
        # related fields have not been updated and therefore not accessible on old_instance.relatedfield_old.
        # If you want to run validation only after related fields have been updated. please run it in the view
        if self.context.get('skip_global_validator', None):
            return data
        validator = AgreementValid(data,
                                   old=self.instance,
                                   user=self.context['request'].user)

        if not validator.is_valid:
            raise serializers.ValidationError({'errors': validator.errors})
        return data
class CreatRideSerializer(serializers.ModelSerializer):
    uploader = SimpleUserSerializer(read_only=True)
    car = CarSerializer()

    class Meta:
        model = Ride
        fields = ('pk', 'origin', 'destination', 'type',
                  'date', 'time', 'periodic', 'vacant_seats',
                  'uploader', 'car',)

        depth = 1

    def create(self, validated_data):
        return Ride.objects.create(**validated_data)
Beispiel #10
0
class InterviewSerializer(ForeignKeySerializerMixin, ModelSerializer):
    interviewer = InterviewerSerializer()
    volunteer = SimpleUserSerializer()

    class Meta:
        model = Interview
        fields = '__all__'
        foreign_key_fields = ('interviewer', 'volunteer')

    def create(self, validated_data):
        user_not_available_for_interview = Interview.objects.filter(
            status__in=Interview.NOT_AVAILABLE_STATUSES,
            volunteer=self.initial_data['volunteer'].get('id')
        ).exists()

        if user_not_available_for_interview:
            raise serializers.ValidationError(
                _('Этот пользователь уже прилашён на интервью'))

        return super().create(validated_data)
class CarSerializer(serializers.ModelSerializer):
    owner = SimpleUserSerializer(read_only=True)

    class Meta:
        model = Car
        fields = '__all__'