import { Head, Link, router } from '@inertiajs/react'; import { useState } from 'react'; import { PageTitle, Panel, controlClass } from '@/components/procurement'; import { Button } from '@/components/ui/button'; type Props = { area: 'procurement' | 'people'; modules: Record; counts: Record; checkedAt: string; asOf: string; deadlineCounts: Record; filters: { module: string; search: string; due: string }; tasks: { total: number; data: { id: string; module: string; reference: string; label: string; blocked: boolean; created_at: string | null; due_on: string | null; due_status: string; href: string; }[]; prev_page_url: string | null; next_page_url: string | null; }; }; export default function Tasks({ area, modules, counts, checkedAt, asOf, deadlineCounts, filters, tasks, }: Props) { const [search, setSearch] = useState(filters.search); const [module, setModule] = useState(filters.module); const [due, setDue] = useState(filters.due); const deadlines: Record = { overdue: 'Prazo ultrapassado', today: 'Vence hoje', upcoming: 'Prazo futuro', undated: 'Sem prazo registado', }; const path = area === 'people' ? '/pessoas/tarefas' : '/requisicoes/tarefas'; return ( <>
router.reload()} > Actualizar } />
{Object.entries(modules).map(([key, label]) => ( {label}: {counts[key] ?? 0} ))}
{ event.preventDefault(); router.get( path, { module, search, due }, { preserveState: true }, ); }} > Limpar filtros

No módulo e pesquisa escolhidos, em {asOf}:{' '} {Object.entries(deadlines) .map( ([value, label]) => `${label}: ${deadlineCounts[value] ?? 0}`, ) .join(' · ')} .

{tasks.total} tarefa(s) no filtro. Documentos mais antigos aparecem primeiro; esta ordem não define prioridade de atendimento. Consulta actualizada em{' '} {new Date(checkedAt).toLocaleString('pt-PT')}.

{tasks.data.length === 0 ? (

Sem intervenções pendentes neste âmbito. A consulta administrativa, por si só, não atribui tarefas operacionais.

) : (
{tasks.data.map((task) => (

{modules[task.module]} ·{' '} {task.reference}

{task.label} {task.blocked && (

A entrega aguarda conferência do stock, qualidade ou reserva. Abra o pedido para consultar o impedimento e os responsáveis elegíveis.

)} {task.due_on && (

Prazo registado no processo:{' '} {task.due_on} {' · '} {deadlines[task.due_status]}

)}
))}
)}
{tasks.prev_page_url && ( Anterior )} {tasks.next_page_url && ( Seguinte )}

Abrir uma tarefa não decide nem conclui o processo. A lista muda quando a intervenção é registada na origem ou quando mudam as suas competências.

); }