20 lines
3.1 KiB
JavaScript
20 lines
3.1 KiB
JavaScript
const labels={before:'Antes',after:'Depois',operation:'Operação',action:'Operação',status:'Estado',resulting_status:'Estado resultante',number:'Número',name:'Nome',supplier:'Fornecedor',invoice:'Factura',request:'Requisição',order:'Ordem',budget:'Orçamento',lines:'Linhas',items:'Linhas',description:'Descrição',quantity:'Quantidade',unit:'Unidade',currency:'Moeda',reason:'Fundamento',comment:'Fundamento',justification:'Necessidade',delivery_date:'Data de entrega',delivery_location:'Local de entrega',delivery_note:'Guia de entrega',received_on:'Data de recepção',received_milli:'Recebido',accepted_milli:'Aceite',rejected_milli:'Rejeitado',quantity_milli:'Quantidade',total_minor:'Total',subtotal_minor:'Base',tax_minor:'Imposto documental',unit_price_minor:'Preço unitário',reserved_minor:'Reservado',committed_minor:'Comprometido',consumed_minor:'Consumido',budget_consumption_minor:'Consumo do compromisso',total:'Total',principal_minor:'Principal',balance_minor:'Saldo',payment:'Pagamento',payments:'Pagamentos',accounting:'Contabilidade',stock:'Stock',required_approvals:'Aprovações necessárias',quality_status:'Qualidade',notes:'Observações',prepared_by:'Preparador',validated_by:'Validador',created_at:'Registado em',due_on:'Vencimento',missing:'Pendências',state:'Estado',department_head:'Chefia',finance:'Finanças',procurement:'Compras'};
|
|
const values={draft:'Rascunho',pending:'Pendente',approved:'Aprovado',rejected:'Recusado',active:'Activo',suspended:'Suspenso',issued:'Emitida',validated:'Validada',recognised:'Reconhecida',prepared:'Preparada',complete:'Concluída',partial:'Parcial',compliant:'Conforme',reservations:'Com reservas',quality_pending:'Conferência de qualidade pendente',department_head:'Chefia',finance:'Finanças',procurement:'Compras'};
|
|
export function purchasingStatus(value){return Object.hasOwn(values,value)?values[value]:value;}
|
|
export function evidence(value){
|
|
const node=(tag,text)=>{const e=document.createElement(tag);if(text!==undefined)e.textContent=text;return e;};
|
|
const render=(v,key='',depth=0)=>{
|
|
if(v===null||v===undefined)return node('span','Por indicar');
|
|
if(typeof v==='boolean')return node('span',v?'Sim':'Não');
|
|
if(typeof v!=='object'){
|
|
if(/_minor$/.test(key)&&/^-?\d+$/.test(String(v))){const amount=BigInt(v),n=amount<0n?-amount:amount;return node('span',`${amount<0n?'-':''}${n/100n},${String(n%100n).padStart(2,'0')} MZN`);}
|
|
if(/_milli$/.test(key)&&/^-?\d+$/.test(String(v))){const amount=BigInt(v),n=amount<0n?-amount:amount;return node('span',`${amount<0n?'-':''}${n/1000n},${String(n%1000n).padStart(3,'0')}`);}
|
|
return node('span',String(purchasingStatus(v)));
|
|
}
|
|
if(depth>12)return node('span','Consultar o histórico desta origem.');
|
|
if(Array.isArray(v)){const list=node('ol');if(!v.length)return node('p','Sem elementos.');for(const item of v){const row=node('li');row.append(render(item,'',depth+1));list.append(row);}return list;}
|
|
const list=node('dl');for(const [name,item]of Object.entries(v)){const content=node('dd');content.append(render(item,name,depth+1));list.append(node('dt',Object.hasOwn(labels,name)?labels[name]:name.replaceAll('_',' ')),content);}return list;
|
|
};
|
|
return render(value);
|
|
}
|