import React, { useEffect, useState, useRef } from 'react'; import { __ } from '@wordpress/i18n'; import { useNavigate } from 'react-router-dom'; import { Button } from 'primereact/button'; import { DataTable } from 'primereact/datatable'; import { Column } from 'primereact/column'; import { Tag } from 'primereact/tag'; import { Toast } from 'primereact/toast'; import { Skeleton } from 'primereact/skeleton'; import RendicontazioneService from '../service/rendicontazioneService'; const STATUS_TAGS = { NOT_STARTED: { severity: 'info', label: 'Da avviare' }, DRAFT: { severity: 'warning', label: 'In compilazione' }, SUBMITTED: { severity: 'info', label: 'Inviata' }, UNDER_REVIEW: { severity: 'info', label: 'In valutazione' }, APPROVED: { severity: 'success', label: 'Approvata' }, REJECTED: { severity: 'danger', label: 'Respinta' }, AWAITING_AMENDMENT: { severity: 'warning', label: 'Soccorso istruttorio' } }; const RendicontazioniMie = () => { const navigate = useNavigate(); const toast = useRef(null); const [rows, setRows] = useState([]); const [loading, setLoading] = useState(true); const load = () => { setLoading(true); RendicontazioneService.listMine( (resp) => { const practices = (resp?.data?.practices || []).map(p => ({ ...p, isReady: false })); const ready = (resp?.data?.ready_to_start || []).map(r => ({ ...r, isReady: true })); setRows([...practices, ...ready]); setLoading(false); }, (err) => { toast.current?.show({ severity: 'error', summary: __('Errore', 'gepafin'), detail: err?.detail }); setLoading(false); } ); }; useEffect(() => { load(); /* eslint-disable-next-line */ }, []); const handleStart = (applicationId) => { RendicontazioneService.startPractice(applicationId, (resp) => { toast.current?.show({ severity: 'success', summary: __('Rendicontazione avviata', 'gepafin') }); navigate(`/rendicontazioni/${resp.data.id}`); }, (err) => toast.current?.show({ severity: 'error', summary: __('Avvio fallito', 'gepafin'), detail: err?.detail }) ); }; const callTpl = (row) => (
{row.call_name || `Bando #${row.call_id}`}
{row.company_name}
); const erogatoTpl = (row) => { const v = Number(row.amount_erogato || 0); return € {v.toLocaleString('it-IT', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}; }; const statusTpl = (row) => { const key = row.isReady ? 'NOT_STARTED' : (row.status || 'DRAFT'); const conf = STATUS_TAGS[key] || { severity: 'secondary', label: key }; return ; }; const progressTpl = (row) => { if (row.isReady) return ; return ( {row.invoice_count || 0} {__('fatture','gepafin')} · {row.ula_count || 0} {__('dipendenti','gepafin')} · {row.document_count || 0} {__('doc','gepafin')} ); }; const actionsTpl = (row) => { if (row.isReady) { return