19 lines
1.4 KiB
JavaScript
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};
|
|
}
|