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=
| Ordem | Equipamento | Cliente | Estado registado | Responsável | Acçã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'} |
Sem ordens visíveis para os filtros seleccionados.
}OFICINAS
{context.company.name} / {context.unit?.name??'Seleccione uma unidade'}
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))&&{active.pending}
{['workshop_stock','workshop_quotes'].includes(section)&&}{section==='workshop_stock'&&can('company.view')&&}{section==='workshop_purchasing'&&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')}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.
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.
Dados indisponíveis: {error}. Não é possível concluir que existam zero ordens.
:!data?A carregar ordens autorizadas…
:data.blocked?O percurso existente continua limitado à base sintética autorizada.
Equipamentos identificados nas ordens visíveis. O cadastro independente, tipos e características técnicas ainda não estão implementados.
| Código | Descrição | Número de série | Ordens visíveis |
|---|---|---|---|
| {e.identifier} | {e.description} | {e.serial||'Não registado'} | {e.orders.map(id=>)} |
Sem equipamentos nas ordens que correspondem aos filtros.
}>:orderTable}{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.