Esempio n. 1
0
class CasEleveSerializer(serializers.ModelSerializer):
    send_to_teachers = serializers.BooleanField(write_only=True,
                                                required=False)

    matricule = StudentSerializer(read_only=True)
    matricule_id = serializers.PrimaryKeyRelatedField(
        queryset=StudentModel.objects.all(),
        source='matricule',
        required=False,
        allow_null=True)
    info = InfoEleveSerializer(read_only=True)
    info_id = serializers.PrimaryKeyRelatedField(
        queryset=InfoEleve.objects.all(),
        source='info',
        required=False,
        allow_null=True)

    sanction_decision = SanctionDecisionDisciplinaireSerializer(read_only=True)
    sanction_decision_id = serializers.PrimaryKeyRelatedField(
        queryset=SanctionDecisionDisciplinaire.objects.all(),
        source='sanction_decision',
        required=False,
        allow_null=True)

    class Meta:
        model = CasEleve
        fields = '__all__'
        read_only_fields = (
            'user',
            'datetime_encodage',
        )
Esempio n. 2
0
class StudentLatenessTeacherSerializer(serializers.ModelSerializer):
    # In order to write with the id and read the entire object, it uses two fields: field + field_id.
    student = StudentSerializer(read_only=True)
    student_id = serializers.PrimaryKeyRelatedField(
        queryset=StudentModel.objects.all(),
        source='student',
        required=False,
        allow_null=True)

    lesson = LessonSerializer(read_only=True)
    lesson_id = serializers.PrimaryKeyRelatedField(
        queryset=LessonModel.objects.all(),
        source='lesson',
        required=False,
        allow_null=True)

    period = PeriodSerializer(read_only=True)
    period_id = serializers.PrimaryKeyRelatedField(
        queryset=PeriodModel.objects.all(),
        source='period',
        required=False,
        allow_null=True)

    class Meta:
        model = StudentLatenessTeacherModel
        exclude = (
            'datetime_creation',
            'datetime_update',
        )
        read_only_fields = ('user', )
Esempio n. 3
0
class AppelSerializer(serializers.ModelSerializer):
    # In order to write with the id and read the entire object, it uses two fields field + field_id.
    matricule = StudentSerializer(read_only=True)
    matricule_id = serializers.PrimaryKeyRelatedField(
        queryset=StudentModel.objects.all(),
        source='matricule',
        required=False,
        allow_null=True)
    responsible = ResponsibleSerializer(read_only=True)
    responsible_pk = serializers.PrimaryKeyRelatedField(
        queryset=ResponsibleModel.objects.all(),
        source='responsible',
        required=False,
        allow_null=True)
    motive = MotiveSerializer(read_only=True)
    motive_id = serializers.PrimaryKeyRelatedField(
        queryset=MotiveModel.objects.all(), source='motive', write_only=True)
    object = ObjectSerializer(read_only=True)
    object_id = serializers.PrimaryKeyRelatedField(
        queryset=ObjectModel.objects.all(), source='object', write_only=True)

    class Meta:
        model = Appel
        exclude = (
            'datetime_encodage',
            'motif',
            'objet',
        )
        read_only_fields = ('user', )
Esempio n. 4
0
def serialize_people(person):
    if not person:
        return {}
    if type(person) == StudentModel:
        return StudentSerializer(person).data
    elif type(person) == ResponsibleModel:
        return ResponsibleSerializer(person).data
Esempio n. 5
0
class CasEleveSerializer(serializers.ModelSerializer):
    send_to_teachers = serializers.BooleanField(write_only=True,
                                                required=False)

    matricule = StudentSerializer(read_only=True)
    matricule_id = serializers.PrimaryKeyRelatedField(
        queryset=StudentModel.objects.all(),
        source='matricule',
        required=False,
        allow_null=True)
    info = InfoEleveSerializer(read_only=True)
    info_id = serializers.PrimaryKeyRelatedField(
        queryset=InfoEleve.objects.all(),
        source='info',
        required=False,
        allow_null=True)

    sanction_decision = SanctionDecisionDisciplinaireSerializer(read_only=True)
    sanction_decision_id = serializers.PrimaryKeyRelatedField(
        queryset=SanctionDecisionDisciplinaire.objects.all(),
        source='sanction_decision',
        required=False,
        allow_null=True)

    def validate_sanction_decision_id(self, value):
        # If submit sanction is not enable, ignore validation.
        if not views.get_settings().enable_submit_sanctions:
            return value
        if not self.context['request'].user.has_perm(
                'dossier_eleve.ask_sanction'):
            raise serializers.ValidationError(
                "Vous n'avez pas les droits nécessaire pour ajouter/modifier une sanction"
            )
        return value

    def validate_datetime_sanction(self, value):
        if not self.context['request'].user.has_perm(
                'dossier_eleve.set_sanction') and value:
            raise serializers.ValidationError(
                "Vous n'avez pas les droits nécessaire pour ajouter/modifier la date d'une sanction"
            )
        return value

    def validate_sanction_faite(self, value):
        if not self.context['request'].user.has_perm(
                'dossier_eleve.set_sanction') and value:
            raise serializers.ValidationError(
                "Vous n'avez pas les droits nécessaire pour mettre une sanction comme faite"
            )
        return value

    class Meta:
        model = CasEleve
        fields = '__all__'
        read_only_fields = (
            'user',
            'datetime_encodage',
        )
