revenues.confirm_revenue

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

Classe que representa a confirmação do recebimento de receitas.

def get_not_received_revenue_id( self, description: str, value: float, date: str, time: str, category: str, account: str):
19    def get_not_received_revenue_id(self, description: str, value: float, date: str, time: str, category: str, account: str):
20        """
21        Realiza a consulta dos id's das receitas não recebidas.
22
23        Parameters
24        ----------
25        description : str
26            A descrição da receita.
27        value : float
28            O valor da receita.
29        date : str
30            A data da receita.
31        time : str
32            O horário da receita.
33        category : str
34            A categoria da receita.
35        account : str
36            A conta da receita.
37
38        Returns
39        -------
40        id : int
41            O id da receita não recebida.
42        """
43
44        get_id_query = """SELECT id_receita FROM receitas WHERE descricao = "{}" AND valor = {} AND data = "{}" AND horario = "{}" AND categoria = "{}" AND conta = "{}";""".format(description, value, date, time, category, account)
45        id = QueryExecutor().simple_consult_brute_query(get_id_query)
46        id = QueryExecutor().treat_simple_result(id, to_remove_list)
47        id = int(id)
48
49        return id

Realiza a consulta dos id's das receitas não recebidas.

Parameters
  • description (str): A descrição da receita.
  • value (float): O valor da receita.
  • date (str): A data da receita.
  • time (str): O horário da receita.
  • category (str): A categoria da receita.
  • account (str): A conta da receita.
Returns
  • id (int): O id da receita não recebida.
def update_not_received_revenues(self, id: int, new_date: str):
51    def update_not_received_revenues(self, id: int, new_date: str):
52        """
53        Atualiza a receita não recebida para que conste como recebida.
54
55        Parameters
56        ----------
57        id : int
58            O id da receita.
59        new_date : str
60            A nova data da receita.
61        """
62
63        update_not_received_query = """UPDATE receitas SET data = "{}", recebido = "S" WHERE id_receita = {};""".format(
64            new_date, id)
65        QueryExecutor().update_table_unique_register(
66            update_not_received_query, "Receita atualizada com sucesso!", "Erro ao atualizar receita:")

Atualiza a receita não recebida para que conste como recebida.

Parameters
  • id (int): O id da receita.
  • new_date (str): A nova data da receita.
def main_menu(self):
 68    def main_menu(self):
 69        """
 70        Exibe as receitas não recebidas.
 71        """
 72        user_name, user_document = Login().get_user_data(return_option="user_doc_name")
 73        logged_user, logged_user_password = Login().get_user_data(return_option="user_login_password")
 74
 75        col4, col5, col6 = st.columns(3)
 76
 77        revenue_values = QueryExecutor().complex_compund_query(query=not_received_revenue_query, list_quantity=7, params=(user_name, user_document))
 78
 79        if len(revenue_values[0]) >= 1:
 80
 81            with col4:
 82                st.subheader(body=":computer: Valores")
 83
 84                with st.expander(label="Dados", expanded=True):
 85
 86                    revenue_id, description, value, date, time, category, account = (revenue_values)
 87
 88                    time_list = []
 89
 90                    for i in range(0, len(time)):
 91                        aux_time = QueryExecutor().treat_simple_result(time[i], to_remove_list)
 92                        time_list.append(aux_time)
 93
 94                    loan_data_df = pd.DataFrame({"ID": revenue_id, "Descrição": description, "Valor": value,
 95                                                "Data": date, "Horário": time_list, "Categoria": category, "Conta": account})
 96                    loan_data_df["Valor"] = loan_data_df["Valor"].apply(
 97                        lambda x: f"R$ {x:.2f}".replace(".", ","))
 98                    loan_data_df["Data"] = pd.to_datetime(
 99                        loan_data_df["Data"]).dt.strftime("%d/%m/%Y")
