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 (
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" />Bandeja limpia.
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)}` : ''}
| Consultor (Perfil) | Disponible | Contrato |
|---|---|---|
| {u.name} | {window.calculateVacationBalance(u, settings?.vacationRate || 2.5, vacations)} | {window.formatDateToNIC(u.hiringDate)} |
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.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}"
}