Files
SGF/resources/js/workshopBillingProposal.js

19 lines
1.4 KiB
JavaScript

// Validate only the user's selected origins; do not supply prices or services by default.
export function workshopBillingProposal(order, services, form) {
const selected=order.entries.filter(r=>form.get(`select-${r.id}`)==='on');
if(!selected.length)throw new Error('Marque «Incluir origem integral» em pelo menos uma origem verificada.');
const lines=selected.map(r=>{
const service=services.find(s=>String(s.id)===form.get(`service-${r.id}`));
if(!service)throw new Error(`Origem #${r.id}: seleccione o serviço comercial na lista.`);
const price=String(form.get(`price-${r.id}`)??'').trim();
if(!price)throw new Error(`Origem #${r.id}: preencha o preço comercial.`);
const source=String(form.get(`source-${r.id}`)??'').trim();
if(source.length<3)throw new Error(`Origem #${r.id}: preencha a fonte comercial e versão (mínimo 3 caracteres).`);
return {entry_id:r.id,entry_version:r.version,service_id:service.id,service_version:service.version,price,price_source:source};
});
const evidence=String(form.get('evidence')??'').trim();
if(evidence.length<3)throw new Error('Preencha o fundamento da proposta (mínimo 3 caracteres).');
const last=order.proposals.at(-1);
return {version:(last?.version??0)+1,previous_id:last?.id??null,client_id:order.client_id,currency:'MZN',lines,evidence};
}