def populate_event_label(self): semester_tag = MIS_Database_Functions.get_most_recent_semester_tag() if semester_tag is None: # Failure State self.current_label.config(style="ErrorLabel.TLabel") self.current_label['text'] = 'No semester created yet!\n' \ 'Create one first, then\n' \ 'restart this system. :)' return event_id = MIS_Database_Functions.get_most_recent_event_id() if event_id is not None: event_data = MIS_Database_Functions.get_event_data(event_id) self.current_label['text'] = 'Newest Event:\n%s' % (event_data['company']) else: self.feedback_label.config(style="ErrorLabel.TLabel") self.current_label['text'] = 'No event yet.\nCreate one here.'
def create_event(self, event=None): event_date = self.event_date_entry.get().strip() company_name = self.company_name_entry.get().strip() event_topic = self.event_topic_entry.get().strip() if event_date == '' or company_name == '' or event_topic == '': self.feedback_label.config(style="ErrorLabel.TLabel") self.feedback_label['text'] = "Please provide at least some\nvalue for each field." return if len(event_date) != 11 or event_date[2] != '/' or event_date[6] != '/': self.feedback_label.config(style="ErrorLabel.TLabel") self.feedback_label['text'] = "Provide dates in format DD/MMM/YYYY\nExample: 12/AUG/2015" return semester_tag = MIS_Database_Functions.get_most_recent_semester_tag() month = event_date[3:6] if semester_tag[0] == 'F' and month not in fall_months: self.feedback_label.config(style="ErrorLabel.TLabel") self.feedback_label['text'] = "Check date.\nMonth is incorrect for current semester." \ "\nYou may have forgotten to create a new semester." return elif semester_tag[0] == 'S' and month not in spring_months: self.feedback_label.config(style="ErrorLabel.TLabel") self.feedback_label['text'] = "Check date.\nMonth is incorrect for current semester." \ "\nYou may have forgotten to create a new semester." return results = MIS_Database_Functions.create_event(company_name, event_topic, event_date) if results[0]: # Success state self.feedback_label.config(style="SuccessLabel.TLabel") self.feedback_label['text'] = "The new event was added.\n Event ID: %s\n" \ "Restart the system before checking in." % str(results[1]) else: # Failure state self.feedback_label.config(style="ErrorLabel.TLabel") self.feedback_label['text'] = "An error occurred:\n" + str(results[1]) self.company_name_entry.delete(START, len(company_name)) self.event_date_entry.delete(START, len(event_date)) self.event_topic_entry.delete(START, len(event_topic)) self.populate_event_label() self.set_focus()
def __init__(self, parent, controller): ttk.Frame.__init__(self, parent) ############################################################## # SIDE FRAME # ############################################################## self.logo_border = ttk.Label(self, border=border_default, relief=relief_default, takefocus=False) self.logo_border.grid(row=0, column=0, rowspan=4, columnspan=3, sticky="nsew") self.logo_label = ttk.Label(self, image=controller.image, takefocus=False) self.logo_label.image = controller.image self.logo_label.grid(row=0, column=0, rowspan=4, columnspan=3) self.side_frame = ttk.Label(self, border=border_default, relief=relief_default, takefocus=False) self.side_frame.grid(row=4, column=0, rowspan=6, columnspan=3, sticky="nsew") self.frame_title = ttk.Label(self, text="SEMESTER CREATION", font=Superhead, takefocus=False) self.frame_title.grid(row=4, column=0, columnspan=3, rowspan=1) current_sem_tag = MIS_Database_Functions.get_most_recent_semester_tag() if current_sem_tag is not None: self.currency_label = ttk.Label(self, text="Current Semester: %s" % current_sem_tag, font=Head) else: self.currency_label = ttk.Label(self, text="No Semester Created!\n" "Create one then restart\n" "this system.", font=Head) self.currency_label.config(style="ErrorLabel.TLabel") self.currency_label.grid(row=5, column=0, columnspan=3, rowspan=2) self.instructions = ttk.Label(self, text="At the beginning of each semester\n" "come here and create a new entry \n" "for the database. This is needed \n" "for data verification, and makes \n" "aggregating much easier.") self.instructions.grid(row=7, column=0, columnspan=3, rowspan=3, sticky="nw", padx=(10, 10)) self.content_border_label = ttk.Label(self, border=border_default, relief=relief_default) self.content_border_label.grid(row=0, column=3, sticky="nsew", rowspan=7, columnspan=7) ############################################################# # MAIN CONTENTS # ############################################################# self.big_label = ttk.Label(self, text="NEW SEMESTER DATES", font=Head) self.big_label.grid(row=0, column=5, columnspan=3) self.semester_start_label = ttk.Label(self, text="Semester Start:", font=Subhead) self.semester_start_label.grid(row=1, column=3, columnspan=2, sticky="n") self.semester_start_entry = ttk.Entry(self) self.semester_start_entry.grid(row=1, column=5, sticky="new", columnspan=2) self.semester_end_label = ttk.Label(self, text="End of Semester:", font=Subhead) self.semester_end_label.grid(row=1, column=3, columnspan=2, sticky="s") self.semester_end_entry = ttk.Entry(self) self.semester_end_entry.grid(row=1, column=5, sticky="sew", columnspan=2) self.feedback_label_border = ttk.Label(self, border=border_default, relief=relief_default) self.feedback_label_border.grid(row=7, column=3, rowspan=3, columnspan=7, sticky="nsew") self.feedback_label = ttk.Label(self, text="Awaiting new semester entry.", font=Subhead) self.feedback_label.grid(row=7, column=3, rowspan=3, columnspan=7, pady=(5, 5), padx=(5, 5)) self.semester_submitter_button = ttk.Button(self, text="Submit Semester", command=lambda: self.create_semester(), style="DataSubmitter.TButton") self.semester_submitter_button.bind("<Return>", lambda e: self.create_semester()) self.semester_submitter_button.grid(row=3, column=5, sticky="ew", columnspan=2) # This code only matters for systems whose databases do not have any semesters in them if current_sem_tag is None: self.semester_tag_label = ttk.Label(self, text="Semester Tag:", font=Subhead) self.semester_tag_label.grid(row=2, column=3, sticky="n", columnspan=2, pady=(10, 0)) self.semester_tag_entry = ttk.Entry(self) self.semester_tag_entry.grid(row=2, column=5, sticky="new", columnspan=2, pady=(10, 0)) self.feedback_label['text'] = 'Only for this semester you will need\n' \ 'to provide a semester tag in the format\n' \ 'F## where F is either F or S (fall or\n ' \ 'spring), and ## is the year. In the \n' \ 'future this will be automatic.' self.semester_submitter_button.bind("<Return>", lambda e: self.create_semester( semester_tag=self.semester_tag_entry.get())) self.semester_submitter_button.config(command=lambda: self.create_semester( semester_tag=self.semester_tag_entry.get()))
def create_semester(self, event=None, semester_tag=None): start = self.semester_start_entry.get().strip() end = self.semester_end_entry.get().strip() if len(start) != 11 or len(end) != 11 or start[2] != '/' or end[2] != '/': self.feedback_label.config(style='ErrorLabel.TLabel') self.feedback_label['text'] = "Please enter dates in the format:\n" \ "DD/MMM/YYYY.\n" \ "Example: 12/AUG/2015" return # Failure state # Normal Semester Creation with automated Semester Tag generation if not hasattr(self, 'semester_tag_entry'): start_month = start[3:6] end_month = end[3:6] previous_semester_tag = MIS_Database_Functions.get_most_recent_semester_tag() try: previous_semester_tag_year = int(previous_semester_tag[1:]) except ValueError: self.feedback_label.config(style='ErrorLabel.TLabel') self.feedback_label['text'] = "The previous semester's tag is incorrect.\n" \ "Have the technical director correct this issue before proceeding." return if previous_semester_tag[0] == 'F': new_semester_tag_year = previous_semester_tag_year + 1 new_semester_tag = 'S' else: new_semester_tag = 'F' new_semester_tag_year = previous_semester_tag_year new_semester_tag += str(new_semester_tag_year) # Checks to make sure the start and end dates are in the right months for the new Semester if start_month not in months or end_month not in months: self.feedback_label.config(style='ErrorLabel.TLabel') self.feedback_label['text'] = "The month in at least one of the dates\n" \ "is not correct for semester %s." % new_semester_tag if new_semester_tag[0] == 'F' and (start_month not in fall_months or end_month not in fall_months): self.feedback_label.config(style='ErrorLabel.TLabel') self.feedback_label['text'] = "The month in at least one of the dates\n" \ "is not correct for semester %s." % new_semester_tag return if new_semester_tag[0] == 'S' and (start_month not in spring_months or end_month not in spring_months): self.feedback_label.config(style='ErrorLabel.TLabel') self.feedback_label['text'] = "The month in at least one of the dates\n" \ "is not correct for semester %s." % new_semester_tag return start_year = int(start[9:]) end_year = int(end[9:]) if start_year != new_semester_tag_year or end_year != new_semester_tag_year: self.feedback_label.config(style='ErrorLabel.TLabel') self.feedback_label['text'] = 'Incorrect year. It should be \'%s' \ % str(new_semester_tag_year) return self.feedback_label.config(style="SuccessLabel.TLabel") self.feedback_label['text'] = "Semester created successfully.\n" \ " You are ready to create events and check in members." MIS_Database_Functions.create_semester(new_semester_tag, start, end) self.semester_end_entry.delete(0, len(self.semester_end_entry.get())) self.semester_start_entry.delete(0, len(self.semester_start_entry.get())) # Semester Creation from the blank slate else: MIS_Database_Functions.create_semester(semester_tag, start, end) self.feedback_label.config(style="SuccessLabel.TLabel") self.feedback_label['text'] = "Semester created successfully.\n" \ "You are ready to create events."
def get_data(self, net_id, event=None): if net_id is None or net_id.strip() == "": self.feedback_label.config(style="ErrorLabel.TLabel") self.feedback_label['text'] = "No net ID entered yet." return # Failure state if self.major_entry.get() and self.classification_entry.get(): self.feedback_label.config(style="ErrorLabel.TLabel") self.feedback_label['text'] = "Make sure to clear the entries\n" \ "before trying to gather data." return # Failure State data = MIS_Database_Functions.check_member(net_id) if data is not None: self.name_entry.insert(START, data['name']) self.major_entry.insert(START, data['major']) self.classification_entry.insert(START, data['classification']) if data['dues_paid'] == 2: self.two_semesters.invoke() elif data['dues_paid'] == 1: self.one_semester.invoke() else: self.dues.set("trial") attendance_data = \ MIS_Database_Functions.get_attendance_data(net_id, MIS_Database_Functions.get_most_recent_semester_tag()) if attendance_data is not None: if attendance_data['meetings_attended'] > 0 and attendance_data['dues'] < 1: self.feedback_label.config(style="ErrorLabel.TLabel") self.feedback_label['text'] = "Member %s has already used their trial meeting.\n" \ "They have not yet paid dues.\n" \ "Collect payment as necessary." % net_id else: self.feedback_label.config(style="SuccessLabel.TLabel") self.feedback_label['text'] = "Member %s is paid for %d more semester(s).\n" \ "They have attended %d meetings this semester." % \ (net_id, attendance_data['dues'], attendance_data['meetings_attended']) else: self.feedback_label.config(style="SuccessLabel.TLabel") self.feedback_label['text'] = "This member has not yet used their trial meeting.\n" \ "They are good to go.\n" \ "Collect payment only if they want to pay now." else: try: data = Info_IaState_Scraper.get_raw_html(net_id) data = Info_IaState_Scraper.parse_student_data(data) if data is not None: self.name_entry.insert(START, data['name']) self.major_entry.insert(START, data['major']) self.classification_entry.insert(START, data['classification']) self.feedback_label.config(style="SuccessLabel.TLabel") self.feedback_label['text'] = "No current data on %s.\n" \ "Found data in the directory.\n" \ "New members receive 1 trial meeting." % net_id else: self.feedback_label.config(style="SuccessLabel.TLabel") self.feedback_label['text'] = "No current data on this net id: %s.\n" \ "Nothing found on the directory either. \n" \ "Make sure their net ID is correct.\n" \ "If it is then ask them to type in data " \ "for the other fields.\n" \ "New members receive 1 trial meeting." % net_id except URLError: self.feedback_label.config(style="ErrorLabel.TLabel") self.feedback_label['text'] = 'No current data on net id: %s.\n' \ 'Directory request failed.\n' \ 'Check internet connection then try again.\n' \ 'If all else fails, enter data manually.' % net_id