expenses.new_expense

  1import streamlit as st
  2from dictionary.sql import last_expense_id_query, user_current_accounts_query, total_account_revenue_query, total_account_expense_query
  3from dictionary.vars import to_remove_list, expense_categories
  4from functions.login import Login
  5from functions.get_actual_time import GetActualTime
  6from functions.query_executor import QueryExecutor
  7from functions.variable import Variable
  8from screens.reports.receipts import Receipts
  9from time import sleep
 10
 11
 12class NewCurrentExpense:
 13    """
 14    Classe que representa uma nova despesa em contas correntes.
 15    """
 16
 17    def main_menu(self):
 18        """
 19        Obtém os dados de uma nova despesa em conta corrente.
 20        """
 21        user_name, user_document = Login().get_user_data(return_option="user_doc_name")
 22        logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password")
 23        user_current_accounts = QueryExecutor().complex_consult_query(query=user_current_accounts_query, params=(user_name, user_document))
 24        user_current_accounts = QueryExecutor().treat_numerous_simple_result(user_current_accounts, to_remove_list)
 25
 26        col1, col2, col3 = st.columns(3)
 27
 28        if len(user_current_accounts) == 0:
 29
 30            with col2:
 31                st.info(body="Você ainda não possui contas cadastradas.")
 32
 33        elif len(user_current_accounts) >= 1 and user_current_accounts[0] != "Selecione uma opção":
 34
 35            with col1:
 36                st.subheader(body=":computer: Entrada de Dados")
 37
 38                with st.expander(label="Dados", expanded=True):
 39
 40                    id = QueryExecutor().simple_consult_brute_query(last_expense_id_query)
 41                    id = QueryExecutor().treat_simple_result(id, to_remove_list)
 42
 43                    options = {
 44                        "Sim": "S",
 45                        "Não": "N"
 46                    }
 47
 48                    id = int(id) + 1
 49                    description = st.text_input(label=":lower_left_ballpoint_pen: Descrição", placeholder="Informe uma descrição", max_chars=25, help="Descrição simples para a despesa.")
 50                    value = st.number_input(
 51                        label=":dollar: Valor", step=0.01, min_value=0.01)
 52                    date = st.date_input(label=":date: Data")
 53                    category = st.selectbox(
 54                        label=":card_index_dividers: Categoria", options=expense_categories)
 55                    account = st.selectbox(
 56                        label=":bank: Conta", options=user_current_accounts)
 57                    payed = st.selectbox(
 58                        label=":outbox_tray: Pago", options=options.keys())
 59
 60                    confirm_values_check_box = st.checkbox(
 61                        label="Confirmar dados")
 62
 63                generate_receipt_button = st.button(
 64                    label=":pencil: Gerar Comprovante", key="generate_receipt_button")
 65
 66            with col3:
 67
 68                if confirm_values_check_box and generate_receipt_button:
 69
 70                    payed = options[payed]
 71
 72                    with col2:
 73                        with st.spinner(text="Aguarde..."):
 74                            sleep(2.5)
 75
 76                        st.subheader(
 77                            body=":white_check_mark: Validação de Dados")
 78
 79                        data_validation_expander = st.expander(
 80                            label="Informações", expanded=True)
 81
 82                        with data_validation_expander:
 83
 84                            str_selected_account_revenues = QueryExecutor().simple_consult_query(query=total_account_revenue_query, params=(account, user_name, user_document))
 85                            str_selected_account_revenues = QueryExecutor().treat_simple_result(str_selected_account_revenues, to_remove_list)
 86                            selected_account_revenues = float(str_selected_account_revenues)
 87
 88                            str_selected_account_expenses = QueryExecutor().simple_consult_query(total_account_expense_query, params=(account, user_name, user_document))
 89                            str_selected_account_expenses = QueryExecutor().treat_simple_result(str_selected_account_expenses, to_remove_list)
 90                            selected_account_expenses = float(str_selected_account_expenses)
 91
 92                            account_available_value = round(selected_account_revenues - selected_account_expenses, 2)
 93                            available_value = Variable().treat_complex_string(account_available_value)
 94
 95                    with data_validation_expander:
 96                        st.info(body="Valor disponível da conta {}: R$ {}".format(
 97                            account, available_value))
 98
 99                    if description != "" and value <= account_available_value and category != "Selecione uma opção":
