import React,{useEffect,useState} from 'react'; import {workshopSections,visibleWorkshopSections,workshopStates,filterWorkshopOrders,visibleWorkshopEquipment} from './workshop-menu.js'; import WorkshopStockWorkspace from './WorkshopStockWorkspace.jsx'; export default function WorkshopMenuWorkspace({section,context,can,api,navigate}) { const unit=context.unit?.id??null,active=workshopSections.find(s=>s.id===section); const [data,setData]=useState(null),[error,setError]=useState(''),[reload,setReload]=useState(0),[search,setSearch]=useState(''),[state,setState]=useState(''); useEffect(()=>{ let current=true;setData(null);setError(''); if(unit===null||!can('workshop.view',unit)||!['workshop_panel','workshop_equipment','workshop_team','workshop_reports'].includes(section))return ()=>{current=false;}; api('/api/workshop').then(d=>{if(current)setData(d);}).catch(e=>{if(current)setError(e.message);}); return ()=>{current=false;}; },[context.token,section,reload]); if(!active)return null; const orders=filterWorkshopOrders(data?.orders??[],search,state); const link=(id,label,permission,scope=null)=>can(permission,scope)?:null; const orderTable=
{orders.map(o=>)}
OrdemEquipamentoClienteEstado registadoResponsávelAcção
{o.reference}#{o.id} · Revisão {o.revision}{o.equipment?.identifier}{o.equipment?.description}#{o.client_id}{workshopStates[o.state]??o.state}{o.assigned_to?`#${o.assigned_to}`:'Por atribuir'}
{!orders.length&&

Sem ordens visíveis para os filtros seleccionados.

}
; return

OFICINAS

{active.label}

{context.company.name} / {context.unit?.name??'Seleccione uma unidade'}

{section==='workshop_stock'&&unit!==null&&can('workshop_stock.view',unit)&&}

Demonstração sintética. O estado operacional, a autorização de trabalho, a facturação e o pagamento são distintos. Abrir o menu não altera permissões nem confirma uma operação.

{active.pending&&!(section==='workshop_stock'&&can('workshop_stock.view',unit))&&

Capacidade ainda não disponível

{active.pending}

{['workshop_stock','workshop_quotes'].includes(section)&&}{section==='workshop_stock'&&can('company.view')&&}{section==='workshop_purchasing'&&
{link('purchasing_budget','Controlo orçamental disponível','purchasing_budget.view',unit)}{link('supplier_payables','Obrigações a fornecedores disponíveis','supplier_payables.view',unit)}
}
} {section==='workshop_clients'&&

Cadastro de clientes existente

Reutilize o cadastro da empresa; não há um segundo registo de clientes para a oficina. Conta corrente e histórico de manutenção completo não são acrescentados por este menu.

{link('clients','Abrir clientes','clients.view')}
} {section==='workshop_finance'&&

Documentos e percursos financeiros existentes

{link('service_invoices','Facturas e documentos de teste','service_invoices.view',unit)}{link('billing_drafts','Rascunhos de facturação','billing_drafts.view',unit)}{link('workshop_billing','Oficina → rascunho','workshop_billing.view',unit)}{link('service_receivables','Recebimentos e afectações de teste','service_receivables.view',unit)}

Caixa, despesas, abertura e fecho de caixa ainda não estão implementados. Não se apresentam saldos fictícios, margens ou valores recebidos inferidos a partir de facturas.

} {section==='workshop_settings'&&

Configurações existentes

{link('company','Dados da empresa','company.view')}{link('access','Acessos autorizados','access.manage')}{link('services','Catálogo de serviços','services.view')}{link('preview_model','Modelo de apresentação documental','issuer_documents.view')}{link('service_fiscal','Perfis fiscais existentes','service_fiscal.view')}

Catálogo de tipos de equipamento, características técnicas, política de oficina e gestão de cópias de segurança ainda não têm interface própria. Os perfis do documento são uma proposta; não atribuem direitos automaticamente.

} {['workshop_panel','workshop_equipment','workshop_team','workshop_reports'].includes(section)&&<>
{can('workshop.open',unit)&&}
{error?

Dados indisponíveis: {error}. Não é possível concluir que existam zero ordens.

:!data?

A carregar ordens autorizadas…

:data.blocked?

Ensaio indisponível neste ambiente

O percurso existente continua limitado à base sintética autorizada.

:<>

{section==='workshop_equipment'?'Pesquisar equipamentos nas ordens autorizadas':'Pesquisar ordens autorizadas'}

{section==='workshop_equipment'?<>

Equipamentos identificados nas ordens visíveis. O cadastro independente, tipos e características técnicas ainda não estão implementados.

{visibleWorkshopEquipment(orders).map(e=>)}
CódigoDescriçãoNúmero de sérieOrdens visíveis
{e.identifier}{e.description}{e.serial||'Não registado'}{e.orders.map(id=>)}
{!orders.length&&

Sem equipamentos nas ordens que correspondem aos filtros.

}:orderTable}

{section==='workshop_team'?'Responsáveis e horas de serviço':section==='workshop_reports'?'Consulta operacional disponível':'Âmbito do painel'}

{section==='workshop_team'?'A atribuição de responsáveis e o registo de horas mantêm-se nas ordens. O cadastro de recursos humanos, horários e disponibilidade não foram implementados.':section==='workshop_reports'?'Esta lista é uma consulta actual das ordens autorizadas. Relatório diário fechado, cortes, exportação e relatórios financeiros ainda não estão implementados.':'As ordens apresentadas respeitam a consulta e a atribuição autorizadas pelo servidor. Entradas, entregas do dia, alertas, agenda e indicadores de caixa ainda não dispõem das fontes necessárias neste percurso.'}

Os estados actuais de apontamentos não são convertidos nas fases futuras Recebida, Em reparação ou Entregue. Não se inferem margens, stock ou pendências de custódia.

} }
; }