feat: plan management

This commit is contained in:
2026-07-17 21:28:41 -03:00
parent d6a4aab52b
commit 8d9a03cd23
21 changed files with 1355 additions and 131 deletions
@@ -23,6 +23,7 @@ export default function FinancialWidget({ sessionUser, selectedOrgId, organizati
const [financials, setFinancials] = useState<DashboardFinancialsResult | null>(null);
const [loading, setLoading] = useState(false);
const [error, setError] = useState<string | null>(null);
const [isOpen, setIsOpen] = useState(true);
useEffect(() => {
if (selectedOrgId) {
@@ -80,15 +81,18 @@ export default function FinancialWidget({ sessionUser, selectedOrgId, organizati
if (error) {
return (
<div className={styles.container}>
<div className={styles.header}>
<button className={styles.headerButton} type="button" onClick={() => setIsOpen((value) => !value)}>
<h3 className={styles.title}>
Rendimiento Financiero {organizationName ? `- ${organizationName}` : ''}
</h3>
</div>
<div style={{ padding: '40px 20px', textAlign: 'center', color: '#6b7280' }}>
<p style={{ fontWeight: '600', marginBottom: '8px', color: '#374151' }}>Acceso Restringido</p>
<p>{error}</p>
</div>
<span className={styles.toggleIcon}>{isOpen ? "" : "+"}</span>
</button>
{isOpen && (
<div style={{ padding: '40px 20px', textAlign: 'center', color: '#6b7280' }}>
<p style={{ fontWeight: '600', marginBottom: '8px', color: '#374151' }}>Acceso Restringido</p>
<p>{error}</p>
</div>
)}
</div>
);
}
@@ -103,11 +107,16 @@ export default function FinancialWidget({ sessionUser, selectedOrgId, organizati
return (
<div className={styles.container}>
<div className={styles.header}>
<button className={styles.headerButton} type="button" onClick={() => setIsOpen((value) => !value)}>
<h3 className={styles.title}>
Rendimiento Financiero {organizationName ? `- ${organizationName}` : ''}
</h3>
<div className={styles.filters}>
<span className={styles.toggleIcon}>{isOpen ? "" : "+"}</span>
</button>
{isOpen && (
<>
<div className={styles.filters}>
<select
className={styles.select}
value={selectedTimeframe}
@@ -128,10 +137,9 @@ export default function FinancialWidget({ sessionUser, selectedOrgId, organizati
<option key={c.id} value={c.id}>{c.fullName}</option>
))}
</select>
</div>
</div>
</div>
<div className={styles.metricsRow}>
<div className={styles.metricsRow}>
<div className={styles.metricBox}>
<span className={styles.metricLabel}>Ingresos del Periodo</span>
<span className={styles.metricValue}>
@@ -145,9 +153,9 @@ export default function FinancialWidget({ sessionUser, selectedOrgId, organizati
{financials && (
<UnpaidIncomeCard value={financials.unpaidToday} />
)}
</div>
</div>
<div className={styles.chartContainer}>
<div className={styles.chartContainer}>
{!loading && chartData.length > 0 ? (
<LineChart
height={350}
@@ -210,7 +218,9 @@ export default function FinancialWidget({ sessionUser, selectedOrgId, organizati
{loading ? 'Cargando datos...' : 'No hay datos para este periodo'}
</div>
)}
</div>
</div>
</>
)}
</div>
);
}