100                        with data_validation_expander:
101                            st.success(body="Dados Válidos.")
102
103                        actual_horary = GetActualTime().get_actual_time()
104                        expense_query = "INSERT INTO despesas (descricao, valor, data, horario, categoria, conta, proprietario_despesa, documento_proprietario_despesa, pago) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)"
105                        values = (description, value, date, actual_horary, category, account, user_name, user_document, payed)
106                        QueryExecutor().insert_query(expense_query, values, "Despesa registrada com sucesso!", "Erro ao registrar despesa:")
107
108                        str_value = Variable().treat_complex_string(value)
109
110                        log_query = '''INSERT INTO financas.logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES ( %s, %s, %s);'''
111                        log_values = (logged_user, "Registro", "Registrou uma despesa no valor de R$ {} associada a conta {}.".format(str_value, account))
112                        QueryExecutor().insert_query(log_query, log_values, "Log gravado.", "Erro ao gravar log:")
113
114                        st.subheader(
115                            body=":pencil: Comprovante de Despesa")
116
117                        with st.spinner("Aguarde..."):
118                            sleep(2.5)
119
120                        Receipts().generate_receipt('despesas', id, description, value, str(date), category, account)
121
122                    else:
123                        with data_validation_expander:
124                            if description == "":
125                                st.error(body="A descrição está vazia.")
126                            if category == "Selecione uma opção":
127                                st.error(body="Selecione uma categoria.")
128                            if value > account_available_value:
129                                st.error(
130                                    body="O valor da despesa não pode ser maior que o valor disponível em conta.")
class NewCurrentExpense:
 13class NewCurrentExpense:
 14    """
 15    Classe que representa uma nova despesa em contas correntes.
 16    """
 17
 18    def main_menu(self):
 19        """
 20        Obtém os dados de uma nova despesa em conta corrente.
 21        """
 22        user_name, user_document = Login().get_user_data(return_option="user_doc_name")
 23        logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password")
 24        user_current_accounts = QueryExecutor().complex_consult_query(query=user_current_accounts_query, params=(user_name, user_document))
 25        user_current_accounts = QueryExecutor().treat_numerous_simple_result(user_current_accounts, to_remove_list)
 26
 27        col1, col2, col3 = st.columns(3)
 28
 29        if len(user_current_accounts) == 0:
 30
 31            with col2:
 32                st.info(body="Você ainda não possui contas cadastradas.")
 33
 34        elif len(user_current_accounts) >= 1 and user_current_accounts[0] != "Selecione uma opção":
 35
 36            with col1:
 37                st.subheader(body=":computer: Entrada de Dados")
 38
 39                with st.expander(label="Dados", expanded=True):
 40
 41                    id = QueryExecutor().simple_consult_brute_query(last_expense_id_query)
 42                    id = QueryExecutor().treat_simple_result(id, to_remove_list)
 43
 44                    options = {
 45                        "Sim": "S",
 46                        "Não": "N"
 47                    }
 48
 49                    id = int(id) + 1
 50                    description = st.text_input(label=":lower_left_ballpoint_pen: Descrição", placeholder="Informe uma descrição", max_chars=25, help="Descrição simples para a despesa.")
 51                    value = st.number_input(
 52                        label=":dollar: Valor", step=0.01, min_value=0.01)
 53                    date = st.date_input(label=":date: Data")
 54                    category = st.selectbox(
 55                        label=":card_index_dividers: Categoria", options=expense_categories)
 56                    account = st.selectbox(
 57                        label=":bank: Conta", options=user_current_accounts)
 58                    payed = st.selectbox(
 59                        label=":outbox_tray: Pago", options=options.keys())
 60
 61                    confirm_values_check_box = st.checkbox(
 62                        label="Confirmar dados")
 63
 64                generate_receipt_button = st.button(
 65                    label=":pencil: Gerar Comprovante", key="generate_receipt_button")
 66
 67            with col3:
 68
 69                if confirm_values_check_box and generate_receipt_button:
 70
 71                    payed = options[payed]
 72
 73                    with col2:
 74                        with st.spinner(text="Aguarde..."):
 75                            sleep(2.5)
 76
 77                        st.subheader(
 78                            body=":white_check_mark: Validação de Dados")
 79
 80                        data_validation_expander = st.expander(
 81                            label="Informações", expanded=True)
 82
 83                        with data_validation_expander:
 84
 85                            str_selected_account_revenues = QueryExecutor().simple_consult_query(query=total_account_revenue_query, params=(account, user_name, user_document))
 86                            str_selected_account_revenues = QueryExecutor().treat_simple_result(str_selected_account_revenues, to_remove_list)
 87                            selected_account_revenues = float(str_selected_account_revenues)
 88
 89                            str_selected_account_expenses = QueryExecutor().simple_consult_query(total_account_expense_query, params=(account, user_name, user_document))
 90                            str_selected_account_expenses = QueryExecutor().treat_simple_result(str_selected_account_expenses, to_remove_list)
 91                            selected_account_expenses = float(str_selected_account_expenses)
 92
 93                            account_available_value = round(selected_account_revenues - selected_account_expenses, 2)
 94                            available_value = Variable().treat_complex_string(account_available_value)
 95
 96                    with data_validation_expander:
 97                        st.info(body="Valor disponível da conta {}: R$ {}".format(
 98                            account, available_value))
 99
