Пример #1
0
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
Пример #2
0
    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()
Пример #3
0
    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
Пример #4
0
    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
Пример #5
0
    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
Пример #6
0
    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")
Пример #7
0
    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
Пример #8
0
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
Пример #9
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()
Пример #10
0
    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