Beispiel #1
0
    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.'
Beispiel #2
0
    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()
Beispiel #3
0
    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()))
Beispiel #4
0
    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."
Beispiel #5
0
    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