100                    if description != "" and value <= account_available_value and category != "Selecione uma opção":
101                        with data_validation_expander:
102                            st.success(body="Dados Válidos.")
103
104                        actual_horary = GetActualTime().get_actual_time()
105                        expense_query = "INSERT INTO despesas (descricao, valor, data, horario, categoria, conta, proprietario_despesa, documento_proprietario_despesa, pago) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)"
106                        values = (description, value, date, actual_horary, category, account, user_name, user_document, payed)
107                        QueryExecutor().insert_query(expense_query, values, "Despesa registrada com sucesso!", "Erro ao registrar despesa:")
108
109                        str_value = Variable().treat_complex_string(value)
110
111                        log_query = '''INSERT INTO financas.logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES ( %s, %s, %s);'''
112                        log_values = (logged_user, "Registro", "Registrou uma despesa no valor de R$ {} associada a conta {}.".format(str_value, account))
113                        QueryExecutor().insert_query(log_query, log_values, "Log gravado.", "Erro ao gravar log:")
114
115                        st.subheader(
116                            body=":pencil: Comprovante de Despesa")
117
118                        with st.spinner("Aguarde..."):
119                            sleep(2.5)
120
121                        Receipts().generate_receipt('despesas', id, description, value, str(date), category, account)
122
123                    else:
124                        with data_validation_expander:
125                            if description == "":
126                                st.error(body="A descrição está vazia.")
127                            if category == "Selecione uma opção":
128                                st.error(body="Selecione uma categoria.")
129                            if value > account_available_value:
130                                st.error(
131                                    body="O valor da despesa não pode ser maior que o valor disponível em conta.")

Classe que representa uma nova despesa em contas correntes.

