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"] course_name = fields["CourseName"] 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, 'course_name': course_name, } 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() #TODO: Delete extra sessions
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 detention import routine") data = fmpxmlparser.parse_from_file(kwargs['filename']) results = data['results'] seen_ids = set() with transaction.atomic(): detention_mailer = DetentionMailer.objects.get() skip_processing_before = detention_mailer.skip_processing_before for row in results: fields = row['parsed_fields'] incident_id = fields['IDINCIDENT'] detention_date = fields['Det Date'] raw_code = fields['Code'] or "" raw_offense = fields['Offense'] comments = fields['Comments'] or "" student_id = fields['IDSTUDENT'] teacher_id = fields['KSTeachers::IDTEACHER'] raw_academic_year = fields['AcademicYear'] raw_term = fields['Term'] if skip_processing_before and detention_date < skip_processing_before: continue try: code = Code.objects.get(code=raw_code) except Code.DoesNotExist: code = Code(code=raw_code) code.save() if not code.process: continue try: academic_year = AcademicYear.objects.get(year=raw_academic_year) except AcademicYear.DoesNotExist: academic_year = AcademicYear(year=raw_academic_year) academic_year.save() try: term = Term.objects.get(academic_year=academic_year, term=raw_term) except Term.DoesNotExist: term = Term(academic_year=academic_year, term=raw_term) term.save() if raw_offense: try: offense = Offense.objects.get(offense__iexact=raw_offense) except Offense.DoesNotExist: error_recipients = [o.address for o in DetentionErrorNotification.objects.filter(mailer=detention_mailer)] if not error_recipients: raise ValueError("No error recipients are defined") send_mail("Error importing detention", "Error importing detention {id:}: offense '{offense:}' does not exist".format( id=incident_id, offense=raw_offense), '*****@*****.**', error_recipients) continue else: offense = None if teacher_id: teacher = Teacher.objects.get(teacher_id=teacher_id) else: teacher = None if student_id: student = Student.objects.get(student_id=student_id) else: student = None if not incident_id: logger.error("Blank incident ID") continue seen_ids.add(incident_id) try: incident = Detention.objects.get(incident_id=incident_id) logger.info("Found detention {id:}".format(id=incident_id)) force_save = False except Detention.DoesNotExist: logger.info("Creating detention {id:}".format(id=incident_id)) incident = Detention( incident_id=incident_id, code=code, student=student, teacher=teacher ) force_save = True attr_map = { 'detention_date': detention_date, 'code': code, 'offense': offense, 'comments': comments, 'term': term, 'student': student, 'teacher': teacher, } for attr in attr_map: db_value = getattr(incident, attr) if db_value != attr_map[attr]: setattr(incident, attr, attr_map[attr]) logger.info("Updating {attr:} on {incident_id:} from {old_value:} to {new_value:}".format( attr=attr, incident_id=incident_id, old_value=db_value, new_value=attr_map[attr])) force_save = True if force_save: incident.save() extra_detentions = Detention.objects.exclude(incident_id__in=seen_ids) if extra_detentions: logger.warn("Deleting {} detentions".format(extra_detentions.count())) extra_detentions.delete()
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 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 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()
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()