Files
SGF/resources/views/accounting/receipt-recovery.blade.php
2026-11-04 09:37:20 +02:00

17 lines
2.8 KiB
PHP

<section aria-labelledby="receipt-title"><h2 id="receipt-title">Consultar comprovativo de um pedido</h2><p>Se perdeu a resposta, consulte a chave apresentada pela operação. Esta consulta mostra apenas comprovativos seus no contexto actual e não executa operações. A ausência de comprovativo nesta captura não prova falha nem autoriza repetição; confira o estado e as evidências antes de reenviar.</p><form id="receipt-lookup"><label>Domínio<select name="domain"><option value="ledger">Contabilidade</option><option value="recognition">Reconhecimento de fornecedor</option><option value="settlement">Liquidação de fornecedor</option></select></label><label>Chave do pedido<input name="command_key" required maxlength="36" pattern="[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}" autocomplete="off"></label><button>Consultar sem executar</button></form><p id="receipt-status" role="status"></p><pre id="receipt-result"></pre></section>
<script>(()=>{
const form=document.getElementById('receipt-lookup'),status=document.getElementById('receipt-status'),result=document.getElementById('receipt-result'),button=form.querySelector('button');
let generation=0,active=null;
const invalidate=()=>{generation++;active?.abort();active=null;result.textContent='';status.textContent='Selecção alterada; consulte novamente a chave no domínio pretendido.';button.disabled=false;};
form.addEventListener('input',invalidate);form.addEventListener('change',invalidate);
form.onsubmit=async event=>{
event.preventDefault();active?.abort();const serial=++generation,controller=new AbortController();active=controller;
const key=form.elements.command_key.value.trim(),domain=form.elements.domain.value,current=()=>generation===serial&&form.elements.command_key.value.trim()===key&&form.elements.domain.value===domain;
button.disabled=true;status.textContent='A consultar…';result.textContent='';
try{const url=domain==='ledger'?'/api/general-ledger/receipts/'+encodeURIComponent(key):'/api/general-ledger/financial-receipts/'+encodeURIComponent(domain)+'/'+encodeURIComponent(key);
const response=await fetch(url,{credentials:'same-origin',signal:controller.signal,headers:{Accept:'application/json','X-SGF-Context':@json(session('company_context.token'))}});
if(!current())return;const data=await response.json();if(!current())return;
if(!response.ok)throw Error(data.message||'Consulta recusada.');status.textContent='Comprovativo histórico encontrado. Nenhuma operação foi executada por esta consulta.';result.textContent=JSON.stringify(data,null,2);
}catch(error){if(current()&&error.name!=='AbortError')status.textContent=error.message+' Confira o contexto e as evidências antes de repetir a operação.';}
finally{if(generation===serial){button.disabled=false;active=null;}}
};})();</script>