commit melhorias sgf
This commit is contained in:
@@ -2,6 +2,7 @@ import React,{useEffect,useState} from 'react';
|
||||
import {billingSections,visibleBillingSections,filterBillingRows,loadBillingRows} from './billing-menu.js';
|
||||
|
||||
const emptyFilters={search:'',type:'',currency:'',series:'',state:'',author:'',from:'',to:''};
|
||||
const BillingRegisterWorkspace=React.lazy(()=>import('./BillingRegisterWorkspace.jsx'));
|
||||
const value=v=>v===null||v===undefined||v===''?'Por determinar':String(v);
|
||||
|
||||
export function BillingDocumentList({rows,filters,onFilter,onClear,onOpen}) {
|
||||
@@ -25,13 +26,16 @@ export default function BillingMenuWorkspace({section,context,can,api,navigate})
|
||||
useEffect(()=>{setSelected(null);},[section]);
|
||||
useEffect(()=>{
|
||||
let current=true;setResult(null);setSelected(null);
|
||||
if(unit===null||active?.pending)return ()=>{current=false;};
|
||||
if(unit===null||active?.pending||(context.service_documents_enabled&&['billing_all','service_invoices'].includes(section)))return ()=>{current=false;};
|
||||
setLoading(true);
|
||||
loadBillingRows(api,can,unit).then(r=>{if(current){setResult(r);setLoading(false);}});
|
||||
return ()=>{current=false;};
|
||||
},[context.token,section,reload]);
|
||||
if(!active)return null;
|
||||
if(context.service_documents_enabled&&['billing_all','service_invoices'].includes(section))return <React.Suspense fallback={<p role="status">A abrir documentos…</p>}><BillingRegisterWorkspace api={api} context={context} navigate={navigate} section={section}/></React.Suspense>;
|
||||
const newDraft=()=>navigate('billing_drafts',null,true);
|
||||
const additional={billing_receipts:'receipt',billing_credit_notes:'credit_note',billing_invoice_receipts:'invoice_receipt'}[section];
|
||||
if(additional&&context.service_documents_enabled&&unit&&can('service_documents.view',unit))return <section className="panel"><p className="eyebrow">COMERCIAL</p><h1>{active.label}</h1><p>Preparação, revisão distinta, prévia e emissão individual de teste. Os recibos usam afectações efectivas; o crédito exige decisão financeira própria.</p><a href={'/commercial/documents?kind='+additional}>Abrir {active.label.toLowerCase()}</a><p>Sem validade fiscal e sem movimento de dinheiro real.</p></section>;
|
||||
return <div className="billing-menu-workspace"><div className="page-title"><p className="eyebrow">FACTURAÇÃO</p><h1>{active.label}</h1><p>Documentos comerciais no contexto de {context.company.name}{context.unit?` / ${context.unit.name}`:''}.</p></div>
|
||||
<nav className="billing-section-tabs" aria-label="Submenus de facturação">{visibleBillingSections(can,unit).map(s=><button key={s.id} aria-current={s.id===section?'page':undefined} onClick={()=>navigate(s.id)}>{s.label}</button>)}</nav>
|
||||
<p className="fiscal-notice"><strong>Demonstração — sem validade fiscal.</strong> A entrada e a consulta não habilitam emissão real. Documento, dívida e recebimento são factos distintos.</p>
|
||||
|
||||
Reference in New Issue
Block a user