feat: aprimora a exibição do cartão de parcelas e ajusta a lógica de busca
- Melhora a apresentação do nome do grupo e do cartão no componente InstallmentGroupCard, utilizando um layout mais compacto. - Altera a lógica de busca na função fetchInstallmentAnalysis para incluir lançamentos parcelados apenas do pagador com a função de admin.
This commit is contained in:
@@ -67,42 +67,45 @@ export function InstallmentGroupCard({
|
||||
/>
|
||||
|
||||
<div className="min-w-0 flex-1">
|
||||
<div className="flex items-start justify-between gap-3">
|
||||
<div className="flex items-start justify-between">
|
||||
<div className="min-w-0 flex-1">
|
||||
<p className="text-sm font-bold">{group.name}</p>
|
||||
{group.cartaoName && (
|
||||
<div className="mt-0.5 flex items-center gap-1">
|
||||
<div className="flex gap-1 items-center">
|
||||
{group.cartaoLogo && (
|
||||
<img
|
||||
src={`/logos/${group.cartaoLogo}`}
|
||||
alt={group.cartaoName}
|
||||
className="h-5 w-auto object-contain rounded"
|
||||
className="h-6 w-auto object-contain rounded"
|
||||
/>
|
||||
)}
|
||||
<span className="font-medium">{group.name}</span>|
|
||||
<span className="text-xs text-muted-foreground">
|
||||
{group.cartaoName}
|
||||
</span>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
<div className="flex shrink-0 flex-col items-end gap-0.5">
|
||||
<div className="shrink-0 flex items-center gap-0.5">
|
||||
<MoneyValues
|
||||
amount={group.totalPendingAmount}
|
||||
className="text-sm font-semibold"
|
||||
className="text-base font-bold"
|
||||
/>
|
||||
|
||||
{selectedInstallments.size > 0 && (
|
||||
<span className="mx-1 text-muted-foreground">|</span>
|
||||
)}
|
||||
|
||||
{selectedInstallments.size > 0 && (
|
||||
<MoneyValues
|
||||
amount={selectedAmount}
|
||||
className="text-xs text-primary"
|
||||
className="text-base text-primary"
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Progress bar */}
|
||||
<div className="mt-2">
|
||||
<div className="mb-1 flex items-center justify-between text-xs text-muted-foreground">
|
||||
<div className="mt-3">
|
||||
<div className="mb-2 flex items-center px-1 justify-between text-xs text-muted-foreground">
|
||||
<span>
|
||||
{group.paidInstallments} de {group.totalInstallments} pagas
|
||||
</span>
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
import { cartoes, lancamentos } from "@/db/schema";
|
||||
import { cartoes, lancamentos, pagadores } from "@/db/schema";
|
||||
import {
|
||||
ACCOUNT_AUTO_INVOICE_NOTE_PREFIX,
|
||||
INITIAL_BALANCE_NOTE,
|
||||
} from "@/lib/accounts/constants";
|
||||
import { db } from "@/lib/db";
|
||||
import { toNumber } from "@/lib/dashboard/common";
|
||||
import { PAGADOR_ROLE_ADMIN } from "@/lib/pagadores/constants";
|
||||
import { and, eq, isNotNull, isNull, or, sql } from "drizzle-orm";
|
||||
|
||||
// Calcula a data de vencimento baseada no período e dia de vencimento do cartão
|
||||
@@ -58,7 +59,7 @@ export type InstallmentAnalysisData = {
|
||||
export async function fetchInstallmentAnalysis(
|
||||
userId: string
|
||||
): Promise<InstallmentAnalysisData> {
|
||||
// 1. Buscar todos os lançamentos parcelados não antecipados
|
||||
// 1. Buscar todos os lançamentos parcelados não antecipados do pagador admin
|
||||
const installmentRows = await db
|
||||
.select({
|
||||
id: lancamentos.id,
|
||||
@@ -80,6 +81,7 @@ export async function fetchInstallmentAnalysis(
|
||||
})
|
||||
.from(lancamentos)
|
||||
.leftJoin(cartoes, eq(lancamentos.cartaoId, cartoes.id))
|
||||
.leftJoin(pagadores, eq(lancamentos.pagadorId, pagadores.id))
|
||||
.where(
|
||||
and(
|
||||
eq(lancamentos.userId, userId),
|
||||
@@ -87,6 +89,7 @@ export async function fetchInstallmentAnalysis(
|
||||
eq(lancamentos.condition, "Parcelado"),
|
||||
eq(lancamentos.isAnticipated, false),
|
||||
isNotNull(lancamentos.seriesId),
|
||||
eq(pagadores.role, PAGADOR_ROLE_ADMIN),
|
||||
or(
|
||||
isNull(lancamentos.note),
|
||||
and(
|
||||
|
||||
Reference in New Issue
Block a user