Ir al contenido

Acceder al Negocio de un Cliente

Cambia el contexto activo al negocio del cliente seleccionado para trabajar en su nombre.

  1. Haz clic en el nombre o tarjeta del cliente
  2. El sistema carga el entorno del negocio del cliente
  3. Trabajas como si fueses el propietario (con los permisos delegados)
  4. Para volver al panel asesor, haz clic en “Volver a mi despacho”
Detalles técnicos — Acceder al negocio de un cliente
-- Alertas de todos los clientes del asesor
SELECT
b.id AS business_id,
b.name AS business_name,
'invoice_overdue' AS alert_type,
COUNT(*) AS count,
MAX(i.due_date) AS latest_date
FROM advisor_delegations ad
JOIN businesses b ON b.id = ad.business_id
JOIN invoices i ON i.business_id = b.id
WHERE ad.advisor_id = auth.uid()
AND ad.is_active = true
AND i.status = 'overdue'
GROUP BY b.id, b.name
UNION ALL
SELECT
b.id,
b.name,
'tax_deadline',
COUNT(*),
MIN(td.due_date)
FROM advisor_delegations ad
JOIN businesses b ON b.id = ad.business_id
JOIN tax_deadlines td ON td.business_id = b.id
WHERE ad.advisor_id = auth.uid()
AND ad.is_active = true
AND td.due_date BETWEEN now() AND now() + INTERVAL '30 days'
AND td.status = 'pending'
GROUP BY b.id, b.name;
async function switchToClientBusiness(businessId: string) {
// Verificar delegación activa
const { data: delegation } = await supabase
.from('advisor_delegations')
.select('permissions')
.eq('advisor_id', currentUser.id)
.eq('business_id', businessId)
.eq('is_active', true)
.single();
if (!delegation) throw new Error('Sin acceso a este negocio');
// Almacenar contexto en sesión
sessionStorage.setItem('active_business_id', businessId);
sessionStorage.setItem('advisor_permissions', JSON.stringify(delegation.permissions));
// Redirigir al panel del cliente
router.push(`/advisor/client/${businessId}/dashboard`);
}