Importtemplates

Naar import

Download een template per productgroep. Elke template bevat de verplichte basiskolommen plus alle specificatievelden voor die productgroep. Vul de template in en upload via de importpagina. Kolommen met (V) zijn verplicht.

Algemene template

Alleen basisvelden — geschikt voor meerdere productgroepen in één bestand.

Per productgroep

Inclusief alle specificatievelden
Laden…
const BASIS=[ {key:'artikelnummer',label:'Artikelnummer',verplicht:true,vb:'GR322105',hint:'Uniek artikelnummer'}, {key:'omschrijving_kort',label:'Omschrijving kort',verplicht:true,vb:'Grace Behang Groen',hint:'Korte productnaam'}, {key:'ean',label:'EAN-code',verplicht:false,vb:'8719463322105',hint:'13-cijferige barcode'}, {key:'eenheid',label:'Eenheid',verplicht:true,vb:'rol',hint:'stuk / rol / m / m2 / liter / paar / set'}, {key:'inkoopprijs_ons',label:'Inkoopprijs ons',verplicht:false,vb:'5.40',hint:'Decimaal met punt'}, {key:'inkoopprijs_klant',label:'Inkoopprijs klant',verplicht:false,vb:'12.50',hint:'Lijstprijs zonder korting'}, {key:'adviesprijs',label:'Adviesprijs',verplicht:false,vb:'24.95',hint:'Consumentenadviesprijs'}, {key:'btw_tarief',label:'BTW tarief (%)',verplicht:false,vb:'21',hint:'21 / 9 / 0'}, {key:'levertijd',label:'Levertijd',verplicht:false,vb:'3-5 werkdagen',hint:'Vrije tekst'}, {key:'voorraadcategorie',label:'Voorraadcategorie',verplicht:false,vb:'',hint:'Volgt later'}, {key:'status',label:'Status',verplicht:false,vb:'actief',hint:'actief / concept / inactief'}, {key:'omschrijving_lang',label:'Omschrijving lang',verplicht:false,vb:'',hint:'Uitgebreide webshoptekst'} ]; let pgs=[],vds=[]; async function init(){ const [pgR,vdR]=await Promise.all([ fetch(B+'/productgroepen?select=id,code,label&order=volgorde.asc',{headers:H}), fetch(B+'/veld_definities?select=*&order=volgorde.asc',{headers:H}) ]); pgs=await pgR.json();vds=await vdR.json(); const grid=document.getElementById('grid');grid.innerHTML=''; pgs.forEach(pg=>{ const velden=vds.filter(v=>v.productgroep_id===pg.id&&!v.sub_type_filter); const sub=vds.filter(v=>v.productgroep_id===pg.id&&v.sub_type_filter); const tot=BASIS.length+velden.length+(sub.length?1:0); const chips=velden.slice(0,3).map(v=>''+v.label+'').join('')+(velden.length>3?'+'+( velden.length-3)+' meer':''); const div=document.createElement('div');div.className='tpl'; div.innerHTML='

'+pg.label+'

'+tot+' kolommen
' +'
'+chips+'
' +''; grid.appendChild(div); }); } function dlAlgemeen(){ genExcel(BASIS,'Spits PIM - Algemene template','pim_template_algemeen.xlsx'); } function dlTemplate(pgId,pgLabel,pgCode){ const velden=vds.filter(v=>v.productgroep_id===pgId&&!v.sub_type_filter); const sub=vds.filter(v=>v.productgroep_id===pgId&&v.sub_type_filter); const kols=[...BASIS]; velden.forEach(v=>kols.push({key:'spec_'+v.veld_key,label:v.label+(v.eenheid?' ('+v.eenheid+')':''),verplicht:v.verplicht,vb:vb(v),hint:hint(v)})); if(sub.length){ const stv=vds.find(v=>v.productgroep_id===pgId&&v.veld_key==='sub_type'); if(stv)kols.push({key:'spec_sub_type',label:'Sub-type',verplicht:true,vb:(stv.opties||[])[0]||'',hint:'Kies: '+(stv.opties||[]).join(' / ')}); const types=[...new Set(sub.map(v=>v.sub_type_filter))]; types.forEach(t=>sub.filter(v=>v.sub_type_filter===t).forEach(v=>kols.push({key:'spec_'+v.veld_key,label:'['+t+'] '+v.label+(v.eenheid?' ('+v.eenheid+')':''),verplicht:false,vb:vb(v),hint:hint(v)+' — sub-type: '+t}))); } genExcel(kols,'Spits PIM - '+pgLabel,'pim_template_'+pgCode+'.xlsx'); } function genExcel(kols,titel,bestand){ const wb=XLSX.utils.book_new(); const ws=XLSX.utils.aoa_to_sheet([ [titel+' — (V) = VERPLICHT | Voer data in vanaf rij 6'], kols.map(k=>k.label+(k.verplicht?' (V)':'')), kols.map(k=>k.verplicht?'*** VERPLICHT ***':'optioneel'), kols.map(k=>k.vb||''), kols.map(k=>k.hint||'') ]); ws['!merges']=[{s:{r:0,c:0},e:{r:0,c:kols.length-1}}]; ws['!cols']=kols.map(k=>({wch:Math.max(k.label.length+5,18)})); ws['!rows']=[{hpt:22},{hpt:20},{hpt:18},{hpt:18},{hpt:36}]; ws['!freeze']={xSplit:1,ySplit:5}; XLSX.utils.book_append_sheet(wb,ws,'Template'); const leg=XLSX.utils.aoa_to_sheet([['Kolom','Verplicht','Voorbeeld','Uitleg'],...kols.map(k=>[k.label+(k.verplicht?' (V)':''),k.verplicht?'JA':'nee',k.vb||'',k.hint||''])]); leg['!cols']=[{wch:32},{wch:12},{wch:22},{wch:60}]; leg['!freeze']={xSplit:0,ySplit:1}; XLSX.utils.book_append_sheet(wb,leg,'Legenda'); XLSX.writeFile(wb,bestand); } function vb(v){if(v.type==='boolean')return'ja';if(v.opties&&v.opties.length)return v.opties[0];if(v.type==='number')return'0';return'';} function hint(v){if(v.type==='boolean')return'ja / nee';if(v.type==='select'&&v.opties)return'Kies: '+v.opties.join(' / ');if(v.type==='multiselect'&&v.opties)return'Meerdere, kommagescheiden: '+v.opties.join(' / ');if(v.type==='number')return'Getal'+(v.eenheid?' in '+v.eenheid:'');return'Vrije tekst';} init();