From 1d828adc27e2085ca3aa1a5e100925dc99363d40 Mon Sep 17 00:00:00 2001 From: Horux Dev Date: Mon, 25 May 2026 16:20:37 +0000 Subject: [PATCH] feat(contribuyentes): mostrar contador de RFCs disponibles del plan MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Agrega contador 'X de Y RFCs' debajo del título de la página - Usa DESPACHO_PLANS desde @horux/shared para obtener maxRfcs del plan actual - Durante trial muestra 'X de 5 RFCs' - Planes ilimitados muestran solo 'X RFCs' --- .../app/(dashboard)/contribuyentes/page.tsx | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/apps/web/app/(dashboard)/contribuyentes/page.tsx b/apps/web/app/(dashboard)/contribuyentes/page.tsx index b4363ee..5fe803a 100644 --- a/apps/web/app/(dashboard)/contribuyentes/page.tsx +++ b/apps/web/app/(dashboard)/contribuyentes/page.tsx @@ -9,6 +9,7 @@ import { useAuthStore } from '@/stores/auth-store'; import { apiClient } from '@/lib/api/client'; import { Plus, Pencil, Trash2, Building2, Sparkles } from 'lucide-react'; import { AddonsDialog } from './addons-dialog'; +import { DESPACHO_PLANS } from '@horux/shared'; const TRIAL_LIMIT_TOOLTIP = 'Límite de contribuyentes para la prueba gratuita, para continuar agregando contribuyentes, selecciona un plan.'; @@ -30,11 +31,21 @@ export default function ContribuyentesPage() { // deshabilita el botón con tooltip explicativo. const { data: planInfo } = useQuery({ queryKey: ['my-plan-info'], - queryFn: () => apiClient.get<{ isTrialActive: boolean }>('/despachos/me/plan').then(r => r.data), + queryFn: () => apiClient.get<{ plan: string; isTrialActive: boolean }>('/despachos/me/plan').then(r => r.data), }); const activeCount = (contribuyentes ?? []).filter((c: any) => c.active !== false).length; const trialAtLimit = (planInfo?.isTrialActive ?? false) && activeCount >= 5; + // Contador de RFCs disponibles en el plan + const planKey = planInfo?.plan as keyof typeof DESPACHO_PLANS | undefined; + const planMaxRfcs = planKey ? DESPACHO_PLANS[planKey]?.maxRfcs ?? undefined : undefined; + const rfcCounterText = (() => { + if (planInfo?.isTrialActive) return `${activeCount} de 5 RFCs`; + if (planMaxRfcs != null && planMaxRfcs < 0) return `${activeCount} RFCs`; + if (planMaxRfcs !== undefined) return `${activeCount} de ${planMaxRfcs} RFCs`; + return `${activeCount} RFCs`; + })(); + const resetForm = () => { setForm({ rfc: '', razonSocial: '' }); setAssignSelf(true); setShowDialog(false); setEditingId(null); }; const handleSave = async () => { @@ -80,7 +91,10 @@ export default function ContribuyentesPage() { return (
-

Contribuyentes

RFCs que gestiona tu despacho

+
+

Contribuyentes

+

RFCs que gestiona tu despacho · {rfcCounterText}

+