/* ============================================================ EMPRESA > FINANCEIRO > ORÇAMENTOS (usa catálogo de serviços) ============================================================ */ function PageFinOrcamentos({ orcamentos, clientes, servicos, onAdd, onStatusChange, goPage }){ const [clienteId,setClienteId] = useState(clientes[0]?.id || ''); const [busca, setBusca] = useState(''); const [itemName,setItemName] = useState(servicos[0]?.nome || ''); const [valor,setValor] = useState(servicos[0] ? String(servicos[0].valor) : ''); const [comissao,setComissao] = useState(servicos[0] ? (servicos[0].valor*servicos[0].comissaoPercent/100).toFixed(2) : ''); function onServicoChange(nome){ setItemName(nome); const s = servicos.find(x=>x.nome===nome); if(s){ setValor(String(s.valor)); setComissao((s.valor*s.comissaoPercent/100).toFixed(2)); } } function onValorChange(v){ setValor(v); setComissao(((parseFloat(v)||0)*0.2).toFixed(2)); } function submit(e){ e.preventDefault(); if(!itemName || !valor) return; onAdd({ clienteId, item:itemName, valor:parseFloat(valor), comissao:parseFloat(comissao)||0 }); } return (

Novo Orçamento

onValorChange(e.target.value)} required/>
setComissao(e.target.value)} required/>

Não encontrou o serviço? Cadastre em {e.preventDefault(); goPage('fin-servicos');}} style={{color:'var(--laranja)', fontWeight:700}}>Financeiro → Serviços.

Orçamentos e Andamento

setBusca(e.target.value)}/>
{orcamentos.filter(o=>{ if(!busca) return true; const q = busca.toLowerCase(); return o.cliente.toLowerCase().includes(q) || o.item.toLowerCase().includes(q); }).map(o=>( ))} {orcamentos.length>0 && orcamentos.filter(o=>{ if(!busca) return true; const q = busca.toLowerCase(); return o.cliente.toLowerCase().includes(q) || o.item.toLowerCase().includes(q); }).length===0 && }
ClienteItemValorComissãoAndamento
{o.cliente}{o.item}{fmtBRL(o.valor)}{fmtBRL(o.comissao)}
Nenhum orçamento encontrado com essa busca.
); }