Module za_warudo.gui.app
Expand source code
from functools import partial
from datetime import datetime
from tkinter import *
from tkinter import ttk
import logging as log
from peewee import *
from ttkthemes import ThemedStyle
from gui.connection_page import ConnectionPage
from gui.edit_event_page import EditEventPage
from gui.events_page import EventsPage
from gui.show_event_page import ShowEventPage
from gui.ticketing_page import TicketingPage
from models.category import Category
from models.event import Event
from models.events_category import EventsCategory
from models.projection_room import ProjectionRoom
from models.team import Team
from models.user import User
db = SqliteDatabase("db/app.db")
class App(Tk):
'''
The controller of the application
Stores all events handler
'''
def __init__(self, *args, **kwargs):
Tk.__init__(self, *args, **kwargs)
container = ttk.Frame(self)
db.connect()
self.protocol('WM_DELETE_WINDOW', self.app_will_quit)
# We use the 'breeze' theme because it's the most beautiful
# theme along with 'arc'
# TODO us OS native ui; macOS : aqua
style = ThemedStyle(self)
style.set_theme("breeze")
self.geometry("1200x550")
self.minsize(300, 300)
self.title("Za Warudo")
# We want the current user logged in to be available from
# everywhere, like in rails
self.user = None
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
# Styles
s = ttk.Style()
s.configure("Red.TLabel", foreground="red")
s.configure("Treeview", rowheight=30)
# The breeze theme is missing something: there is
# no highlight chen the user clicks on an item
# of the Treeview. These lines add little dots
# around the item to prevent that
# TODO see README
s.layout("Treeview.Item",
[('Treeitem.padding', {'sticky': 'nswe', 'children':
[('Treeitem.indicator', {'side': 'left', 'sticky': ''}),
('Treeitem.image', {'side': 'left', 'sticky': ''}),
('Treeitem.focus', {'side': 'left', 'sticky': '', 'children': [
('Treeitem.text', {'side': 'left', 'sticky': ''}),
]})
],
})]
)
# All frames of the application
# TODO make it dynamic
self.frames = {}
for P in (ConnectionPage, EventsPage, EditEventPage, TicketingPage, ShowEventPage):
page_name = P.__name__
frame = P(parent=container, controller=self)
self.frames[page_name] = frame
# put all of the pages in the same location;
# the one on the top of the stacking order
# will be the one that is visible.
frame.grid(row=0, column=0, sticky="nsew", padx=15, pady=15)
# frame.grid_propagate(0)
self.show_frame("ConnectionPage")
self.set_menu(is_connected=False)
def new_event(self):
log.info('New event')
self.frames['EditEventPage'].set_new_mode()
self.show_frame('EditEventPage')
def set_menu(self, is_connected: bool):
'''
Show a menu on top of the window
'''
menubar = Menu(self)
# 2 menus
pmenu = Menu(menubar, tearoff=0)
help_menu = Menu(menubar, tearoff=0)
if is_connected:
pmenu.add_command(label="Timetable")
pmenu.add_command(label="New vacation")
pmenu.add_command(label="Log out", command=partial(self.show_frame, "ConnectionPage"))
pmenu.add_separator()
pmenu.add_command(label="Exit", command=self.destroy)
help_menu.add_command(label="About")
# We add all the menus
menubar.add_cascade(label="Za Warudo", menu=pmenu)
menubar.add_cascade(label="Help", menu=help_menu)
self.config(menu=menubar)
def get_events(self, date_str: str):
'''
Return all events from the database, according to the date
given in argument (format : "%Y-%m-%d")
TODO pass the format in argument for flexibility
'''
log.info(date_str)
date = datetime.strptime(date_str, "%Y-%m-%d").date()
return Event.select().where((Event.begin.year == date.year)
& (Event.begin.month == date.month)
& (Event.begin.day == date.day)).order_by(Event.begin)
def get_categories(self):
'''
Return all categories
'''
return Category.select()
def get_events_categories(self, event_id: int=None):
if event_id == None:
return [{'title':c.title, 'price':c.price, 'checked':'unchecked'} for c in Category.select()]
else:
ec = []
for c in Category.select():
checked = 'unchecked'
if EventsCategory.select().where((EventsCategory.category == c.id) & (EventsCategory.event == event_id)):
checked = 'checked'
ec.append({'title':c.title, 'price':c.price, 'checked':checked})
return ec
def get_projection_rooms(self):
'''
Return all projection rooms
'''
return ProjectionRoom.select()
def get_events_per_user(self, event_id: int=None):
if event_id == None:
return [{'user':user.name, 'events':Team.select().where(Team.member == user).count(), 'checked':'unchecked'} for user in User.select()]
else:
epu = []
for u in User.select():
checked = 'unchecked'
if Team.select().where((Team.member == u) & (Team.event == event_id)):
checked = 'checked'
epu.append({'user':u.name, 'events':Team.select().where(Team.member == u).count(), 'checked':checked})
return epu
def get_users(self):
'''
Return all users
'''
return User.select()
def update_events_page(self):
'''
Update the events displayed in the events page
'''
self.frames["EventsPage"].display_events()
def show_frame(self, page_name: str):
'''Show a frame for the given page name'''
log.info('Go to frame %s' % (page_name))
frame = self.frames[page_name]
frame.tkraise()
# There are some menu items/options that are only visible
# to logged in users
if page_name == "ConnectionPage":
self.set_menu(False)
else:
self.set_menu(True)
def check_credentials(self, login: str, password: str) -> str:
'''
Event raised when the user click on the login button
on the connection page
'''
# We search in the database the user with the corresponding login
u = User.select().where(User.login == login).first()
# We check if the login is right and then the password
if u == None:
return 'Authentification failed : no user found'
else:
if password == u.password:
self.current_user = u
log.info("Authentification successfull")
self.show_frame("EventsPage")
return ''
else:
return 'Authentification failed : password incorrect'
def create_event(self, event: Event) -> int:
'''
Create a event with a dict given in argument
'''
event['projection_room'] = ProjectionRoom.get(ProjectionRoom.location == event['projection_room']).id
event['begin'] = datetime.strptime(event['begin'], "%Y-%m-%d %H:%M")
event['responsible'] = self.current_user.id
event_created = Event.create(**event)
return event_created.id
def update_event(self, event: dict, event_id: int) -> int:
event['projection_room'] = ProjectionRoom.get(ProjectionRoom.location == event['projection_room']).id
event['begin'] = datetime.strptime(event['begin'], "%Y-%m-%d %H:%M")
event['responsible'] = self.current_user.id
return Event.update(**event).where(Event.id == event_id).execute()
def update(self, event_id: int, event: dict) -> int:
return Event.update(**event).where(Event.id == event_id).execute()
def get_event_by_id(self, event_id: int) -> int:
return Event.get(Event.id == event_id)
def update_team(self, member_names: list, event_id: int):
log.info('Updating team for the event %d' % (event_id))
Team.delete().where(Team.event == event_id).execute()
self.create_team(member_names, event_id)
def update_events_categories(self, cat_titles: list, event_id: int):
log.info('Updating events categories for event %d' % (event_id))
EventsCategory.delete().where(EventsCategory.event == event_id).execute()
self.create_events_categories(cat_titles, event_id)
def create_team(self, member_names: list, event_id: int):
'''
Associates a user with an event : (user, event)
'''
team = [{'member':User.get(User.name == name).id, 'event':event_id} for name in member_names]
print(team)
Team.insert_many(team).execute()
def create_events_categories(self, cat_titles: list, event_id: int):
'''
Associates a category with an event
'''
cats = [{'category':Category.get(Category.title == title).id, 'event':event_id} for title in cat_titles]
EventsCategory.insert_many(cats).execute()
def delete_event(self, event_name: str) -> int:
return Event.delete().where(Event.name == event_name).execute()
def edit_event(self, name: str):
event_to_edit = Event.get(Event.name == name)
self.frames['EditEventPage'].set_edit_mode()
self.frames['EditEventPage'].set_event(event_to_edit)
self.frames['EditEventPage'].set_projection_room(ProjectionRoom.get(event_to_edit.projection_room))
self.frames['EditEventPage'].set_inputs()
self.show_frame('EditEventPage')
def get_location(self, projection_room_id: int) -> str:
return ProjectionRoom.get(ProjectionRoom.id == projection_room_id).location
def get_total_seats_for_event(self, projection_room_id: int) -> int:
return ProjectionRoom.get(ProjectionRoom.id == projection_room_id).total_seats
def get_seats_left(self, event_id):
event = Event.get(Event.id == event_id)
return self.get_total_seats_for_event(event.projection_room) - event.sold_seats - event.booked_seats
def go_to_show_event_page(self, event_name: str):
event = Event.get(Event.name == event_name)
self.frames['ShowEventPage'].set_event(event)
self.frames['ShowEventPage'].set_projection_room(event.projection_room)
self.frames['ShowEventPage'].set_categories(event.events_categories)
self.frames['ShowEventPage'].set_responsible(event.responsible)
self.frames['ShowEventPage'].set_members(self.get_events_members(event))
self.frames['ShowEventPage'].set_members(event.teams)
self.frames['ShowEventPage'].display_events_information()
self.show_frame('ShowEventPage')
def get_events_members(self, event):
return User.select().join(Team).where((User.id == Team.member) & (Team.event == event))
def go_to_ticket_page(self, event_name: str):
event = Event.get(Event.name == event_name)
self.frames['TicketingPage'].set_event(event)
self.frames['TicketingPage'].set_projection_room(event.projection_room)
self.frames['TicketingPage'].set_inputs()
self.show_frame('TicketingPage')
def get_categories_for_event(self, event) -> list:
print(event.events_categories.dicts())
return list(set([ec.category for ec in event.events_categories]))
def app_will_quit(self):
log.info('Application will terminate')
log.info('Closing the database')
db.close()
self.destroy()
Classes
class App (*args, **kwargs)
-
The controller of the application Stores all events handler
Return a new Toplevel widget on screen SCREENNAME. A new Tcl interpreter will be created. BASENAME will be used for the identification of the profile file (see readprofile). It is constructed from sys.argv[0] without extensions if None is given. CLASSNAME is the name of the widget class.
Expand source code
class App(Tk): ''' The controller of the application Stores all events handler ''' def __init__(self, *args, **kwargs): Tk.__init__(self, *args, **kwargs) container = ttk.Frame(self) db.connect() self.protocol('WM_DELETE_WINDOW', self.app_will_quit) # We use the 'breeze' theme because it's the most beautiful # theme along with 'arc' # TODO us OS native ui; macOS : aqua style = ThemedStyle(self) style.set_theme("breeze") self.geometry("1200x550") self.minsize(300, 300) self.title("Za Warudo") # We want the current user logged in to be available from # everywhere, like in rails self.user = None container.pack(side="top", fill="both", expand=True) container.grid_rowconfigure(0, weight=1) container.grid_columnconfigure(0, weight=1) # Styles s = ttk.Style() s.configure("Red.TLabel", foreground="red") s.configure("Treeview", rowheight=30) # The breeze theme is missing something: there is # no highlight chen the user clicks on an item # of the Treeview. These lines add little dots # around the item to prevent that # TODO see README s.layout("Treeview.Item", [('Treeitem.padding', {'sticky': 'nswe', 'children': [('Treeitem.indicator', {'side': 'left', 'sticky': ''}), ('Treeitem.image', {'side': 'left', 'sticky': ''}), ('Treeitem.focus', {'side': 'left', 'sticky': '', 'children': [ ('Treeitem.text', {'side': 'left', 'sticky': ''}), ]}) ], })] ) # All frames of the application # TODO make it dynamic self.frames = {} for P in (ConnectionPage, EventsPage, EditEventPage, TicketingPage, ShowEventPage): page_name = P.__name__ frame = P(parent=container, controller=self) self.frames[page_name] = frame # put all of the pages in the same location; # the one on the top of the stacking order # will be the one that is visible. frame.grid(row=0, column=0, sticky="nsew", padx=15, pady=15) # frame.grid_propagate(0) self.show_frame("ConnectionPage") self.set_menu(is_connected=False) def new_event(self): log.info('New event') self.frames['EditEventPage'].set_new_mode() self.show_frame('EditEventPage') def set_menu(self, is_connected: bool): ''' Show a menu on top of the window ''' menubar = Menu(self) # 2 menus pmenu = Menu(menubar, tearoff=0) help_menu = Menu(menubar, tearoff=0) if is_connected: pmenu.add_command(label="Timetable") pmenu.add_command(label="New vacation") pmenu.add_command(label="Log out", command=partial(self.show_frame, "ConnectionPage")) pmenu.add_separator() pmenu.add_command(label="Exit", command=self.destroy) help_menu.add_command(label="About") # We add all the menus menubar.add_cascade(label="Za Warudo", menu=pmenu) menubar.add_cascade(label="Help", menu=help_menu) self.config(menu=menubar) def get_events(self, date_str: str): ''' Return all events from the database, according to the date given in argument (format : "%Y-%m-%d") TODO pass the format in argument for flexibility ''' log.info(date_str) date = datetime.strptime(date_str, "%Y-%m-%d").date() return Event.select().where((Event.begin.year == date.year) & (Event.begin.month == date.month) & (Event.begin.day == date.day)).order_by(Event.begin) def get_categories(self): ''' Return all categories ''' return Category.select() def get_events_categories(self, event_id: int=None): if event_id == None: return [{'title':c.title, 'price':c.price, 'checked':'unchecked'} for c in Category.select()] else: ec = [] for c in Category.select(): checked = 'unchecked' if EventsCategory.select().where((EventsCategory.category == c.id) & (EventsCategory.event == event_id)): checked = 'checked' ec.append({'title':c.title, 'price':c.price, 'checked':checked}) return ec def get_projection_rooms(self): ''' Return all projection rooms ''' return ProjectionRoom.select() def get_events_per_user(self, event_id: int=None): if event_id == None: return [{'user':user.name, 'events':Team.select().where(Team.member == user).count(), 'checked':'unchecked'} for user in User.select()] else: epu = [] for u in User.select(): checked = 'unchecked' if Team.select().where((Team.member == u) & (Team.event == event_id)): checked = 'checked' epu.append({'user':u.name, 'events':Team.select().where(Team.member == u).count(), 'checked':checked}) return epu def get_users(self): ''' Return all users ''' return User.select() def update_events_page(self): ''' Update the events displayed in the events page ''' self.frames["EventsPage"].display_events() def show_frame(self, page_name: str): '''Show a frame for the given page name''' log.info('Go to frame %s' % (page_name)) frame = self.frames[page_name] frame.tkraise() # There are some menu items/options that are only visible # to logged in users if page_name == "ConnectionPage": self.set_menu(False) else: self.set_menu(True) def check_credentials(self, login: str, password: str) -> str: ''' Event raised when the user click on the login button on the connection page ''' # We search in the database the user with the corresponding login u = User.select().where(User.login == login).first() # We check if the login is right and then the password if u == None: return 'Authentification failed : no user found' else: if password == u.password: self.current_user = u log.info("Authentification successfull") self.show_frame("EventsPage") return '' else: return 'Authentification failed : password incorrect' def create_event(self, event: Event) -> int: ''' Create a event with a dict given in argument ''' event['projection_room'] = ProjectionRoom.get(ProjectionRoom.location == event['projection_room']).id event['begin'] = datetime.strptime(event['begin'], "%Y-%m-%d %H:%M") event['responsible'] = self.current_user.id event_created = Event.create(**event) return event_created.id def update_event(self, event: dict, event_id: int) -> int: event['projection_room'] = ProjectionRoom.get(ProjectionRoom.location == event['projection_room']).id event['begin'] = datetime.strptime(event['begin'], "%Y-%m-%d %H:%M") event['responsible'] = self.current_user.id return Event.update(**event).where(Event.id == event_id).execute() def update(self, event_id: int, event: dict) -> int: return Event.update(**event).where(Event.id == event_id).execute() def get_event_by_id(self, event_id: int) -> int: return Event.get(Event.id == event_id) def update_team(self, member_names: list, event_id: int): log.info('Updating team for the event %d' % (event_id)) Team.delete().where(Team.event == event_id).execute() self.create_team(member_names, event_id) def update_events_categories(self, cat_titles: list, event_id: int): log.info('Updating events categories for event %d' % (event_id)) EventsCategory.delete().where(EventsCategory.event == event_id).execute() self.create_events_categories(cat_titles, event_id) def create_team(self, member_names: list, event_id: int): ''' Associates a user with an event : (user, event) ''' team = [{'member':User.get(User.name == name).id, 'event':event_id} for name in member_names] print(team) Team.insert_many(team).execute() def create_events_categories(self, cat_titles: list, event_id: int): ''' Associates a category with an event ''' cats = [{'category':Category.get(Category.title == title).id, 'event':event_id} for title in cat_titles] EventsCategory.insert_many(cats).execute() def delete_event(self, event_name: str) -> int: return Event.delete().where(Event.name == event_name).execute() def edit_event(self, name: str): event_to_edit = Event.get(Event.name == name) self.frames['EditEventPage'].set_edit_mode() self.frames['EditEventPage'].set_event(event_to_edit) self.frames['EditEventPage'].set_projection_room(ProjectionRoom.get(event_to_edit.projection_room)) self.frames['EditEventPage'].set_inputs() self.show_frame('EditEventPage') def get_location(self, projection_room_id: int) -> str: return ProjectionRoom.get(ProjectionRoom.id == projection_room_id).location def get_total_seats_for_event(self, projection_room_id: int) -> int: return ProjectionRoom.get(ProjectionRoom.id == projection_room_id).total_seats def get_seats_left(self, event_id): event = Event.get(Event.id == event_id) return self.get_total_seats_for_event(event.projection_room) - event.sold_seats - event.booked_seats def go_to_show_event_page(self, event_name: str): event = Event.get(Event.name == event_name) self.frames['ShowEventPage'].set_event(event) self.frames['ShowEventPage'].set_projection_room(event.projection_room) self.frames['ShowEventPage'].set_categories(event.events_categories) self.frames['ShowEventPage'].set_responsible(event.responsible) self.frames['ShowEventPage'].set_members(self.get_events_members(event)) self.frames['ShowEventPage'].set_members(event.teams) self.frames['ShowEventPage'].display_events_information() self.show_frame('ShowEventPage') def get_events_members(self, event): return User.select().join(Team).where((User.id == Team.member) & (Team.event == event)) def go_to_ticket_page(self, event_name: str): event = Event.get(Event.name == event_name) self.frames['TicketingPage'].set_event(event) self.frames['TicketingPage'].set_projection_room(event.projection_room) self.frames['TicketingPage'].set_inputs() self.show_frame('TicketingPage') def get_categories_for_event(self, event) -> list: print(event.events_categories.dicts()) return list(set([ec.category for ec in event.events_categories])) def app_will_quit(self): log.info('Application will terminate') log.info('Closing the database') db.close() self.destroy()
Ancestors
- tkinter.Tk
- tkinter.Misc
- tkinter.Wm
Methods
def app_will_quit(self)
-
Expand source code
def app_will_quit(self): log.info('Application will terminate') log.info('Closing the database') db.close() self.destroy()
def check_credentials(self, login, password)
-
Event raised when the user click on the login button on the connection page
Expand source code
def check_credentials(self, login: str, password: str) -> str: ''' Event raised when the user click on the login button on the connection page ''' # We search in the database the user with the corresponding login u = User.select().where(User.login == login).first() # We check if the login is right and then the password if u == None: return 'Authentification failed : no user found' else: if password == u.password: self.current_user = u log.info("Authentification successfull") self.show_frame("EventsPage") return '' else: return 'Authentification failed : password incorrect'
def create_event(self, event)
-
Create a event with a dict given in argument
Expand source code
def create_event(self, event: Event) -> int: ''' Create a event with a dict given in argument ''' event['projection_room'] = ProjectionRoom.get(ProjectionRoom.location == event['projection_room']).id event['begin'] = datetime.strptime(event['begin'], "%Y-%m-%d %H:%M") event['responsible'] = self.current_user.id event_created = Event.create(**event) return event_created.id
def create_events_categories(self, cat_titles, event_id)
-
Associates a category with an event
Expand source code
def create_events_categories(self, cat_titles: list, event_id: int): ''' Associates a category with an event ''' cats = [{'category':Category.get(Category.title == title).id, 'event':event_id} for title in cat_titles] EventsCategory.insert_many(cats).execute()
def create_team(self, member_names, event_id)
-
Associates a user with an event : (user, event)
Expand source code
def create_team(self, member_names: list, event_id: int): ''' Associates a user with an event : (user, event) ''' team = [{'member':User.get(User.name == name).id, 'event':event_id} for name in member_names] print(team) Team.insert_many(team).execute()
def delete_event(self, event_name)
-
Expand source code
def delete_event(self, event_name: str) -> int: return Event.delete().where(Event.name == event_name).execute()
def edit_event(self, name)
-
Expand source code
def edit_event(self, name: str): event_to_edit = Event.get(Event.name == name) self.frames['EditEventPage'].set_edit_mode() self.frames['EditEventPage'].set_event(event_to_edit) self.frames['EditEventPage'].set_projection_room(ProjectionRoom.get(event_to_edit.projection_room)) self.frames['EditEventPage'].set_inputs() self.show_frame('EditEventPage')
def get_categories(self)
-
Return all categories
Expand source code
def get_categories(self): ''' Return all categories ''' return Category.select()
def get_categories_for_event(self, event)
-
Expand source code
def get_categories_for_event(self, event) -> list: print(event.events_categories.dicts()) return list(set([ec.category for ec in event.events_categories]))
def get_event_by_id(self, event_id)
-
Expand source code
def get_event_by_id(self, event_id: int) -> int: return Event.get(Event.id == event_id)
def get_events(self, date_str)
-
Return all events from the database, according to the date given in argument (format : "%Y-%m-%d") TODO pass the format in argument for flexibility
Expand source code
def get_events(self, date_str: str): ''' Return all events from the database, according to the date given in argument (format : "%Y-%m-%d") TODO pass the format in argument for flexibility ''' log.info(date_str) date = datetime.strptime(date_str, "%Y-%m-%d").date() return Event.select().where((Event.begin.year == date.year) & (Event.begin.month == date.month) & (Event.begin.day == date.day)).order_by(Event.begin)
def get_events_categories(self, event_id=None)
-
Expand source code
def get_events_categories(self, event_id: int=None): if event_id == None: return [{'title':c.title, 'price':c.price, 'checked':'unchecked'} for c in Category.select()] else: ec = [] for c in Category.select(): checked = 'unchecked' if EventsCategory.select().where((EventsCategory.category == c.id) & (EventsCategory.event == event_id)): checked = 'checked' ec.append({'title':c.title, 'price':c.price, 'checked':checked}) return ec
def get_events_members(self, event)
-
Expand source code
def get_events_members(self, event): return User.select().join(Team).where((User.id == Team.member) & (Team.event == event))
def get_events_per_user(self, event_id=None)
-
Expand source code
def get_events_per_user(self, event_id: int=None): if event_id == None: return [{'user':user.name, 'events':Team.select().where(Team.member == user).count(), 'checked':'unchecked'} for user in User.select()] else: epu = [] for u in User.select(): checked = 'unchecked' if Team.select().where((Team.member == u) & (Team.event == event_id)): checked = 'checked' epu.append({'user':u.name, 'events':Team.select().where(Team.member == u).count(), 'checked':checked}) return epu
def get_location(self, projection_room_id)
-
Expand source code
def get_location(self, projection_room_id: int) -> str: return ProjectionRoom.get(ProjectionRoom.id == projection_room_id).location
def get_projection_rooms(self)
-
Return all projection rooms
Expand source code
def get_projection_rooms(self): ''' Return all projection rooms ''' return ProjectionRoom.select()
def get_seats_left(self, event_id)
-
Expand source code
def get_seats_left(self, event_id): event = Event.get(Event.id == event_id) return self.get_total_seats_for_event(event.projection_room) - event.sold_seats - event.booked_seats
def get_total_seats_for_event(self, projection_room_id)
-
Expand source code
def get_total_seats_for_event(self, projection_room_id: int) -> int: return ProjectionRoom.get(ProjectionRoom.id == projection_room_id).total_seats
def get_users(self)
-
Return all users
Expand source code
def get_users(self): ''' Return all users ''' return User.select()
def go_to_show_event_page(self, event_name)
-
Expand source code
def go_to_show_event_page(self, event_name: str): event = Event.get(Event.name == event_name) self.frames['ShowEventPage'].set_event(event) self.frames['ShowEventPage'].set_projection_room(event.projection_room) self.frames['ShowEventPage'].set_categories(event.events_categories) self.frames['ShowEventPage'].set_responsible(event.responsible) self.frames['ShowEventPage'].set_members(self.get_events_members(event)) self.frames['ShowEventPage'].set_members(event.teams) self.frames['ShowEventPage'].display_events_information() self.show_frame('ShowEventPage')
def go_to_ticket_page(self, event_name)
-
Expand source code
def go_to_ticket_page(self, event_name: str): event = Event.get(Event.name == event_name) self.frames['TicketingPage'].set_event(event) self.frames['TicketingPage'].set_projection_room(event.projection_room) self.frames['TicketingPage'].set_inputs() self.show_frame('TicketingPage')
def new_event(self)
-
Expand source code
def new_event(self): log.info('New event') self.frames['EditEventPage'].set_new_mode() self.show_frame('EditEventPage')
-
Show a menu on top of the window
Expand source code
def set_menu(self, is_connected: bool): ''' Show a menu on top of the window ''' menubar = Menu(self) # 2 menus pmenu = Menu(menubar, tearoff=0) help_menu = Menu(menubar, tearoff=0) if is_connected: pmenu.add_command(label="Timetable") pmenu.add_command(label="New vacation") pmenu.add_command(label="Log out", command=partial(self.show_frame, "ConnectionPage")) pmenu.add_separator() pmenu.add_command(label="Exit", command=self.destroy) help_menu.add_command(label="About") # We add all the menus menubar.add_cascade(label="Za Warudo", menu=pmenu) menubar.add_cascade(label="Help", menu=help_menu) self.config(menu=menubar)
def show_frame(self, page_name)
-
Show a frame for the given page name
Expand source code
def show_frame(self, page_name: str): '''Show a frame for the given page name''' log.info('Go to frame %s' % (page_name)) frame = self.frames[page_name] frame.tkraise() # There are some menu items/options that are only visible # to logged in users if page_name == "ConnectionPage": self.set_menu(False) else: self.set_menu(True)
def update(self, event_id, event)
-
Enter event loop until all pending events have been processed by Tcl.
Expand source code
def update(self, event_id: int, event: dict) -> int: return Event.update(**event).where(Event.id == event_id).execute()
def update_event(self, event, event_id)
-
Expand source code
def update_event(self, event: dict, event_id: int) -> int: event['projection_room'] = ProjectionRoom.get(ProjectionRoom.location == event['projection_room']).id event['begin'] = datetime.strptime(event['begin'], "%Y-%m-%d %H:%M") event['responsible'] = self.current_user.id return Event.update(**event).where(Event.id == event_id).execute()
def update_events_categories(self, cat_titles, event_id)
-
Expand source code
def update_events_categories(self, cat_titles: list, event_id: int): log.info('Updating events categories for event %d' % (event_id)) EventsCategory.delete().where(EventsCategory.event == event_id).execute() self.create_events_categories(cat_titles, event_id)
def update_events_page(self)
-
Update the events displayed in the events page
Expand source code
def update_events_page(self): ''' Update the events displayed in the events page ''' self.frames["EventsPage"].display_events()
def update_team(self, member_names, event_id)
-
Expand source code
def update_team(self, member_names: list, event_id: int): log.info('Updating team for the event %d' % (event_id)) Team.delete().where(Team.event == event_id).execute() self.create_team(member_names, event_id)