source.bank_accounts
1from dictionary.sql import check_user_bank_accounts_query, search_bank_accounts_query 2from dictionary.vars import financial_institution_list, to_remove_list, bank_account_field_names 3from functions.query_executor import QueryExecutor 4from functions.login import Login 5from time import sleep 6import streamlit as st 7 8 9class BankAccount: 10 """ 11 Classe que representa as contas bancárias, com as quatro funções básicas de um CRUD. 12 """ 13 def check_if_bank_account_name_already_exists(self, bank_account_name: str): 14 """ 15 Verifica se o nome da conta bancária já foi utilizado anteriormente. 16 17 Returns 18 ------- 19 is_bank_account_name_available : bool 20 Se o nome de conta bancária está disponível ou não. 21 """ 22 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_login_password") 23 24 is_bank_account_name_available: bool 25 26 bank_accounts_with_parameter_name_query = """SELECT COUNT(id_conta) FROM contas_bancarias WHERE nome_conta = %s AND nome_proprietario_conta = %s AND documento_proprietario_conta = %s;""" 27 query_values = (bank_account_name, logged_user_name, logged_user_document) 28 29 bank_accounts_with_parameter_name_quantity = QueryExecutor().simple_consult_query(query=bank_accounts_with_parameter_name_query, params=query_values) 30 bank_accounts_with_parameter_name_quantity = QueryExecutor().treat_simple_result(value_to_treat=bank_accounts_with_parameter_name_quantity, values_to_remove=to_remove_list) 31 bank_accounts_with_parameter_name_quantity = int(bank_accounts_with_parameter_name_quantity) 32 33 if bank_accounts_with_parameter_name_quantity == 0: 34 is_bank_account_name_available = True 35 else: 36 is_bank_account_name_available = False 37 38 return is_bank_account_name_available 39 40 def get_user_accounts_quantity(self): 41 """ 42 Consulta a quantidade de contas registradas pelo usuário. 43 44 Returns 45 ------- 46 user_accounts_quantity : int 47 Quantidade de contas registradas pelo usuário. 48 """ 49 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 50 51 user_accounts_quantity = QueryExecutor().simple_consult_query(check_user_bank_accounts_query, params=(logged_user_name, logged_user_document)) 52 user_accounts_quantity = QueryExecutor().treat_simple_result(user_accounts_quantity, to_remove_list) 53 user_accounts_quantity = int(user_accounts_quantity) 54 55 return user_accounts_quantity 56 57 def get_user_bank_accounts(self): 58 """ 59 Consulta o nome das contas bancárias do usuário. 60 61 Returns 62 ------- 63 bank_accounts : list 64 Lista com os nomes das contas bancárias. 65 """ 66 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 67 68 user_bank_accounts = [] 69 70 bank_accounts = QueryExecutor().complex_consult_query(query=search_bank_accounts_query, params=(logged_user_name, logged_user_document)) 71 bank_accounts = QueryExecutor().treat_numerous_simple_result(bank_accounts, to_remove_list) 72 73 for i in range(0, len(bank_accounts)): 74 user_bank_accounts.append(bank_accounts[i]) 75 76 return bank_accounts 77 78 def create_new_bank_account(self): 79 """ 80 Função para criação de uma nova conta. 81 """ 82 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 83 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 84 85 col1, col2, col3 = st.columns(3) 86 87 with col1: 88 with st.expander(label="Dados da Conta", expanded=True): 89 account_name = st.text_input(label="Nome", max_chars=100, placeholder='Conta',help="Necessário para identificação. A sugestão é informar algo direto e descritivo, como por exemplo 'Conta Corrente BB'.") 90 financial_institution = st.selectbox(label='Instituição', options=financial_institution_list, help='Insituição financeira a qual pertence a conta.') 91 financial_institution_code = st.text_input(label="Código da instituição", max_chars=5, help="Código da insituição financiera no SPB (Sistemas de Pagamentos Brasileiro).") 92 agency = st.text_input(label="Agência", max_chars=10, help="Número da agência.") 93 94 confirm_data = st.checkbox(label="Confirmar dados") 95 96 with col2: 97 with st.expander(label="Dados da Conta", expanded=True): 98 account_number = st.text_input(label="Número da conta", max_chars=15, help="Número de identificação da conta.") 99 account_digit = st.text_input(label="Dígito", max_chars=1, placeholder='0', help='Dígito identificador da conta. Caso não haja, preencha como 0.') 100 account_password = st.text_input(label="Senha da conta", max_chars=30, type='password', help='Senha utilizada para saques e demais operações em terminais físicos.') 101 digital_account_password = st.text_input(label="Senha digital da conta", max_chars=30, type='password', help='Senha digital da conta, utilizada para operações virtuais como Pix.') 102 103 register_new_account = st.button( 104 label=":floppy_disk: Cadastrar conta") 105 106 if confirm_data == True and register_new_account: 107 with col3: 108 with st.spinner(text='Aguarde...'): 109 sleep(2.5) 110 111 is_bank_account_name_available = self.check_if_bank_account_name_already_exists( 112 bank_account_name=account_name) 113 114 if is_bank_account_name_available: 115 with col3: 116 with st.expander(label="Validação de dados", expanded=True): 117 st.success(body="Nome de conta válida.") 118 119 insert_password_query = "INSERT INTO contas_bancarias(nome_conta, instituicao_financeira, codigo_instituicao_financeira, agencia, numero_conta, digito_conta, senha_bancaria_conta, senha_digital_conta, nome_proprietario_conta, documento_proprietario_conta) VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" 120 query_values = (account_name, financial_institution, financial_institution_code, agency, account_number, account_digit, account_password, digital_account_password, logged_user_name, logged_user_document) 121 122 QueryExecutor().insert_query(insert_password_query, query_values, 'Conta cadastrada com sucesso!', 'Erro ao cadastrar conta:') 123 124 log_query = '''INSERT INTO logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)''' 125 log_query_values = (logged_user, 'Cadastro', 'Cadastrou a conta {}'.format(query_values[0])) 126 QueryExecutor().insert_query(query=log_query, values=log_query_values, success_message='Log gravado.', error_message='Erro ao gravar log:') 127 128 else: 129 with col3: 130 with st.expander(label="Validação de dados", expanded=True): 131 st.error(body="O nome da conta já está sendo utilizado.") 132 133 elif register_new_account and confirm_data == False: 134 with col3: 135 with st.spinner(text="Aguarde..."): 136 sleep(0.5) 137 with st.expander(label="Validação de dados", expanded=True): 138 st.warning(body="Você deve confirmar os dados antes de prosseguir.") 139 140 def read_bank_accounts(self): 141 """ 142 Função para a consulta de uma conta bancária. 143 """ 144 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 145 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 146 147 user_accounts_quantity = self.get_user_accounts_quantity() 148 149 if user_accounts_quantity == 0: 150 col1, col2, col3 = st.columns(3) 151 with col2: 152 st.warning(body="Você ainda não possui contas cadastradas.") 153 154 elif user_accounts_quantity >= 1: 155 col1, col2 = st.columns(2) 156 user_bank_accounts = self.get_user_bank_accounts() 157 158 with col1: 159 with st.expander(label="Dados", expanded=True): 160 selected_option = st.selectbox(label="Selecione a conta", options=user_bank_accounts) 161 safe_password = st.text_input(label="Informe sua senha", type="password", help="Corresponde a senha utilizada para acessar a aplicação.") 162 confirm_safe_password = st.text_input(label="Confirme sua senha", type="password", help="Deve ser idêntica a senha informada acima.") 163 confirm_password_selection = st.checkbox(label="Confirmar seleção") 164 165 consult_button = st.button(label=":file_folder: Consultar conta") 166 167 account_details_query = ''' 168 SELECT 169 CONCAT('Conta: ', 170 contas_bancarias.nome_conta, 171 ' - Instituição: ', 172 contas_bancarias.instituicao_financeira), 173 contas_bancarias.agencia, 174 CONCAT('', 175 contas_bancarias.numero_conta, 176 '-', 177 contas_bancarias.digito_conta), 178 contas_bancarias.senha_bancaria_conta, 179 contas_bancarias.senha_digital_conta 180 FROM 181 contas_bancarias 182 WHERE 183 contas_bancarias.nome_conta = %s 184 AND contas_bancarias.nome_proprietario_conta = %s 185 AND contas_bancarias.documento_proprietario_conta = %s;''' 186 187 result_list = QueryExecutor().complex_consult_query(query=account_details_query,params=(selected_option, logged_user_name, logged_user_document)) 188 result_list = QueryExecutor().treat_complex_result(values_to_treat=result_list, values_to_remove=to_remove_list) 189 190 if confirm_password_selection and consult_button: 191 192 is_password_valid, hashed_password = Login().check_login(logged_user, safe_password) 193 194 if safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == True: 195 196 with col2: 197 with st.spinner(text="Aguarde..."): 198 sleep(2.5) 199 200 with st.expander(label="Dados", expanded=True): 201 202 aux_string = '' 203 204 for i in range(0, len(result_list)): 205 206 st.write(bank_account_field_names[i]) 207 aux_string = str(result_list[i]) 208 aux_string = aux_string.replace('"', '') 209 if aux_string.startswith('b'): 210 aux_string = aux_string[1:] 211 st.code(body="{}".format(aux_string)) 212 213 log_query = '''INSERT into logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)''' 214 query_values = (logged_user, 'Consulta', 'Consultou a conta bancária {}'.format(selected_option)) 215 QueryExecutor().insert_query(query=log_query, values=query_values, success_message='Log gravado.', error_message='Erro ao gravar log:') 216 217 elif safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == False: 218 219 with col2: 220 with st.spinner(text="Aguarde..."): 221 sleep(0.5) 222 with st.expander(label="Validação dos dados", expanded=True): 223 st.error(body="A senha informada é inválida.") 224 225 elif safe_password != "" and confirm_safe_password != "" and safe_password != confirm_safe_password: 226 with col2: 227 with st.spinner(text="Aguarde..."): 228 sleep(0.5) 229 with st.expander(label="Validação dos dados", expanded=True): 230 st.error(body="As senhas informadas não coincidem.") 231 232 elif confirm_password_selection == False and consult_button: 233 with col2: 234 st.warning(body="Confirme a seleção da conta.") 235 236 def update_bank_account(self): 237 """ 238 Função para a atualização de uma conta bancária. 239 """ 240 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 241 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 242 243 user_accounts_quantity = self.get_user_accounts_quantity() 244 245 if user_accounts_quantity == 0: 246 col1, col2, col3 = st.columns(3) 247 with col2: 248 st.warning(body="Você ainda não possui contas cadastradas.") 249 250 elif user_accounts_quantity >= 1: 251 col1, col2 = st.columns(2) 252 user_bank_accounts = self.get_user_bank_accounts() 253 254 with col1: 255 with st.expander(label="Dados", expanded=True): 256 selected_option = st.selectbox(label="Selecione a conta", options=user_bank_accounts) 257 safe_password = st.text_input(label="Informe sua senha", type="password", help="Corresponde a senha utilizada para acessar a aplicação.") 258 confirm_safe_password = st.text_input(label="Confirme sua senha", type="password", help="Deve ser idêntica a senha informada acima.") 259 confirm_selection = st.checkbox(label="Confirmar seleção") 260 261 account_details_query = ''' 262 SELECT 263 CONCAT('Conta: ', 264 contas_bancarias.nome_conta, 265 ' - Instituição: ', 266 contas_bancarias.instituicao_financeira), 267 contas_bancarias.agencia, 268 CONCAT('', 269 contas_bancarias.numero_conta, 270 '-', 271 contas_bancarias.digito_conta), 272 contas_bancarias.senha_bancaria_conta, 273 contas_bancarias.senha_digital_conta 274 FROM 275 contas_bancarias 276 WHERE 277 contas_bancarias.nome_conta = %s 278 AND contas_bancarias.nome_proprietario_conta = %s 279 AND contas_bancarias.documento_proprietario_conta = %s;''' 280 281 result_list = QueryExecutor().complex_consult_query(query=account_details_query, params=(selected_option, logged_user_name, logged_user_document)) 282 result_list = QueryExecutor().treat_complex_result(values_to_treat=result_list, values_to_remove=to_remove_list) 283 284 if confirm_selection: 285 286 is_password_valid, hashed_password = Login().check_login(logged_user, safe_password) 287 288 if safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == True: 289 290 with col2: 291 with st.spinner(text="Aguarde..."): 292 sleep(0.5) 293 294 with st.expander(label="Novos Dados", expanded=True): 295 296 aux_string = '' 297 298 for i in range(0, 3): 299 300 st.write(bank_account_field_names[i]) 301 aux_string = str(result_list[i]) 302 aux_string = aux_string.replace('"', '') 303 if aux_string.startswith('b'): 304 aux_string = aux_string[1:] 305 st.code(body="{}".format(aux_string)) 306 307 account_password = st.text_input(label="Senha da conta", max_chars=30, type='password', help='Senha utilizada para saques e demais operações em terminais físicos.') 308 digital_account_password = st.text_input(label="Senha digital da conta", max_chars=30, type='password', help='Senha digital da conta, utilizada para operações virtuais como Pix.') 309 310 confirm_new_bank_account_data = st.checkbox(label="Confirmar novos dados") 311 312 update_bank_account_button = st.button(label=":arrows_counterclockwise: Atualizar dados da conta") 313 314 if confirm_new_bank_account_data and update_bank_account_button and account_password != "" and digital_account_password != "": 315 with col1: 316 with st.spinner(text="Aguarde..."): 317 sleep(2.5) 318 319 update_account_query = '''UPDATE contas_bancarias SET senha_bancaria_conta = %s, senha_digital_conta = %s WHERE nome_conta = %s AND nome_proprietario_conta = %s AND documento_proprietario_conta = %s;''' 320 update_account_values = (account_password, digital_account_password, selected_option, logged_user_name, logged_user_document) 321 322 QueryExecutor().insert_query(query=update_account_query, values=update_account_values, success_message="Conta atualizada com sucesso!", error_message="Erro ao atualizar conta:") 323 324 log_query = '''INSERT into logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)''' 325 query_values = (logged_user, 'Atualização', 'Atualizou a conta bancária {}'.format(selected_option)) 326 QueryExecutor().insert_query(query=log_query, values=query_values, success_message='Log gravado.', error_message='Erro ao gravar log:') 327 328 elif confirm_new_bank_account_data == False and update_bank_account_button and account_password != "" and digital_account_password != "": 329 with col2: 330 with st.expander(label="Validação dos dados", expanded=True): 331 st.warning(body="Confirme os novos dados da conta.") 332 333 elif safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == False: 334 with col2: 335 with st.spinner(text="Aguarde..."): 336 sleep(0.5) 337 with st.expander(label="Validação dos dados", expanded=True): 338 st.error(body="A senha informada é inválida.") 339 340 elif safe_password != confirm_safe_password: 341 with col2: 342 with st.spinner(text="Aguarde..."): 343 sleep(0.5) 344 with st.expander(label="Validação dos dados", expanded=True): 345 st.error(body="As senhas informadas não coincidem.") 346 347 def delete_bank_account(self): 348 """ 349 Função para a exclusão de uma conta bancária. 350 """ 351 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 352 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 353 354 user_accounts_quantity = self.get_user_accounts_quantity() 355 356 if user_accounts_quantity == 0: 357 col1, col2, col3 = st.columns(3) 358 with col2: 359 st.warning(body="Você ainda não possui contas cadastradas.") 360 361 elif user_accounts_quantity >= 1: 362 col1, col2 = st.columns(2) 363 user_bank_accounts = self.get_user_bank_accounts() 364 365 with col1: 366 with st.expander(label="Dados", expanded=True): 367 selected_option = st.selectbox( 368 label="Selecione a conta", options=user_bank_accounts) 369 safe_password = st.text_input( 370 label="Informe sua senha", type="password", help="Corresponde a senha utilizada para acessar a aplicação.") 371 confirm_safe_password = st.text_input( 372 label="Confirme sua senha", type="password", help="Deve ser idêntica a senha informada acima.") 373 confirm_password_selection = st.checkbox( 374 label="Confirmar seleção") 375 376 account_details_query = ''' 377 SELECT 378 CONCAT('Conta: ', 379 contas_bancarias.nome_conta, 380 ' - Instituição: ', 381 contas_bancarias.instituicao_financeira), 382 contas_bancarias.agencia, 383 CONCAT('', 384 contas_bancarias.numero_conta, 385 '-', 386 contas_bancarias.digito_conta), 387 contas_bancarias.senha_bancaria_conta, 388 contas_bancarias.senha_digital_conta 389 FROM 390 contas_bancarias 391 WHERE 392 contas_bancarias.nome_conta = %s 393 AND contas_bancarias.nome_proprietario_conta = %s 394 AND contas_bancarias.documento_proprietario_conta = %s;''' 395 396 result_list = QueryExecutor().complex_consult_query(query=account_details_query, 397 params=(selected_option, logged_user_name, logged_user_document)) 398 result_list = QueryExecutor().treat_complex_result( 399 values_to_treat=result_list, values_to_remove=to_remove_list) 400 401 if confirm_password_selection: 402 403 is_password_valid, hashed_password = Login().check_login(logged_user, safe_password) 404 405 if safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == True: 406 407 with col2: 408 with st.spinner(text="Aguarde..."): 409 sleep(0.5) 410 411 with st.expander(label="Dados", expanded=True): 412 413 aux_string = '' 414 415 for i in range(0, len(result_list)): 416 417 st.write(bank_account_field_names[i]) 418 aux_string = str(result_list[i]) 419 aux_string = aux_string.replace('"', '') 420 if aux_string.startswith('b'): 421 aux_string = aux_string[1:] 422 st.code(body="{}".format(aux_string)) 423 424 confirm_account_deletion = st.checkbox( 425 label="Confirmar exclusão da conta") 426 427 delete_account_button = st.button( 428 label=":wastebasket: Deletar conta") 429 430 if delete_account_button and confirm_account_deletion: 431 432 with col2: 433 with st.spinner(text="Aguarde..."): 434 sleep(2.5) 435 436 delete_account_query = '''DELETE contas_bancarias FROM contas_bancarias WHERE nome_conta = %s AND nome_proprietario_conta = %s AND documento_proprietario_conta = %s;''' 437 delete_account_values = ( 438 selected_option, logged_user_name, logged_user_document) 439 440 QueryExecutor().insert_query(query=delete_account_query, values=delete_account_values, 441 success_message="Conta excluída com sucesso!", error_message="Erro ao excluir conta:") 442 443 log_query = '''INSERT into logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)''' 444 query_values = ( 445 logged_user, 'Exclusão', 'Excluiu a conta bancária {}'.format(selected_option)) 446 QueryExecutor().insert_query(query=log_query, values=query_values, 447 success_message='Log gravado.', error_message='Erro ao gravar log:') 448 449 elif delete_account_button and confirm_account_deletion == False: 450 with col2: 451 with st.expander(label="Validação dos dados", expanded=True): 452 st.warning( 453 body="Confirme a exclusão da conta.") 454 455 elif safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == False: 456 with col2: 457 with st.spinner(text="Aguarde..."): 458 sleep(0.5) 459 with st.expander(label="Validação dos dados", expanded=True): 460 st.error(body="A senha informada é inválida.") 461 462 elif safe_password != confirm_safe_password: 463 with col2: 464 with st.spinner(text="Aguarde..."): 465 sleep(0.5) 466 with st.expander(label="Validação dos dados", expanded=True): 467 st.error( 468 body="As senhas informadas não coincidem.") 469 470 def main_menu(self): 471 """ 472 Menu Principal. 473 """ 474 475 col1, col2, col3 = st.columns(3) 476 477 with col1: 478 st.header(body=":bank: Contas Bancárias") 479 480 with col2: 481 menu_options = ["Cadastrar conta", "Consultar conta", 482 "Atualizar conta", "Deletar conta"] 483 selected_option = st.selectbox(label="Menu", options=menu_options) 484 485 st.divider() 486 487 if selected_option == menu_options[0]: 488 self.create_new_bank_account() 489 490 if selected_option == menu_options[1]: 491 self.read_bank_accounts() 492 493 if selected_option == menu_options[2]: 494 self.update_bank_account() 495 496 if selected_option == menu_options[3]: 497 self.delete_bank_account()
class
BankAccount:
10class BankAccount: 11 """ 12 Classe que representa as contas bancárias, com as quatro funções básicas de um CRUD. 13 """ 14 def check_if_bank_account_name_already_exists(self, bank_account_name: str): 15 """ 16 Verifica se o nome da conta bancária já foi utilizado anteriormente. 17 18 Returns 19 ------- 20 is_bank_account_name_available : bool 21 Se o nome de conta bancária está disponível ou não. 22 """ 23 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_login_password") 24 25 is_bank_account_name_available: bool 26 27 bank_accounts_with_parameter_name_query = """SELECT COUNT(id_conta) FROM contas_bancarias WHERE nome_conta = %s AND nome_proprietario_conta = %s AND documento_proprietario_conta = %s;""" 28 query_values = (bank_account_name, logged_user_name, logged_user_document) 29 30 bank_accounts_with_parameter_name_quantity = QueryExecutor().simple_consult_query(query=bank_accounts_with_parameter_name_query, params=query_values) 31 bank_accounts_with_parameter_name_quantity = QueryExecutor().treat_simple_result(value_to_treat=bank_accounts_with_parameter_name_quantity, values_to_remove=to_remove_list) 32 bank_accounts_with_parameter_name_quantity = int(bank_accounts_with_parameter_name_quantity) 33 34 if bank_accounts_with_parameter_name_quantity == 0: 35 is_bank_account_name_available = True 36 else: 37 is_bank_account_name_available = False 38 39 return is_bank_account_name_available 40 41 def get_user_accounts_quantity(self): 42 """ 43 Consulta a quantidade de contas registradas pelo usuário. 44 45 Returns 46 ------- 47 user_accounts_quantity : int 48 Quantidade de contas registradas pelo usuário. 49 """ 50 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 51 52 user_accounts_quantity = QueryExecutor().simple_consult_query(check_user_bank_accounts_query, params=(logged_user_name, logged_user_document)) 53 user_accounts_quantity = QueryExecutor().treat_simple_result(user_accounts_quantity, to_remove_list) 54 user_accounts_quantity = int(user_accounts_quantity) 55 56 return user_accounts_quantity 57 58 def get_user_bank_accounts(self): 59 """ 60 Consulta o nome das contas bancárias do usuário. 61 62 Returns 63 ------- 64 bank_accounts : list 65 Lista com os nomes das contas bancárias. 66 """ 67 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 68 69 user_bank_accounts = [] 70 71 bank_accounts = QueryExecutor().complex_consult_query(query=search_bank_accounts_query, params=(logged_user_name, logged_user_document)) 72 bank_accounts = QueryExecutor().treat_numerous_simple_result(bank_accounts, to_remove_list) 73 74 for i in range(0, len(bank_accounts)): 75 user_bank_accounts.append(bank_accounts[i]) 76 77 return bank_accounts 78 79 def create_new_bank_account(self): 80 """ 81 Função para criação de uma nova conta. 82 """ 83 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 84 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 85 86 col1, col2, col3 = st.columns(3) 87 88 with col1: 89 with st.expander(label="Dados da Conta", expanded=True): 90 account_name = st.text_input(label="Nome", max_chars=100, placeholder='Conta',help="Necessário para identificação. A sugestão é informar algo direto e descritivo, como por exemplo 'Conta Corrente BB'.") 91 financial_institution = st.selectbox(label='Instituição', options=financial_institution_list, help='Insituição financeira a qual pertence a conta.') 92 financial_institution_code = st.text_input(label="Código da instituição", max_chars=5, help="Código da insituição financiera no SPB (Sistemas de Pagamentos Brasileiro).") 93 agency = st.text_input(label="Agência", max_chars=10, help="Número da agência.") 94 95 confirm_data = st.checkbox(label="Confirmar dados") 96 97 with col2: 98 with st.expander(label="Dados da Conta", expanded=True): 99 account_number = st.text_input(label="Número da conta", max_chars=15, help="Número de identificação da conta.") 100 account_digit = st.text_input(label="Dígito", max_chars=1, placeholder='0', help='Dígito identificador da conta. Caso não haja, preencha como 0.') 101 account_password = st.text_input(label="Senha da conta", max_chars=30, type='password', help='Senha utilizada para saques e demais operações em terminais físicos.') 102 digital_account_password = st.text_input(label="Senha digital da conta", max_chars=30, type='password', help='Senha digital da conta, utilizada para operações virtuais como Pix.') 103 104 register_new_account = st.button( 105 label=":floppy_disk: Cadastrar conta") 106 107 if confirm_data == True and register_new_account: 108 with col3: 109 with st.spinner(text='Aguarde...'): 110 sleep(2.5) 111 112 is_bank_account_name_available = self.check_if_bank_account_name_already_exists( 113 bank_account_name=account_name) 114 115 if is_bank_account_name_available: 116 with col3: 117 with st.expander(label="Validação de dados", expanded=True): 118 st.success(body="Nome de conta válida.") 119 120 insert_password_query = "INSERT INTO contas_bancarias(nome_conta, instituicao_financeira, codigo_instituicao_financeira, agencia, numero_conta, digito_conta, senha_bancaria_conta, senha_digital_conta, nome_proprietario_conta, documento_proprietario_conta) VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" 121 query_values = (account_name, financial_institution, financial_institution_code, agency, account_number, account_digit, account_password, digital_account_password, logged_user_name, logged_user_document) 122 123 QueryExecutor().insert_query(insert_password_query, query_values, 'Conta cadastrada com sucesso!', 'Erro ao cadastrar conta:') 124 125 log_query = '''INSERT INTO logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)''' 126 log_query_values = (logged_user, 'Cadastro', 'Cadastrou a conta {}'.format(query_values[0])) 127 QueryExecutor().insert_query(query=log_query, values=log_query_values, success_message='Log gravado.', error_message='Erro ao gravar log:') 128 129 else: 130 with col3: 131 with st.expander(label="Validação de dados", expanded=True): 132 st.error(body="O nome da conta já está sendo utilizado.") 133 134 elif register_new_account and confirm_data == False: 135 with col3: 136 with st.spinner(text="Aguarde..."): 137 sleep(0.5) 138 with st.expander(label="Validação de dados", expanded=True): 139 st.warning(body="Você deve confirmar os dados antes de prosseguir.") 140 141 def read_bank_accounts(self): 142 """ 143 Função para a consulta de uma conta bancária. 144 """ 145 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 146 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 147 148 user_accounts_quantity = self.get_user_accounts_quantity() 149 150 if user_accounts_quantity == 0: 151 col1, col2, col3 = st.columns(3) 152 with col2: 153 st.warning(body="Você ainda não possui contas cadastradas.") 154 155 elif user_accounts_quantity >= 1: 156 col1, col2 = st.columns(2) 157 user_bank_accounts = self.get_user_bank_accounts() 158 159 with col1: 160 with st.expander(label="Dados", expanded=True): 161 selected_option = st.selectbox(label="Selecione a conta", options=user_bank_accounts) 162 safe_password = st.text_input(label="Informe sua senha", type="password", help="Corresponde a senha utilizada para acessar a aplicação.") 163 confirm_safe_password = st.text_input(label="Confirme sua senha", type="password", help="Deve ser idêntica a senha informada acima.") 164 confirm_password_selection = st.checkbox(label="Confirmar seleção") 165 166 consult_button = st.button(label=":file_folder: Consultar conta") 167 168 account_details_query = ''' 169 SELECT 170 CONCAT('Conta: ', 171 contas_bancarias.nome_conta, 172 ' - Instituição: ', 173 contas_bancarias.instituicao_financeira), 174 contas_bancarias.agencia, 175 CONCAT('', 176 contas_bancarias.numero_conta, 177 '-', 178 contas_bancarias.digito_conta), 179 contas_bancarias.senha_bancaria_conta, 180 contas_bancarias.senha_digital_conta 181 FROM 182 contas_bancarias 183 WHERE 184 contas_bancarias.nome_conta = %s 185 AND contas_bancarias.nome_proprietario_conta = %s 186 AND contas_bancarias.documento_proprietario_conta = %s;''' 187 188 result_list = QueryExecutor().complex_consult_query(query=account_details_query,params=(selected_option, logged_user_name, logged_user_document)) 189 result_list = QueryExecutor().treat_complex_result(values_to_treat=result_list, values_to_remove=to_remove_list) 190 191 if confirm_password_selection and consult_button: 192 193 is_password_valid, hashed_password = Login().check_login(logged_user, safe_password) 194 195 if safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == True: 196 197 with col2: 198 with st.spinner(text="Aguarde..."): 199 sleep(2.5) 200 201 with st.expander(label="Dados", expanded=True): 202 203 aux_string = '' 204 205 for i in range(0, len(result_list)): 206 207 st.write(bank_account_field_names[i]) 208 aux_string = str(result_list[i]) 209 aux_string = aux_string.replace('"', '') 210 if aux_string.startswith('b'): 211 aux_string = aux_string[1:] 212 st.code(body="{}".format(aux_string)) 213 214 log_query = '''INSERT into logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)''' 215 query_values = (logged_user, 'Consulta', 'Consultou a conta bancária {}'.format(selected_option)) 216 QueryExecutor().insert_query(query=log_query, values=query_values, success_message='Log gravado.', error_message='Erro ao gravar log:') 217 218 elif safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == False: 219 220 with col2: 221 with st.spinner(text="Aguarde..."): 222 sleep(0.5) 223 with st.expander(label="Validação dos dados", expanded=True): 224 st.error(body="A senha informada é inválida.") 225 226 elif safe_password != "" and confirm_safe_password != "" and safe_password != confirm_safe_password: 227 with col2: 228 with st.spinner(text="Aguarde..."): 229 sleep(0.5) 230 with st.expander(label="Validação dos dados", expanded=True): 231 st.error(body="As senhas informadas não coincidem.") 232 233 elif confirm_password_selection == False and consult_button: 234 with col2: 235 st.warning(body="Confirme a seleção da conta.") 236 237 def update_bank_account(self): 238 """ 239 Função para a atualização de uma conta bancária. 240 """ 241 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 242 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 243 244 user_accounts_quantity = self.get_user_accounts_quantity() 245 246 if user_accounts_quantity == 0: 247 col1, col2, col3 = st.columns(3) 248 with col2: 249 st.warning(body="Você ainda não possui contas cadastradas.") 250 251 elif user_accounts_quantity >= 1: 252 col1, col2 = st.columns(2) 253 user_bank_accounts = self.get_user_bank_accounts() 254 255 with col1: 256 with st.expander(label="Dados", expanded=True): 257 selected_option = st.selectbox(label="Selecione a conta", options=user_bank_accounts) 258 safe_password = st.text_input(label="Informe sua senha", type="password", help="Corresponde a senha utilizada para acessar a aplicação.") 259 confirm_safe_password = st.text_input(label="Confirme sua senha", type="password", help="Deve ser idêntica a senha informada acima.") 260 confirm_selection = st.checkbox(label="Confirmar seleção") 261 262 account_details_query = ''' 263 SELECT 264 CONCAT('Conta: ', 265 contas_bancarias.nome_conta, 266 ' - Instituição: ', 267 contas_bancarias.instituicao_financeira), 268 contas_bancarias.agencia, 269 CONCAT('', 270 contas_bancarias.numero_conta, 271 '-', 272 contas_bancarias.digito_conta), 273 contas_bancarias.senha_bancaria_conta, 274 contas_bancarias.senha_digital_conta 275 FROM 276 contas_bancarias 277 WHERE 278 contas_bancarias.nome_conta = %s 279 AND contas_bancarias.nome_proprietario_conta = %s 280 AND contas_bancarias.documento_proprietario_conta = %s;''' 281 282 result_list = QueryExecutor().complex_consult_query(query=account_details_query, params=(selected_option, logged_user_name, logged_user_document)) 283 result_list = QueryExecutor().treat_complex_result(values_to_treat=result_list, values_to_remove=to_remove_list) 284 285 if confirm_selection: 286 287 is_password_valid, hashed_password = Login().check_login(logged_user, safe_password) 288 289 if safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == True: 290 291 with col2: 292 with st.spinner(text="Aguarde..."): 293 sleep(0.5) 294 295 with st.expander(label="Novos Dados", expanded=True): 296 297 aux_string = '' 298 299 for i in range(0, 3): 300 301 st.write(bank_account_field_names[i]) 302 aux_string = str(result_list[i]) 303 aux_string = aux_string.replace('"', '') 304 if aux_string.startswith('b'): 305 aux_string = aux_string[1:] 306 st.code(body="{}".format(aux_string)) 307 308 account_password = st.text_input(label="Senha da conta", max_chars=30, type='password', help='Senha utilizada para saques e demais operações em terminais físicos.') 309 digital_account_password = st.text_input(label="Senha digital da conta", max_chars=30, type='password', help='Senha digital da conta, utilizada para operações virtuais como Pix.') 310 311 confirm_new_bank_account_data = st.checkbox(label="Confirmar novos dados") 312 313 update_bank_account_button = st.button(label=":arrows_counterclockwise: Atualizar dados da conta") 314 315 if confirm_new_bank_account_data and update_bank_account_button and account_password != "" and digital_account_password != "": 316 with col1: 317 with st.spinner(text="Aguarde..."): 318 sleep(2.5) 319 320 update_account_query = '''UPDATE contas_bancarias SET senha_bancaria_conta = %s, senha_digital_conta = %s WHERE nome_conta = %s AND nome_proprietario_conta = %s AND documento_proprietario_conta = %s;''' 321 update_account_values = (account_password, digital_account_password, selected_option, logged_user_name, logged_user_document) 322 323 QueryExecutor().insert_query(query=update_account_query, values=update_account_values, success_message="Conta atualizada com sucesso!", error_message="Erro ao atualizar conta:") 324 325 log_query = '''INSERT into logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)''' 326 query_values = (logged_user, 'Atualização', 'Atualizou a conta bancária {}'.format(selected_option)) 327 QueryExecutor().insert_query(query=log_query, values=query_values, success_message='Log gravado.', error_message='Erro ao gravar log:') 328 329 elif confirm_new_bank_account_data == False and update_bank_account_button and account_password != "" and digital_account_password != "": 330 with col2: 331 with st.expander(label="Validação dos dados", expanded=True): 332 st.warning(body="Confirme os novos dados da conta.") 333 334 elif safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == False: 335 with col2: 336 with st.spinner(text="Aguarde..."): 337 sleep(0.5) 338 with st.expander(label="Validação dos dados", expanded=True): 339 st.error(body="A senha informada é inválida.") 340 341 elif safe_password != confirm_safe_password: 342 with col2: 343 with st.spinner(text="Aguarde..."): 344 sleep(0.5) 345 with st.expander(label="Validação dos dados", expanded=True): 346 st.error(body="As senhas informadas não coincidem.") 347 348 def delete_bank_account(self): 349 """ 350 Função para a exclusão de uma conta bancária. 351 """ 352 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 353 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 354 355 user_accounts_quantity = self.get_user_accounts_quantity() 356 357 if user_accounts_quantity == 0: 358 col1, col2, col3 = st.columns(3) 359 with col2: 360 st.warning(body="Você ainda não possui contas cadastradas.") 361 362 elif user_accounts_quantity >= 1: 363 col1, col2 = st.columns(2) 364 user_bank_accounts = self.get_user_bank_accounts() 365 366 with col1: 367 with st.expander(label="Dados", expanded=True): 368 selected_option = st.selectbox( 369 label="Selecione a conta", options=user_bank_accounts) 370 safe_password = st.text_input( 371 label="Informe sua senha", type="password", help="Corresponde a senha utilizada para acessar a aplicação.") 372 confirm_safe_password = st.text_input( 373 label="Confirme sua senha", type="password", help="Deve ser idêntica a senha informada acima.") 374 confirm_password_selection = st.checkbox( 375 label="Confirmar seleção") 376 377 account_details_query = ''' 378 SELECT 379 CONCAT('Conta: ', 380 contas_bancarias.nome_conta, 381 ' - Instituição: ', 382 contas_bancarias.instituicao_financeira), 383 contas_bancarias.agencia, 384 CONCAT('', 385 contas_bancarias.numero_conta, 386 '-', 387 contas_bancarias.digito_conta), 388 contas_bancarias.senha_bancaria_conta, 389 contas_bancarias.senha_digital_conta 390 FROM 391 contas_bancarias 392 WHERE 393 contas_bancarias.nome_conta = %s 394 AND contas_bancarias.nome_proprietario_conta = %s 395 AND contas_bancarias.documento_proprietario_conta = %s;''' 396 397 result_list = QueryExecutor().complex_consult_query(query=account_details_query, 398 params=(selected_option, logged_user_name, logged_user_document)) 399 result_list = QueryExecutor().treat_complex_result( 400 values_to_treat=result_list, values_to_remove=to_remove_list) 401 402 if confirm_password_selection: 403 404 is_password_valid, hashed_password = Login().check_login(logged_user, safe_password) 405 406 if safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == True: 407 408 with col2: 409 with st.spinner(text="Aguarde..."): 410 sleep(0.5) 411 412 with st.expander(label="Dados", expanded=True): 413 414 aux_string = '' 415 416 for i in range(0, len(result_list)): 417 418 st.write(bank_account_field_names[i]) 419 aux_string = str(result_list[i]) 420 aux_string = aux_string.replace('"', '') 421 if aux_string.startswith('b'): 422 aux_string = aux_string[1:] 423 st.code(body="{}".format(aux_string)) 424 425 confirm_account_deletion = st.checkbox( 426 label="Confirmar exclusão da conta") 427 428 delete_account_button = st.button( 429 label=":wastebasket: Deletar conta") 430 431 if delete_account_button and confirm_account_deletion: 432 433 with col2: 434 with st.spinner(text="Aguarde..."): 435 sleep(2.5) 436 437 delete_account_query = '''DELETE contas_bancarias FROM contas_bancarias WHERE nome_conta = %s AND nome_proprietario_conta = %s AND documento_proprietario_conta = %s;''' 438 delete_account_values = ( 439 selected_option, logged_user_name, logged_user_document) 440 441 QueryExecutor().insert_query(query=delete_account_query, values=delete_account_values, 442 success_message="Conta excluída com sucesso!", error_message="Erro ao excluir conta:") 443 444 log_query = '''INSERT into logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)''' 445 query_values = ( 446 logged_user, 'Exclusão', 'Excluiu a conta bancária {}'.format(selected_option)) 447 QueryExecutor().insert_query(query=log_query, values=query_values, 448 success_message='Log gravado.', error_message='Erro ao gravar log:') 449 450 elif delete_account_button and confirm_account_deletion == False: 451 with col2: 452 with st.expander(label="Validação dos dados", expanded=True): 453 st.warning( 454 body="Confirme a exclusão da conta.") 455 456 elif safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == False: 457 with col2: 458 with st.spinner(text="Aguarde..."): 459 sleep(0.5) 460 with st.expander(label="Validação dos dados", expanded=True): 461 st.error(body="A senha informada é inválida.") 462 463 elif safe_password != confirm_safe_password: 464 with col2: 465 with st.spinner(text="Aguarde..."): 466 sleep(0.5) 467 with st.expander(label="Validação dos dados", expanded=True): 468 st.error( 469 body="As senhas informadas não coincidem.") 470 471 def main_menu(self): 472 """ 473 Menu Principal. 474 """ 475 476 col1, col2, col3 = st.columns(3) 477 478 with col1: 479 st.header(body=":bank: Contas Bancárias") 480 481 with col2: 482 menu_options = ["Cadastrar conta", "Consultar conta", 483 "Atualizar conta", "Deletar conta"] 484 selected_option = st.selectbox(label="Menu", options=menu_options) 485 486 st.divider() 487 488 if selected_option == menu_options[0]: 489 self.create_new_bank_account() 490 491 if selected_option == menu_options[1]: 492 self.read_bank_accounts() 493 494 if selected_option == menu_options[2]: 495 self.update_bank_account() 496 497 if selected_option == menu_options[3]: 498 self.delete_bank_account()
Classe que representa as contas bancárias, com as quatro funções básicas de um CRUD.
def
check_if_bank_account_name_already_exists(self, bank_account_name: str):
14 def check_if_bank_account_name_already_exists(self, bank_account_name: str): 15 """ 16 Verifica se o nome da conta bancária já foi utilizado anteriormente. 17 18 Returns 19 ------- 20 is_bank_account_name_available : bool 21 Se o nome de conta bancária está disponível ou não. 22 """ 23 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_login_password") 24 25 is_bank_account_name_available: bool 26 27 bank_accounts_with_parameter_name_query = """SELECT COUNT(id_conta) FROM contas_bancarias WHERE nome_conta = %s AND nome_proprietario_conta = %s AND documento_proprietario_conta = %s;""" 28 query_values = (bank_account_name, logged_user_name, logged_user_document) 29 30 bank_accounts_with_parameter_name_quantity = QueryExecutor().simple_consult_query(query=bank_accounts_with_parameter_name_query, params=query_values) 31 bank_accounts_with_parameter_name_quantity = QueryExecutor().treat_simple_result(value_to_treat=bank_accounts_with_parameter_name_quantity, values_to_remove=to_remove_list) 32 bank_accounts_with_parameter_name_quantity = int(bank_accounts_with_parameter_name_quantity) 33 34 if bank_accounts_with_parameter_name_quantity == 0: 35 is_bank_account_name_available = True 36 else: 37 is_bank_account_name_available = False 38 39 return is_bank_account_name_available
Verifica se o nome da conta bancária já foi utilizado anteriormente.
Returns
- is_bank_account_name_available (bool): Se o nome de conta bancária está disponível ou não.
def
get_user_accounts_quantity(self):
41 def get_user_accounts_quantity(self): 42 """ 43 Consulta a quantidade de contas registradas pelo usuário. 44 45 Returns 46 ------- 47 user_accounts_quantity : int 48 Quantidade de contas registradas pelo usuário. 49 """ 50 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 51 52 user_accounts_quantity = QueryExecutor().simple_consult_query(check_user_bank_accounts_query, params=(logged_user_name, logged_user_document)) 53 user_accounts_quantity = QueryExecutor().treat_simple_result(user_accounts_quantity, to_remove_list) 54 user_accounts_quantity = int(user_accounts_quantity) 55 56 return user_accounts_quantity
Consulta a quantidade de contas registradas pelo usuário.
Returns
- user_accounts_quantity (int): Quantidade de contas registradas pelo usuário.
def
get_user_bank_accounts(self):
58 def get_user_bank_accounts(self): 59 """ 60 Consulta o nome das contas bancárias do usuário. 61 62 Returns 63 ------- 64 bank_accounts : list 65 Lista com os nomes das contas bancárias. 66 """ 67 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 68 69 user_bank_accounts = [] 70 71 bank_accounts = QueryExecutor().complex_consult_query(query=search_bank_accounts_query, params=(logged_user_name, logged_user_document)) 72 bank_accounts = QueryExecutor().treat_numerous_simple_result(bank_accounts, to_remove_list) 73 74 for i in range(0, len(bank_accounts)): 75 user_bank_accounts.append(bank_accounts[i]) 76 77 return bank_accounts
Consulta o nome das contas bancárias do usuário.
Returns
- bank_accounts (list): Lista com os nomes das contas bancárias.
def
create_new_bank_account(self):
79 def create_new_bank_account(self): 80 """ 81 Função para criação de uma nova conta. 82 """ 83 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 84 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 85 86 col1, col2, col3 = st.columns(3) 87 88 with col1: 89 with st.expander(label="Dados da Conta", expanded=True): 90 account_name = st.text_input(label="Nome", max_chars=100, placeholder='Conta',help="Necessário para identificação. A sugestão é informar algo direto e descritivo, como por exemplo 'Conta Corrente BB'.") 91 financial_institution = st.selectbox(label='Instituição', options=financial_institution_list, help='Insituição financeira a qual pertence a conta.') 92 financial_institution_code = st.text_input(label="Código da instituição", max_chars=5, help="Código da insituição financiera no SPB (Sistemas de Pagamentos Brasileiro).") 93 agency = st.text_input(label="Agência", max_chars=10, help="Número da agência.") 94 95 confirm_data = st.checkbox(label="Confirmar dados") 96 97 with col2: 98 with st.expander(label="Dados da Conta", expanded=True): 99 account_number = st.text_input(label="Número da conta", max_chars=15, help="Número de identificação da conta.") 100 account_digit = st.text_input(label="Dígito", max_chars=1, placeholder='0', help='Dígito identificador da conta. Caso não haja, preencha como 0.') 101 account_password = st.text_input(label="Senha da conta", max_chars=30, type='password', help='Senha utilizada para saques e demais operações em terminais físicos.') 102 digital_account_password = st.text_input(label="Senha digital da conta", max_chars=30, type='password', help='Senha digital da conta, utilizada para operações virtuais como Pix.') 103 104 register_new_account = st.button( 105 label=":floppy_disk: Cadastrar conta") 106 107 if confirm_data == True and register_new_account: 108 with col3: 109 with st.spinner(text='Aguarde...'): 110 sleep(2.5) 111 112 is_bank_account_name_available = self.check_if_bank_account_name_already_exists( 113 bank_account_name=account_name) 114 115 if is_bank_account_name_available: 116 with col3: 117 with st.expander(label="Validação de dados", expanded=True): 118 st.success(body="Nome de conta válida.") 119 120 insert_password_query = "INSERT INTO contas_bancarias(nome_conta, instituicao_financeira, codigo_instituicao_financeira, agencia, numero_conta, digito_conta, senha_bancaria_conta, senha_digital_conta, nome_proprietario_conta, documento_proprietario_conta) VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)" 121 query_values = (account_name, financial_institution, financial_institution_code, agency, account_number, account_digit, account_password, digital_account_password, logged_user_name, logged_user_document) 122 123 QueryExecutor().insert_query(insert_password_query, query_values, 'Conta cadastrada com sucesso!', 'Erro ao cadastrar conta:') 124 125 log_query = '''INSERT INTO logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)''' 126 log_query_values = (logged_user, 'Cadastro', 'Cadastrou a conta {}'.format(query_values[0])) 127 QueryExecutor().insert_query(query=log_query, values=log_query_values, success_message='Log gravado.', error_message='Erro ao gravar log:') 128 129 else: 130 with col3: 131 with st.expander(label="Validação de dados", expanded=True): 132 st.error(body="O nome da conta já está sendo utilizado.") 133 134 elif register_new_account and confirm_data == False: 135 with col3: 136 with st.spinner(text="Aguarde..."): 137 sleep(0.5) 138 with st.expander(label="Validação de dados", expanded=True): 139 st.warning(body="Você deve confirmar os dados antes de prosseguir.")
Função para criação de uma nova conta.
def
read_bank_accounts(self):
141 def read_bank_accounts(self): 142 """ 143 Função para a consulta de uma conta bancária. 144 """ 145 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 146 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 147 148 user_accounts_quantity = self.get_user_accounts_quantity() 149 150 if user_accounts_quantity == 0: 151 col1, col2, col3 = st.columns(3) 152 with col2: 153 st.warning(body="Você ainda não possui contas cadastradas.") 154 155 elif user_accounts_quantity >= 1: 156 col1, col2 = st.columns(2) 157 user_bank_accounts = self.get_user_bank_accounts() 158 159 with col1: 160 with st.expander(label="Dados", expanded=True): 161 selected_option = st.selectbox(label="Selecione a conta", options=user_bank_accounts) 162 safe_password = st.text_input(label="Informe sua senha", type="password", help="Corresponde a senha utilizada para acessar a aplicação.") 163 confirm_safe_password = st.text_input(label="Confirme sua senha", type="password", help="Deve ser idêntica a senha informada acima.") 164 confirm_password_selection = st.checkbox(label="Confirmar seleção") 165 166 consult_button = st.button(label=":file_folder: Consultar conta") 167 168 account_details_query = ''' 169 SELECT 170 CONCAT('Conta: ', 171 contas_bancarias.nome_conta, 172 ' - Instituição: ', 173 contas_bancarias.instituicao_financeira), 174 contas_bancarias.agencia, 175 CONCAT('', 176 contas_bancarias.numero_conta, 177 '-', 178 contas_bancarias.digito_conta), 179 contas_bancarias.senha_bancaria_conta, 180 contas_bancarias.senha_digital_conta 181 FROM 182 contas_bancarias 183 WHERE 184 contas_bancarias.nome_conta = %s 185 AND contas_bancarias.nome_proprietario_conta = %s 186 AND contas_bancarias.documento_proprietario_conta = %s;''' 187 188 result_list = QueryExecutor().complex_consult_query(query=account_details_query,params=(selected_option, logged_user_name, logged_user_document)) 189 result_list = QueryExecutor().treat_complex_result(values_to_treat=result_list, values_to_remove=to_remove_list) 190 191 if confirm_password_selection and consult_button: 192 193 is_password_valid, hashed_password = Login().check_login(logged_user, safe_password) 194 195 if safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == True: 196 197 with col2: 198 with st.spinner(text="Aguarde..."): 199 sleep(2.5) 200 201 with st.expander(label="Dados", expanded=True): 202 203 aux_string = '' 204 205 for i in range(0, len(result_list)): 206 207 st.write(bank_account_field_names[i]) 208 aux_string = str(result_list[i]) 209 aux_string = aux_string.replace('"', '') 210 if aux_string.startswith('b'): 211 aux_string = aux_string[1:] 212 st.code(body="{}".format(aux_string)) 213 214 log_query = '''INSERT into logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)''' 215 query_values = (logged_user, 'Consulta', 'Consultou a conta bancária {}'.format(selected_option)) 216 QueryExecutor().insert_query(query=log_query, values=query_values, success_message='Log gravado.', error_message='Erro ao gravar log:') 217 218 elif safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == False: 219 220 with col2: 221 with st.spinner(text="Aguarde..."): 222 sleep(0.5) 223 with st.expander(label="Validação dos dados", expanded=True): 224 st.error(body="A senha informada é inválida.") 225 226 elif safe_password != "" and confirm_safe_password != "" and safe_password != confirm_safe_password: 227 with col2: 228 with st.spinner(text="Aguarde..."): 229 sleep(0.5) 230 with st.expander(label="Validação dos dados", expanded=True): 231 st.error(body="As senhas informadas não coincidem.") 232 233 elif confirm_password_selection == False and consult_button: 234 with col2: 235 st.warning(body="Confirme a seleção da conta.")
Função para a consulta de uma conta bancária.
def
update_bank_account(self):
237 def update_bank_account(self): 238 """ 239 Função para a atualização de uma conta bancária. 240 """ 241 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 242 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 243 244 user_accounts_quantity = self.get_user_accounts_quantity() 245 246 if user_accounts_quantity == 0: 247 col1, col2, col3 = st.columns(3) 248 with col2: 249 st.warning(body="Você ainda não possui contas cadastradas.") 250 251 elif user_accounts_quantity >= 1: 252 col1, col2 = st.columns(2) 253 user_bank_accounts = self.get_user_bank_accounts() 254 255 with col1: 256 with st.expander(label="Dados", expanded=True): 257 selected_option = st.selectbox(label="Selecione a conta", options=user_bank_accounts) 258 safe_password = st.text_input(label="Informe sua senha", type="password", help="Corresponde a senha utilizada para acessar a aplicação.") 259 confirm_safe_password = st.text_input(label="Confirme sua senha", type="password", help="Deve ser idêntica a senha informada acima.") 260 confirm_selection = st.checkbox(label="Confirmar seleção") 261 262 account_details_query = ''' 263 SELECT 264 CONCAT('Conta: ', 265 contas_bancarias.nome_conta, 266 ' - Instituição: ', 267 contas_bancarias.instituicao_financeira), 268 contas_bancarias.agencia, 269 CONCAT('', 270 contas_bancarias.numero_conta, 271 '-', 272 contas_bancarias.digito_conta), 273 contas_bancarias.senha_bancaria_conta, 274 contas_bancarias.senha_digital_conta 275 FROM 276 contas_bancarias 277 WHERE 278 contas_bancarias.nome_conta = %s 279 AND contas_bancarias.nome_proprietario_conta = %s 280 AND contas_bancarias.documento_proprietario_conta = %s;''' 281 282 result_list = QueryExecutor().complex_consult_query(query=account_details_query, params=(selected_option, logged_user_name, logged_user_document)) 283 result_list = QueryExecutor().treat_complex_result(values_to_treat=result_list, values_to_remove=to_remove_list) 284 285 if confirm_selection: 286 287 is_password_valid, hashed_password = Login().check_login(logged_user, safe_password) 288 289 if safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == True: 290 291 with col2: 292 with st.spinner(text="Aguarde..."): 293 sleep(0.5) 294 295 with st.expander(label="Novos Dados", expanded=True): 296 297 aux_string = '' 298 299 for i in range(0, 3): 300 301 st.write(bank_account_field_names[i]) 302 aux_string = str(result_list[i]) 303 aux_string = aux_string.replace('"', '') 304 if aux_string.startswith('b'): 305 aux_string = aux_string[1:] 306 st.code(body="{}".format(aux_string)) 307 308 account_password = st.text_input(label="Senha da conta", max_chars=30, type='password', help='Senha utilizada para saques e demais operações em terminais físicos.') 309 digital_account_password = st.text_input(label="Senha digital da conta", max_chars=30, type='password', help='Senha digital da conta, utilizada para operações virtuais como Pix.') 310 311 confirm_new_bank_account_data = st.checkbox(label="Confirmar novos dados") 312 313 update_bank_account_button = st.button(label=":arrows_counterclockwise: Atualizar dados da conta") 314 315 if confirm_new_bank_account_data and update_bank_account_button and account_password != "" and digital_account_password != "": 316 with col1: 317 with st.spinner(text="Aguarde..."): 318 sleep(2.5) 319 320 update_account_query = '''UPDATE contas_bancarias SET senha_bancaria_conta = %s, senha_digital_conta = %s WHERE nome_conta = %s AND nome_proprietario_conta = %s AND documento_proprietario_conta = %s;''' 321 update_account_values = (account_password, digital_account_password, selected_option, logged_user_name, logged_user_document) 322 323 QueryExecutor().insert_query(query=update_account_query, values=update_account_values, success_message="Conta atualizada com sucesso!", error_message="Erro ao atualizar conta:") 324 325 log_query = '''INSERT into logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)''' 326 query_values = (logged_user, 'Atualização', 'Atualizou a conta bancária {}'.format(selected_option)) 327 QueryExecutor().insert_query(query=log_query, values=query_values, success_message='Log gravado.', error_message='Erro ao gravar log:') 328 329 elif confirm_new_bank_account_data == False and update_bank_account_button and account_password != "" and digital_account_password != "": 330 with col2: 331 with st.expander(label="Validação dos dados", expanded=True): 332 st.warning(body="Confirme os novos dados da conta.") 333 334 elif safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == False: 335 with col2: 336 with st.spinner(text="Aguarde..."): 337 sleep(0.5) 338 with st.expander(label="Validação dos dados", expanded=True): 339 st.error(body="A senha informada é inválida.") 340 341 elif safe_password != confirm_safe_password: 342 with col2: 343 with st.spinner(text="Aguarde..."): 344 sleep(0.5) 345 with st.expander(label="Validação dos dados", expanded=True): 346 st.error(body="As senhas informadas não coincidem.")
Função para a atualização de uma conta bancária.
def
delete_bank_account(self):
348 def delete_bank_account(self): 349 """ 350 Função para a exclusão de uma conta bancária. 351 """ 352 logged_user_name, logged_user_document = Login().get_user_data(return_option="user_doc_name") 353 logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password") 354 355 user_accounts_quantity = self.get_user_accounts_quantity() 356 357 if user_accounts_quantity == 0: 358 col1, col2, col3 = st.columns(3) 359 with col2: 360 st.warning(body="Você ainda não possui contas cadastradas.") 361 362 elif user_accounts_quantity >= 1: 363 col1, col2 = st.columns(2) 364 user_bank_accounts = self.get_user_bank_accounts() 365 366 with col1: 367 with st.expander(label="Dados", expanded=True): 368 selected_option = st.selectbox( 369 label="Selecione a conta", options=user_bank_accounts) 370 safe_password = st.text_input( 371 label="Informe sua senha", type="password", help="Corresponde a senha utilizada para acessar a aplicação.") 372 confirm_safe_password = st.text_input( 373 label="Confirme sua senha", type="password", help="Deve ser idêntica a senha informada acima.") 374 confirm_password_selection = st.checkbox( 375 label="Confirmar seleção") 376 377 account_details_query = ''' 378 SELECT 379 CONCAT('Conta: ', 380 contas_bancarias.nome_conta, 381 ' - Instituição: ', 382 contas_bancarias.instituicao_financeira), 383 contas_bancarias.agencia, 384 CONCAT('', 385 contas_bancarias.numero_conta, 386 '-', 387 contas_bancarias.digito_conta), 388 contas_bancarias.senha_bancaria_conta, 389 contas_bancarias.senha_digital_conta 390 FROM 391 contas_bancarias 392 WHERE 393 contas_bancarias.nome_conta = %s 394 AND contas_bancarias.nome_proprietario_conta = %s 395 AND contas_bancarias.documento_proprietario_conta = %s;''' 396 397 result_list = QueryExecutor().complex_consult_query(query=account_details_query, 398 params=(selected_option, logged_user_name, logged_user_document)) 399 result_list = QueryExecutor().treat_complex_result( 400 values_to_treat=result_list, values_to_remove=to_remove_list) 401 402 if confirm_password_selection: 403 404 is_password_valid, hashed_password = Login().check_login(logged_user, safe_password) 405 406 if safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == True: 407 408 with col2: 409 with st.spinner(text="Aguarde..."): 410 sleep(0.5) 411 412 with st.expander(label="Dados", expanded=True): 413 414 aux_string = '' 415 416 for i in range(0, len(result_list)): 417 418 st.write(bank_account_field_names[i]) 419 aux_string = str(result_list[i]) 420 aux_string = aux_string.replace('"', '') 421 if aux_string.startswith('b'): 422 aux_string = aux_string[1:] 423 st.code(body="{}".format(aux_string)) 424 425 confirm_account_deletion = st.checkbox( 426 label="Confirmar exclusão da conta") 427 428 delete_account_button = st.button( 429 label=":wastebasket: Deletar conta") 430 431 if delete_account_button and confirm_account_deletion: 432 433 with col2: 434 with st.spinner(text="Aguarde..."): 435 sleep(2.5) 436 437 delete_account_query = '''DELETE contas_bancarias FROM contas_bancarias WHERE nome_conta = %s AND nome_proprietario_conta = %s AND documento_proprietario_conta = %s;''' 438 delete_account_values = ( 439 selected_option, logged_user_name, logged_user_document) 440 441 QueryExecutor().insert_query(query=delete_account_query, values=delete_account_values, 442 success_message="Conta excluída com sucesso!", error_message="Erro ao excluir conta:") 443 444 log_query = '''INSERT into logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES(%s, %s, %s)''' 445 query_values = ( 446 logged_user, 'Exclusão', 'Excluiu a conta bancária {}'.format(selected_option)) 447 QueryExecutor().insert_query(query=log_query, values=query_values, 448 success_message='Log gravado.', error_message='Erro ao gravar log:') 449 450 elif delete_account_button and confirm_account_deletion == False: 451 with col2: 452 with st.expander(label="Validação dos dados", expanded=True): 453 st.warning( 454 body="Confirme a exclusão da conta.") 455 456 elif safe_password != "" and confirm_safe_password != "" and safe_password == confirm_safe_password and is_password_valid == False: 457 with col2: 458 with st.spinner(text="Aguarde..."): 459 sleep(0.5) 460 with st.expander(label="Validação dos dados", expanded=True): 461 st.error(body="A senha informada é inválida.") 462 463 elif safe_password != confirm_safe_password: 464 with col2: 465 with st.spinner(text="Aguarde..."): 466 sleep(0.5) 467 with st.expander(label="Validação dos dados", expanded=True): 468 st.error( 469 body="As senhas informadas não coincidem.")
Função para a exclusão de uma conta bancária.