def tela_escolha_busca(): """ Tela na qual o usuário escolhera qual o método de busca. :return: retorna uma string, sendo a escolha do usuário. """ layout_busca = [[T("Deseja buscar por:", size=(30, 1))], [ Button("Nome", button_color=('white', 'springgreen4'), size=(8, 1)), Button("Item", button_color=('white', 'springgreen4'), size=(8, 1)), Button("Ano", button_color=('white', 'springgreen4'), size=(8, 1)), Button("Mes + Ano", button_color=('white', 'springgreen4'), size=(10, 1)) ], [ Button("Cancelar", button_color=('white', 'firebrick3'), size=(8, 1), pad=(150, 0)) ]] janela_busca = Window( "Buscas", size=(400, 100), text_justification=('center'), icon=( 'C:\\Loans-management\\Icon\\icon-logo.ico')).Layout(layout_busca) botao_busca, valores_busca = janela_busca.Read() janela_busca.Close() return botao_busca
def Login(self): login_active = True layout = [ [T("Xpnsit", **heading_format)], [T("Username:"******"user")], [T("Password:"******"pass", password_char='*')], [Button("Login", bind_return_key=True), Button("Signup")] ] win = Window("Xpnsit", layout=layout) while login_active: # <------------ Event Loop -----------------> # event, values = win.Read() if event is None: print("Exiting event loop") login_active = False self.app_state = False win.close() del win break if event == "Login": success = check_login_info(values["user"], values["pass"]) if success == True: print("Login Successful.") self.user_details = get_user_details(values["user"]) self.user = NewUser(*self.user_details) win.close() self.Interface() login_active = False else: PopupError( "ERROR: Username or password incorrect.\nPlease try again.") if event == "Signup": self.Signup()
def Transactions(self): transaction_layout = [ [T("Transactions", font=("Helvetica", 18))], [TabGroup( [ [Tab("New Transaction", self.Create_Add_Trans_Layout())], [Tab("History", self.History())] ] )] ] return transaction_layout
def Analytics(self): fig, w, h = get_graph_values() analysis_layout = [ [T("Analytics", font=("Helvetica", 18))], [T("Here you can find and generate graphs for your desired timeframe\nand observe trends in your balance.")], [T("Generate for records from "), Input(f"{year}-{month}-1", key="a_start_date", size=(10, 1)), CalendarButton("Start date", target="a_start_date", default_date_m_d_y=( month, 1, year), button_color=("white", "green"), format="%Y-%m-%d"), T("to"), Input(f"{year}-{month}-{day}", key="a_end_date", size=(10, 1)), CalendarButton("End date", target="a_end_date", default_date_m_d_y=( month, day, year), button_color=("white", "red"), format="%Y-%m-%d") ], [T("Type:"), Combo(["All", "Credit", "Debit"], default_value="All", key="a_type", readonly=True)], [Button("Generate", button_color=("white", "orange"))], [Canvas(size=(w, h), key="canvas")] ] return analysis_layout
def Create_Add_Trans_Layout(self): layout = [ [T("New Transaction", font=("Helvetica", 18))], [T("NOTE:", font=("Helvetica", 20)), T( "All fields are required to be filled.")], [T("Particulars:"), Multiline("Enter details of transaction", autoscroll=True, key="Particulars")], [T("Transaction type:"), Combo(["Select", "Credit", "Debit"], "Select", readonly=True, key="new_type")], [T("Amount:"), Input(enable_events=True, key="amount")], [T("Date Of Transaction:"), Input("YYYY-MM-DD or use the button on the right", key="date"), CalendarButton("Select Date", target="date", format="%Y-%m-%d")], [Submit()] ] return layout
def Signup(self): signup_active = True layout = [ [T("Signup for Xpnsit", **heading_format), ], [T("First Name:"), Input(size=(15, 1), key="f_name"), T( " "), T("Last Name:"), Input(size=(15, 1), key="l_name")], [T("Username:"******"user")], [T("Password:"******"pass", password_char="*")], [], [T(' '*40), Submit()] ] signup_win = Window("Xpnsit - Signup", layout=layout) while signup_active: # <------------ Event Loop -----------------> # event, values = signup_win.Read() if event in (None, 'Exit'): signup_active = False login_active = True if event == 'Submit': self.vals = [values["user"], values["pass"], values["mail"], values["f_name"], values["l_name"]] if not username_used(self.vals[0]): create_account(*self.vals) # <------------------- Confirmation of Insertion ------------------> # success = check_login_info(values["user"], values["pass"]) if success == True: print("Signup Successful.") Popup( "Signup Successful!", "Exit this popup to return to the login page" ) signup_win.close() signup_active = False login_active = True else: PopupError("ERROR: Username already in usage", title="Username already taken")
def History(self): history_values, table, no_of_records = get_transactions( self.user.uname) self.slider = sg.Slider( range=(0, no_of_records), default_value=no_of_records, orientation='h', enable_events=True, key='slider' ) layout = [ [T("Transaction History", font=("Helvetica", 18))], [T("All your transactions, in one place. Right click any one to delete or edit it.")], [T('Number of records to be shown:'), self.slider], [T("Show records from "), Input(f"{year}-{month}-1", key="start_date", size=(10, 1)), CalendarButton("Start date", target="start_date", default_date_m_d_y=( month, 1, year), button_color=("white", "green"), format="%Y-%m-%d"), T("to"), Input(f"{year}-{month}-{day}", key="end_date", size=(10, 1)), CalendarButton("End date", target="end_date", default_date_m_d_y=( month, day, year), button_color=("white", "red"), format="%Y-%m-%d") ], [T("Type:"), Combo(["All", "Credit", "Debit"], default_value="All", key="used_type", readonly=True)], [T("Sort by:"), Combo(["Name", "Amount", "Date of Transaction"], default_value="Name", key="sort_by", readonly=True), Combo(["Ascending", "Descending"], default_value="Ascending", key="asc_or_desc", readonly=True)], [table, Button("Refresh", button_color=( "white", "orange"), bind_return_key=True, key="refresh")], ] self.history_active = True return layout
def tela_busca(botao): """ tela na qual será informado o que o usuário deseja pesquisar. :param botao: uma string, que informará qual o método de busca. :return: retorna dado informado pelo usuário, que será usado em uma função de busca. """ if botao == 'Nome': layout_nome = [[T("Qual nome deseja buscar?", size=(30, 1))], [In(size=(30, 1)), Button("Buscar")]] janela_nome = Window("Busca Nome", size=(370, 100), icon=('C:\\Loans-management\\Icon\\icon-logo.ico' )).Layout(layout_nome) buscar, nome = janela_nome.Read() janela_nome.Close() return nome[0] if botao == 'Item': layout_item = [[T("Qual item deseja buscar?", size=(30, 1))], [In(size=(30, 1)), Button("Buscar")]] janela_item = Window("Busca Item", size=(370, 100), icon=('C:\\Loans-management\\Icon\\icon-logo.ico' )).Layout(layout_item) buscar, item = janela_item.Read() janela_item.Close() return item[0] if botao == 'Ano': layout_mes = [[T("Qual ano deseja buscar?", size=(30, 1))], [In(size=(30, 1)), Button("Buscar")]] janela_mes = Window("Busca Ano", size=(370, 100), icon=('C:\\Loans-management\\Icon\\icon-logo.ico' )).Layout(layout_mes) buscar, mes = janela_mes.Read() try: mes = datetime.strptime(mes[0], '%Y').date().year except TypeError and ValueError: janela_mes.Close() return Popup("Erro na Busca", button_color=('white', 'springgreen4')) janela_mes.Close() return mes if botao == 'Mes + Ano': layout_mes_ano = [[T("Qual mes e ano deseja buscar?", size=(30, 1))], [In("Ex: 10/2018", size=(30, 1)), Button("Buscar")]] janela_mes_ano = Window( "Busca Mes", size=(370, 100), icon=('C:\\Loans-management\\Icon\\icon-logo.ico' )).Layout(layout_mes_ano) buscar, mes_ano = janela_mes_ano.Read() try: mes_ano = datetime.strptime(mes_ano[0], '%m/%Y').date() except TypeError and ValueError: janela_mes_ano.Close() return Popup("Erro na Busca", button_color=('white', 'springgreen4')) janela_mes_ano.Close() return mes_ano if botao == 'Cancelar': return 0
def Interface(self): global graph_active layout = [ [T("Xpnsit", **heading_format), T(" "*50), Button("Settings"), Button("Log Out", button_color=("black", "yellow"))], [TabGroup([ [ Tab("Dashboard", self.Dashboard( ), tooltip="See an overview of your account", font=("Arial", 12)), Tab("Transactions", self.Transactions( ), tooltip="View,add and delete transactions", font=("Arial", 12), key="transactions"), Tab("Analytics", self.Analytics( ), tooltip="Get a graphical insight to your spendings.", font=("Arial", 12)) ] ],)] ] self.win = Window("Xpnsit v1.0", layout=layout, size = (590,640),resizable=True) while True: self.event, self.values = self.win.Read() self.figure_agg = self.create_graph() if self.event == "Log Out": logout = PopupYesNo("Are you sure you want to log out?") if logout == 'Yes': sg.popup_quick_message( "Okay, closing. Bye", auto_close_duration=10) self.win.close() # self.app_state = False del self.win break elif self.event is None: self.win.close() self.app_state = False del self.win break if self.event != sg.TIMEOUT_KEY: print(f"Event = {self.event}\nValues = {self.values}\n") if self.event == "Submit": _type = "CR" if self.values["new_type"] in ( "Credit", "Select") else "DR" self.Add_Trans( self.values["Particulars"], _type, self.values["amount"], self.values["date"]) if self.event in ("slider", "refresh"): self.update_table() self.win.refresh() if self.event == "Generate": # self.create_graph() delete_figure_agg(self.figure_agg) self.create_graph() self.win.read() self.win.refresh()
def Dashboard(self): income, expenses = get_income_and_expense(self.user.uname) if (income, expenses) == (None, None): dash_layout = [ [T(f"Welcome {self.user.first_name}")], [T("Looks like you have no transactions!\nGo add one in the Transactions tab.", justification="center")], [T("-"*60, text_color="gray")], ] else: dash_layout = [ [T(f"Welcome {self.user.first_name}")], [T(f"Your expenses for {month_name}-{year} are:"), T(str(expenses), font=("Arial", 20))], [T(f"Your income for {month_name}-{year} is:"), T(str(income), font=("Arial", 20))], [T("-"*80, text_color="gray")], [T("Net Profit/Loss:", font=("Segoe", 18)), T(str(income-expenses), font=("Arial", 24))] ] dash_active = True return dash_layout