BRUÊ SEMIJÓIAS

/* ===== V10 • RECEIPT LOGIC ===== */ const receiptKey='maison_elea_receipts_v1'; let receiptHistory=[]; function loadReceiptHistory(){try{receiptHistory=JSON.parse(localStorage.getItem(receiptKey)||'[]')}catch(e){receiptHistory=[]}} function saveReceiptHistory(){localStorage.setItem(receiptKey,JSON.stringify(receiptHistory.slice(0,30)))} function fillReceiptOptions(){ const el=$('rclient'); if(!el)return; el.innerHTML=''+state.customers.map(c=>``).join(''); } function receiptNumber(){return 'ME-N'+Date.now().toString().slice(-8)} function formatDateBR(v){if(!v)return '--/--/----';let [y,m,d]=v.split('-');return `${d}/${m}/${y}`} function updateReceiptPreview(){ const c=state.customers.find(x=>x.id===$('rclient')?.value); const today=formatDateBR(new Date().toISOString().slice(0,10)); $('pvClient').textContent=c?.name||'Consumidor'; $('pvDate').textContent=formatDateBR($('rdate').value); $('pvIssueDate').textContent=today; $('pvJewel').textContent=$('rjewel').value.trim()||'Sua joia'; $('pvDesc').textContent=$('rdesc').value.trim()||'—'; $('pvSku').textContent=$('rsku').value.trim()||'—'; $('pvMaterial').textContent=$('rmaterial').value.trim()||'—'; $('pvFinish').textContent=$('rfinish').value.trim()||'—'; $('pvGems').textContent=$('rgems').value.trim()||'—'; const w=$('rwarranty').value; $('pvWarranty').textContent=w==='0'?'Sem garantia':w+' meses'; $('pvPrice').textContent=money($('rprice').value||0); $('pvPay').textContent=$('rpay').value; $('pvNotes').textContent=$('rnotes').value.trim()||'Agradecemos por escolher a Bruê Semijóias.'; } function renderReceiptHistory(){ const box=$('receiptHistory'); if(!box)return; box.innerHTML=receiptHistory.map(r=>`
${esc(r.number)}${esc(r.date)} • ${esc(r.customer)} • ${esc(r.jewel)}
${money(r.price)}
`).join('')||'
Nenhuma nota criada ainda.
'; } function resetReceipt(){ const d=new Date(); $('rdate').value=d.toISOString().slice(0,10); $('rclient').value='';$('rjewel').value='';$('rsku').value='';$('rprice').value=''; $('rmaterial').value='';$('rfinish').value='';$('rgems').value='';$('rdesc').value=''; $('rpay').value='Pix';$('rwarranty').value='6';$('rnotes').value=''; $('pvNumber').textContent='NOTA • —';updateReceiptPreview(); } function openReceiptPage(){ fillReceiptOptions();loadReceiptHistory();renderReceiptHistory(); if(!$('rdate').value)resetReceipt(); else updateReceiptPreview(); } function saveReceipt(){ const date=$('rdate').value, jewel=$('rjewel').value.trim(), price=Number($('rprice').value||0); if(!date||!jewel||price<=0){toast('Informe data, nome da joia e preço.');return} const c=state.customers.find(x=>x.id===$('rclient').value); const r={id:crypto.randomUUID(),number:receiptNumber(),date:formatDateBR(date),customer:c?.name||'Consumidor',jewel,sku:$('rsku').value.trim()||'—',price,pay:$('rpay').value,warranty:$('rwarranty').value,material:$('rmaterial').value.trim(),finish:$('rfinish').value.trim(),gems:$('rgems').value.trim(),description:$('rdesc').value.trim(),notes:$('rnotes').value.trim()||'Agradecemos por escolher a Bruê Semijóias.'}; receiptHistory.unshift(r);saveReceiptHistory(); $('pvNumber').textContent='NOTA • '+r.number.replace('ME-N',''); updateReceiptPreview();renderReceiptHistory();toast('Nota e certificado finalizados.'); } function openSavedReceipt(id){ const r=receiptHistory.find(x=>x.id===id);if(!r)return; $('rdate').value=r.date.split('/').reverse().join('-'); const c=state.customers.find(x=>x.name===r.customer);$('rclient').value=c?.id||''; $('rjewel').value=r.jewel;$('rsku').value=r.sku==='—'?'':r.sku;$('rprice').value=r.price;$('rpay').value=r.pay;$('rwarranty').value=r.warranty; $('rmaterial').value=r.material||'';$('rfinish').value=r.finish||'';$('rgems').value=r.gems||'';$('rdesc').value=r.description||'';$('rnotes').value=r.notes||''; $('pvNumber').textContent='NOTA • '+r.number.replace('ME-N','');updateReceiptPreview();nav('receipts'); } document.addEventListener('DOMContentLoaded',()=>{ loadReceiptHistory(); const fields=['rclient','rdate','rjewel','rsku','rprice','rmaterial','rfinish','rgems','rdesc','rpay','rwarranty','rnotes']; fields.forEach(id=>$(id)?.addEventListener('input',updateReceiptPreview)); fields.forEach(id=>$(id)?.addEventListener('change',updateReceiptPreview)); $('generateReceipt')?.addEventListener('click',saveReceipt); $('newReceipt')?.addEventListener('click',resetReceipt); $('clearReceipt')?.addEventListener('click',resetReceipt); $('printReceipt')?.addEventListener('click',()=>{updateReceiptPreview();window.print()}); $('receiptHistory')?.addEventListener('click',e=>{const b=e.target.closest('[data-receipt]');if(b)openSavedReceipt(b.dataset.receipt)}); const oldNav=nav; nav=function(p){oldNav(p);if(p==='receipts')openReceiptPage()}; });
BRUÊ CONTROLE

Estoque rastreável

O mesmo código identifica a peça em qualquer vendedora. A localização identifica quem está responsável pelo estoque.

CÓDIGO + LOCALIZAÇÃO
Código do produtoBRUÊ-BR-00125Mesmo modelo = mesmo código.
Unidade físicaU-2026-000874Opcional para peças de maior valor.
ResponsávelVendedoraEstoque separado por usuário.
MovimentaçãoTransferência #000184Origem, destino, quantidade e data.