const { useState, useMemo } = React; window.AdminVacaciones = function({ globalUsers = [], vacations = [], settings = {}, updateVacationRate, setVacationStatus, revokeEntireVacation, setSelectedUserVacation }) { const [vacPage, setVacPage] = useState(0); const [vacRateLocal, setVacRateLocal] = useState(settings?.vacationRate || 2.5); const approvedVacsHistory = useMemo(() => { return (vacations || []) .filter(v => v.status === 'approved') .sort((a,b) => (b.requestedAt || 0) - (a.requestedAt || 0)); }, [vacations]); const totalVacPages = Math.ceil(approvedVacsHistory.length / 5); const paginatedVacs = approvedVacsHistory.slice(vacPage * 5, (vacPage + 1) * 5); return (
{/* CONFIGURACIÓN DE TASA */}

Reglas Vacacionales

Tasa maestra de acumulación mensual por cada 30 días naturales trabajados (Ley Laboral NI).

setVacRateLocal(e.target.value)} className="w-full p-4 bg-slate-50 rounded-2xl font-bold outline-none focus:ring-2 focus:ring-emerald-100 text-slate-800" />
{/* SOLICITUDES ENTRANTES */}

Solicitudes Entrantes

{vacations.filter(v => v.status === 'pending').length === 0 ? (

Bandeja limpia.

) : ( vacations.filter(v => v.status === 'pending').map(v => (

{v.userName}

Pide: {v.type === 'half' ? 'MEDIO DÍA (0.5)' : `${window.getDaysDiff(v.startDate, v.endDate || v.startDate)} DÍA(S)`}

Del {window.formatDateToNIC(v.startDate)} {v.type === 'range' ? `al ${window.formatDateToNIC(v.endDate)}` : ''}

)) )}
{/* TABLA DE SALDOS */}

Saldos

TOCA EL NOMBRE PARA GESTIONAR
{globalUsers.map(u => ( setSelectedUserVacation(u)}> ))}
Consultor (Perfil) Disponible Contrato
{u.name} {window.calculateVacationBalance(u, settings?.vacationRate || 2.5, vacations)} {window.formatDateToNIC(u.hiringDate)}
{/* HISTORIAL Y REVOCACIÓN DE VACACIONES APROBADAS */}

Aprobadas General

{vacPage+1} / {totalVacPages||1}
{paginatedVacs.length === 0 ? (

Sin registros históricos.

) : ( paginatedVacs.map(v => { const daysCount = v.type === 'half' ? 0.5 : (v.type === 'paid' ? v.paidDays : window.getDaysDiff(v.startDate, v.endDate || v.startDate)); return (

{v.userName}

{daysCount} DÍA(S)

{v.type === 'paid' ? `PAGO EN EFECTIVO (${v.paidDays} DÍAS)` : `DEL ${window.formatDateToNIC(v.startDate)} ${v.type === 'range' ? `AL ${window.formatDateToNIC(v.endDate)}` : ''}`}

{v.notes &&

"{v.notes}"

}
{/* BOTÓN PARA REVOCAR Y REINTEGRAR DÍAS */}
); }) )}
); };