'use client'; import { useState } from 'react'; import { Button, Card, CardContent, CardHeader, CardTitle, Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, Tabs, TabsList, TabsTrigger, TabsContent, } from '@horux/shared-ui'; import { useAsignacionesSupervisor, useSinAsignar, useAsignarObligacion, useDesasignarObligacion, useAsignarTarea, useDesasignarTarea, } from '@/lib/hooks/use-asignaciones'; import { useUsuarios } from '@/lib/hooks/use-usuarios'; import { useAuthStore } from '@/stores/auth-store'; import { UserCheck, UserX, UserCog, Plus } from 'lucide-react'; export default function SeguimientoAuxiliares() { const { user } = useAuthStore(); const { data: asignaciones, isLoading: loadingAsignadas } = useAsignacionesSupervisor(); const { data: sinAsignar, isLoading: loadingSinAsignar } = useSinAsignar(); const { data: usuarios } = useUsuarios(); const asignarObligacionMut = useAsignarObligacion(); const desasignarObligacionMut = useDesasignarObligacion(); const asignarTareaMut = useAsignarTarea(); const desasignarTareaMut = useDesasignarTarea(); const [modalOpen, setModalOpen] = useState(false); const [modalType, setModalType] = useState<'obligacion' | 'tarea'>('obligacion'); const [modalItem, setModalItem] = useState(null); const [selectedAuxiliar, setSelectedAuxiliar] = useState(''); const auxiliares = (usuarios ?? []).filter((u: any) => u.role === 'auxiliar'); const openAssignModal = (type: 'obligacion' | 'tarea', item: any) => { setModalType(type); setModalItem(item); setSelectedAuxiliar(item.auxiliarUserId || ''); setModalOpen(true); }; const handleAssign = async () => { if (!selectedAuxiliar || !modalItem) return; try { if (modalType === 'obligacion') { await asignarObligacionMut.mutateAsync({ contribuyenteId: modalItem.contribuyenteId, obligacionId: modalItem.obligacionId, auxiliarUserId: selectedAuxiliar, }); } else { await asignarTareaMut.mutateAsync({ tareaId: modalItem.tareaId, auxiliarUserId: selectedAuxiliar, }); } setModalOpen(false); } catch (err: any) { alert(err.response?.data?.message || 'Error al asignar'); } }; const handleUnassign = async (type: 'obligacion' | 'tarea', item: any) => { if (!confirm('¿Eliminar la asignación?')) return; try { if (type === 'obligacion') { await desasignarObligacionMut.mutateAsync({ contribuyenteId: item.contribuyenteId, obligacionId: item.obligacionId, }); } else { await desasignarTareaMut.mutateAsync({ tareaId: item.tareaId }); } } catch (err: any) { alert(err.response?.data?.message || 'Error al desasignar'); } }; if (loadingAsignadas || loadingSinAsignar) { return

Cargando asignaciones...

; } const obligacionesAsignadas = asignaciones?.obligaciones ?? []; const tareasAsignadas = asignaciones?.tareas ?? []; const obligacionesSinAsignar = sinAsignar?.obligaciones ?? []; const tareasSinAsignar = sinAsignar?.tareas ?? []; return (
Asignadas Sin asignar Obligaciones ({obligacionesAsignadas.length}) Tareas ({tareasAsignadas.length}) openAssignModal('obligacion', item)} onUnassign={(item) => handleUnassign('obligacion', item)} /> openAssignModal('tarea', item)} onUnassign={(item) => handleUnassign('tarea', item)} /> Obligaciones ({obligacionesSinAsignar.length}) Tareas ({tareasSinAsignar.length}) openAssignModal('obligacion', item)} /> openAssignModal('tarea', item)} /> {/* Modal de asignación */} {modalItem?.auxiliarUserId ? 'Reasignar' : 'Asignar'} {modalType === 'obligacion' ? 'obligación' : 'tarea'}

{modalType === 'obligacion' ? modalItem?.obligacionNombre : modalItem?.tareaNombre}

Contribuyente: {modalItem?.contribuyenteRazonSocial} ({modalItem?.contribuyenteRfc})

); } function AsignacionesTable({ items, tipo, modo, auxiliares, onAssign, onUnassign, }: { items: any[]; tipo: 'obligacion' | 'tarea'; modo: 'asignadas'; auxiliares: any[]; onAssign: (item: any) => void; onUnassign: (item: any) => void; }) { if (items.length === 0) { return ( No hay {tipo === 'obligacion' ? 'obligaciones' : 'tareas'} asignadas. ); } return (
{items.map((item) => ( ))}
Auxiliar Contribuyente {tipo === 'obligacion' ? 'Obligación' : 'Tarea'} Asignado Acciones
{item.auxiliarNombre ? ( {item.auxiliarNombre} ) : ( Sin asignar )}
{item.contribuyenteRazonSocial}
{item.contribuyenteRfc}
{tipo === 'obligacion' ? item.obligacionNombre : item.tareaNombre} {item.asignadoAt ? new Date(item.asignadoAt).toLocaleDateString('es-MX') : '-'}
{item.auxiliarUserId && ( )}
); } function SinAsignarTable({ items, tipo, auxiliares, onAssign, }: { items: any[]; tipo: 'obligacion' | 'tarea'; auxiliares: any[]; onAssign: (item: any) => void; }) { if (items.length === 0) { return ( No hay {tipo === 'obligacion' ? 'obligaciones' : 'tareas'} sin asignar. ); } return (
{items.map((item, idx) => ( ))}
Contribuyente {tipo === 'obligacion' ? 'Obligación' : 'Tarea'} Acción
{item.contribuyenteRazonSocial}
{item.contribuyenteRfc}
{tipo === 'obligacion' ? item.obligacionNombre : item.tareaNombre}
); }