Esempio n. 6
0
    def get(self, request, format=None):
        classe_id = request.GET.get('classe', None)
        if not classe_id or not classe_id.isdigit:
            return Response([])

        students = StudentModel.objects.filter(classe__id=classe_id).order_by(
            'last_name', 'first_name')
        serializer = StudentSerializer(students, many=True)
        return Response(serializer.data)
Esempio n. 7
0
class LatenessSerializer(serializers.ModelSerializer):
    # In order to write with the id and read the entire object, it uses two fields field + field_id.
    student = StudentSerializer(read_only=True)
    student_id = serializers.PrimaryKeyRelatedField(queryset=StudentModel.objects.all(),
                                                    source='student', required=False, allow_null=True)

    class Meta:
        model = LatenessModel
        fields = ('id', 'student', 'student_id', 'datetime_creation', 'sanction_id',
                  'lateness_count', 'justified', 'has_sanction')
Esempio n. 8
0
class PassageSerializer(serializers.ModelSerializer):
    matricule = StudentSerializer(read_only=True)
    matricule_id = serializers.PrimaryKeyRelatedField(
        queryset=StudentModel.objects.all(),
        source='matricule',
        required=False,
        allow_null=True)

    class Meta:
        model = Passage
        fields = '__all__'
Esempio n. 9
0
def find(request):
    try:
        # [Json to Dict]
        params = json.loads(request.body)
        first_name = params['first_name']
        student = Student.objects.get(first_name=first_name)
        # # [Object to Json]
        serial = StudentSerializer(instance=student)
        return Res(serial.data)
    except Exception as e:
        return errorView.my_error(e)
Esempio n. 10
0
    def create(self, request, *args, **kwargs):
        serializer = SchoolStudentCreateSerializer(data=request.data, many=False)

        school = SchoolService.get(pk=kwargs['pk'])
        student = StudentService.create(
            school=school,
            first_name=serializer.validated_data.get('first_name'),
            last_name=serializer.validated_data.get('last_name')
        )

        return Response(StudentSerializer(student).data, status=status.HTTP_200_OK)
Esempio n. 11
0
class PassageSerializer(serializers.ModelSerializer):
    matricule = StudentSerializer(read_only=True)
    matricule_id = serializers.PrimaryKeyRelatedField(queryset=StudentModel.objects.all(),
                                                      source='matricule', required=False,
                                                      allow_null=True)

    def validate(self, data):
        if data['datetime_sortie'] and not data['remarques_sortie']:
            raise serializers.ValidationError("Une remarque de sortie doit être indiquée")
        return data

    class Meta:
        model = Passage
        fields = '__all__'
Esempio n. 12
0
class PIASerializer(serializers.ModelSerializer):
    student = StudentSerializer(read_only=True)
    student_id = serializers.PrimaryKeyRelatedField(queryset=StudentModel.objects.all(),
                                                    source='student', required=False,
                                                    allow_null=True)

    referent = serializers.SlugRelatedField(many=True, slug_field="matricule",
                                            queryset=ResponsibleModel.objects.all())

    sponsor = serializers.SlugRelatedField(many=True, slug_field="matricule",
                                           queryset=ResponsibleModel.objects.all())

    class Meta:
        model = models.PIAModel
        fields = '__all__'
Esempio n. 13
0
class GroupSerializer(serializers.ModelSerializer):
    students = StudentSerializer(read_only=True, many=True)
    students_id = serializers.PrimaryKeyRelatedField(
        queryset=StudentModel.objects.all(),
        source='students',
        required=False,
        allow_null=True,
        many=True)
    students_display = serializers.SerializerMethodField()

    class Meta:
        model = models.GroupModel
        fields = "__all__"

    def get_students_display(self, obj):
        return [s.fullname_classe for s in obj.students.all()]
Esempio n. 14
0
    def put(self, request, pk):
        serializer = StudentUpdateSerializer(data=request.data, many=False)
        student = StudentService.get(pk=pk)

        if not serializer.is_valid():
            return NotAcceptableExceptionResponse(data={'message': INVALID_INPUT, 'errors': serializer.errors})

        school = None

        if serializer.validated_data.get('school_id'):
            school = SchoolService.get(id=serializer.validated_data.get('school_id'))

        student = StudentService.update(
            student=student,
            school=school,
            first_name=serializer.validated_data.get('first_name'),
            last_name=serializer.validated_data.get('last_name')
        )

        return Response(StudentSerializer(student).data, status=status.HTTP_200_OK)
