def save_seatarr(): seatarrname = request.form.get('savedname') seatarrseq = request.form.get('SeatingArrangement_lst') RowNo = int(request.form.get('RowNo')) ColumnNo = int(request.form.get('ColumnNo')) if seatarrname != '': currentuser = execute_sql('SELECT * FROM CurrentUser')[0][0] save = SavedSeatArr(currentuser, seatarrname, seatarrseq.replace("'", '"'), RowNo, ColumnNo) execute_sql(save.create_new_record()) return show_current_seating_arrangement(seatarrseq, RowNo, ColumnNo)
def reset_seating_arrangement(): #reset seating arrangement object when go back to display, and various setting menus (set_seating_arrangement, class_seating_arrangement, special_class_seating_arrangement) student_lst = execute_sql("SELECT * FROM SeatingArrangement WHERE ClassLst != ''") for student in student_lst: StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo = student student = SeatingArrangement(StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo) student.set_CannotSeatNextTo('') student.set_SeatInFront(False) student.set_ClassLst('') student.set_SeatByGrades('') student.set_RowNo(0) student.set_ColumnNo(0) execute_sql(student.update_record())
def edit_student_record(student_name): student_details = execute_sql("SELECT * FROM Student WHERE StudentName = '{}'".format(student_name))[0] StudentName, StudentRegNo, ClassName, StudentSubjectCombi, StudentGender, AllSubjectGrades = student_details edit_student_details = Student(StudentName, StudentRegNo, ClassName, StudentSubjectCombi, StudentGender, AllSubjectGrades) #StudentName cannot be changed as its the Primary Key if request.method == 'POST': #Update Student Object edit_student_details.set_StudentRegNo(request.form.get('StudentRegNo').strip()) edit_student_details.set_StudentGender(request.form.get('StudentGender').strip()) new_StudentSubjectCombi = '' new_AllSubjectGrades = '' for i in range(len(StudentSubjectCombi.split(' '))): new_StudentSubjectCombi += request.form.get('SubjectName{}'.format(i).strip()) + ' ' new_AllSubjectGrades += request.form.get('SubjectGrade{}'.format(i).strip()) + ' ' new_StudentSubjectCombi = new_StudentSubjectCombi[:-1] new_AllSubjectGrades = new_AllSubjectGrades[:-1] edit_student_details.set_StudentSubjectCombi(new_StudentSubjectCombi) edit_student_details.set_AllSubjectGrades(new_AllSubjectGrades) # Update the database of Student execute_sql(edit_student_details.update_record()) #Update StudentRecords object when change in grade index = 0 if index < len(StudentSubjectCombi.split(' ')) and new_StudentSubjectCombi != StudentSubjectCombi: if new_StudentSubjectCombi.split(' ')[index] != StudentSubjectCombi.split(' ')[index]: student_subject = execute_sql("SELECT * FROM StudentRecords WHERE SubjectName = '{}'".format(StudentSubjectCombi.split(' ')[index]))[0] StudentName, SubjectGrade, SubjectName = student_subject edit_student_subject = StudentRecords(StudentName, SubjectGrade, SubjectName) edit_student_subject.set_SubjectName(new_StudentSubjectCombi.split(' ')[index]) #Update the database of StudentRecords execute_sql(edit_student_subject.update_record()) index += 1 index = 0 if index < len(AllSubjectGrades.split(' ')) and new_AllSubjectGrades != AllSubjectGrades: if new_AllSubjectGrades.split(' ')[index] != AllSubjectGrades.split(' ')[index]: student_grade = execute_sql("SELECT * FROM StudentRecords WHERE SubjectName = '{}'".format(StudentSubjectCombi.split(' ')[index]))[0] StudentName, SubjectGrade, SubjectName = student_grade edit_student_grade = StudentRecords(StudentName, SubjectGrade, SubjectName) edit_student_grade.set_SubjectName(new_AllSubjectGrades.split(' ')[index]) #Update the database of StudentRecords execute_sql(edit_student_grade.update_record()) index += 1 #return to main page return redirect(url_for("display_all_student_records")) else: return render_template('edit_student_record.html', edit_student_details = edit_student_details, range = range(len(edit_student_details.get_AllSubjectGrades().split(' '))))
def show_seatarr_by_name(seatarrname): seatarr = execute_sql("SELECT * FROM SavedSeatArr WHERE SeatArrName = '{}'".format(seatarrname))[0] #print(seatarr) UserName, SeatArrName, SeatArrSeq, RowNo, ColumnNo, CommentIDs = seatarr seatarr_oop = SavedSeatArr(UserName, SeatArrName, SeatArrSeq, RowNo, ColumnNo) ClassSize = len(SeatArrSeq.split(",")) comments = execute_sql("SELECT * FROM Comment WHERE SeatArrName = '{}'".format(seatarrname)) # SQL ReadF # print(comments) comments_oop = list(map(lambda t: Comment(t[0], t[1], t[2], t[3], t[4]), comments)) # print(comments_oop) # process to find SeatingArrangement_lst #print(SeatArrSeq) seatarrseq = SeatArrSeq.split(',') SeatingArrangement_lst = [] pair = [] for i in seatarrseq: i = i.replace("'", '"').strip('"[]"') index = 0 for x in i: if x.isalpha(): break else: index += 1 i = i[index:] pair.append(i) if len(pair) == 2: SeatingArrangement_lst.append(pair) pair = [] if len(pair) == 1: SeatingArrangement_lst.append(pair) #print("SeatingArrangement_lst",SeatingArrangement_lst) count = 0 temp, result = [], [] for row in range(RowNo): for column in range(ColumnNo): if count < ClassSize: temp.append(SeatingArrangement_lst[row * ColumnNo + column]) if len(SeatingArrangement_lst[row * ColumnNo + column]) == 2: count += 2 if len(SeatingArrangement_lst[row * ColumnNo + column]) == 1: count += 1 result.append(temp) temp = [] return render_template("show_seatarr_by_name.html", seatarrname=seatarrname, comments=comments_oop, SeatingArrangement_lst = result, RowNoRange = range(RowNo), ColumnNoRange = range(ColumnNo), ColumnNo = ColumnNo, ClassSize = ClassSize)
def class_seating_arrangement(): valid_classes = execute_sql("SELECT * FROM Class") valid_classes = list(map(lambda x: x[0], valid_classes)) if request.method == 'POST': ClassName = request.form.get('ClassName') return ClassName else: return render_template('class_seating_arrangement.html', valid_classes=valid_classes)
def special_class_seating_arrangement(): valid_classes = execute_sql("SELECT * FROM Class") valid_classes = list(map(lambda x: x[0], valid_classes)) valid_subjects = execute_sql("SELECT * FROM Subject") valid_subjects = list(map(lambda x: x[0], valid_subjects)) if request.method == 'POST': subject_taken = request.form.get('SubjectName') classes = '' for i in range(len(valid_classes)): ClassName = request.form.get('ClassName{}'.format(i)) if ClassName != None: classes += ClassName + ' ' classes = classes[:-1] return classes,subject_taken else: return render_template('special_class_seating_arrangement.html', valid_classes = valid_classes, class_range = range(len(valid_classes)), valid_subjects = valid_subjects)
def edit_comment(): error = False if request.form['CommentText'].isspace() or request.form['CommentText'] == "": error = "Invalid Comment Text, Please write something for Comment Text..." comment_id = request.form['CommentID'] comment = execute_sql('SELECT * FROM Comment WHERE CommentID = "{}"'.format(comment_id))[0] SeatArrName, CommentID, CommentText, CommentDatetime, UserName = comment edit_comment = Comment(SeatArrName, CommentID, CommentText, CommentDatetime, UserName) if error == False: # Update Comment Object edit_comment.set_CommentText(request.form['CommentText']) # Update the database execute_sql(edit_comment.update_record()) # Return to mainpage print(error) return redirect(url_for("show_seatarr_by_name", error = error, seatarrname=SeatArrName))
def create_comment(seatarrname): if request.method == 'POST': error = False if request.form['UserName'].isspace() or request.form['UserName'] == "": error = "Invalid UserName, Please write something for UserName..." elif request.form['CommentText'].isspace() or request.form['CommentText'] == "": error = "Invalid Comment Text, Please write something for Comment Text..." if error != False: return render_template("create_comment.html", seatarrname = seatarrname, new_CommentID = request.form['CommentID'], today = request.form['CommentDatetime'], error = error) new_comment = Comment(seatarrname, request.form['CommentID'], request.form['CommentText'], request.form['CommentDatetime'], request.form['UserName']) execute_sql(new_comment.create_new_record()) UserName, SeatArrName, SeatArrSeq, RowNo, ColumnNo, CommentIDs = execute_sql("SELECT * FROM SavedSeatArr WHERE SeatArrName = '{}'".format(seatarrname))[0] edit_ssr = SavedSeatArr(UserName, SeatArrName, SeatArrSeq, RowNo, ColumnNo, CommentIDs) edit_ssr.set_CommentIDs(request.form['CommentID']) execute_sql(edit_ssr.update_record()) return redirect(url_for("show_seatarr_by_name", seatarrname = seatarrname)) else: # GET CommentID = execute_sql("SELECT Max(CommentID) FROM Comment")[0][0] new_CommentID = "{:0>6}".format(int(CommentID) + 1) today = "{:%Y-%m-%d}".format(date.today()) return render_template("create_comment.html", seatarrname = seatarrname, new_CommentID = new_CommentID, today = today)
def delete_student_record(student_name): student_details = execute_sql( "SELECT * FROM Student WHERE StudentName = '{}'".format( student_name))[0] StudentName, StudentRegNo, ClassName, StudentSubjectCombi, StudentGender, AllSubjectGrades = student_details delete_student_details = Student(StudentName, StudentRegNo, ClassName, StudentSubjectCombi, StudentGender, AllSubjectGrades) student_records = execute_sql( "SELECT * FROM StudentRecords WHERE StudentName = '{}'".format( student_name)) seating_arrangement_record = execute_sql( "SELECT * FROM SeatingArrangement WHERE StudentName = '{}'".format( student_name))[0] StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo = seating_arrangement_record delete_seating_arrangement_record = SeatingArrangement( StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo) if request.method == 'POST': #Delete the database execute_sql(delete_student_details.delete_record()) execute_sql(delete_seating_arrangement_record.delete_record()) for i in range(len(student_records)): StudentName, SubjectGrade, SubjectName = student_records[i] delete_student_record = StudentRecords(StudentName, SubjectGrade, SubjectName) execute_sql(delete_student_record.delete_record()) #Return to the main page return redirect(url_for("display_all_student_records")) else: return render_template('delete_student_record.html', delete_student_details=delete_student_details)
def delete_comment(): comment_id = request.form.get('delete') comment = execute_sql("SELECT * FROM Comment WHERE CommentID = '{}'".format(comment_id))[0] #print(comment) SeatArrName, CommentID, CommentText, CommentDatetime, UserName = comment delete_comment = Comment(SeatArrName, CommentID, CommentText, CommentDatetime, UserName) # Update DB execute_sql(delete_comment.delete_record()) UserName, SeatArrName, SeatArrSeq, RowNo, ColumnNo, CommentIDs = execute_sql("SELECT * FROM SavedSeatArr WHERE SeatArrName = '{}'".format(SeatArrName))[0] edit_ssr = SavedSeatArr(UserName, SeatArrName, SeatArrSeq, RowNo, ColumnNo, CommentIDs) edit_ssr.delete_CommentIDs(comment_id) execute_sql(edit_ssr.update_record()) # Return to mainpage return redirect(url_for("show_seatarr_by_name", seatarrname = SeatArrName))
def delete_saved_seatingarr(): delete = request.form.get('delete') print('delete', delete) seatarrname = delete username = execute_sql('SELECT * FROM CurrentUser')[0][0] seatarr_details = execute_sql("SELECT * FROM SavedSeatArr WHERE UserName == '{}' AND SeatArrName == '{}'".format(username, seatarrname))[0] UserName, SeatArrName , SeatArrSeq, RowNo, ColumnNo, CommentIDs = seatarr_details seatarr = SavedSeatArr(UserName,SeatArrName, SeatArrSeq, RowNo, ColumnNo, CommentIDs) #Delete SavedSeatArr object execute_sql(seatarr.delete_record()) #Delete Comments linked to the SavedSeatArr if CommentIDs != '': for commentid in CommentIDs.split(','): comment_details = execute_sql('SELECT * FROM Comment WHERE CommentID = "{}"'.format(commentid))[0] SeatArrName, CommentID, CommentText, CommentDatetime, UserName = comment_details comment = Comment(SeatArrName, CommentID, CommentText, CommentDatetime, UserName) execute_sql(comment.delete_record()) return show_saved_seatingarr()
def generate_seating_arrangement(): SeatInFront_lst = [] not_SeatInFront_lst = [ ] #for students who do not need to seat in front, separate lst to randomly shuffle these students and then append it to SeatingArrangement_lst CannotSeatNextTo_lst = [] SeatingArrangement_lst = [] result = [] student_lst = execute_sql( "SELECT * FROM SeatingArrangement WHERE ClassLst != ''") StudentName_lst = list(map(lambda x: x[0], student_lst)) ClassSize = len(StudentName_lst) StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo = student_lst[ 0] if RowNo == 0: set_student_details() student_lst = execute_sql( "SELECT * FROM SeatingArrangement WHERE ClassLst != ''") StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo = student_lst[ 0] for student in student_lst: StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo = student student = SeatingArrangement(StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo) if student.get_CannotSeatNextTo() != '' and [ student.get_StudentName(), student.get_CannotSeatNextTo() ][:: -1] not in SeatInFront_lst: #Assuming only one person cannot seat to that student CannotSeatNextTo_lst.append( [student.get_StudentName(), student.get_CannotSeatNextTo()]) if student.get_SeatInFront() == True: SeatInFront_lst.append(student.get_StudentName()) if SeatByGrades == 'Yes': grade_lst = sort_by_grades(student_lst) #find pairs in cannotseatnextto_lst that are also in grade_lst as those pairs can't seat next to each other for i in grade_lst: if i in CannotSeatNextTo_lst: grade_lst.remove(i) if i[::-1] in CannotSeatNextTo_lst: grade_lst.remove(i[::-1]) #find pairs in grade_lst that are also in SeatInFrontLst to arrange the pairs in the front by appending confirmed pairs into SeatingArrangement_lst for a in range(len(SeatInFront_lst)): for b in range(a + 1, len(SeatInFront_lst)): temp = [SeatInFront_lst[a], SeatInFront_lst[b]] if temp in grade_lst and temp[0] in StudentName_lst and temp[ 1] in StudentName_lst: grade_lst.remove(temp) SeatingArrangement_lst.append( temp) #added into confirmed seating arrangement StudentName_lst.remove(temp[0]) StudentName_lst.remove(temp[1]) if temp[::-1] in grade_lst and temp[ 0] in StudentName_lst and temp[1] in StudentName_lst: grade_lst.remove(temp) SeatingArrangement_lst.append( temp[::-1]) #added into confirmed seating arrangement StudentName_lst.remove(temp[0]) StudentName_lst.remove(temp[1]) # shuffle lst so that there will be more varieties of seating arrangement random.shuffle(CannotSeatNextTo_lst) random.shuffle(SeatInFront_lst) random.shuffle(grade_lst) # pair up those who are suppose to seat in front, seating in front prioritised to seating with those that can help with grades for s in range(len(SeatInFront_lst)): for r in range(s + 1, len(SeatInFront_lst)): temp = [SeatInFront_lst[s], SeatInFront_lst[r]] if temp[0] in StudentName_lst and temp[1] in StudentName_lst: SeatingArrangement_lst.append(temp) StudentName_lst.remove(temp[0]) StudentName_lst.remove(temp[1]) # all students supposed to seat in front are added random.shuffle(SeatingArrangement_lst ) # so that pairs in grade_lst won't always be in front # choose pairs from grade_lst for c in grade_lst: if c[0] in StudentName_lst and c[1] in StudentName_lst: not_SeatInFront_lst.append(c) StudentName_lst.remove(c[0]) StudentName_lst.remove(c[1]) else: # shuffle lst so that there will be more varieties of seating arrangement random.shuffle(CannotSeatNextTo_lst) random.shuffle(SeatInFront_lst) # pair up those who are suppose to seat in front for s in range(len(SeatInFront_lst)): for r in range(s + 1, len(SeatInFront_lst)): temp = [SeatInFront_lst[s], SeatInFront_lst[r]] if temp[0] in StudentName_lst and temp[1] in StudentName_lst: SeatingArrangement_lst.append(temp) StudentName_lst.remove(temp[0]) StudentName_lst.remove(temp[1]) # pairing up any remaining students random.shuffle(StudentName_lst) while len( StudentName_lst ) > 1: # possible to have 1 student left if no pair for that student temp = [StudentName_lst[0], StudentName_lst[1]] if temp not in CannotSeatNextTo_lst and temp[:: -1] not in CannotSeatNextTo_lst: #cannot be paired up if not suppose to seat next to each other not_SeatInFront_lst.append(temp) StudentName_lst.remove(temp[0]) StudentName_lst.remove(temp[1]) random.shuffle(not_SeatInFront_lst) SeatingArrangement_lst.extend(not_SeatInFront_lst) if StudentName_lst != []: SeatingArrangement_lst.append([StudentName_lst[0]]) count = 0 temp = [] for row in range(RowNo): for column in range(ColumnNo): if count < ClassSize: temp.append(SeatingArrangement_lst[row * ColumnNo + column]) if len(SeatingArrangement_lst[row * ColumnNo + column]) == 2: count += 2 if len(SeatingArrangement_lst[row * ColumnNo + column]) == 1: count += 1 result.append(temp) temp = [] return render_template('generate_seating_arrangement.html', SeatingArrangement_lst=result, RowNo=RowNo, ColumnNo=ColumnNo, RowNoRange=range(RowNo), ColumnNoRange=range(ColumnNo), ClassSize=ClassSize)
def set_student_details(): Subject = None lst = [] if class_seating_arrangement() != None: ClassName = class_seating_arrangement() print(ClassName) lst = execute_sql( "SELECT * FROM Student WHERE ClassName = '{}'".format(ClassName)) lst = list(map(lambda x: x[0], lst)) #lst with all names of valid students print(lst) if special_class_seating_arrangement()[1] != None: ClassList, Subject = special_class_seating_arrangement() ClassList = ClassList.split(' ') lst = [] for i in ClassList: temp = execute_sql( "SELECT * FROM Student WHERE ClassName = '{}'".format(i)) for student in temp: if Subject in student[3].split(' '): lst.append(student) lst = list(map(lambda x: x[0], lst)) if lst != []: string = '' for i in lst: string += i + ',' string = string[:-1] for i in lst: #To identify, whether students belong to class which seating arrangement is generated for #set._ClassLst to lst for students in that class and set the rest of the students' ClassLst to default = [] #set._ClassLst to lst for students in this class temp = execute_sql( "SELECT * FROM SeatingArrangement WHERE StudentName = '{}'". format(i))[0] StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo = temp new_classlst = SeatingArrangement(StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo) new_classlst.set_ClassLst(string) execute_sql(new_classlst.update_record()) #setting rest to default ClassLst = [] student_lst = execute_sql( "SELECT * FROM SeatingArrangement WHERE ClassLst != '{}'".format( string)) print(student_lst) student_lst = list(map(lambda x: x[0], student_lst)) for i in student_lst: temp = execute_sql( "SELECT * FROM SeatingArrangement WHERE StudentName = '{}'". format(i))[0] StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo = temp new_classlst = SeatingArrangement(StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo) new_classlst.set_ClassLst('') execute_sql(new_classlst.update_record()) return render_template('set_student_details.html', Students=lst, student_range=range(len(lst)), range=range(5), Subject=Subject) if request.method == 'POST': seatbygrades = request.form.get( 'SeatByGrades') # strong pupils will seat next to weak pupils rowno = request.form.get('RowNo') columnno = request.form.get('ColumnNo') print('set_student_details', seatbygrades, rowno, columnno) lst = execute_sql( "SELECT * FROM SeatingArrangement WHERE ClassLst != ''") for student in lst: StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo = student student = SeatingArrangement(StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo) if seatbygrades == 'Yes': student.set_SeatByGrades(seatbygrades) if rowno != 0: student.set_RowNo(rowno) student.set_ColumnNo(columnno) execute_sql(student.update_record()) lst = list(map(lambda x: x[0], lst)) #To get valid names for i in range(len(lst)): StudentName = lst[i] SeatInFront = request.form.get('SeatInFront{}'.format(i)) if SeatInFront != None: student = execute_sql( 'SELECT * FROM SeatingArrangement WHERE StudentName = "{}"' .format(StudentName))[0] StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo = student set_student = SeatingArrangement(StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo) set_student.set_SeatInFront(True) execute_sql(set_student.update_record()) StudentName1 = request.form.get('StudentName1{}'.format(i)) StudentName2 = request.form.get('StudentName2{}'.format(i)) if StudentName1 != '' and StudentName1 != None: print(StudentName1) print( execute_sql( 'SELECT * FROM SeatingArrangement WHERE StudentName = "{}"' .format(StudentName1))) student1 = execute_sql( 'SELECT * FROM SeatingArrangement WHERE StudentName = "{}"' .format(StudentName1))[0] StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo = student1 set_student = SeatingArrangement(StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo) set_student.set_CannotSeatNextTo(StudentName2) execute_sql(set_student.update_record()) student2 = execute_sql( 'SELECT * FROM SeatingArrangement WHERE StudentName = "{}"' .format(StudentName2))[0] StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo = student2 set_student = SeatingArrangement(StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo) set_student.set_CannotSeatNextTo(StudentName1) execute_sql(set_student.update_record()) else: return render_template('set_student_details.html', Students=lst, student_range=range(len(lst)), range=range(5), Subject=Subject)
def create_student_record(): if request.method == 'POST': #Create Class object new_class = Class(request.form.get('ClassName'), '') execute_sql(new_class.create_new_record()) #Create Student object new_student_details = Student( request.form.get('StudentName').strip(), request.form.get('StudentRegNo').strip(), request.form.get('ClassName').strip(), request.form.get('StudentSubjectCombi').strip(), request.form.get('StudentGender').strip(), request.form.get('AllSubjectGrades').strip()) execute_sql(new_student_details.create_new_record()) #Create StudentRecords object StudentSubjectCombi = request.form.get( 'StudentSubjectCombi').strip().split(' ') AllSubjectGrades = request.form.get('AllSubjectGrades').strip().split( ' ') for i in range(len(StudentSubjectCombi)): new_student_record = StudentRecords( request.form.get('StudentName').strip(), AllSubjectGrades[i], StudentSubjectCombi[i]) execute_sql(new_student_record.create_new_record()) subject_lst = execute_sql('SELECT * FROM Subject') subject_lst = list(map(lambda tuple: tuple[0], subject_lst)) for subject in StudentSubjectCombi: if subject not in subject_lst: new_subject = Subject(subject, subject_description(subject)) execute_sql(new_subject.create_new_record()) #Create Seating Arrangement object new_seating_arrangement = SeatingArrangement( request.form.get('StudentName'), CannotSeatNextTo='', SeatInFront=False, WeakSubjects='', StrongSubjects='', ClassLst='', SeatByGrades='', RowNo=0, ColumnNo=0) execute_sql(new_seating_arrangement.create_new_record()) return redirect(url_for('display_all_student_records')) else: return render_template('create_student_record.html')
def display_all_student_records(): classes = execute_sql("SELECT * FROM Class") students = execute_sql("SELECT * FROM Student") records = execute_sql("SELECT * FROM StudentRecords") subjects = execute_sql("SELECT * FROM Subject") for x in range( len(classes) - 1 ): #to sort classes in order, so that when displayed will be according to class. smallest = x for y in range(x + 1, len(classes)): if classes[y][0] < classes[smallest][0]: smallest = y if smallest != x: classes[smallest], classes[x] = classes[x], classes[smallest] for i in range( len(students) - 1 ): #to sort reg.no in order, so that when displayed will be according to reg.no. smallest = i for j in range(i + 1, len(students)): if students[j][1] < students[smallest][1]: smallest = j if smallest != i: students[smallest], students[i] = students[i], students[smallest] classes_oop = list(map(lambda a: Class(a[0], a[1]), classes)) students_oop = list( map(lambda b: Student(b[0], b[1], b[2], b[3], b[4], b[5]), students)) records_oop = list(map(lambda c: StudentRecords(c[0], c[1], c[2]), records)) subjects_oop = list(map(lambda d: Subject(d[0], d[1]), subjects)) # collating all grades and adding it as attribute to Students as AllSubjectGrades for student in students_oop: if student.get_AllSubjectGrades() == '': temp = '' index = 0 while len(temp.split(' ')) - 1 != len( student.get_StudentSubjectCombi().split(' ')): for record in records: if student.get_StudentName( ) == record[0] and student.get_StudentSubjectCombi().split( ' ')[index] == record[2]: temp += '{} '.format(record[1]) index += 1 temp = temp[:-1] student.set_AllSubjectGrades(temp) execute_sql(student.update_record()) # Adding to WeakSubjects and StrongSubjects for seating arrangement # done in display so that after editing new strong subjects will be added and some removed as well # same for weak subjects for student in students_oop: student_seating_arrangement = execute_sql( 'SELECT * FROM SeatingArrangement WHERE StudentName = "{}"'.format( student.get_StudentName()))[0] StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo = student_seating_arrangement student_seating_arrangement = SeatingArrangement( StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo) StrongSubjects = '' WeakSubjects = '' for i in range(len(student.get_AllSubjectGrades().split(' '))): if student.get_AllSubjectGrades().split(' ')[i] < 'C': #'A', 'B' StrongSubjects += student.get_StudentSubjectCombi().split( ' ')[i] + ' ' elif student.get_AllSubjectGrades().split(' ')[i] > 'D': WeakSubjects += student.get_StudentSubjectCombi().split( ' ')[i] + ' ' student_seating_arrangement.set_StrongSubjects(StrongSubjects[:-1]) student_seating_arrangement.set_WeakSubjects(WeakSubjects[:-1]) execute_sql(student_seating_arrangement.update_record()) reset_seating_arrangement() return render_template("display_all_records.html", classes=classes_oop, students=students_oop, records=records_oop, subjects=subjects_oop)
def search_filter(): seatarr = execute_sql('SELECT * FROM SavedSeatArr') # SQL Read # print(seatarr) seatarr_oop = list(map(lambda t: SavedSeatArr(t[0], t[1], t[2], t[3], t[4], t[5]), seatarr)) # print(seatarr_oop) return render_template("search_filter.html", seatarr=seatarr_oop)
def delete_student_record(): student_name = request.form.get('delete') student_details = execute_sql("SELECT * FROM Student WHERE StudentName = '{}'".format(student_name))[0] StudentName, StudentRegNo, ClassName, StudentSubjectCombi, StudentGender, AllSubjectGrades = student_details delete_student_details = Student(StudentName, StudentRegNo, ClassName, StudentSubjectCombi, StudentGender, AllSubjectGrades) student_records = execute_sql("SELECT * FROM StudentRecords WHERE StudentName = '{}'".format(student_name)) seating_arrangement_record = execute_sql("SELECT * FROM SeatingArrangement WHERE StudentName = '{}'".format(student_name))[0] StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo = seating_arrangement_record delete_seating_arrangement_record = SeatingArrangement(StudentName, CannotSeatNextTo, SeatInFront, WeakSubjects, StrongSubjects, ClassLst, SeatByGrades, RowNo, ColumnNo) #Delete the database execute_sql(delete_student_details.delete_record()) execute_sql(delete_seating_arrangement_record.delete_record()) for i in range(len(student_records)): StudentName, SubjectGrade, SubjectName = student_records[i] delete_student_record = StudentRecords(StudentName, SubjectGrade, SubjectName) execute_sql(delete_student_record.delete_record()) #remove class if the class no longer has any students in it students_from_class = execute_sql("SELECT * FROM Student WHERE ClassName == '{}'".format(ClassName)) if students_from_class == []: class_details = execute_sql("SELECT * FROM Class WHERE ClassName == '{}'".format(ClassName))[0] ClassName, TotalStudents = class_details delete_class = Class(ClassName, TotalStudents) execute_sql(delete_class.delete_record()) #Return to the main page return redirect(url_for("display_all_student_records"))
def edit_saved_seatingarr(): #only can rename newname = request.form.get('newname') replace = True if len(newname.split(',')) == 2: newname, seatarrname = newname.split(',') replace = False else: newname, seatarrname, replace = newname.split(',') replace = True username = execute_sql('SELECT * FROM CurrentUser')[0][0] if replace == True: #will have to delete all the comments and seating arrangement of the one that will be replaced replace_seatarrs = execute_sql("SELECT * FROM SavedSeatArr WHERE UserName == '{}' AND SeatArrName == '{}'".format(username, newname))[0] UserName, SeatArrName, SeatArrSeq, RowNo, ColumnNo, CommentIDs = replace_seatarrs replace_seatarr = SavedSeatArr(UserName, SeatArrName, SeatArrSeq, RowNo, ColumnNo, CommentIDs) #delete SavedSeatArr obj execute_sql(replace_seatarr.delete_record()) #delete_SavedSeatArr_obj for commentid in CommentIDs.split(','): replace_comments = execute_sql("SELECT * FROM Comment WHERE CommentID == '{}'".format(commentid))[0] SeatArrName, CommentID, CommentText, CommentDatetime, UserName = replace_comments replace_comment = Comment(SeatArrName, CommentID, CommentText, CommentDatetime, UserName) execute_sql(replace_comment.delete_record()) seatarr_details = execute_sql("SELECT * FROM SavedSeatArr WHERE UserName == '{}' AND SeatArrName == '{}'".format(username, seatarrname))[0] #print(seatarr_details) UserName, SeatArrName , SeatArrSeq, RowNo, ColumnNo, CommentIDs = seatarr_details seatarr = SavedSeatArr(UserName,SeatArrName, SeatArrSeq, RowNo, ColumnNo, CommentIDs) seatarr.set_SeatArrName(newname) #Update SavedSeatArr execute_sql('''UPDATE SavedSeatArr SET\nUserName = '******', SeatArrName = "{}", SeatArrSeq = '{}', RowNo = '{}', ColumnNo = '{}', CommentIDs = '{}'\nWHERE \nUserName = '******' and SeatArrName = "{}"'''.format(UserName, newname, SeatArrSeq, RowNo, ColumnNo, CommentIDs, UserName, seatarrname)) #Update Comment if CommentIDs != '': for commentid in CommentIDs.split(','): print(execute_sql('SELECT * FROM Comment WHERE CommentID = "{}"'.format(commentid))) comment_details = execute_sql('SELECT * FROM Comment WHERE CommentID = "{}"'.format(commentid))[0] SeatArrName, CommentID, CommentText, CommentDatetime, UserName = comment_details comment = Comment(SeatArrName, CommentID, CommentText, CommentDatetime, UserName) comment.set_SeatArrName(newname) execute_sql(comment.update_record()) return show_saved_seatingarr()
def show_saved_seatingarr(): username = execute_sql('SELECT * FROM CurrentUser')[0][0] username_details = execute_sql("SELECT * FROM SavedSeatArr WHERE UserName == '{}'".format(username)) seatarrname_lst = list(map(lambda x: x[1], username_details)) return render_template('show_saved_seatingarr.html', seatarrname_lst = seatarrname_lst)
def create_student_record(): if request.method == 'POST': error = False if request.form['ClassName'].strip() == "": error = "Invalid Class, Please write something for Class..." elif len(request.form['ClassName'].strip()) != 2: error = "Invalid Class, Class should consist of one number and one letter (e.g. 6M)" elif len(request.form['ClassName'].strip()) == 2: if not (request.form['ClassName'].strip()[0].isdigit() and request.form['ClassName'][1].strip().isalpha() and ord(request.form['ClassName'][1].strip()) >= 65 and ord(request.form['ClassName'][1].strip()) <= 90 ): error = "Invalid Class, Class should consist of one number and one capital letter (e.g. 6M)" return render_template('create_student_record.html', SubjectAbbrev=SubjectAbbrev, SubjectFull=SubjectFull, error=error) existing_students = execute_sql("SELECT * FROM Student WHERE ClassName = '{}'".format(request.form['ClassName'].strip())) existing_regno = list(map(lambda tuple: tuple[1], existing_students)) if request.form['StudentName'].strip() == "": error = "Invalid Name, Please write something for Name..." return render_template('create_student_record.html', SubjectAbbrev=SubjectAbbrev, SubjectFull=SubjectFull, error=error) elif hasNumbers(request.form['StudentName']): error = "Invalid Name, Name should not contain numbers" return render_template('create_student_record.html', SubjectAbbrev=SubjectAbbrev, SubjectFull=SubjectFull, error=error) elif request.form['StudentRegNo'].strip() == "": error = "Invalid Register No., Please write something for Register No..." return render_template('create_student_record.html', SubjectAbbrev=SubjectAbbrev, SubjectFull=SubjectFull, error=error) elif not request.form['StudentRegNo'].strip().isdigit(): error = "Invalid Register No., Register No. should only consist of numbers" return render_template('create_student_record.html', SubjectAbbrev=SubjectAbbrev, SubjectFull=SubjectFull, error=error) if request.form['StudentRegNo'].strip().isdigit(): if int(request.form['StudentRegNo'].strip()) in existing_regno: error = "Register No. has already been used, please key in another register no." return render_template('create_student_record.html', SubjectAbbrev=SubjectAbbrev, SubjectFull=SubjectFull, error=error) if request.form['StudentGender'].strip() == "": error = "Invalid Gender, Please write something for Gender..." elif request.form['StudentGender'].strip() not in ["F","M"]: error = "Invalid Gender, Gender should only be M or F" elif request.form['StudentSubjectCombi'].strip() == "": error = "Invalid Subject Combination, Please write something for Subject Combination..." for SubCom in list(request.form['StudentSubjectCombi'].split(' ')): if SubCom[:3:] not in SubjectAbbrev: error = 'Invalid Subject Combination, An impossible subject was entered' for SubGrade in (list(filter(lambda x: x != ' ', request.form['AllSubjectGrades'].strip()))): if SubGrade not in ['A', 'B', 'C', 'D', 'E', 'S', 'U']: print(SubGrade, 'Subgrade') error = 'Invalid Grades, An impossible grade was entered' if request.form['AllSubjectGrades'].strip() == "": error = "Invalid Grades, Please write something for Grades..." elif len(request.form['StudentSubjectCombi'].strip().split(" ")) != len(request.form['AllSubjectGrades'].strip().split(" ")): error = "Number of grades should correspond to number of subjects keyed in" if error != False: return render_template('create_student_record.html', SubjectAbbrev=SubjectAbbrev, SubjectFull=SubjectFull, error=error) #Create Class object new_class = Class(request.form.get('ClassName').strip(),'') execute_sql(new_class.create_new_record()) #Create Student object new_student_details = Student(request.form.get('StudentName').strip(), request.form.get('StudentRegNo').strip(), request.form.get('ClassName').strip(),request.form.get('StudentSubjectCombi').strip(), request.form.get('StudentGender').strip(), request.form.get('AllSubjectGrades').strip()) execute_sql(new_student_details.create_new_record()) #Create StudentRecords object StudentSubjectCombi = request.form.get('StudentSubjectCombi').strip().split(' ') AllSubjectGrades = request.form.get('AllSubjectGrades').strip().split(' ') for i in range(len(StudentSubjectCombi)): new_student_record = StudentRecords(request.form.get('StudentName').strip(), AllSubjectGrades[i], StudentSubjectCombi[i]) execute_sql(new_student_record.create_new_record()) subject_lst = execute_sql('SELECT * FROM Subject') subject_lst = list(map(lambda tuple: tuple[0],subject_lst)) for subject in StudentSubjectCombi: if subject not in subject_lst: new_subject = Subject(subject, subject_description(subject)) execute_sql(new_subject.create_new_record()) #Create Seating Arrangement object new_seating_arrangement = SeatingArrangement(request.form.get('StudentName').strip(), CannotSeatNextTo = '', SeatInFront = False, WeakSubjects = '', StrongSubjects = '', ClassLst= '', SeatByGrades='', RowNo=0, ColumnNo=0) execute_sql(new_seating_arrangement.create_new_record()) return redirect(url_for('display_all_student_records')) else: return render_template('create_student_record.html', SubjectAbbrev=SubjectAbbrev, SubjectFull=SubjectFull)