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.