import React,{useEffect,useState} from 'react'; import {workshopStates} from './workshop-menu.js'; import {checkedWorkshopReport,workshopPageCsv} from './workshop-report-view.js'; export function WorkshopOrderRow({row:r,navigate}){return {r.reference}{r.client??'Cliente por conferir'}{r.equipment??'Identificação por conferir'}{r.description}{r.serial??'Série não registada'}{r.technician??'Por atribuir'}{workshopStates[r.state]}{r.points} registo(s){r.points_not_verified} sem verificação favorável{r.minutes_reported} apontados{r.minutes_verified} verificados;} export default function WorkshopOrderList({context,api,navigate,report=false,equipmentId=null,onBack=null}){ const [form,setForm]=useState({search:'',state:'',per_page:'25',from:'',to:'',equipment_id:equipmentId??''}),[query,setQuery]=useState({page:1,per_page:'25',equipment_id:equipmentId??''}),[data,setData]=useState(null),[error,setError]=useState(''),[loading,setLoading]=useState(false); useEffect(()=>{let current=true;setData(null);setError('');if(report&&!query.from){setLoading(false);return()=>{current=false;};}setLoading(true);api('/api/workshop/orders?'+new URLSearchParams(Object.entries(query).filter(([,v])=>v!==''))).then(v=>{if(current)setData(checkedWorkshopReport(v,query));}).catch(e=>{if(current)setError(e.message);}).finally(()=>{if(current)setLoading(false);});return()=>{current=false;};},[context.token,query,report]); const p=data?.orders;const exportPage=()=>{const url=URL.createObjectURL(new Blob(['\uFEFF'+workshopPageCsv(data,query)],{type:'text/csv;charset=utf-8'}));const a=document.createElement('a');a.href=url;a.download='sgf-oficina-pagina-'+p.current_page+'.csv';a.click();setTimeout(()=>URL.revokeObjectURL(url),1000);}; return

{equipmentId?'Ordens do equipamento escolhido':report?'Relatório de ordens por período de abertura':'Ordens, responsáveis e apontamentos'}

{report&&

Escolha as datas de abertura das ordens. Os apontamentos e a identificação são os actuais; não é um fecho diário ou uma reconstituição histórica.

}{onBack&&}{data?.equipment&&

Equipamento seleccionado

Código
{data.equipment.identifier}
Descrição
{data.equipment.description}
Série
{data.equipment.serial??'Não registada'}
Cliente
{data.equipment.client_name}

A identificação é a actual; os apontamentos não representam uma reparação concluída.

}

Consulta actual por empresa/unidade e atribuição ao técnico. O estado resume os apontamentos actuais, não a entrega, a factura ou o pagamento.

{e.preventDefault();setQuery({...form,page:1});}}>
{loading&&

A consultar a página autorizada…

}{error&&

{error}. Não é possível concluir que existem zero ordens ou pendências.

}{p&&<>

{data.opening_period?`Abertura entre ${data.opening_period.from} e ${data.opening_period.to}, ${data.opening_period.zone}; fim exclusivo UTC ${data.opening_period.end_utc_exclusive}.`:'Sem filtro de abertura.'}

{p.total} ordem(ns) para os filtros · página {p.current_page} de {p.last_page} · leitura {data.observed_at}.

{p.data.map(r=>)}
Ordem e clienteEquipamentoResponsávelEstadoApontamentos actuaisTempo em minutosConsultar
{p.data.length===0&&

Nenhuma ordem corresponde aos filtros e à atribuição autorizada.

}}

Versões substituídas não contam como apontamentos actuais. “Sem verificação favorável” inclui pendentes, recusados e ocorrências reconhecidas; não é apenas uma fila de decisões por tomar. Sem totais de materiais ou custos entre unidades diferentes. A consulta não bloqueia a empresa para confirmação nem altera as ordens.

; }