diff --git a/components/dashboard/installment-analysis/installment-analysis-page.tsx b/components/dashboard/installment-analysis/installment-analysis-page.tsx index 0217406..c132535 100644 --- a/components/dashboard/installment-analysis/installment-analysis-page.tsx +++ b/components/dashboard/installment-analysis/installment-analysis-page.tsx @@ -2,12 +2,10 @@ import MoneyValues from "@/components/money-values"; import { Button } from "@/components/ui/button"; -import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; -import { Separator } from "@/components/ui/separator"; +import { Card, CardContent } from "@/components/ui/card"; import { useMemo, useState } from "react"; import type { InstallmentAnalysisData } from "./types"; import { InstallmentGroupCard } from "./installment-group-card"; -import { AnalysisSummaryPanel } from "./analysis-summary-panel"; import { RiCalculatorLine, RiCheckboxBlankLine, @@ -98,7 +96,7 @@ export function InstallmentAnalysisPage({ }; // Calcular totais - const { totalInstallments, grandTotal, selectedCount } = useMemo(() => { + const { grandTotal, selectedCount } = useMemo(() => { let installmentsSum = 0; let installmentsCount = 0; @@ -120,7 +118,6 @@ export function InstallmentAnalysisPage({ }); return { - totalInstallments: installmentsSum, grandTotal: installmentsSum, selectedCount: installmentsCount, }; @@ -178,70 +175,46 @@ export function InstallmentAnalysisPage({ )} -
- {/* Conteúdo principal */} -
- {/* Seção de Lançamentos Parcelados */} - {data.installmentGroups.length > 0 && ( -
-
- -

Lançamentos Parcelados

- -
- -
- {data.installmentGroups.map((group) => ( - - toggleGroupSelection( - group.seriesId, - group.pendingInstallments - .filter((i) => !i.isSettled) - .map((i) => i.id) - ) - } - onToggleInstallment={(installmentId) => - toggleInstallmentSelection(group.seriesId, installmentId) - } - /> - ))} -
-
- )} - - {/* Estado vazio */} - {hasNoData && ( - - - -
-

Nenhuma parcela pendente

-

- Você está em dia com seus pagamentos! -

-
-
-
- )} -
- - {/* Painel lateral de resumo (sticky) */} - {!hasNoData && ( -
- 0 && ( +
+ {data.installmentGroups.map((group) => ( + + toggleGroupSelection( + group.seriesId, + group.pendingInstallments + .filter((i) => !i.isSettled) + .map((i) => i.id) + ) + } + onToggleInstallment={(installmentId) => + toggleInstallmentSelection(group.seriesId, installmentId) + } /> -
- )} -
+ ))} +
+ )} + + {/* Estado vazio */} + {hasNoData && ( + + + +
+

Nenhuma parcela pendente

+

+ Você está em dia com seus pagamentos! +

+
+
+
+ )} ); } diff --git a/components/dashboard/installment-analysis/installment-group-card.tsx b/components/dashboard/installment-analysis/installment-group-card.tsx index 26e277f..cf735e1 100644 --- a/components/dashboard/installment-analysis/installment-group-card.tsx +++ b/components/dashboard/installment-analysis/installment-group-card.tsx @@ -41,9 +41,7 @@ export function InstallmentGroupCard({ const progress = group.totalInstallments > 0 - ? ((group.paidInstallments + selectedInstallments.size) / - group.totalInstallments) * - 100 + ? (group.paidInstallments / group.totalInstallments) * 100 : 0; const selectedAmount = group.pendingInstallments @@ -156,7 +154,7 @@ export function InstallmentGroupCard({ className={cn( "flex items-center gap-3 rounded-md border p-2 transition-colors", isSelected && !isPaid && "border-primary/50 bg-primary/5", - isPaid && "bg-muted/50 opacity-60" + isPaid && "border-green-200 bg-green-50 dark:border-green-900 dark:bg-green-950/30" )} >
-

+

Parcela {installment.currentInstallment}/ {group.totalInstallments} {isPaid && ( - + Paga )}

-

+

Vencimento: {dueDate}

diff --git a/lib/dashboard/expenses/installment-analysis.ts b/lib/dashboard/expenses/installment-analysis.ts index 9d59310..d2906e7 100644 --- a/lib/dashboard/expenses/installment-analysis.ts +++ b/lib/dashboard/expenses/installment-analysis.ts @@ -143,10 +143,11 @@ export async function fetchInstallmentAnalysis( // Calcular quantas parcelas já foram pagas para cada grupo const installmentGroups = Array.from(seriesMap.values()).map((group) => { - const minPendingInstallment = Math.min( - ...group.pendingInstallments.map((i) => i.currentInstallment) - ); - group.paidInstallments = minPendingInstallment - 1; + // Contar quantas parcelas estão marcadas como pagas (settled) + const paidCount = group.pendingInstallments.filter( + (i) => i.isSettled + ).length; + group.paidInstallments = paidCount; return group; });