Esempio n. 15
0
class StudentAbsenceSerializer(serializers.ModelSerializer):
    # In order to write with the id and read the entire object, it uses two fields field + field_id.
    student = StudentSerializer(read_only=True)
    student_id = serializers.PrimaryKeyRelatedField(queryset=StudentModel.objects.all(),
                                                    source='student', required=False, allow_null=True)

    class Meta:
        model = models.StudentAbsenceModel
        exclude = ('datetime_creation', 'datetime_update',)
        read_only_fields = ('user', 'username',)

    def update(self, instance, validated_data):
        if models.StudentAbsenceSettingsModel.objects.first().sync_with_proeco:
            if not self.sync_proeco(instance, validated_data["is_absent"]):
                raise
        return super(StudentAbsenceSerializer, self).update(instance, validated_data)

    @staticmethod
    def sync_proeco(absence: models.StudentAbsenceModel, is_absent):
        from libreschoolfdb import writer

        server = [
            s['server'] for s in settings.SYNC_FDB_SERVER
            if s['teaching_name'] == absence.student.teaching.name
        ]
        if len(server) != 0:
            periods = models.PeriodModel.objects.all().order_by("start")
            period = [i for i, p in enumerate(periods) if p.id == absence.period.id][0]

            return writer.set_student_absence(
                matricule=absence.student.matricule,
                day=absence.date_absence,
                period=period,
                is_absent=is_absent,
                fdb_server=server[0]
            )
        return False
Esempio n. 16
0
def search_people(query, people_type, teachings, check_access, user):
    def serialize_people(person):
        if type(person) == StudentModel:
            return StudentSerializer(person).data
        elif type(person) == ResponsibleModel:
            return ResponsibleSensitiveSerializer(person).data

    if len(query) < 1:
        return []

    truncate_limit = 50
    people = []
    if people_type == 'responsible' or people_type == 'all':
        people += ResponsibleSensitiveSerializer(
            People().get_responsibles_by_name(query,
                                              teachings)[:truncate_limit],
            many=True).data

    if people_type == 'teacher':
        people += ResponsibleSensitiveSerializer(People().get_teachers_by_name(
            query, teachings)[:truncate_limit],
                                                 many=True).data

    if people_type == 'educator':
        people += ResponsibleSensitiveSerializer(
            People().get_educators_by_name(query, teachings)[:truncate_limit],
            many=True).data

    if people_type == 'student' or people_type == 'all':
        classe_years = get_classes(teachings, check_access=True,
                                   user=user) if check_access else None
        people += StudentSerializer(People().get_students_by_name(
            query, teachings, classes=classe_years)[:truncate_limit],
                                    many=True).data

    return people[:truncate_limit]
Esempio n. 17
0
def search_people(query,
                  people_type,
                  teachings,
                  check_access,
                  user,
                  tenure_class_only=True,
                  educ_by_years=True,
                  active=True):
    if len(query) < 1:
        return []

    truncate_limit = 50

    people = []
    if people_type == 'all':
        classe_years = get_classes(teachings, check_access=True,
                                   user=user) if check_access else None

        result = People().get_people_by_name(query,
                                             teachings,
                                             classes=classe_years,
                                             active=active)
        # Check quality.
        if result['student'][1] > result['responsible'][1]:
            people = StudentSerializer(result['student'][0][:truncate_limit],
                                       many=True).data
        elif result['responsible'][1] > result['student'][1]:
            people = ResponsibleSerializer(
                result['responsible'][0][:truncate_limit], many=True).data
        else:
            people = StudentSerializer(
                result['student'][0][:truncate_limit / 2],
                many=True).data + ResponsibleSerializer(
                    result['responsible'][0][:truncate_limit / 2],
                    many=True).data

    if people_type == 'student':
        classe_years = get_classes(
            teachings,
            check_access=True,
            user=user,
            tenure_class_only=tenure_class_only,
            educ_by_years=educ_by_years) if check_access else None
        if query == 'everybody':
            students = StudentModel.objects.all()
            if active:
                students = students.filter(inactive_from__isnull=True,
                                           classe__isnull=False)
            if classe_years:
                students = students.filter(classe__in=classe_years)
            if teachings and 'all' not in teachings:
                if type(teachings[0]) == TeachingModel:
                    students = students.filter(teaching__in=teachings)
                else:
                    students = students.filter(teaching__name__in=teachings)
            truncate_limit = len(students)
        else:
            students = People().get_students_by_name(
                query, teachings, classes=classe_years,
                active=active)[:truncate_limit]

        people = StudentSerializer(students, many=True).data

    if people_type == 'responsible':
        people = ResponsibleSerializer(People().get_responsibles_by_name(
            query, teachings, active=active)[:truncate_limit],
                                       many=True).data

    if people_type == 'teacher':
        people = ResponsibleSerializer(People().get_teachers_by_name(
            query, teachings, active=active)[:truncate_limit],
                                       many=True).data

    if people_type == 'educator':
        people = ResponsibleSerializer(People().get_educators_by_name(
            query, teachings, active=active)[:truncate_limit],
                                       many=True).data

    return people[:truncate_limit]
Esempio n. 18
0
def list(request):
    students = Student.objects.all()
    # [Object to Json]
    serial = StudentSerializer(instance=students, many=True)
    return Res(serial.data, safe=False)