Exemple #1
0
    def handle(self, *args, **kwargs):
        logger.info("Beginning section import routine")

        data = fmpxmlparser.parse_from_file(kwargs['filename'])

        results = data['results']

        seen_ids = set()

        with transaction.atomic():
            for row in results:
                fields = row['parsed_fields']

                course_number = fields['CourseNumber']
                csn = fields['CourseSectionNumber']
                academic_year = fields["AcademicYear"]
                teacher_id = fields["IDTeacher"]

                if not course_number or not csn or not academic_year:
                    continue

                try:
                    course = Course.objects.get(number=course_number)
                    logger.info(
                        "Found course {number:}".format(number=course_number))
                    forceSave = False

                except Course.DoesNotExist:
                    logger.error(
                        "Course {course:} is in sections but not courses".
                        format(course=course_number))
                    continue

                try:
                    academic_year = AcademicYear.objects.get(
                        year=academic_year)
                except AcademicYear.DoesNotExist:
                    academic_year = AcademicYear(year=academic_year)
                    academic_year.save()

                try:
                    section = Section.objects.get(course=course,
                                                  academic_year=academic_year,
                                                  csn=csn)
                    logger.info(
                        "Found section {csn:} for {academic_year:}".format(
                            csn=csn, academic_year=academic_year))

                except Section.DoesNotExist:
                    logger.info(
                        "Creating section {csn:} for {academic_year:}".format(
                            csn=csn, academic_year=academic_year))
                    section = Section(course=course,
                                      academic_year=academic_year,
                                      csn=csn)
                    section.save()

                teacher = None

                if teacher_id:
                    try:
                        teacher = Teacher.objects.get(teacher_id=teacher_id)
                    except Teacher.DoesNotExist:
                        logger.error(
                            "Teacher {id:} is in sections but not in teachers".
                            format(id=teacher_id))

                attrMap = {
                    'teacher': teacher,
                }

                for attr in attrMap:
                    dbValue = getattr(section, attr)

                    if dbValue != attrMap[attr]:
                        setattr(section, attr, attrMap[attr])
                        logger.info(
                            "Updating {attr:} on {course:} from {oldValue:} to {newValue:}"
                            .format(attr=attr,
                                    course=course_number,
                                    oldValue=dbValue,
                                    newValue=attrMap[attr]))
                        forceSave = True

                if forceSave:
                    section.save()
    def handle(self, *args, **kwargs):
        logger.info("Beginning enrollment import routine")

        data = fmpxmlparser.parse_from_file(kwargs['filename'])

        results = data['results']

        with transaction.atomic():
            for row in results:
                fields = row['parsed_fields']

                studentID = fields['IDStudent']
                academicYear = fields['AcademicYear']
                boarderDay = fields['BoarderDay']
                dormName = fields['DormName'] or ""
                grade_code = fields['Grade']
                division = fields['Division'] or ""
                section = fields["Section Letter"] or ""
                advisorID = fields["IDAdvisor"]
                statusEnrollment = fields["StatusEnrollment"] or ""
                statusAttending = fields["StatusAttending"] or ""
                enrolledDate = fields["EnrollmentDate"]

                if not studentID or not academicYear:
                    continue

                try:
                    academicYear = AcademicYear.objects.get(year=academicYear)
                except AcademicYear.DoesNotExist:
                    academicYear = AcademicYear(year=academicYear)
                    academicYear.save()

                try:
                    student = Student.objects.get(student_id=studentID)
                except Student.DoesNotExist:
                    logger.error(
                        "Student {studentID:} is in enrollments but not in permrecs"
                        .format(studentID=studentID))
                    continue

                if boarderDay and boarderDay.upper() == "B":
                    boarder = True
                else:
                    boarder = False

                if dormName:
                    try:
                        dorm = Dorm.objects.get(dorm_name=dormName)
                    except Dorm.DoesNotExist:
                        logger.error("Dorm {dorm:} does not exist".format(
                            dorm=dormName))
                        dorm = None
                else:
                    dorm = None

                if advisorID:
                    try:
                        advisor = Teacher.objects.get(teacher_id=advisorID)
                    except Teacher.DoesNotExist:
                        logger.error(
                            "Advisor {advisorID:} does not exist".format(
                                advisorID=advisorID))
                        advisor = None
                else:
                    advisor = None

                if grade_code:
                    try:
                        grade = Grade.objects.get(grade=grade_code)
                    except Grade.DoesNotExist:
                        grade = Grade()
                        grade.grade = grade_code
                        grade.description = "Grade {grade:}".format(
                            grade=grade_code)
                        grade.save()

                try:
                    enrollment = Enrollment.objects.get(
                        student=student, academic_year=academicYear)
                    logger.info(
                        "Found enrollment {studentID:}/{academicYear:}".format(
                            studentID=studentID, academicYear=academicYear))
                    forceSave = False

                except Enrollment.DoesNotExist:
                    logger.info(
                        "Creating enrollment {studentID:}/{academicYear:}".
                        format(studentID=studentID, academicYear=academicYear))
                    enrollment = Enrollment()
                    enrollment.student = student
                    enrollment.academic_year = academicYear
                    forceSave = True

                attrMap = {
                    'boarder': boarder,
                    'dorm': dorm,
                    'grade': grade,
                    'division': division,
                    'section': section,
                    'advisor': advisor,
                    'status_enrollment': statusEnrollment,
                    'status_attending': statusAttending,
                    'enrolled_date': enrolledDate
                }

                for attr in attrMap:
                    dbValue = getattr(enrollment, attr)

                    if dbValue != attrMap[attr]:
                        setattr(enrollment, attr, attrMap[attr])
                        logger.info(
                            "Updating {attr:} on {studentID:}/{academicYear:} from {oldValue:} to {newValue:}"
                            .format(attr=attr,
                                    studentID=studentID,
                                    academicYear=academicYear,
                                    oldValue=dbValue,
                                    newValue=attrMap[attr]))
                        forceSave = True

                if forceSave:
                    enrollment.save()
    def handle(self, *args, **kwargs):
        logger.info("Beginning student registration import routine")

        data = fmpxmlparser.parse_from_file(kwargs['filename'])

        results = data['results']

        seen_ids = set()

        with transaction.atomic():
            for row in results:
                fields = row['parsed_fields']

                csn = fields['CSN']
                academic_year = fields["AcademicYear"]
                student_id = fields["IDStudent"]
                student_reg_id = fields["IDSTUDENTREG"]

                if not csn or not academic_year or not student_id or not student_reg_id:
                    continue

                try:
                    academic_year = AcademicYear.objects.get(
                        year=academic_year)
                except AcademicYear.DoesNotExist:
                    academic_year = AcademicYear(year=academic_year)
                    academic_year.save()

                try:
                    section = Section.objects.get(csn=csn,
                                                  academic_year=academic_year)
                except Section.DoesNotExist:
                    logger.error(
                        "Section {csn:}/{year:} is in studentreg but not in sections"
                        .format(csn=csn, year=academic_year))
                    continue

                try:
                    student = Student.objects.get(student_id=student_id)
                except Student.DoesNotExist:
                    logger.error(
                        "Student {id:} is in studentreg but not in students".
                        format(id=student_id))
                    continue

                try:
                    student_registration = StudentRegistration.objects.get(
                        student_reg_id=student_reg_id)
                    logger.info("Found student registration {id:}".format(
                        id=student_reg_id))
                    forceSave = False

                except StudentRegistration.DoesNotExist:
                    student_registration = StudentRegistration(
                        student_reg_id=student_reg_id,
                        section=section,
                        student=student)
                    forceSave = True

                attrMap = {'student': student, 'section': section}

                for attr in attrMap:
                    dbValue = getattr(student_registration, attr)

                    if dbValue != attrMap[attr]:
                        setattr(student_registration, attr, attrMap[attr])
                        logger.info(
                            "Updating {attr:} on {student_registration:} from {oldValue:} to {newValue:}"
                            .format(attr=attr,
                                    student_registration=student_registration.
                                    student_reg_id,
                                    oldValue=dbValue,
                                    newValue=attrMap[attr]))
                        forceSave = True

                seen_ids.add(student_reg_id)

                if forceSave:
                    student_registration.save()

            extra_student_registrations = StudentRegistration.objects.exclude(
                student_reg_id__in=seen_ids)
            for extra_student_registration in extra_student_registrations:
                logger.warn("Deleting extra student registration {}".format(
                    extra_student_registration.student_reg_id))
                extra_student_registration.delete()