functions.credit_card
1from dictionary.db_config import db_config 2from dictionary.vars import ( 3 actual_year, 4 to_remove_list, 5 string_actual_month 6) 7from functions.query_executor import QueryExecutor 8from functions.login import Login 9import mysql.connector 10import re 11import streamlit as st 12 13 14class Credit_Card: 15 """ 16 Classe com métodos que representam as operações de um cartão de crédito. 17 """ 18 19 def get_card_month(self, selected_card: str): 20 """ 21 Obtém o mês de fatura do cartão no qual a data atual se encontra. 22 23 Parameters 24 ---------- 25 selected_card : str 26 O cartão selecionado pelo usuário. 27 28 Returns 29 ------- 30 actual_month : str 31 O nome do mês de fatura do cartão no qual a data atual se encontra. 32 """ 33 34 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 35 36 month_query = ''' 37 SELECT 38 mes 39 FROM 40 fechamentos_cartao 41 WHERE 42 CURDATE() BETWEEN data_comeco_fatura AND data_fim_fatura 43 AND nome_cartao = '{}' 44 AND documento_titular = {};'''.format(selected_card, user_document) 45 actual_month = QueryExecutor().simple_consult_brute_query(month_query) 46 actual_month = QueryExecutor().treat_simple_result(actual_month, to_remove_list) 47 48 return actual_month 49 50 def not_payed_expenses(self, selected_card: str): 51 """ 52 Consulta as despesas de cartão que ainda não foram pagas. 53 54 Parameters 55 ---------- 56 selected_card : str 57 O cartão selecionado pelo usuário. 58 """ 59 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 60 61 actual_month = self.get_card_month(selected_card) 62 63 credit_card_not_payed_expenses_query: str = """ 64 SELECT 65 COALESCE(SUM(despesas_cartao_credito.valor), 0) 66 FROM 67 despesas_cartao_credito 68 INNER JOIN 69 fechamentos_cartao ON despesas_cartao_credito.numero_cartao = fechamentos_cartao.numero_cartao 70 AND despesas_cartao_credito.doc_proprietario_cartao = fechamentos_cartao.documento_titular 71 INNER JOIN 72 usuarios ON despesas_cartao_credito.proprietario_despesa_cartao = usuarios.nome 73 AND despesas_cartao_credito.doc_proprietario_cartao = usuarios.documento 74 WHERE 75 despesas_cartao_credito.cartao = '{}' 76 AND despesas_cartao_credito.data <= fechamentos_cartao.data_comeco_fatura 77 # AND despesas_cartao_credito.data <= fechamentos_cartao.data_fim_fatura 78 AND despesas_cartao_credito.pago = 'N' 79 AND fechamentos_cartao.ano <= '{}' 80 AND fechamentos_cartao.mes = '{}' 81 AND usuarios.nome = '{}' 82 AND usuarios.documento = '{}';""".format(selected_card, actual_year, actual_month, user_name, user_document) 83 84 try: 85 connection = mysql.connector.connect(**db_config) 86 cursor = connection.cursor() 87 cursor.execute(credit_card_not_payed_expenses_query) 88 result = cursor.fetchone() 89 cursor.close() 90 if result and result[0] is not None: 91 return float(result[0]) 92 return 0.0 93 except mysql.connector.Error as err: 94 st.error(f"Erro ao consultar valor de despesas do cartão não pagas: {err}") 95 finally: 96 if connection.is_connected(): 97 connection.close() 98 99 def month_expenses(self, selected_card: str, year: int, selected_month: str): 100 """ 101 Consulta as despesas de cartão no mês e cartão selecionados. 102 103 Parameters 104 ---------- 105 selected_card : str 106 O cartão selecionado pelo usuário. 107 year : int 108 O ano passado como parâmetro. 109 selected_month : str 110 O mês selecionado pelo usuário. 111 112 Returns 113 ------- 114 float 115 O valor total das despesas do cartão no mês. 116 """ 117 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 118 119 credit_card_month_expenses_query: str = """ 120 SELECT 121 COALESCE(SUM(despesas_cartao_credito.valor), 0) 122 FROM 123 despesas_cartao_credito 124 INNER JOIN 125 fechamentos_cartao ON despesas_cartao_credito.numero_cartao = fechamentos_cartao.numero_cartao 126 AND despesas_cartao_credito.doc_proprietario_cartao = fechamentos_cartao.documento_titular 127 INNER JOIN 128 usuarios ON despesas_cartao_credito.proprietario_despesa_cartao = usuarios.nome 129 AND despesas_cartao_credito.doc_proprietario_cartao = usuarios.documento 130 WHERE 131 despesas_cartao_credito.cartao = '{}' 132 AND despesas_cartao_credito.data >= fechamentos_cartao.data_comeco_fatura 133 AND despesas_cartao_credito.data <= fechamentos_cartao.data_fim_fatura 134 AND despesas_cartao_credito.pago = 'N' 135 AND fechamentos_cartao.ano = '{}' 136 AND fechamentos_cartao.mes = '{}' 137 AND usuarios.nome = '{}' 138 AND usuarios.documento = '{}';""".format(selected_card, year, selected_month, user_name, user_document) 139 140 try: 141 connection = mysql.connector.connect(**db_config) 142 cursor = connection.cursor() 143 cursor.execute(credit_card_month_expenses_query) 144 result = cursor.fetchone() 145 cursor.close() 146 if result and result[0] is not None: 147 return float(result[0]) 148 return 0.0 149 except mysql.connector.Error as err: 150 st.error(f"Erro ao consultar valor total de despesas do cartão no mês: {err}") 151 finally: 152 if connection.is_connected(): 153 connection.close() 154 155 def get_complete_card_month_expenses(self, selected_card: str, year: int, selected_month: str): 156 """ 157 Consulta os detalhes das despesas de cartão no mês selecionado pelo usuário. 158 159 Parameters 160 ---------- 161 selected_card : str 162 O cartão selecionado pelo usuário. 163 year : int 164 O ano passado como parâmetro. 165 selected_month : str 166 O mês selecionado pelo usuário. 167 168 Returns 169 ------- 170 descricao_list : list 171 A lista com a descrição das despesas. 172 valor_list : list 173 A lista com o valor das despesas. 174 data_list : list 175 A lista com a data das despesas. 176 categoria_list : list 177 A lista com a categoria das despesas. 178 parcela_list : list 179 A lista com a parcela das despesas. 180 """ 181 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 182 183 credit_card_month_expenses_complete_query: str = """ 184 SELECT 185 despesas_cartao_credito.descricao AS 'Descrição', 186 despesas_cartao_credito.valor AS 'Valor', 187 despesas_cartao_credito.data AS 'Data', 188 despesas_cartao_credito.categoria AS 'Categoria', 189 CONCAT(despesas_cartao_credito.parcela, 'ª') AS 'Parcela' 190 FROM 191 despesas_cartao_credito 192 INNER JOIN 193 fechamentos_cartao ON despesas_cartao_credito.numero_cartao = fechamentos_cartao.numero_cartao 194 AND despesas_cartao_credito.doc_proprietario_cartao = fechamentos_cartao.documento_titular 195 INNER JOIN 196 usuarios ON despesas_cartao_credito.proprietario_despesa_cartao = usuarios.nome 197 AND despesas_cartao_credito.doc_proprietario_cartao = usuarios.documento 198 WHERE 199 despesas_cartao_credito.cartao = '{}' 200 AND despesas_cartao_credito.data >= fechamentos_cartao.data_comeco_fatura 201 AND despesas_cartao_credito.data <= fechamentos_cartao.data_fim_fatura 202 AND despesas_cartao_credito.pago = 'N' 203 AND fechamentos_cartao.ano = '{}' 204 AND fechamentos_cartao.mes = '{}' 205 AND usuarios.nome = '{}' 206 AND usuarios.documento = '{}';""".format(selected_card, year, selected_month, user_name, user_document) 207 208 try: 209 connection = mysql.connector.connect(**db_config) 210 cursor = connection.cursor() 211 cursor.execute(credit_card_month_expenses_complete_query) 212 213 descricao_list = [] 214 valor_list = [] 215 data_list = [] 216 categoria_list = [] 217 parcela_list = [] 218 219 for row in cursor.fetchall(): 220 descricao_list.append(row[0]) 221 valor_list.append(row[1]) 222 data_list.append(row[2]) 223 categoria_list.append(row[3]) 224 parcela_list.append(row[4]) 225 226 cursor.close() 227 228 return ( 229 descricao_list, 230 valor_list, 231 data_list, 232 categoria_list, 233 parcela_list, 234 ) 235 236 except mysql.connector.Error as err: 237 st.error(f"Erro ao consultar detalhamento das despesas do cartão no mês: {err}") 238 finally: 239 if connection.is_connected(): 240 connection.close() 241 242 def get_card_id_month_expenses(self, selected_card: str, year: int, selected_month: str): 243 """ 244 Consulta o id das despesas de cartão no mês selecionado. 245 246 Parameters 247 ---------- 248 selected_card : str 249 O cartão selecionado pelo usuário. 250 year : int 251 O ano passado como parâmetro. 252 selected_month : str 253 O mês da fatura selecionada. 254 255 Returns 256 ------- 257 converted_id_list : list 258 A lista com os ID's de despesas de cartão no mês. 259 """ 260 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 261 262 credit_card_id_expenses_query = """ 263 SELECT 264 despesas_cartao_credito.id_despesa_cartao 265 FROM 266 despesas_cartao_credito 267 INNER JOIN 268 fechamentos_cartao ON despesas_cartao_credito.numero_cartao = fechamentos_cartao.numero_cartao 269 AND despesas_cartao_credito.doc_proprietario_cartao = fechamentos_cartao.documento_titular 270 INNER JOIN 271 usuarios ON despesas_cartao_credito.proprietario_despesa_cartao = usuarios.nome 272 AND despesas_cartao_credito.doc_proprietario_cartao = usuarios.documento 273 WHERE 274 despesas_cartao_credito.cartao = '{}' 275 AND despesas_cartao_credito.data >= fechamentos_cartao.data_comeco_fatura 276 AND despesas_cartao_credito.data <= fechamentos_cartao.data_fim_fatura 277 AND fechamentos_cartao.ano = '{}' 278 AND fechamentos_cartao.mes = '{}' 279 AND usuarios.nome = '{}' 280 AND usuarios.documento = '{}' 281 AND pago = 'N';""".format(selected_card, year, selected_month, user_name, user_document) 282 283 try: 284 connection = mysql.connector.connect(**db_config) 285 cursor = connection.cursor() 286 cursor.execute(credit_card_id_expenses_query) 287 id_list = cursor.fetchall() 288 cursor.close() 289 290 converted_id_list = [] 291 292 for row in id_list: 293 id_ = str(row[0]) 294 id_ = re.sub(r"['()Decimal,]", "", id_) 295 float_id = int(id_) 296 converted_id_list.append(float_id) 297 298 return converted_id_list 299 300 except mysql.connector.Error as err: 301 st.error( 302 f"Erro ao consultar id's das despesas do cartão no mês: {err}") 303 finally: 304 if connection.is_connected(): 305 connection.close() 306 307 def future_expenses(self, selected_card: str): 308 """ 309 Consulta o valor das próximas despesas do cartão. 310 311 Parameters 312 ---------- 313 selected_card : str 314 O cartão selecionado pelo usuário. 315 316 Returns 317 ------- 318 float 319 O valor total das despesas futuras. 320 """ 321 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 322 323 actual_month = self.get_card_month(selected_card) 324 325 credit_card_next_expenses_query: str = """ 326 SELECT 327 COALESCE(SUM(despesas_cartao_credito.valor), 0) 328 FROM 329 despesas_cartao_credito 330 INNER JOIN 331 fechamentos_cartao ON despesas_cartao_credito.numero_cartao = fechamentos_cartao.numero_cartao 332 AND despesas_cartao_credito.doc_proprietario_cartao = fechamentos_cartao.documento_titular 333 INNER JOIN 334 usuarios ON despesas_cartao_credito.proprietario_despesa_cartao = usuarios.nome 335 AND despesas_cartao_credito.doc_proprietario_cartao = usuarios.documento 336 WHERE 337 despesas_cartao_credito.cartao = '{}' 338 AND despesas_cartao_credito.pago = 'N' 339 AND despesas_cartao_credito.data > fechamentos_cartao.data_fim_fatura 340 AND fechamentos_cartao.ano = '{}' 341 AND fechamentos_cartao.mes = '{}' 342 AND usuarios.nome = '{}' 343 AND usuarios.documento = '{}';""".format(selected_card, actual_year, actual_month, user_name, user_document) 344 345 try: 346 connection = mysql.connector.connect(**db_config) 347 cursor = connection.cursor() 348 cursor.execute(credit_card_next_expenses_query) 349 result = cursor.fetchone() 350 cursor.close() 351 if result and result[0] is not None: 352 return float(result[0]) 353 return 0.0 354 except mysql.connector.Error as err: 355 st.error(f"Erro ao consultar valor total das despesas futuras do cartão: {err}") 356 finally: 357 if connection.is_connected(): 358 connection.close() 359 360 def card_limit(self, selected_card: str): 361 """ 362 Consulta o limite do cartão. 363 364 Parameters 365 ---------- 366 selected_card : str 367 O cartão selecionado pelo usuário. 368 369 Returns 370 ------- 371 float 372 O limite de crédito do cartão. 373 """ 374 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 375 376 credit_card_limit_query: str = """ 377 SELECT 378 COALESCE(SUM(cartao_credito.limite_credito), 0) 379 FROM 380 cartao_credito 381 INNER JOIN 382 usuarios ON cartao_credito.documento_titular = usuarios.documento 383 AND cartao_credito.proprietario_cartao = usuarios.nome 384 WHERE 385 cartao_credito.nome_cartao = '{}' 386 AND usuarios.nome = '{}' 387 AND usuarios.documento = '{}';""".format(selected_card, user_name, user_document) 388 389 try: 390 connection = mysql.connector.connect(**db_config) 391 cursor = connection.cursor() 392 cursor.execute(credit_card_limit_query) 393 result = cursor.fetchone() 394 cursor.close() 395 if result and result[0] is not None: 396 return float(result[0]) 397 return 0.0 398 except mysql.connector.Error as err: 399 st.error(f"Erro ao consultar limite do cartão: {err}") 400 finally: 401 if connection.is_connected(): 402 connection.close() 403 404 def get_credit_card_key(self, card: str): 405 """ 406 Consulta os dados do cartão selecionado. 407 408 Parameters 409 ---------- 410 card : str 411 O cartão selecionado pelo usuário. 412 413 Returns 414 ------- 415 card_number : str 416 O número do cartão. 417 card_owner : str 418 O nome do proprietário do cartão. 419 card_owner_document : int 420 O documento do proprietário do cartão. 421 card_security_code : str 422 O código de segurança do cartão. 423 """ 424 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 425 426 card_key_query = """ 427 SELECT 428 cartao_credito.numero_cartao, 429 cartao_credito.proprietario_cartao, 430 cartao_credito.documento_titular, 431 cartao_credito.codigo_seguranca 432 FROM 433 cartao_credito 434 INNER JOIN 435 usuarios ON cartao_credito.proprietario_cartao = usuarios.nome 436 AND cartao_credito.documento_titular = usuarios.documento 437 WHERE 438 cartao_credito.nome_cartao = '{}' 439 AND usuarios.nome = '{}' 440 AND usuarios.documento = '{}';""".format(card, user_name, user_document) 441 442 try: 443 connection = mysql.connector.connect(**db_config) 444 cursor = connection.cursor() 445 cursor.execute(card_key_query) 446 result = cursor.fetchall() 447 cursor.close() 448 449 if result is not None and len(result) > 0 and result[0] is not None: 450 451 str_card_key_list = str(result[0]) 452 453 str_card_key_list = str_card_key_list.replace(")", "") 454 str_card_key_list = str_card_key_list.replace("(", "") 455 str_card_key_list = str_card_key_list.replace("'", "") 456 str_card_key_list = str_card_key_list.split(", ") 457 458 card_number = str_card_key_list[0] 459 card_owner = str_card_key_list[1] 460 card_owner_document = int(str_card_key_list[2]) 461 card_security_code = str_card_key_list[3] 462 463 return ( 464 card_number, 465 card_owner, 466 card_owner_document, 467 card_security_code, 468 ) 469 470 else: 471 return ["9999999999999999", "Sem proprietário", 99999999999, 000] 472 473 except mysql.connector.Error as err: 474 st.error(f"Erro ao consultar chave do cartão: {err}") 475 finally: 476 if connection.is_connected(): 477 connection.close() 478 479 def card_remaining_limit(self, selected_card: str): 480 """ 481 Calcula o limite restante do cartão de crédito. 482 483 Parameters 484 ---------- 485 selected_card : str 486 O cartão de crédito selecionado. 487 488 Returns 489 ------- 490 remaining_limit : float 491 0 valor do limite restante do cartão. 492 """ 493 card_total_limit = self.card_limit(selected_card) 494 not_payed_expenses = self.not_payed_expenses(selected_card) 495 month_card_expenses = self.month_expenses(selected_card, actual_year, string_actual_month) 496 future_card_expenses = self.future_expenses(selected_card) 497 total_card_expenses = month_card_expenses + \ 498 future_card_expenses + not_payed_expenses 499 remaining_limit = card_total_limit - total_card_expenses 500 return remaining_limit
class
Credit_Card:
15class Credit_Card: 16 """ 17 Classe com métodos que representam as operações de um cartão de crédito. 18 """ 19 20 def get_card_month(self, selected_card: str): 21 """ 22 Obtém o mês de fatura do cartão no qual a data atual se encontra. 23 24 Parameters 25 ---------- 26 selected_card : str 27 O cartão selecionado pelo usuário. 28 29 Returns 30 ------- 31 actual_month : str 32 O nome do mês de fatura do cartão no qual a data atual se encontra. 33 """ 34 35 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 36 37 month_query = ''' 38 SELECT 39 mes 40 FROM 41 fechamentos_cartao 42 WHERE 43 CURDATE() BETWEEN data_comeco_fatura AND data_fim_fatura 44 AND nome_cartao = '{}' 45 AND documento_titular = {};'''.format(selected_card, user_document) 46 actual_month = QueryExecutor().simple_consult_brute_query(month_query) 47 actual_month = QueryExecutor().treat_simple_result(actual_month, to_remove_list) 48 49 return actual_month 50 51 def not_payed_expenses(self, selected_card: str): 52 """ 53 Consulta as despesas de cartão que ainda não foram pagas. 54 55 Parameters 56 ---------- 57 selected_card : str 58 O cartão selecionado pelo usuário. 59 """ 60 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 61 62 actual_month = self.get_card_month(selected_card) 63 64 credit_card_not_payed_expenses_query: str = """ 65 SELECT 66 COALESCE(SUM(despesas_cartao_credito.valor), 0) 67 FROM 68 despesas_cartao_credito 69 INNER JOIN 70 fechamentos_cartao ON despesas_cartao_credito.numero_cartao = fechamentos_cartao.numero_cartao 71 AND despesas_cartao_credito.doc_proprietario_cartao = fechamentos_cartao.documento_titular 72 INNER JOIN 73 usuarios ON despesas_cartao_credito.proprietario_despesa_cartao = usuarios.nome 74 AND despesas_cartao_credito.doc_proprietario_cartao = usuarios.documento 75 WHERE 76 despesas_cartao_credito.cartao = '{}' 77 AND despesas_cartao_credito.data <= fechamentos_cartao.data_comeco_fatura 78 # AND despesas_cartao_credito.data <= fechamentos_cartao.data_fim_fatura 79 AND despesas_cartao_credito.pago = 'N' 80 AND fechamentos_cartao.ano <= '{}' 81 AND fechamentos_cartao.mes = '{}' 82 AND usuarios.nome = '{}' 83 AND usuarios.documento = '{}';""".format(selected_card, actual_year, actual_month, user_name, user_document) 84 85 try: 86 connection = mysql.connector.connect(**db_config) 87 cursor = connection.cursor() 88 cursor.execute(credit_card_not_payed_expenses_query) 89 result = cursor.fetchone() 90 cursor.close() 91 if result and result[0] is not None: 92 return float(result[0]) 93 return 0.0 94 except mysql.connector.Error as err: 95 st.error(f"Erro ao consultar valor de despesas do cartão não pagas: {err}") 96 finally: 97 if connection.is_connected(): 98 connection.close() 99 100 def month_expenses(self, selected_card: str, year: int, selected_month: str): 101 """ 102 Consulta as despesas de cartão no mês e cartão selecionados. 103 104 Parameters 105 ---------- 106 selected_card : str 107 O cartão selecionado pelo usuário. 108 year : int 109 O ano passado como parâmetro. 110 selected_month : str 111 O mês selecionado pelo usuário. 112 113 Returns 114 ------- 115 float 116 O valor total das despesas do cartão no mês. 117 """ 118 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 119 120 credit_card_month_expenses_query: str = """ 121 SELECT 122 COALESCE(SUM(despesas_cartao_credito.valor), 0) 123 FROM 124 despesas_cartao_credito 125 INNER JOIN 126 fechamentos_cartao ON despesas_cartao_credito.numero_cartao = fechamentos_cartao.numero_cartao 127 AND despesas_cartao_credito.doc_proprietario_cartao = fechamentos_cartao.documento_titular 128 INNER JOIN 129 usuarios ON despesas_cartao_credito.proprietario_despesa_cartao = usuarios.nome 130 AND despesas_cartao_credito.doc_proprietario_cartao = usuarios.documento 131 WHERE 132 despesas_cartao_credito.cartao = '{}' 133 AND despesas_cartao_credito.data >= fechamentos_cartao.data_comeco_fatura 134 AND despesas_cartao_credito.data <= fechamentos_cartao.data_fim_fatura 135 AND despesas_cartao_credito.pago = 'N' 136 AND fechamentos_cartao.ano = '{}' 137 AND fechamentos_cartao.mes = '{}' 138 AND usuarios.nome = '{}' 139 AND usuarios.documento = '{}';""".format(selected_card, year, selected_month, user_name, user_document) 140 141 try: 142 connection = mysql.connector.connect(**db_config) 143 cursor = connection.cursor() 144 cursor.execute(credit_card_month_expenses_query) 145 result = cursor.fetchone() 146 cursor.close() 147 if result and result[0] is not None: 148 return float(result[0]) 149 return 0.0 150 except mysql.connector.Error as err: 151 st.error(f"Erro ao consultar valor total de despesas do cartão no mês: {err}") 152 finally: 153 if connection.is_connected(): 154 connection.close() 155 156 def get_complete_card_month_expenses(self, selected_card: str, year: int, selected_month: str): 157 """ 158 Consulta os detalhes das despesas de cartão no mês selecionado pelo usuário. 159 160 Parameters 161 ---------- 162 selected_card : str 163 O cartão selecionado pelo usuário. 164 year : int 165 O ano passado como parâmetro. 166 selected_month : str 167 O mês selecionado pelo usuário. 168 169 Returns 170 ------- 171 descricao_list : list 172 A lista com a descrição das despesas. 173 valor_list : list 174 A lista com o valor das despesas. 175 data_list : list 176 A lista com a data das despesas. 177 categoria_list : list 178 A lista com a categoria das despesas. 179 parcela_list : list 180 A lista com a parcela das despesas. 181 """ 182 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 183 184 credit_card_month_expenses_complete_query: str = """ 185 SELECT 186 despesas_cartao_credito.descricao AS 'Descrição', 187 despesas_cartao_credito.valor AS 'Valor', 188 despesas_cartao_credito.data AS 'Data', 189 despesas_cartao_credito.categoria AS 'Categoria', 190 CONCAT(despesas_cartao_credito.parcela, 'ª') AS 'Parcela' 191 FROM 192 despesas_cartao_credito 193 INNER JOIN 194 fechamentos_cartao ON despesas_cartao_credito.numero_cartao = fechamentos_cartao.numero_cartao 195 AND despesas_cartao_credito.doc_proprietario_cartao = fechamentos_cartao.documento_titular 196 INNER JOIN 197 usuarios ON despesas_cartao_credito.proprietario_despesa_cartao = usuarios.nome 198 AND despesas_cartao_credito.doc_proprietario_cartao = usuarios.documento 199 WHERE 200 despesas_cartao_credito.cartao = '{}' 201 AND despesas_cartao_credito.data >= fechamentos_cartao.data_comeco_fatura 202 AND despesas_cartao_credito.data <= fechamentos_cartao.data_fim_fatura 203 AND despesas_cartao_credito.pago = 'N' 204 AND fechamentos_cartao.ano = '{}' 205 AND fechamentos_cartao.mes = '{}' 206 AND usuarios.nome = '{}' 207 AND usuarios.documento = '{}';""".format(selected_card, year, selected_month, user_name, user_document) 208 209 try: 210 connection = mysql.connector.connect(**db_config) 211 cursor = connection.cursor() 212 cursor.execute(credit_card_month_expenses_complete_query) 213 214 descricao_list = [] 215 valor_list = [] 216 data_list = [] 217 categoria_list = [] 218 parcela_list = [] 219 220 for row in cursor.fetchall(): 221 descricao_list.append(row[0]) 222 valor_list.append(row[1]) 223 data_list.append(row[2]) 224 categoria_list.append(row[3]) 225 parcela_list.append(row[4]) 226 227 cursor.close() 228 229 return ( 230 descricao_list, 231 valor_list, 232 data_list, 233 categoria_list, 234 parcela_list, 235 ) 236 237 except mysql.connector.Error as err: 238 st.error(f"Erro ao consultar detalhamento das despesas do cartão no mês: {err}") 239 finally: 240 if connection.is_connected(): 241 connection.close() 242 243 def get_card_id_month_expenses(self, selected_card: str, year: int, selected_month: str): 244 """ 245 Consulta o id das despesas de cartão no mês selecionado. 246 247 Parameters 248 ---------- 249 selected_card : str 250 O cartão selecionado pelo usuário. 251 year : int 252 O ano passado como parâmetro. 253 selected_month : str 254 O mês da fatura selecionada. 255 256 Returns 257 ------- 258 converted_id_list : list 259 A lista com os ID's de despesas de cartão no mês. 260 """ 261 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 262 263 credit_card_id_expenses_query = """ 264 SELECT 265 despesas_cartao_credito.id_despesa_cartao 266 FROM 267 despesas_cartao_credito 268 INNER JOIN 269 fechamentos_cartao ON despesas_cartao_credito.numero_cartao = fechamentos_cartao.numero_cartao 270 AND despesas_cartao_credito.doc_proprietario_cartao = fechamentos_cartao.documento_titular 271 INNER JOIN 272 usuarios ON despesas_cartao_credito.proprietario_despesa_cartao = usuarios.nome 273 AND despesas_cartao_credito.doc_proprietario_cartao = usuarios.documento 274 WHERE 275 despesas_cartao_credito.cartao = '{}' 276 AND despesas_cartao_credito.data >= fechamentos_cartao.data_comeco_fatura 277 AND despesas_cartao_credito.data <= fechamentos_cartao.data_fim_fatura 278 AND fechamentos_cartao.ano = '{}' 279 AND fechamentos_cartao.mes = '{}' 280 AND usuarios.nome = '{}' 281 AND usuarios.documento = '{}' 282 AND pago = 'N';""".format(selected_card, year, selected_month, user_name, user_document) 283 284 try: 285 connection = mysql.connector.connect(**db_config) 286 cursor = connection.cursor() 287 cursor.execute(credit_card_id_expenses_query) 288 id_list = cursor.fetchall() 289 cursor.close() 290 291 converted_id_list = [] 292 293 for row in id_list: 294 id_ = str(row[0]) 295 id_ = re.sub(r"['()Decimal,]", "", id_) 296 float_id = int(id_) 297 converted_id_list.append(float_id) 298 299 return converted_id_list 300 301 except mysql.connector.Error as err: 302 st.error( 303 f"Erro ao consultar id's das despesas do cartão no mês: {err}") 304 finally: 305 if connection.is_connected(): 306 connection.close() 307 308 def future_expenses(self, selected_card: str): 309 """ 310 Consulta o valor das próximas despesas do cartão. 311 312 Parameters 313 ---------- 314 selected_card : str 315 O cartão selecionado pelo usuário. 316 317 Returns 318 ------- 319 float 320 O valor total das despesas futuras. 321 """ 322 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 323 324 actual_month = self.get_card_month(selected_card) 325 326 credit_card_next_expenses_query: str = """ 327 SELECT 328 COALESCE(SUM(despesas_cartao_credito.valor), 0) 329 FROM 330 despesas_cartao_credito 331 INNER JOIN 332 fechamentos_cartao ON despesas_cartao_credito.numero_cartao = fechamentos_cartao.numero_cartao 333 AND despesas_cartao_credito.doc_proprietario_cartao = fechamentos_cartao.documento_titular 334 INNER JOIN 335 usuarios ON despesas_cartao_credito.proprietario_despesa_cartao = usuarios.nome 336 AND despesas_cartao_credito.doc_proprietario_cartao = usuarios.documento 337 WHERE 338 despesas_cartao_credito.cartao = '{}' 339 AND despesas_cartao_credito.pago = 'N' 340 AND despesas_cartao_credito.data > fechamentos_cartao.data_fim_fatura 341 AND fechamentos_cartao.ano = '{}' 342 AND fechamentos_cartao.mes = '{}' 343 AND usuarios.nome = '{}' 344 AND usuarios.documento = '{}';""".format(selected_card, actual_year, actual_month, user_name, user_document) 345 346 try: 347 connection = mysql.connector.connect(**db_config) 348 cursor = connection.cursor() 349 cursor.execute(credit_card_next_expenses_query) 350 result = cursor.fetchone() 351 cursor.close() 352 if result and result[0] is not None: 353 return float(result[0]) 354 return 0.0 355 except mysql.connector.Error as err: 356 st.error(f"Erro ao consultar valor total das despesas futuras do cartão: {err}") 357 finally: 358 if connection.is_connected(): 359 connection.close() 360 361 def card_limit(self, selected_card: str): 362 """ 363 Consulta o limite do cartão. 364 365 Parameters 366 ---------- 367 selected_card : str 368 O cartão selecionado pelo usuário. 369 370 Returns 371 ------- 372 float 373 O limite de crédito do cartão. 374 """ 375 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 376 377 credit_card_limit_query: str = """ 378 SELECT 379 COALESCE(SUM(cartao_credito.limite_credito), 0) 380 FROM 381 cartao_credito 382 INNER JOIN 383 usuarios ON cartao_credito.documento_titular = usuarios.documento 384 AND cartao_credito.proprietario_cartao = usuarios.nome 385 WHERE 386 cartao_credito.nome_cartao = '{}' 387 AND usuarios.nome = '{}' 388 AND usuarios.documento = '{}';""".format(selected_card, user_name, user_document) 389 390 try: 391 connection = mysql.connector.connect(**db_config) 392 cursor = connection.cursor() 393 cursor.execute(credit_card_limit_query) 394 result = cursor.fetchone() 395 cursor.close() 396 if result and result[0] is not None: 397 return float(result[0]) 398 return 0.0 399 except mysql.connector.Error as err: 400 st.error(f"Erro ao consultar limite do cartão: {err}") 401 finally: 402 if connection.is_connected(): 403 connection.close() 404 405 def get_credit_card_key(self, card: str): 406 """ 407 Consulta os dados do cartão selecionado. 408 409 Parameters 410 ---------- 411 card : str 412 O cartão selecionado pelo usuário. 413 414 Returns 415 ------- 416 card_number : str 417 O número do cartão. 418 card_owner : str 419 O nome do proprietário do cartão. 420 card_owner_document : int 421 O documento do proprietário do cartão. 422 card_security_code : str 423 O código de segurança do cartão. 424 """ 425 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 426 427 card_key_query = """ 428 SELECT 429 cartao_credito.numero_cartao, 430 cartao_credito.proprietario_cartao, 431 cartao_credito.documento_titular, 432 cartao_credito.codigo_seguranca 433 FROM 434 cartao_credito 435 INNER JOIN 436 usuarios ON cartao_credito.proprietario_cartao = usuarios.nome 437 AND cartao_credito.documento_titular = usuarios.documento 438 WHERE 439 cartao_credito.nome_cartao = '{}' 440 AND usuarios.nome = '{}' 441 AND usuarios.documento = '{}';""".format(card, user_name, user_document) 442 443 try: 444 connection = mysql.connector.connect(**db_config) 445 cursor = connection.cursor() 446 cursor.execute(card_key_query) 447 result = cursor.fetchall() 448 cursor.close() 449 450 if result is not None and len(result) > 0 and result[0] is not None: 451 452 str_card_key_list = str(result[0]) 453 454 str_card_key_list = str_card_key_list.replace(")", "") 455 str_card_key_list = str_card_key_list.replace("(", "") 456 str_card_key_list = str_card_key_list.replace("'", "") 457 str_card_key_list = str_card_key_list.split(", ") 458 459 card_number = str_card_key_list[0] 460 card_owner = str_card_key_list[1] 461 card_owner_document = int(str_card_key_list[2]) 462 card_security_code = str_card_key_list[3] 463 464 return ( 465 card_number, 466 card_owner, 467 card_owner_document, 468 card_security_code, 469 ) 470 471 else: 472 return ["9999999999999999", "Sem proprietário", 99999999999, 000] 473 474 except mysql.connector.Error as err: 475 st.error(f"Erro ao consultar chave do cartão: {err}") 476 finally: 477 if connection.is_connected(): 478 connection.close() 479 480 def card_remaining_limit(self, selected_card: str): 481 """ 482 Calcula o limite restante do cartão de crédito. 483 484 Parameters 485 ---------- 486 selected_card : str 487 O cartão de crédito selecionado. 488 489 Returns 490 ------- 491 remaining_limit : float 492 0 valor do limite restante do cartão. 493 """ 494 card_total_limit = self.card_limit(selected_card) 495 not_payed_expenses = self.not_payed_expenses(selected_card) 496 month_card_expenses = self.month_expenses(selected_card, actual_year, string_actual_month) 497 future_card_expenses = self.future_expenses(selected_card) 498 total_card_expenses = month_card_expenses + \ 499 future_card_expenses + not_payed_expenses 500 remaining_limit = card_total_limit - total_card_expenses 501 return remaining_limit
Classe com métodos que representam as operações de um cartão de crédito.
def
get_card_month(self, selected_card: str):
20 def get_card_month(self, selected_card: str): 21 """ 22 Obtém o mês de fatura do cartão no qual a data atual se encontra. 23 24 Parameters 25 ---------- 26 selected_card : str 27 O cartão selecionado pelo usuário. 28 29 Returns 30 ------- 31 actual_month : str 32 O nome do mês de fatura do cartão no qual a data atual se encontra. 33 """ 34 35 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 36 37 month_query = ''' 38 SELECT 39 mes 40 FROM 41 fechamentos_cartao 42 WHERE 43 CURDATE() BETWEEN data_comeco_fatura AND data_fim_fatura 44 AND nome_cartao = '{}' 45 AND documento_titular = {};'''.format(selected_card, user_document) 46 actual_month = QueryExecutor().simple_consult_brute_query(month_query) 47 actual_month = QueryExecutor().treat_simple_result(actual_month, to_remove_list) 48 49 return actual_month
Obtém o mês de fatura do cartão no qual a data atual se encontra.
Parameters
- selected_card (str): O cartão selecionado pelo usuário.
Returns
- actual_month (str): O nome do mês de fatura do cartão no qual a data atual se encontra.
def
not_payed_expenses(self, selected_card: str):
51 def not_payed_expenses(self, selected_card: str): 52 """ 53 Consulta as despesas de cartão que ainda não foram pagas. 54 55 Parameters 56 ---------- 57 selected_card : str 58 O cartão selecionado pelo usuário. 59 """ 60 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 61 62 actual_month = self.get_card_month(selected_card) 63 64 credit_card_not_payed_expenses_query: str = """ 65 SELECT 66 COALESCE(SUM(despesas_cartao_credito.valor), 0) 67 FROM 68 despesas_cartao_credito 69 INNER JOIN 70 fechamentos_cartao ON despesas_cartao_credito.numero_cartao = fechamentos_cartao.numero_cartao 71 AND despesas_cartao_credito.doc_proprietario_cartao = fechamentos_cartao.documento_titular 72 INNER JOIN 73 usuarios ON despesas_cartao_credito.proprietario_despesa_cartao = usuarios.nome 74 AND despesas_cartao_credito.doc_proprietario_cartao = usuarios.documento 75 WHERE 76 despesas_cartao_credito.cartao = '{}' 77 AND despesas_cartao_credito.data <= fechamentos_cartao.data_comeco_fatura 78 # AND despesas_cartao_credito.data <= fechamentos_cartao.data_fim_fatura 79 AND despesas_cartao_credito.pago = 'N' 80 AND fechamentos_cartao.ano <= '{}' 81 AND fechamentos_cartao.mes = '{}' 82 AND usuarios.nome = '{}' 83 AND usuarios.documento = '{}';""".format(selected_card, actual_year, actual_month, user_name, user_document) 84 85 try: 86 connection = mysql.connector.connect(**db_config) 87 cursor = connection.cursor() 88 cursor.execute(credit_card_not_payed_expenses_query) 89 result = cursor.fetchone() 90 cursor.close() 91 if result and result[0] is not None: 92 return float(result[0]) 93 return 0.0 94 except mysql.connector.Error as err: 95 st.error(f"Erro ao consultar valor de despesas do cartão não pagas: {err}") 96 finally: 97 if connection.is_connected(): 98 connection.close()
Consulta as despesas de cartão que ainda não foram pagas.
Parameters
- selected_card (str): O cartão selecionado pelo usuário.
def
month_expenses(self, selected_card: str, year: int, selected_month: str):
100 def month_expenses(self, selected_card: str, year: int, selected_month: str): 101 """ 102 Consulta as despesas de cartão no mês e cartão selecionados. 103 104 Parameters 105 ---------- 106 selected_card : str 107 O cartão selecionado pelo usuário. 108 year : int 109 O ano passado como parâmetro. 110 selected_month : str 111 O mês selecionado pelo usuário. 112 113 Returns 114 ------- 115 float 116 O valor total das despesas do cartão no mês. 117 """ 118 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 119 120 credit_card_month_expenses_query: str = """ 121 SELECT 122 COALESCE(SUM(despesas_cartao_credito.valor), 0) 123 FROM 124 despesas_cartao_credito 125 INNER JOIN 126 fechamentos_cartao ON despesas_cartao_credito.numero_cartao = fechamentos_cartao.numero_cartao 127 AND despesas_cartao_credito.doc_proprietario_cartao = fechamentos_cartao.documento_titular 128 INNER JOIN 129 usuarios ON despesas_cartao_credito.proprietario_despesa_cartao = usuarios.nome 130 AND despesas_cartao_credito.doc_proprietario_cartao = usuarios.documento 131 WHERE 132 despesas_cartao_credito.cartao = '{}' 133 AND despesas_cartao_credito.data >= fechamentos_cartao.data_comeco_fatura 134 AND despesas_cartao_credito.data <= fechamentos_cartao.data_fim_fatura 135 AND despesas_cartao_credito.pago = 'N' 136 AND fechamentos_cartao.ano = '{}' 137 AND fechamentos_cartao.mes = '{}' 138 AND usuarios.nome = '{}' 139 AND usuarios.documento = '{}';""".format(selected_card, year, selected_month, user_name, user_document) 140 141 try: 142 connection = mysql.connector.connect(**db_config) 143 cursor = connection.cursor() 144 cursor.execute(credit_card_month_expenses_query) 145 result = cursor.fetchone() 146 cursor.close() 147 if result and result[0] is not None: 148 return float(result[0]) 149 return 0.0 150 except mysql.connector.Error as err: 151 st.error(f"Erro ao consultar valor total de despesas do cartão no mês: {err}") 152 finally: 153 if connection.is_connected(): 154 connection.close()
Consulta as despesas de cartão no mês e cartão selecionados.
Parameters
- selected_card (str): O cartão selecionado pelo usuário.
- year (int): O ano passado como parâmetro.
- selected_month (str): O mês selecionado pelo usuário.
Returns
- float: O valor total das despesas do cartão no mês.
def
get_complete_card_month_expenses(self, selected_card: str, year: int, selected_month: str):
156 def get_complete_card_month_expenses(self, selected_card: str, year: int, selected_month: str): 157 """ 158 Consulta os detalhes das despesas de cartão no mês selecionado pelo usuário. 159 160 Parameters 161 ---------- 162 selected_card : str 163 O cartão selecionado pelo usuário. 164 year : int 165 O ano passado como parâmetro. 166 selected_month : str 167 O mês selecionado pelo usuário. 168 169 Returns 170 ------- 171 descricao_list : list 172 A lista com a descrição das despesas. 173 valor_list : list 174 A lista com o valor das despesas. 175 data_list : list 176 A lista com a data das despesas. 177 categoria_list : list 178 A lista com a categoria das despesas. 179 parcela_list : list 180 A lista com a parcela das despesas. 181 """ 182 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 183 184 credit_card_month_expenses_complete_query: str = """ 185 SELECT 186 despesas_cartao_credito.descricao AS 'Descrição', 187 despesas_cartao_credito.valor AS 'Valor', 188 despesas_cartao_credito.data AS 'Data', 189 despesas_cartao_credito.categoria AS 'Categoria', 190 CONCAT(despesas_cartao_credito.parcela, 'ª') AS 'Parcela' 191 FROM 192 despesas_cartao_credito 193 INNER JOIN 194 fechamentos_cartao ON despesas_cartao_credito.numero_cartao = fechamentos_cartao.numero_cartao 195 AND despesas_cartao_credito.doc_proprietario_cartao = fechamentos_cartao.documento_titular 196 INNER JOIN 197 usuarios ON despesas_cartao_credito.proprietario_despesa_cartao = usuarios.nome 198 AND despesas_cartao_credito.doc_proprietario_cartao = usuarios.documento 199 WHERE 200 despesas_cartao_credito.cartao = '{}' 201 AND despesas_cartao_credito.data >= fechamentos_cartao.data_comeco_fatura 202 AND despesas_cartao_credito.data <= fechamentos_cartao.data_fim_fatura 203 AND despesas_cartao_credito.pago = 'N' 204 AND fechamentos_cartao.ano = '{}' 205 AND fechamentos_cartao.mes = '{}' 206 AND usuarios.nome = '{}' 207 AND usuarios.documento = '{}';""".format(selected_card, year, selected_month, user_name, user_document) 208 209 try: 210 connection = mysql.connector.connect(**db_config) 211 cursor = connection.cursor() 212 cursor.execute(credit_card_month_expenses_complete_query) 213 214 descricao_list = [] 215 valor_list = [] 216 data_list = [] 217 categoria_list = [] 218 parcela_list = [] 219 220 for row in cursor.fetchall(): 221 descricao_list.append(row[0]) 222 valor_list.append(row[1]) 223 data_list.append(row[2]) 224 categoria_list.append(row[3]) 225 parcela_list.append(row[4]) 226 227 cursor.close() 228 229 return ( 230 descricao_list, 231 valor_list, 232 data_list, 233 categoria_list, 234 parcela_list, 235 ) 236 237 except mysql.connector.Error as err: 238 st.error(f"Erro ao consultar detalhamento das despesas do cartão no mês: {err}") 239 finally: 240 if connection.is_connected(): 241 connection.close()
Consulta os detalhes das despesas de cartão no mês selecionado pelo usuário.
Parameters
- selected_card (str): O cartão selecionado pelo usuário.
- year (int): O ano passado como parâmetro.
- selected_month (str): O mês selecionado pelo usuário.
Returns
- descricao_list (list): A lista com a descrição das despesas.
- valor_list (list): A lista com o valor das despesas.
- data_list (list): A lista com a data das despesas.
- categoria_list (list): A lista com a categoria das despesas.
- parcela_list (list): A lista com a parcela das despesas.
def
get_card_id_month_expenses(self, selected_card: str, year: int, selected_month: str):
243 def get_card_id_month_expenses(self, selected_card: str, year: int, selected_month: str): 244 """ 245 Consulta o id das despesas de cartão no mês selecionado. 246 247 Parameters 248 ---------- 249 selected_card : str 250 O cartão selecionado pelo usuário. 251 year : int 252 O ano passado como parâmetro. 253 selected_month : str 254 O mês da fatura selecionada. 255 256 Returns 257 ------- 258 converted_id_list : list 259 A lista com os ID's de despesas de cartão no mês. 260 """ 261 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 262 263 credit_card_id_expenses_query = """ 264 SELECT 265 despesas_cartao_credito.id_despesa_cartao 266 FROM 267 despesas_cartao_credito 268 INNER JOIN 269 fechamentos_cartao ON despesas_cartao_credito.numero_cartao = fechamentos_cartao.numero_cartao 270 AND despesas_cartao_credito.doc_proprietario_cartao = fechamentos_cartao.documento_titular 271 INNER JOIN 272 usuarios ON despesas_cartao_credito.proprietario_despesa_cartao = usuarios.nome 273 AND despesas_cartao_credito.doc_proprietario_cartao = usuarios.documento 274 WHERE 275 despesas_cartao_credito.cartao = '{}' 276 AND despesas_cartao_credito.data >= fechamentos_cartao.data_comeco_fatura 277 AND despesas_cartao_credito.data <= fechamentos_cartao.data_fim_fatura 278 AND fechamentos_cartao.ano = '{}' 279 AND fechamentos_cartao.mes = '{}' 280 AND usuarios.nome = '{}' 281 AND usuarios.documento = '{}' 282 AND pago = 'N';""".format(selected_card, year, selected_month, user_name, user_document) 283 284 try: 285 connection = mysql.connector.connect(**db_config) 286 cursor = connection.cursor() 287 cursor.execute(credit_card_id_expenses_query) 288 id_list = cursor.fetchall() 289 cursor.close() 290 291 converted_id_list = [] 292 293 for row in id_list: 294 id_ = str(row[0]) 295 id_ = re.sub(r"['()Decimal,]", "", id_) 296 float_id = int(id_) 297 converted_id_list.append(float_id) 298 299 return converted_id_list 300 301 except mysql.connector.Error as err: 302 st.error( 303 f"Erro ao consultar id's das despesas do cartão no mês: {err}") 304 finally: 305 if connection.is_connected(): 306 connection.close()
Consulta o id das despesas de cartão no mês selecionado.
Parameters
- selected_card (str): O cartão selecionado pelo usuário.
- year (int): O ano passado como parâmetro.
- selected_month (str): O mês da fatura selecionada.
Returns
- converted_id_list (list): A lista com os ID's de despesas de cartão no mês.
def
future_expenses(self, selected_card: str):
308 def future_expenses(self, selected_card: str): 309 """ 310 Consulta o valor das próximas despesas do cartão. 311 312 Parameters 313 ---------- 314 selected_card : str 315 O cartão selecionado pelo usuário. 316 317 Returns 318 ------- 319 float 320 O valor total das despesas futuras. 321 """ 322 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 323 324 actual_month = self.get_card_month(selected_card) 325 326 credit_card_next_expenses_query: str = """ 327 SELECT 328 COALESCE(SUM(despesas_cartao_credito.valor), 0) 329 FROM 330 despesas_cartao_credito 331 INNER JOIN 332 fechamentos_cartao ON despesas_cartao_credito.numero_cartao = fechamentos_cartao.numero_cartao 333 AND despesas_cartao_credito.doc_proprietario_cartao = fechamentos_cartao.documento_titular 334 INNER JOIN 335 usuarios ON despesas_cartao_credito.proprietario_despesa_cartao = usuarios.nome 336 AND despesas_cartao_credito.doc_proprietario_cartao = usuarios.documento 337 WHERE 338 despesas_cartao_credito.cartao = '{}' 339 AND despesas_cartao_credito.pago = 'N' 340 AND despesas_cartao_credito.data > fechamentos_cartao.data_fim_fatura 341 AND fechamentos_cartao.ano = '{}' 342 AND fechamentos_cartao.mes = '{}' 343 AND usuarios.nome = '{}' 344 AND usuarios.documento = '{}';""".format(selected_card, actual_year, actual_month, user_name, user_document) 345 346 try: 347 connection = mysql.connector.connect(**db_config) 348 cursor = connection.cursor() 349 cursor.execute(credit_card_next_expenses_query) 350 result = cursor.fetchone() 351 cursor.close() 352 if result and result[0] is not None: 353 return float(result[0]) 354 return 0.0 355 except mysql.connector.Error as err: 356 st.error(f"Erro ao consultar valor total das despesas futuras do cartão: {err}") 357 finally: 358 if connection.is_connected(): 359 connection.close()
Consulta o valor das próximas despesas do cartão.
Parameters
- selected_card (str): O cartão selecionado pelo usuário.
Returns
- float: O valor total das despesas futuras.
def
card_limit(self, selected_card: str):
361 def card_limit(self, selected_card: str): 362 """ 363 Consulta o limite do cartão. 364 365 Parameters 366 ---------- 367 selected_card : str 368 O cartão selecionado pelo usuário. 369 370 Returns 371 ------- 372 float 373 O limite de crédito do cartão. 374 """ 375 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 376 377 credit_card_limit_query: str = """ 378 SELECT 379 COALESCE(SUM(cartao_credito.limite_credito), 0) 380 FROM 381 cartao_credito 382 INNER JOIN 383 usuarios ON cartao_credito.documento_titular = usuarios.documento 384 AND cartao_credito.proprietario_cartao = usuarios.nome 385 WHERE 386 cartao_credito.nome_cartao = '{}' 387 AND usuarios.nome = '{}' 388 AND usuarios.documento = '{}';""".format(selected_card, user_name, user_document) 389 390 try: 391 connection = mysql.connector.connect(**db_config) 392 cursor = connection.cursor() 393 cursor.execute(credit_card_limit_query) 394 result = cursor.fetchone() 395 cursor.close() 396 if result and result[0] is not None: 397 return float(result[0]) 398 return 0.0 399 except mysql.connector.Error as err: 400 st.error(f"Erro ao consultar limite do cartão: {err}") 401 finally: 402 if connection.is_connected(): 403 connection.close()
Consulta o limite do cartão.
Parameters
- selected_card (str): O cartão selecionado pelo usuário.
Returns
- float: O limite de crédito do cartão.
def
get_credit_card_key(self, card: str):
405 def get_credit_card_key(self, card: str): 406 """ 407 Consulta os dados do cartão selecionado. 408 409 Parameters 410 ---------- 411 card : str 412 O cartão selecionado pelo usuário. 413 414 Returns 415 ------- 416 card_number : str 417 O número do cartão. 418 card_owner : str 419 O nome do proprietário do cartão. 420 card_owner_document : int 421 O documento do proprietário do cartão. 422 card_security_code : str 423 O código de segurança do cartão. 424 """ 425 user_name, user_document = Login().get_user_data(return_option="user_doc_name") 426 427 card_key_query = """ 428 SELECT 429 cartao_credito.numero_cartao, 430 cartao_credito.proprietario_cartao, 431 cartao_credito.documento_titular, 432 cartao_credito.codigo_seguranca 433 FROM 434 cartao_credito 435 INNER JOIN 436 usuarios ON cartao_credito.proprietario_cartao = usuarios.nome 437 AND cartao_credito.documento_titular = usuarios.documento 438 WHERE 439 cartao_credito.nome_cartao = '{}' 440 AND usuarios.nome = '{}' 441 AND usuarios.documento = '{}';""".format(card, user_name, user_document) 442 443 try: 444 connection = mysql.connector.connect(**db_config) 445 cursor = connection.cursor() 446 cursor.execute(card_key_query) 447 result = cursor.fetchall() 448 cursor.close() 449 450 if result is not None and len(result) > 0 and result[0] is not None: 451 452 str_card_key_list = str(result[0]) 453 454 str_card_key_list = str_card_key_list.replace(")", "") 455 str_card_key_list = str_card_key_list.replace("(", "") 456 str_card_key_list = str_card_key_list.replace("'", "") 457 str_card_key_list = str_card_key_list.split(", ") 458 459 card_number = str_card_key_list[0] 460 card_owner = str_card_key_list[1] 461 card_owner_document = int(str_card_key_list[2]) 462 card_security_code = str_card_key_list[3] 463 464 return ( 465 card_number, 466 card_owner, 467 card_owner_document, 468 card_security_code, 469 ) 470 471 else: 472 return ["9999999999999999", "Sem proprietário", 99999999999, 000] 473 474 except mysql.connector.Error as err: 475 st.error(f"Erro ao consultar chave do cartão: {err}") 476 finally: 477 if connection.is_connected(): 478 connection.close()
Consulta os dados do cartão selecionado.
Parameters
- card (str): O cartão selecionado pelo usuário.
Returns
- card_number (str): O número do cartão.
- card_owner (str): O nome do proprietário do cartão.
- card_owner_document (int): O documento do proprietário do cartão.
- card_security_code (str): O código de segurança do cartão.
def
card_remaining_limit(self, selected_card: str):
480 def card_remaining_limit(self, selected_card: str): 481 """ 482 Calcula o limite restante do cartão de crédito. 483 484 Parameters 485 ---------- 486 selected_card : str 487 O cartão de crédito selecionado. 488 489 Returns 490 ------- 491 remaining_limit : float 492 0 valor do limite restante do cartão. 493 """ 494 card_total_limit = self.card_limit(selected_card) 495 not_payed_expenses = self.not_payed_expenses(selected_card) 496 month_card_expenses = self.month_expenses(selected_card, actual_year, string_actual_month) 497 future_card_expenses = self.future_expenses(selected_card) 498 total_card_expenses = month_card_expenses + \ 499 future_card_expenses + not_payed_expenses 500 remaining_limit = card_total_limit - total_card_expenses 501 return remaining_limit
Calcula o limite restante do cartão de crédito.
Parameters
- selected_card (str): O cartão de crédito selecionado.
Returns
- remaining_limit (float): 0 valor do limite restante do cartão.