def _change(self, newName, absences, failures): """ This function changes the event on the database :return: None """ # Create a new Event with the new name newEvent = Event(newName, self.event['start'], self.event['end'], self.event['day'], self.event['type'], self.event['subject'], absences, failures) # Iterate started = False index = 0 for t in Time.HOURS: # Start counting when start time is detected if t[0:5] == self.event['start']: started = True if t[8:] == self.event['end']: started = False # One last element if self.event == Database.pick(self.weekday, index): Database.edit(self.weekday, index, newEvent) break if started: # Delete and add new Event if self.event == Database.pick(self.weekday, index): Database.edit(self.weekday, index, newEvent) index += 1 self.event['name'] = newName self.event['absences'] = absences self.event['failures'] = failures
def _delete(self): """Delete the selected Event""" # Get user's response response = messagebox.askquestion( "Delete event", "Are you sure you want to delete this event?") if response == "yes": started = False index = 0 for t in Time.HOURS: # Start counting when start time is detected if t[0:5] == self.event['start']: started = True if t[8:] == self.event['end']: started = False # Delete last event if self.event == Database.pick(self.weekday, index): Database.delete(self.weekday, index) break if started: # Delete events if self.event == Database.pick(self.weekday, index): Database.delete(self.weekday, index) index += 1 self.destroyFrame() else: return
def _getFreeTime(self): """ Get available time (free time) All available time is stored in a list corresponding to it's dictionary key Blocks of free time are stored in the same subset Each hour of time is stored in a tuple, containing it's time range index Example: { 'Monday': [ [(1, {}), (2, {}), (3, {})], [12, {}] ] ..... 'Sunday': [ ] } """ for day in Time.WEEKDAYS[1:]: self.freeTime[day] = [] # Group free time that are all together in the same slice slice = [] for hour in range(len(Time.HOURS)): data = Database.pick(day, hour) if hour < len(Time.HOURS) - 1: nextData = Database.pick(day, hour + 1) else: nextData = None if data == {}: if nextData == {}: slice.append((hour, data)) else: if len(slice) == 0: self.freeTime[day].append([(hour, data)]) else: slice.append((hour, data)) self.freeTime[day].append(slice) slice = []
def buildTimeTable(self): """Build time table""" # Time table layout self.tableFrame = tk.Frame(self) today = Time.WEEKDAYS[datetime.datetime.today().weekday() + 1] # Create the timetable for d in range(len(Time.WEEKDAYS)): if Time.WEEKDAYS[d] == today: tk.Label(self.tableFrame, text=Time.WEEKDAYS[d], font=Constants.MEDIUM_FONT, padx=25, pady=30, bg=Constants.TODAY[0], fg=Constants.TODAY[1]).grid(row=0, column=d) else: tk.Label(self.tableFrame, text=Time.WEEKDAYS[d], font=Constants.MEDIUM_FONT, padx=25, pady=30).grid(row=0, column=d) if d == 0: for h in range(len(Time.HOURS)): tk.Label(self.tableFrame, text=Time.HOURS[h], font=Constants.MEDIUM_FONT, padx=20, pady=5).grid(row=h + 1, column=d) else: for e in range(len(Time.HOURS)): data = Database.pick(Time.WEEKDAYS[d], e) self.e = tk.Label(self.tableFrame, width=14, height=1, font=Constants.MEDIUM_FONT, borderwidth=2, relief="ridge") if data != {}: bg = Constants.GRIDCOLOR[Constants.TASKS.index( data['type'])][0] fg = Constants.GRIDCOLOR[Constants.TASKS.index( data['type'])][1] self.e['text'] = data['name'] self.e['bg'] = bg self.e['fg'] = fg self.e.bind("<Button-1>", lambda ev: self._eventClicked(ev)) self.e.grid(row=e + 1, column=d) self.tableFrame.grid(row=1, column=0)
def __init__(self, eventCoords, *args, **kwargs): self.weekday = Time.WEEKDAYS[eventCoords[0]] self.timeIndex = eventCoords[1] - 1 self.event = Database.pick(self.weekday, self.timeIndex) tk.Tk.__init__(self, *args, **kwargs) self.geometry(Constants.POPSIZE) self.resizable(False, False) self.title(self.event['name']) self.protocol("WM_DELETE_WINDOW", self.destroyFrame) self.container = tk.Frame(self) self.container.pack(side="top", fill="both", expand=True) self._build_frame()
def __init__(self, title, *args, **kwargs): # Get current weekday self.today = Time.WEEKDAYS[datetime.datetime.today().weekday() + 1] self.exams = [] # Get all exams and store them in self.exams for day in Time.WEEKDAYS[1:]: for i in range(len(Time.HOURS)): data = Database.pick(day, i) if data != {}: if data['type'] == "Exam": if data not in self.exams: self.exams.append(data) Popup.__init__(self, title, *args, **kwargs) self.geometry(Constants.MLPOPSIZE)
def _getStudy(self, exam): """ Iterate through database and get ammount of hours of studytime :param exam: Exam information :return: Studytime (Integer) """ # Get the ammount of studytime studytime = 0 # Iterate for day in Time.WEEKDAYS[1:]: for i in range(len(Time.HOURS)): # Pick data data = Database.pick(day, i) # Check if no null data if data != {}: # Check if is study if data['type'] == "Study": # Check if subject matches with exam's subject if data['subject'] == exam['subject']: # Check if studytime is within today and exam date iStudy = Time.WEEKDAYS.index(data['day']) iExam = Time.WEEKDAYS.index(exam['day']) iToday = Time.WEEKDAYS.index(self.today) # If today is before exam if iToday < iExam: if iToday <= iStudy and iStudy < iExam: studytime += 1 # If today is after exam (exam will be next week) if iToday > iExam: if iStudy >= iToday: studytime += 1 if iStudy < iExam: studytime += 1 # Get remaining time before exam in the same day if iStudy == iExam: for t in Time.TIMELIST: # data reaches first if data['start'] == t: studytime += 1 break # exam reaches first if exam['start'] == t: break return studytime