revenues.confirm_revenue
1from datetime import datetime 2from dictionary.sql import not_received_revenue_query 3from dictionary.vars import to_remove_list, today 4from functions.query_executor import QueryExecutor 5from functions.variable import Variable 6from functions.login import Login 7from screens.reports.receipts import Receipts 8from time import sleep 9import pandas as pd 10import streamlit as st 11 12 13class ConfirmRevenue: 14 """ 15 Classe que representa a confirmação do recebimento de receitas. 16 """ 17 18 def get_not_received_revenue_id(self, description: str, value: float, date: str, time: str, category: str, account: str): 19 """ 20 Realiza a consulta dos id's das receitas não recebidas. 21 22 Parameters 23 ---------- 24 description : str 25 A descrição da receita. 26 value : float 27 O valor da receita. 28 date : str 29 A data da receita. 30 time : str 31 O horário da receita. 32 category : str 33 A categoria da receita. 34 account : str 35 A conta da receita. 36 37 Returns 38 ------- 39 id : int 40 O id da receita não recebida. 41 """ 42 43 get_id_query = """SELECT id_receita FROM receitas WHERE descricao = "{}" AND valor = {} AND data = "{}" AND horario = "{}" AND categoria = "{}" AND conta = "{}";""".format(description, value, date, time, category, account) 44 id = QueryExecutor().simple_consult_brute_query(get_id_query) 45 id = QueryExecutor().treat_simple_result(id, to_remove_list) 46 id = int(id) 47 48 return id 49 50 def update_not_received_revenues(self, id: int, new_date: str): 51 """ 52 Atualiza a receita não recebida para que conste como recebida. 53 54 Parameters 55 ---------- 56 id : int 57 O id da receita. 58 new_date : str 59 A nova data da receita. 60 """ 61 62 update_not_received_query = """UPDATE receitas SET data = "{}", recebido = "S" WHERE id_receita = {};""".format( 63 new_date, id) 64 QueryExecutor().update_table_unique_register( 65 update_not_received_query, "Receita atualizada com sucesso!", "Erro ao atualizar receita:") 66 67 def main_menu(self): 68 """ 69 Exibe as receitas não recebidas. 70 """ 71 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 72 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 73 74 col4, col5, col6 = st.columns(3) 75 76 revenue_values = QueryExecutor().complex_compund_query(query=not_received_revenue_query, list_quantity=7, params=(user_name, user_document)) 77 78 if len(revenue_values[0]) >= 1: 79 80 with col4: 81 st.subheader(body=":computer: Valores") 82 83 with st.expander(label="Dados", expanded=True): 84 85 revenue_id, description, value, date, time, category, account = (revenue_values) 86 87 time_list = [] 88 89 for i in range(0, len(time)): 90 aux_time = QueryExecutor().treat_simple_result(time[i], to_remove_list) 91 time_list.append(aux_time) 92 93 loan_data_df = pd.DataFrame({"ID": revenue_id, "Descrição": description, "Valor": value, 94 "Data": date, "Horário": time_list, "Categoria": category, "Conta": account}) 95 loan_data_df["Valor"] = loan_data_df["Valor"].apply( 96 lambda x: f"R$ {x:.2f}".replace(".", ",")) 97 loan_data_df["Data"] = pd.to_datetime( 98 loan_data_df["Data"]).dt.strftime("%d/%m/%Y") 99 100 st.dataframe(loan_data_df, hide_index=True, 101 use_container_width=True) 102 103 description_list = [] 104 105 for i in range(0, len(description)): 106 107 index_description = {} 108 str_value = str(value[i]) 109 str_date = str(date[i]) 110 str_date = datetime.strptime(str_date, "%Y-%m-%d") 111 query_str_date = str_date.strftime("%Y-%m-%d") 112 final_str_account = str(account[i]) 113 114 index_description.update( 115 {"descrição": description[i], "valor": str_value, "data": query_str_date, "horario": time[i], "categoria": category[i], "conta": final_str_account}) 116 117 formatted_data = str(index_description["data"]) 118 formatted_data = datetime.strptime( 119 formatted_data, "%Y-%m-%d") 120 formatted_data = formatted_data.strftime( 121 "%d/%m/%Y") 122 123 formatted_description = str(index_description["descrição"]) + " - " + "R$ {}".format(str(index_description["valor"]).replace( 124 ".", ",")) + " - " + formatted_data + " - " + str(index_description["horario"]) + " - " + str(index_description["categoria"]) + " - " + str(index_description["conta"]) 125 description_list.append(formatted_description) 126 127 selected_revenue = st.selectbox( 128 label="Selecione a receita", options=description_list) 129 130 confirm_selection = st.checkbox( 131 label="Confirmar seleção") 132 133 update_button = st.button( 134 label=":floppy_disk: Receber valor") 135 136 if confirm_selection and update_button: 137 with col5: 138 with st.spinner(text="Aguarde..."): 139 sleep(2.5) 140 141 st.subheader( 142 body=":white_check_mark: Validação de Dados") 143 144 final_description = str( 145 index_description["descrição"]) 146 final_value = float(index_description["valor"]) 147 final_date = str(index_description["data"]) 148 final_category = str( 149 index_description["categoria"]) 150 final_account = str(index_description["conta"]) 151 152 str_final_value = Variable().treat_complex_string( 153 final_value) 154 155 with st.subheader(body=":white_check_mark: Validação de dados"): 156 with st.expander(label="Dados", expanded=True): 157 st.info(body="Descrição: {}".format( 158 final_description)) 159 st.info(body="Valor: :heavy_dollar_sign: {}".format( 160 str_final_value)) 161 st.info(body="Categoria: {}".format( 162 final_category)) 163 st.info(body="Conta: {}".format( 164 final_account)) 165 166 with col6: 167 st.subheader(body=":pencil: Comprovante") 168 with st.spinner(text="Aguarde..."): 169 sleep(2.5) 170 171 final_id = self.get_not_received_revenue_id(description=index_description["descrição"], value=index_description["valor"], date=index_description[ 172 "data"], time=index_description["horario"], category=index_description["categoria"], account=index_description["conta"]) 173 174 self.update_not_received_revenues( 175 id=final_id, new_date=today) 176 177 Receipts().generate_receipt(table="receitas", id=final_id, description=final_description, 178 value=final_value, date=final_date, category=final_category, account=final_account) 179 180 log_query = '''INSERT INTO financas.logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES ( %s, %s, %s);''' 181 log_values = (logged_user, "Registro", "Registrou uma receita no valor de R$ {} associada a conta {}.".format( 182 str_final_value, account)) 183 QueryExecutor().insert_query( 184 log_query, log_values, "Log gravado.", "Erro ao gravar log:") 185 186 elif update_button and confirm_selection == False: 187 with col5: 188 st.subheader(body="") 189 with st.spinner(text="Aguarde..."): 190 sleep(2.5) 191 with st.expander(label="Aviso", expanded=True): 192 st.warning( 193 body="Confirme os dados antes de prosseguir.") 194 195 elif len(revenue_values[0]) == 0: 196 197 with col5: 198 st.info("Você não possui valores a receber.")
class
ConfirmRevenue:
14class ConfirmRevenue: 15 """ 16 Classe que representa a confirmação do recebimento de receitas. 17 """ 18 19 def get_not_received_revenue_id(self, description: str, value: float, date: str, time: str, category: str, account: str): 20 """ 21 Realiza a consulta dos id's das receitas não recebidas. 22 23 Parameters 24 ---------- 25 description : str 26 A descrição da receita. 27 value : float 28 O valor da receita. 29 date : str 30 A data da receita. 31 time : str 32 O horário da receita. 33 category : str 34 A categoria da receita. 35 account : str 36 A conta da receita. 37 38 Returns 39 ------- 40 id : int 41 O id da receita não recebida. 42 """ 43 44 get_id_query = """SELECT id_receita FROM receitas WHERE descricao = "{}" AND valor = {} AND data = "{}" AND horario = "{}" AND categoria = "{}" AND conta = "{}";""".format(description, value, date, time, category, account) 45 id = QueryExecutor().simple_consult_brute_query(get_id_query) 46 id = QueryExecutor().treat_simple_result(id, to_remove_list) 47 id = int(id) 48 49 return id 50 51 def update_not_received_revenues(self, id: int, new_date: str): 52 """ 53 Atualiza a receita não recebida para que conste como recebida. 54 55 Parameters 56 ---------- 57 id : int 58 O id da receita. 59 new_date : str 60 A nova data da receita. 61 """ 62 63 update_not_received_query = """UPDATE receitas SET data = "{}", recebido = "S" WHERE id_receita = {};""".format( 64 new_date, id) 65 QueryExecutor().update_table_unique_register( 66 update_not_received_query, "Receita atualizada com sucesso!", "Erro ao atualizar receita:") 67 68 def main_menu(self): 69 """ 70 Exibe as receitas não recebidas. 71 """ 72 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 73 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 74 75 col4, col5, col6 = st.columns(3) 76 77 revenue_values = QueryExecutor().complex_compund_query(query=not_received_revenue_query, list_quantity=7, params=(user_name, user_document)) 78 79 if len(revenue_values[0]) >= 1: 80 81 with col4: 82 st.subheader(body=":computer: Valores") 83 84 with st.expander(label="Dados", expanded=True): 85 86 revenue_id, description, value, date, time, category, account = (revenue_values) 87 88 time_list = [] 89 90 for i in range(0, len(time)): 91 aux_time = QueryExecutor().treat_simple_result(time[i], to_remove_list) 92 time_list.append(aux_time) 93 94 loan_data_df = pd.DataFrame({"ID": revenue_id, "Descrição": description, "Valor": value, 95 "Data": date, "Horário": time_list, "Categoria": category, "Conta": account}) 96 loan_data_df["Valor"] = loan_data_df["Valor"].apply( 97 lambda x: f"R$ {x:.2f}".replace(".", ",")) 98 loan_data_df["Data"] = pd.to_datetime( 99 loan_data_df["Data"]).dt.strftime("%d/%m/%Y") 100 101 st.dataframe(loan_data_df, hide_index=True, 102 use_container_width=True) 103 104 description_list = [] 105 106 for i in range(0, len(description)): 107 108 index_description = {} 109 str_value = str(value[i]) 110 str_date = str(date[i]) 111 str_date = datetime.strptime(str_date, "%Y-%m-%d") 112 query_str_date = str_date.strftime("%Y-%m-%d") 113 final_str_account = str(account[i]) 114 115 index_description.update( 116 {"descrição": description[i], "valor": str_value, "data": query_str_date, "horario": time[i], "categoria": category[i], "conta": final_str_account}) 117 118 formatted_data = str(index_description["data"]) 119 formatted_data = datetime.strptime( 120 formatted_data, "%Y-%m-%d") 121 formatted_data = formatted_data.strftime( 122 "%d/%m/%Y") 123 124 formatted_description = str(index_description["descrição"]) + " - " + "R$ {}".format(str(index_description["valor"]).replace( 125 ".", ",")) + " - " + formatted_data + " - " + str(index_description["horario"]) + " - " + str(index_description["categoria"]) + " - " + str(index_description["conta"]) 126 description_list.append(formatted_description) 127 128 selected_revenue = st.selectbox( 129 label="Selecione a receita", options=description_list) 130 131 confirm_selection = st.checkbox( 132 label="Confirmar seleção") 133 134 update_button = st.button( 135 label=":floppy_disk: Receber valor") 136 137 if confirm_selection and update_button: 138 with col5: 139 with st.spinner(text="Aguarde..."): 140 sleep(2.5) 141 142 st.subheader( 143 body=":white_check_mark: Validação de Dados") 144 145 final_description = str( 146 index_description["descrição"]) 147 final_value = float(index_description["valor"]) 148 final_date = str(index_description["data"]) 149 final_category = str( 150 index_description["categoria"]) 151 final_account = str(index_description["conta"]) 152 153 str_final_value = Variable().treat_complex_string( 154 final_value) 155 156 with st.subheader(body=":white_check_mark: Validação de dados"): 157 with st.expander(label="Dados", expanded=True): 158 st.info(body="Descrição: {}".format( 159 final_description)) 160 st.info(body="Valor: :heavy_dollar_sign: {}".format( 161 str_final_value)) 162 st.info(body="Categoria: {}".format( 163 final_category)) 164 st.info(body="Conta: {}".format( 165 final_account)) 166 167 with col6: 168 st.subheader(body=":pencil: Comprovante") 169 with st.spinner(text="Aguarde..."): 170 sleep(2.5) 171 172 final_id = self.get_not_received_revenue_id(description=index_description["descrição"], value=index_description["valor"], date=index_description[ 173 "data"], time=index_description["horario"], category=index_description["categoria"], account=index_description["conta"]) 174 175 self.update_not_received_revenues( 176 id=final_id, new_date=today) 177 178 Receipts().generate_receipt(table="receitas", id=final_id, description=final_description, 179 value=final_value, date=final_date, category=final_category, account=final_account) 180 181 log_query = '''INSERT INTO financas.logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES ( %s, %s, %s);''' 182 log_values = (logged_user, "Registro", "Registrou uma receita no valor de R$ {} associada a conta {}.".format( 183 str_final_value, account)) 184 QueryExecutor().insert_query( 185 log_query, log_values, "Log gravado.", "Erro ao gravar log:") 186 187 elif update_button and confirm_selection == False: 188 with col5: 189 st.subheader(body="") 190 with st.spinner(text="Aguarde..."): 191 sleep(2.5) 192 with st.expander(label="Aviso", expanded=True): 193 st.warning( 194 body="Confirme os dados antes de prosseguir.") 195 196 elif len(revenue_values[0]) == 0: 197 198 with col5: 199 st.info("Você não possui valores a receber.")
Classe que representa a confirmação do recebimento de receitas.
def
get_not_received_revenue_id( self, description: str, value: float, date: str, time: str, category: str, account: str):
19 def get_not_received_revenue_id(self, description: str, value: float, date: str, time: str, category: str, account: str): 20 """ 21 Realiza a consulta dos id's das receitas não recebidas. 22 23 Parameters 24 ---------- 25 description : str 26 A descrição da receita. 27 value : float 28 O valor da receita. 29 date : str 30 A data da receita. 31 time : str 32 O horário da receita. 33 category : str 34 A categoria da receita. 35 account : str 36 A conta da receita. 37 38 Returns 39 ------- 40 id : int 41 O id da receita não recebida. 42 """ 43 44 get_id_query = """SELECT id_receita FROM receitas WHERE descricao = "{}" AND valor = {} AND data = "{}" AND horario = "{}" AND categoria = "{}" AND conta = "{}";""".format(description, value, date, time, category, account) 45 id = QueryExecutor().simple_consult_brute_query(get_id_query) 46 id = QueryExecutor().treat_simple_result(id, to_remove_list) 47 id = int(id) 48 49 return id
Realiza a consulta dos id's das receitas não recebidas.
Parameters
- description (str): A descrição da receita.
- value (float): O valor da receita.
- date (str): A data da receita.
- time (str): O horário da receita.
- category (str): A categoria da receita.
- account (str): A conta da receita.
Returns
- id (int): O id da receita não recebida.
def
update_not_received_revenues(self, id: int, new_date: str):
51 def update_not_received_revenues(self, id: int, new_date: str): 52 """ 53 Atualiza a receita não recebida para que conste como recebida. 54 55 Parameters 56 ---------- 57 id : int 58 O id da receita. 59 new_date : str 60 A nova data da receita. 61 """ 62 63 update_not_received_query = """UPDATE receitas SET data = "{}", recebido = "S" WHERE id_receita = {};""".format( 64 new_date, id) 65 QueryExecutor().update_table_unique_register( 66 update_not_received_query, "Receita atualizada com sucesso!", "Erro ao atualizar receita:")
Atualiza a receita não recebida para que conste como recebida.
Parameters
- id (int): O id da receita.
- new_date (str): A nova data da receita.