def main_menu(self):
 18    def main_menu(self):
 19        """
 20        Obtém os dados de uma nova despesa em conta corrente.
 21        """
 22        user_name, user_document = Login().get_user_data(return_option="user_doc_name")
 23        logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password")
 24        user_current_accounts = QueryExecutor().complex_consult_query(query=user_current_accounts_query, params=(user_name, user_document))
 25        user_current_accounts = QueryExecutor().treat_numerous_simple_result(user_current_accounts, to_remove_list)
 26
 27        col1, col2, col3 = st.columns(3)
 28
 29        if len(user_current_accounts) == 0:
 30
 31            with col2:
 32                st.info(body="Você ainda não possui contas cadastradas.")
 33
 34        elif len(user_current_accounts) >= 1 and user_current_accounts[0] != "Selecione uma opção":
 35
 36            with col1:
 37                st.subheader(body=":computer: Entrada de Dados")
 38
 39                with st.expander(label="Dados", expanded=True):
 40
 41                    id = QueryExecutor().simple_consult_brute_query(last_expense_id_query)
 42                    id = QueryExecutor().treat_simple_result(id, to_remove_list)
 43
 44                    options = {
 45                        "Sim": "S",
 46                        "Não": "N"
 47                    }
 48
 49                    id = int(id) + 1
 50                    description = st.text_input(label=":lower_left_ballpoint_pen: Descrição", placeholder="Informe uma descrição", max_chars=25, help="Descrição simples para a despesa.")
 51                    value = st.number_input(
 52                        label=":dollar: Valor", step=0.01, min_value=0.01)
 53                    date = st.date_input(label=":date: Data")
 54                    category = st.selectbox(
 55                        label=":card_index_dividers: Categoria", options=expense_categories)
 56                    account = st.selectbox(
 57                        label=":bank: Conta", options=user_current_accounts)
 58                    payed = st.selectbox(
 59                        label=":outbox_tray: Pago", options=options.keys())
 60
 61                    confirm_values_check_box = st.checkbox(
 62                        label="Confirmar dados")
 63
 64                generate_receipt_button = st.button(
 65                    label=":pencil: Gerar Comprovante", key="generate_receipt_button")
 66
 67            with col3:
 68
 69                if confirm_values_check_box and generate_receipt_button:
 70
 71                    payed = options[payed]
 72
 73                    with col2:
 74                        with st.spinner(text="Aguarde..."):
 75                            sleep(2.5)
 76
 77                        st.subheader(
 78                            body=":white_check_mark: Validação de Dados")
 79
 80                        data_validation_expander = st.expander(
 81                            label="Informações", expanded=True)
 82
 83                        with data_validation_expander:
 84
 85                            str_selected_account_revenues = QueryExecutor().simple_consult_query(query=total_account_revenue_query, params=(account, user_name, user_document))
 86                            str_selected_account_revenues = QueryExecutor().treat_simple_result(str_selected_account_revenues, to_remove_list)
 87                            selected_account_revenues = float(str_selected_account_revenues)
 88
 89                            str_selected_account_expenses = QueryExecutor().simple_consult_query(total_account_expense_query, params=(account, user_name, user_document))
 90                            str_selected_account_expenses = QueryExecutor().treat_simple_result(str_selected_account_expenses, to_remove_list)
 91                            selected_account_expenses = float(str_selected_account_expenses)
 92
 93                            account_available_value = round(selected_account_revenues - selected_account_expenses, 2)
 94                            available_value = Variable().treat_complex_string(account_available_value)
 95
 96                    with data_validation_expander:
 97                        st.info(body="Valor disponível da conta {}: R$ {}".format(
 98                            account, available_value))
 99
100                    if description != "" and value <= account_available_value and category != "Selecione uma opção":
101                        with data_validation_expander:
102                            st.success(body="Dados Válidos.")
103
104                        actual_horary = GetActualTime().get_actual_time()
105                        expense_query = "INSERT INTO despesas (descricao, valor, data, horario, categoria, conta, proprietario_despesa, documento_proprietario_despesa, pago) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)"
106                        values = (description, value, date, actual_horary, category, account, user_name, user_document, payed)
107                        QueryExecutor().insert_query(expense_query, values, "Despesa registrada com sucesso!", "Erro ao registrar despesa:")
108
109                        str_value = Variable().treat_complex_string(value)
110
111                        log_query = '''INSERT INTO financas.logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES ( %s, %s, %s);'''
112                        log_values = (logged_user, "Registro", "Registrou uma despesa no valor de R$ {} associada a conta {}.".format(str_value, account))
113                        QueryExecutor().insert_query(log_query, log_values, "Log gravado.", "Erro ao gravar log:")
114
115                        st.subheader(
116                            body=":pencil: Comprovante de Despesa")
117
118                        with st.spinner("Aguarde..."):
119                            sleep(2.5)
120
121                        Receipts().generate_receipt('despesas', id, description, value, str(date), category, account)
122
123                    else:
124                        with data_validation_expander:
125                            if description == "":
126                                st.error(body="A descrição está vazia.")
127                            if category == "Selecione uma opção":
128                                st.error(body="Selecione uma categoria.")
129                            if value > account_available_value:
130                                st.error(
131                                    body="O valor da despesa não pode ser maior que o valor disponível em conta.")

Obtém os dados de uma nova despesa em conta corrente.