19 lines
1.3 KiB
JavaScript
19 lines
1.3 KiB
JavaScript
export function receiptMovementHref(id) {
|
|
if(!Number.isSafeInteger(id)||id<1)throw Error('Movimento inválido. Actualize a consulta.');
|
|
return `/purchasing/receipts?movement=${id}`;
|
|
}
|
|
|
|
/** Called only inside the host's existing dirty-form/context transition guard. */
|
|
export async function openStockReceipt({movement,context,active,select,commit,go}) {
|
|
const href=receiptMovementHref(movement),unit=context?.unit?.id;
|
|
const allowed=p=>context?.grants?.some(g=>g.permission===p&&g.unit_id===unit);
|
|
if(context?.module_id!=='stock'||!unit||!context?.purchasing?.receipts
|
|
||!context?.modules?.some(m=>m.id==='purchasing')||!allowed('stock.view')||!allowed('purchasing_receipts.view'))throw Error('Origem sem acesso autorizado neste contexto.');
|
|
if(!active())throw Error('O contexto mudou. Actualize a consulta.');
|
|
const next=await select({tenant_id:context.company.tenant_id,company_id:context.company.id,unit_id:unit,module_id:'purchasing'});
|
|
if(!active())throw Error('Resposta de um contexto anterior ignorada.');
|
|
if(next?.context?.module_id!=='purchasing'||next.context.company?.id!==context.company.id
|
|
||next.context.company?.tenant_id!==context.company.tenant_id||next.context.unit?.id!==unit||!next.context.token)throw Error('O destino não confirmou o contexto pedido.');
|
|
commit(next);go(href);
|
|
}
|