100
101                    st.dataframe(loan_data_df, hide_index=True,
102                                 use_container_width=True)
103
104                    description_list = []
105
106                    for i in range(0, len(description)):
107
108                        index_description = {}
109                        str_value = str(value[i])
110                        str_date = str(date[i])
111                        str_date = datetime.strptime(str_date, "%Y-%m-%d")
112                        query_str_date = str_date.strftime("%Y-%m-%d")
113                        final_str_account = str(account[i])
114
115                        index_description.update(
116                            {"descrição": description[i], "valor": str_value, "data": query_str_date, "horario": time[i], "categoria": category[i], "conta": final_str_account})
117
118                        formatted_data = str(index_description["data"])
119                        formatted_data = datetime.strptime(
120                            formatted_data, "%Y-%m-%d")
121                        formatted_data = formatted_data.strftime(
122                            "%d/%m/%Y")
123
124                        formatted_description = str(index_description["descrição"]) + " - " + "R$ {}".format(str(index_description["valor"]).replace(
125                            ".", ",")) + " - " + formatted_data + " - " + str(index_description["horario"]) + " - " + str(index_description["categoria"]) + " - " + str(index_description["conta"])
126                        description_list.append(formatted_description)
127
128                    selected_revenue = st.selectbox(
129                        label="Selecione a receita", options=description_list)
130
131                    confirm_selection = st.checkbox(
132                        label="Confirmar seleção")
133
134                update_button = st.button(
135                    label=":floppy_disk: Receber valor")
136
137                if confirm_selection and update_button:
138                    with col5:
139                        with st.spinner(text="Aguarde..."):
140                            sleep(2.5)
141
142                        st.subheader(
143                            body=":white_check_mark: Validação de Dados")
144
145                        final_description = str(
146                            index_description["descrição"])
147                        final_value = float(index_description["valor"])
148                        final_date = str(index_description["data"])
149                        final_category = str(
150                            index_description["categoria"])
151                        final_account = str(index_description["conta"])
152
153                        str_final_value = Variable().treat_complex_string(
154                            final_value)
155
156                        with st.subheader(body=":white_check_mark: Validação de dados"):
157                            with st.expander(label="Dados", expanded=True):
158                                st.info(body="Descrição: {}".format(
159                                    final_description))
160                                st.info(body="Valor: :heavy_dollar_sign: {}".format(
161                                    str_final_value))
162                                st.info(body="Categoria: {}".format(
163                                    final_category))
164                                st.info(body="Conta: {}".format(
165                                    final_account))
166
167                    with col6:
168                        st.subheader(body=":pencil: Comprovante")
169                        with st.spinner(text="Aguarde..."):
170                            sleep(2.5)
171
172                        final_id = self.get_not_received_revenue_id(description=index_description["descrição"], value=index_description["valor"], date=index_description[
173                            "data"], time=index_description["horario"], category=index_description["categoria"], account=index_description["conta"])
174
175                        self.update_not_received_revenues(
176                            id=final_id, new_date=today)
177
178                        Receipts().generate_receipt(table="receitas", id=final_id, description=final_description,
179                                                          value=final_value, date=final_date, category=final_category, account=final_account)
180
181                        log_query = '''INSERT INTO financas.logs_atividades (usuario_log, tipo_log, conteudo_log) VALUES ( %s, %s, %s);'''
182                        log_values = (logged_user, "Registro", "Registrou uma receita no valor de R$ {} associada a conta {}.".format(
183                            str_final_value, account))
184                        QueryExecutor().insert_query(
185                            log_query, log_values, "Log gravado.", "Erro ao gravar log:")
186
187                elif update_button and confirm_selection == False:
188                    with col5:
189                        st.subheader(body="")
190                        with st.spinner(text="Aguarde..."):
191                            sleep(2.5)
192                        with st.expander(label="Aviso", expanded=True):
193                            st.warning(
194                                body="Confirme os dados antes de prosseguir.")
195
196        elif len(revenue_values[0]) == 0:
197
198            with col5:
199                st.info("Você não possui valores a receber.")

Exibe as receitas não recebidas.