From 71537cc16b64a80eff1fc56e4a26f19174cf669d Mon Sep 17 00:00:00 2001 From: Felipe Coutinho Date: Thu, 26 Feb 2026 17:53:26 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20derivar=20per=C3=ADodo=20da=20fatura=20a?= =?UTF-8?q?o=20abrir=20dialog=20com=20cart=C3=A3o=20pr=C3=A9-preenchido?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Quando o lancamento-dialog abre com cartaoId já definido (ex: vindo de pré-lançamentos), agora roda deriveCreditCardPeriod() na inicialização para calcular o período correto da fatura automaticamente, sem precisar trocar o cartão e voltar. Co-Authored-By: Claude Opus 4.6 --- .../lancamento-dialog/lancamento-dialog.tsx | 50 +++++++++++++------ 1 file changed, 35 insertions(+), 15 deletions(-) diff --git a/components/lancamentos/dialogs/lancamento-dialog/lancamento-dialog.tsx b/components/lancamentos/dialogs/lancamento-dialog/lancamento-dialog.tsx index 0147620..8f099f4 100644 --- a/components/lancamentos/dialogs/lancamento-dialog/lancamento-dialog.tsx +++ b/components/lancamentos/dialogs/lancamento-dialog/lancamento-dialog.tsx @@ -35,6 +35,7 @@ import { import { applyFieldDependencies, buildLancamentoInitialState, + deriveCreditCardPeriod, } from "@/lib/lancamentos/form-helpers"; import { BasicFieldsSection } from "./basic-fields-section"; import { BoletoFieldsSection } from "./boleto-fields-section"; @@ -98,22 +99,40 @@ export function LancamentoDialog({ useEffect(() => { if (dialogOpen) { - setFormState( - buildLancamentoInitialState( - lancamento, - defaultPagadorId, - defaultPeriod, - { - defaultCartaoId, - defaultPaymentMethod, - defaultPurchaseDate, - defaultName, - defaultAmount, - defaultTransactionType, - isImporting, - }, - ), + const initial = buildLancamentoInitialState( + lancamento, + defaultPagadorId, + defaultPeriod, + { + defaultCartaoId, + defaultPaymentMethod, + defaultPurchaseDate, + defaultName, + defaultAmount, + defaultTransactionType, + isImporting, + }, ); + + // Derive credit card period on open when cartaoId is pre-filled + if ( + initial.paymentMethod === "Cartão de crédito" && + initial.cartaoId && + initial.purchaseDate + ) { + const card = cartaoOptions.find( + (opt) => opt.value === initial.cartaoId, + ); + if (card?.closingDay) { + initial.period = deriveCreditCardPeriod( + initial.purchaseDate, + card.closingDay, + card.dueDay, + ); + } + } + + setFormState(initial); setErrorMessage(null); } }, [ @@ -128,6 +147,7 @@ export function LancamentoDialog({ defaultAmount, defaultTransactionType, isImporting, + cartaoOptions, ]); const primaryPagador = formState.pagadorId;