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()