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.