Zum Inhalt springen
UnternehmensPro
  • START
  • Services
  • KONTAKT
  • 0
0
Menü X
Diese Website durchsuchen

Seite 3

  1. Start>
  2. Seite 3

soziale medien

Facebook Twitter Youtube
KONTAKT

Schnellzugriffe

  • SERVICES
  • ÜBER UNTERNEHMENSPRO
  • KONTAKT

UnternehmensPro

Mainblick 8a
63743 Aschaffenburg

Email: info@unternehmenspro.de

©2018-2024 UnternehmensPro. Alle Rechte vorbehalten. 

Datenschutz| |Impressum

UnternehmesPro
×
×

Warenkorb

'); w.document.close(); w.focus(); setTimeout(function(){ w.print(); }, 300); }); } }); var editorWrap = document.getElementById('ldkp-editor-wrap'); if(editorWrap && ajax){ var rows = []; function esc(val){ return String(val == null ? '' : val) .replace(/&/g,'&') .replace(//g,'>') .replace(/"/g,'"'); } function renderEditor(){ var tbody = editorWrap.querySelector('tbody'); if(!tbody) return; tbody.innerHTML = ''; rows.forEach(function(r, idx){ var tr = document.createElement('tr'); tr.innerHTML = '' + '' + '' + '' + '' + '' + '' + '' + ' '; tr.querySelector('[data-k="status"]').value = r.status || 'ARBEIT'; tr.querySelectorAll('[data-k]').forEach(function(inp){ inp.addEventListener('input', function(){ rows[idx][inp.getAttribute('data-k')] = inp.value; }); inp.addEventListener('change', function(){ rows[idx][inp.getAttribute('data-k')] = inp.value; }); }); tbody.appendChild(tr); }); tbody.querySelectorAll('[data-row-del]').forEach(function(btn){ btn.addEventListener('click', function(){ rows.splice(parseInt(btn.getAttribute('data-row-del'),10), 1); renderEditor(); }); }); tbody.querySelectorAll('[data-row-add]').forEach(function(btn){ btn.addEventListener('click', function(){ rows.splice(parseInt(btn.getAttribute('data-row-add'),10), 0, {date:'',name:'',status:'ARBEIT',area:'',shift:'',start:'',end:'',break:''}); renderEditor(); }); }); tbody.querySelectorAll('[data-row-add-below]').forEach(function(btn){ btn.addEventListener('click', function(){ rows.splice(parseInt(btn.getAttribute('data-row-add-below'),10) + 1, 0, {date:'',name:'',status:'ARBEIT',area:'',shift:'',start:'',end:'',break:''}); renderEditor(); }); }); } function request(action, payload, cb){ var body = new URLSearchParams(); body.append('action', action); body.append('nonce', ajax.nonce); Object.keys(payload || {}).forEach(function(k){ body.append(k, payload[k]); }); fetch(ajax.url,{method:'POST',credentials:'same-origin',headers:{'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'},body:body.toString()}) .then(function(r){ return r.json(); }) .then(function(j){ if(!j || !j.success){ alert(j && j.data && j.data.message ? j.data.message : 'Aktion fehlgeschlagen.'); return; } if(cb) cb(j.data || {}); }) .catch(function(){ alert('Aktion fehlgeschlagen.'); }); } request('ldk_portal_get_plan_editor_data', {}, function(data){ rows = Array.isArray(data.rows) ? data.rows : []; renderEditor(); var st = editorWrap.querySelector('[data-editor-status]'); if(st){ st.textContent = 'Status: ' + (data.status || 'empty'); } }); var addRow = editorWrap.querySelector('[data-editor-add]'); if(addRow){ addRow.addEventListener('click', function(){ rows.push({date:'',name:'',status:'ARBEIT',area:'',shift:'',start:'',end:'',break:''}); renderEditor(); }); } var saveBtn = editorWrap.querySelector('[data-editor-save]'); if(saveBtn){ saveBtn.addEventListener('click', function(){ request('ldk_portal_save_plan_rows', {rows:JSON.stringify(rows)}, function(d){ alert(d.message || 'Gespeichert.'); }); }); } var pubBtn = editorWrap.querySelector('[data-editor-publish]'); if(pubBtn){ pubBtn.addEventListener('click', function(){ request('ldk_portal_publish_plan_rows', {rows:JSON.stringify(rows)}, function(d){ alert(d.message || 'Freigegeben.'); location.reload(); }); }); } var delBtn = editorWrap.querySelector('[data-editor-delete]'); if(delBtn){ delBtn.addEventListener('click', function(){ if(!confirm('Plan wirklich löschen?')) return; request('ldk_portal_delete_plan', {}, function(d){ alert(d.message || 'Gelöscht.'); location.reload(); }); }); } var expBtn = editorWrap.querySelector('[data-editor-export]'); if(expBtn){ expBtn.addEventListener('click', function(){ request('ldk_portal_export_csv', {rows:JSON.stringify(rows)}, function(d){ downloadBase64(d.filename,d.content); }); }); } function pad(n){ return String(n).padStart(2,'0'); } function normalizeTime(v){ var s = String(v == null ? '' : v).trim(); if(!s || s === '-') return '–'; return s.split(/\s*\/\s*/).map(function(part){ var m = part.trim().match(/^(\d{1,2}):(\d{1,2})$/); return m ? (pad(m[1]) + ':' + pad(m[2])) : part.trim(); }).filter(Boolean).join(' / ') || '–'; } function excelDateToGerman(v){ if (v == null || v === '') return ''; if (typeof v === 'number' && typeof XLSX !== 'undefined' && XLSX.SSF) { var d = XLSX.SSF.parse_date_code(v); if (d && d.y && d.m && d.d) return pad(d.d) + '.' + pad(d.m) + '.' + d.y; } if (v instanceof Date) return pad(v.getDate()) + '.' + pad(v.getMonth()+1) + '.' + v.getFullYear(); var s = String(v).trim(); var m = s.match(/^(\d{1,2})[.\-/](\d{1,2})[.\-/](\d{2,4})$/); if (m) { var y = m[3]; if (y.length === 2) y = '20' + y; return pad(m[1]) + '.' + pad(m[2]) + '.' + y; } return s; } function normalizeCell(v){ if (v == null) return ''; return String(v).replace(/\r/g,'').trim(); } function isDateLike(v){ if (v instanceof Date) return true; if (typeof v === 'number') return true; var s = normalizeCell(v); return /^\d{1,2}[.\-/]\d{1,2}[.\-/]\d{2,4}$/.test(s); } function isAreaRow(name){ return ['Management','Shift Leader','Service','Bar','Küche'].indexOf(name) !== -1; } function parseLegend(wb){ var legend = {}; wb.SheetNames.forEach(function(sheetName){ var ws = wb.Sheets[sheetName]; var arr = XLSX.utils.sheet_to_json(ws, {header:1, raw:true, defval:''}); arr.forEach(function(row){ var code = normalizeCell(row[1]).toUpperCase(); if (!/^(M1|M2|M3|M7|SPM|S2|S3|S5|S8|S9|S10|S11|B1|B2|KK1|KK4)$/.test(code)) return; var area = normalizeCell(row[0]); var source = normalizeCell(row[2]) + ' ' + normalizeCell(row[3]); var times = Array.from(source.matchAll(/(\d{1,2}:\d{2})\s*-\s*(\d{1,2}:\d{2})/g)); var starts = times.map(function(t){ return normalizeTime(t[1]); }); var ends = times.map(function(t){ return normalizeTime(t[2]); }); var pause = '–'; var pauseMatch = source.match(/Pause:\s*(\d{1,2}:\d{2})\s*-\s*(\d{1,2}:\d{2})/i); if (pauseMatch) pause = normalizeTime(pauseMatch[1]) + ' / ' + normalizeTime(pauseMatch[2]).replace(' / ', ''); if (area.indexOf('Service / Bar') !== -1 && /^B\d+$/.test(code)) area = 'Bar'; else if (area.indexOf('Service / Bar') !== -1) area = 'Service'; legend[code] = { area: area || '', start: starts.join(' / ') || '–', end: ends.join(' / ') || '–', break: pause || '–' }; }); }); return legend; } function extractStatusAndShift(cell){ var text = normalizeCell(cell).replace(/\*/g,''); if (!text) return null; if (/^FE$/i.test(text)) return {status:'FE'}; if (/^FI$/i.test(text)) return {status:'FI'}; if (/^FR$/i.test(text)) return {status:'FR'}; var codeMatch = text.match(/\b(M1|M2|M3|M7|SPM|S2|S3|S5|S8|S9|S10|S11|B1|B2|KK1|KK4)\b/i); if (!codeMatch) return null; var shift = codeMatch[1].toUpperCase(); var times = Array.from(text.matchAll(/(\d{1,2}:\d{2})\s*-\s*(\d{1,2}:\d{2})/g)); var starts = times.map(function(m){ return normalizeTime(m[1]); }); var ends = times.map(function(m){ return normalizeTime(m[2]); }); return { status:'ARBEIT', shift:shift, start: starts.join(' / ') || '', end: ends.join(' / ') || '' }; } function parseMatrixArray(arr, legend){ if (!arr || !arr.length) return []; var header = arr[0] || []; var dateCols = []; for (var c = 1; c < header.length; c++) if (isDateLike(header[c])) dateCols.push({col:c, date:excelDateToGerman(header[c])}); if (!dateCols.length) return []; var currentArea = ''; var out = []; for (var r = 2; r < arr.length; r++) { var row = arr[r] || []; var first = normalizeCell(row[0]); if (!first) continue; if (isAreaRow(first)) { currentArea = first; continue; } dateCols.forEach(function(dc){ var parsed = extractStatusAndShift(row[dc.col]); if (!parsed) return; if (parsed.status !== 'ARBEIT') { out.push({date:dc.date,name:first,status:parsed.status,area:currentArea || '',shift:parsed.status,start:'–',end:'–',break:'–'}); return; } var lg = legend[parsed.shift] || {}; var area = lg.area || currentArea || ''; if (area === 'Service / Bar' && /^B\d+$/.test(parsed.shift)) area = 'Bar'; else if (area === 'Service / Bar') area = 'Service'; out.push({ date:dc.date, name:first, status:'ARBEIT', area:area || '', shift:parsed.shift, start:normalizeTime(parsed.start || lg.start || '–'), end:normalizeTime(parsed.end || lg.end || '–'), break:normalizeTime(lg.break || '–') }); }); } return out; } function parseDelimitedText(text){ var lines = text.split(/\r?\n/).filter(Boolean); if (!lines.length) return []; var first = lines[0]; var delim = first.indexOf(';') !== -1 ? ';' : ','; return lines.map(function(line){ var out = []; var cur = ''; var inQuotes = false; for (var i = 0; i < line.length; i++) { var ch = line[i]; if (ch === '"') { if (inQuotes && line[i+1] === '"') { cur += '"'; i++; } else inQuotes = !inQuotes; } else if (ch === delim && !inQuotes) { out.push(cur); cur = ''; } else cur += ch; } out.push(cur); return out; }); } async function parseWorkbook(file){ var ext = (file.name.split('.').pop() || '').toLowerCase(); if (ext === 'csv') { var text = await file.text(); return parseMatrixArray(parseDelimitedText(text), {}); } if (typeof XLSX === 'undefined') throw new Error('XLSX fehlt'); var data = await file.arrayBuffer(); var wb = XLSX.read(data, {type:'array', cellDates:true, raw:true}); var legend = parseLegend(wb); var allRows = []; wb.SheetNames.forEach(function(name){ var ws = wb.Sheets[name]; var arr = XLSX.utils.sheet_to_json(ws, {header:1, raw:true, defval:''}); var parsed = parseMatrixArray(arr, legend); if (parsed.length) allRows = allRows.concat(parsed); }); return allRows; } var fileInput = editorWrap.querySelector('[data-editor-file]'); if(fileInput){ fileInput.addEventListener('change', async function(){ var file = fileInput.files && fileInput.files[0]; if(!file) return; try { var next = await parseWorkbook(file); if(!next.length){ alert('Datei konnte nicht sinnvoll gelesen werden.'); return; } rows = next; renderEditor(); } catch(err) { console.error(err); alert('Datei konnte nicht gelesen werden.'); } }); } } }); //# sourceURL=ldk-portal-pro-inline-js-after