fix(f4): show locked and sealed acts in document center

This commit is contained in:
2026-09-08 10:24:19 -03:00
parent 8c89cd05c9
commit 7a406df1ad
+19 -10
View File
@@ -8,17 +8,23 @@ import { useOperationalContext } from '../context/OperationalContext';
import { DocumentCenterTabs } from '../features/documents/DocumentCenterTabs';
import { inspectionActStatusClass, inspectionActStatusLabel } from '../features/inspections/inspectionActPresentation';
import { OperationalFilters } from '../features/inspections/OperationalFilters';
import { listInspectionActsGlobal } from '../lib/api';
import type { InspectionActListItem, InspectionActStatus, PageMeta } from '../lib/api';
import type { PageMeta } from '../lib/api';
import {
listInspectionActsGlobalF4,
type InspectionActListItemF4,
type InspectionActStatusF4,
} from '../lib/inspectionActF4Api';
import { formatDate } from '../lib/format';
const statuses: Array<{ value: InspectionActStatus | ''; label: string }> = [
const statuses: Array<{ value: InspectionActStatusF4 | ''; label: string }> = [
{ value: '', label: 'Todos los estados' },
{ value: 'DRAFT', label: 'Borrador' },
{ value: 'READY', label: 'Lista para cierre' },
{ value: 'CLOSED', label: 'Cerrada' },
{ value: 'RECTIFIED', label: 'Rectificada' },
{ value: 'LOCKED', label: 'Bloqueada · esperando manifestación' },
{ value: 'SEALED', label: 'Sellada' },
{ value: 'CANCELLED', label: 'Cancelada' },
{ value: 'READY', label: 'Lista para cerrar · legado' },
{ value: 'CLOSED', label: 'Cerrada · legado' },
{ value: 'RECTIFIED', label: 'Rectificada · legado' },
];
function contextLabel(items: Array<{ name: string }>, empty: string): string {
@@ -32,12 +38,15 @@ function contextLabel(items: Array<{ name: string }>, empty: string): string {
export function ActsPage() {
const [params, setParams] = useSearchParams();
const operationalContext = useOperationalContext();
const [items, setItems] = useState<InspectionActListItem[]>([]);
const [items, setItems] = useState<InspectionActListItemF4[]>([]);
const [meta, setMeta] = useState<PageMeta>({ page: 1, pageSize: 25, total: 0, totalPages: 0 });
const [loading, setLoading] = useState(true);
const [error, setError] = useState('');
const search = params.get('search') ?? '';
const status = (params.get('status') ?? '') as InspectionActStatus | '';
const rawStatus = params.get('status') ?? '';
const status = statuses.some((item) => item.value === rawStatus)
? rawStatus as InspectionActStatusF4 | ''
: '';
const year = params.get('year') ?? '';
const companyId = operationalContext.companyId || params.get('companyId') || '';
const areaId = operationalContext.areaId || params.get('areaId') || '';
@@ -50,7 +59,7 @@ export function ActsPage() {
useEffect(() => {
setLoading(true);
setError('');
listInspectionActsGlobal({ page, pageSize: 25, search, status, year: year ? Number(year) : '', companyId, areaId, inspectorId, dateFrom, dateTo })
listInspectionActsGlobalF4({ page, pageSize: 25, search, status, year: year ? Number(year) : '', companyId, areaId, inspectorId, dateFrom, dateTo })
.then((response) => {
setItems(response.data);
setMeta(response.meta);
@@ -108,7 +117,7 @@ export function ActsPage() {
<td><Link className="text-link" to={`/inspecciones/${act.visitId}`}>{act.visit.code}</Link></td>
<td><Link className="text-link" to={`/hallazgos?search=${encodeURIComponent(act.code)}`}>{act.findingCount}</Link></td>
<td><span className={`status-badge ${inspectionActStatusClass(act.status)}`}>{inspectionActStatusLabel(act.status)}</span></td>
<td>{act.report ? <Link className="text-link" to={`/informes/${act.report.id}`}>{act.report.code}<small className="block-muted">{act.report.pdfStatus === 'READY' ? 'PDF disponible' : 'PDF pendiente'}</small></Link> : act.status === 'CLOSED' ? <span className="status-badge pending">Pendiente de emisión</span> : <span className="muted"></span>}</td>
<td>{act.report ? <Link className="text-link" to={`/informes/${act.report.id}`}>{act.report.code}<small className="block-muted">{act.report.pdfStatus === 'READY' ? 'PDF disponible' : 'PDF pendiente'}</small></Link> : ['SEALED', 'CLOSED'].includes(act.status) ? <span className="status-badge pending">Pendiente de emisión</span> : <span className="muted"></span>}</td>
<td className="action-cell"><Link className="icon-button" to={`/inspecciones/actas/${act.id}`} aria-label={`Abrir ${act.code}`}><Icon name="chevron" /></Link></td>
</tr>)}</tbody></table></div>
<div className="pagination"><button className="button secondary" disabled={page <= 1} onClick={() => setPage(page - 1)}>Anterior</button><span>{meta.total ? `${(page - 1) * meta.pageSize + 1}${Math.min(page * meta.pageSize, meta.total)} de ${meta.total}` : '0 resultados'}</span><button className="button secondary" disabled={page >= meta.totalPages} onClick={() => setPage(page + 1)}>Siguiente</button></div>