From 421ca81ee41db811fa365e0fb0182c8151c96812 Mon Sep 17 00:00:00 2001 From: NANDO9322 Date: Thu, 12 Feb 2026 11:32:14 -0300 Subject: [PATCH] =?UTF-8?q?fix:(fot)=20ajuste=20bug=20no=20gasto=20de=20ca?= =?UTF-8?q?pta=C3=A7ao?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../internal/db/generated/cadastro_fot.sql.go | 5 ++- .../generated/financial_transactions.sql.go | 11 ++----- backend/internal/db/queries/cadastro_fot.sql | 2 +- .../db/queries/financial_transactions.sql | 2 +- backend/internal/finance/service.go | 33 ++++++++++++++----- 5 files changed, 31 insertions(+), 22 deletions(-) diff --git a/backend/internal/db/generated/cadastro_fot.sql.go b/backend/internal/db/generated/cadastro_fot.sql.go index 7dff2e3..50e48e0 100644 --- a/backend/internal/db/generated/cadastro_fot.sql.go +++ b/backend/internal/db/generated/cadastro_fot.sql.go @@ -598,16 +598,15 @@ const updateCadastroFotGastos = `-- name: UpdateCadastroFotGastos :exec UPDATE cadastro_fot SET gastos_captacao = $2, updated_at = CURRENT_TIMESTAMP -WHERE id = $1 AND regiao = $3 +WHERE id = $1 ` type UpdateCadastroFotGastosParams struct { ID pgtype.UUID `json:"id"` GastosCaptacao pgtype.Numeric `json:"gastos_captacao"` - Regiao pgtype.Text `json:"regiao"` } func (q *Queries) UpdateCadastroFotGastos(ctx context.Context, arg UpdateCadastroFotGastosParams) error { - _, err := q.db.Exec(ctx, updateCadastroFotGastos, arg.ID, arg.GastosCaptacao, arg.Regiao) + _, err := q.db.Exec(ctx, updateCadastroFotGastos, arg.ID, arg.GastosCaptacao) return err } diff --git a/backend/internal/db/generated/financial_transactions.sql.go b/backend/internal/db/generated/financial_transactions.sql.go index 08c5ef5..1795a6b 100644 --- a/backend/internal/db/generated/financial_transactions.sql.go +++ b/backend/internal/db/generated/financial_transactions.sql.go @@ -653,16 +653,11 @@ func (q *Queries) ListTransactionsPaginatedFiltered(ctx context.Context, arg Lis const sumTotalByFot = `-- name: SumTotalByFot :one SELECT COALESCE(SUM(total_pagar), 0)::NUMERIC FROM financial_transactions -WHERE fot_id = $1 AND regiao = $2 +WHERE fot_id = $1 ` -type SumTotalByFotParams struct { - FotID pgtype.UUID `json:"fot_id"` - Regiao pgtype.Text `json:"regiao"` -} - -func (q *Queries) SumTotalByFot(ctx context.Context, arg SumTotalByFotParams) (pgtype.Numeric, error) { - row := q.db.QueryRow(ctx, sumTotalByFot, arg.FotID, arg.Regiao) +func (q *Queries) SumTotalByFot(ctx context.Context, fotID pgtype.UUID) (pgtype.Numeric, error) { + row := q.db.QueryRow(ctx, sumTotalByFot, fotID) var column_1 pgtype.Numeric err := row.Scan(&column_1) return column_1, err diff --git a/backend/internal/db/queries/cadastro_fot.sql b/backend/internal/db/queries/cadastro_fot.sql index f5a25cb..7a83383 100644 --- a/backend/internal/db/queries/cadastro_fot.sql +++ b/backend/internal/db/queries/cadastro_fot.sql @@ -94,7 +94,7 @@ WHERE c.fot = $1 AND c.regiao = @regiao; UPDATE cadastro_fot SET gastos_captacao = $2, updated_at = CURRENT_TIMESTAMP -WHERE id = $1 AND regiao = @regiao; +WHERE id = $1; -- name: SearchFot :many SELECT diff --git a/backend/internal/db/queries/financial_transactions.sql b/backend/internal/db/queries/financial_transactions.sql index a19ea56..d70e239 100644 --- a/backend/internal/db/queries/financial_transactions.sql +++ b/backend/internal/db/queries/financial_transactions.sql @@ -22,7 +22,7 @@ ORDER BY t.data_cobranca DESC NULLS LAST; -- name: SumTotalByFot :one SELECT COALESCE(SUM(total_pagar), 0)::NUMERIC FROM financial_transactions -WHERE fot_id = $1 AND regiao = @regiao; +WHERE fot_id = $1; -- name: UpdateTransaction :one UPDATE financial_transactions SET diff --git a/backend/internal/finance/service.go b/backend/internal/finance/service.go index efd2901..ef010a6 100644 --- a/backend/internal/finance/service.go +++ b/backend/internal/finance/service.go @@ -29,7 +29,7 @@ func (s *Service) Create(ctx context.Context, params generated.CreateTransaction } if params.FotID.Valid { - _ = s.updateFotExpenses(ctx, params.FotID, regiao) + _ = s.updateFotExpenses(ctx, params.FotID) } return txn, nil @@ -44,7 +44,7 @@ func (s *Service) Update(ctx context.Context, params generated.UpdateTransaction // Recalculate for the new FOT (if changed, we should technically recalc old one too, but simpler for now) if params.FotID.Valid { - _ = s.updateFotExpenses(ctx, params.FotID, regiao) + _ = s.updateFotExpenses(ctx, params.FotID) } return txn, nil } @@ -63,15 +63,33 @@ func (s *Service) BulkUpdate(ctx context.Context, ids []string, valorExtra float return nil } + // 1. Identify affected FOTs to recalculate expenses later + affectedFotIDs := make(map[string]pgtype.UUID) + for _, id := range pgIDs { + txn, err := s.queries.GetTransaction(ctx, generated.GetTransactionParams{ + ID: id, + Regiao: pgtype.Text{String: regiao, Valid: true}, + }) + if err == nil && txn.FotID.Valid { + affectedFotIDs[fmt.Sprintf("%x", txn.FotID.Bytes)] = txn.FotID + } + } + + // 2. Perform Bulk Update err := s.queries.BulkUpdateExtras(ctx, generated.BulkUpdateExtrasParams{ ValorExtra: toNumeric(valorExtra), - DescricaoExtra: pgtype.Text{String: descricaoExtra, Valid: true}, // Allow empty description? Yes. + DescricaoExtra: pgtype.Text{String: descricaoExtra, Valid: true}, Ids: pgIDs, }) if err != nil { return err } + // 3. Recalculate Expenses for affected FOTs + for _, fotID := range affectedFotIDs { + _ = s.updateFotExpenses(ctx, fotID) + } + return nil } @@ -94,7 +112,7 @@ func (s *Service) Delete(ctx context.Context, id pgtype.UUID, regiao string) err } if txn.FotID.Valid { - _ = s.updateFotExpenses(ctx, txn.FotID, regiao) + _ = s.updateFotExpenses(ctx, txn.FotID) } return nil } @@ -235,11 +253,8 @@ func (s *Service) SearchFot(ctx context.Context, query string, regiao string) ([ }) } -func (s *Service) updateFotExpenses(ctx context.Context, fotID pgtype.UUID, regiao string) error { - total, err := s.queries.SumTotalByFot(ctx, generated.SumTotalByFotParams{ - FotID: fotID, - Regiao: pgtype.Text{String: regiao, Valid: true}, - }) +func (s *Service) updateFotExpenses(ctx context.Context, fotID pgtype.UUID) error { + total, err := s.queries.SumTotalByFot(ctx, fotID) if err != nil { return err }