From 70208d3c76e9377869689c607bee147d72ae4b45 Mon Sep 17 00:00:00 2001 From: JensFalk Date: Mon, 8 Jun 2026 16:38:15 +0200 Subject: [PATCH] README.md aktualisiert --- README.md | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) diff --git a/README.md b/README.md index 9bab042..4d4a3ba 100644 --- a/README.md +++ b/README.md @@ -149,6 +149,122 @@ frappe.ui.form.on('Item', { } }); ``` +#### Client Script mit Button mehrer Artikel + +```js + +frappe.ui.form.on('Item', { + refresh: function(frm) { + // Einzelner Button im Formular + frm.add_custom_button('Custom Fields zu WooCommerce syncen', function() { + if (!frm.doc.woocommerce_servers || frm.doc.woocommerce_servers.length === 0) { + frappe.msgprint("Kein WooCommerce Server verknüpft!", "Warnung"); + return; + } + + frappe.call({ + method: 'erpnext_custom.api.sync_custom_fields_to_woocommerce', + args: { item_code: frm.doc.name } + }); + }, "WooCommerce"); + } +}); + +// ==================== MASSEN-SYNC MIT FORTSCHRITT ==================== +frappe.listview_settings['Item'] = { + onload: function(listview) { + listview.page.add_inner_button('Alle Custom Fields zu WooCommerce syncen', function() { + let selected = listview.get_checked_items(); + + if (selected.length === 0) { + frappe.msgprint("Bitte wählen Sie mindestens einen Artikel aus.", "Warnung"); + return; + } + + frappe.confirm(`Möchten Sie wirklich ${selected.length} Artikel synchronisieren?`, function() { + let completed = 0; + let success = 0; + let failed = 0; + + // Fortschrittsdialog + let progress = new frappe.ui.Dialog({ + title: 'Synchronisiere Custom Fields', + fields: [ + { + fieldtype: 'HTML', + fieldname: 'progress_html', + options: `
+
+
0%
+
+

0 von ${selected.length} verarbeitet

+
` + } + ], + primary_action_label: 'Schließen', + primary_action: function() { + progress.hide(); + } + }); + + progress.show(); + + // Artikel nacheinander syncen + function processNext() { + if (completed >= selected.length) { + progress.hide(); + let msg = `${success} erfolgreich, ${failed} fehlgeschlagen`; + if (failed === 0) { + frappe.msgprint(msg, "Erfolg"); + } else { + frappe.msgprint(msg, "Warnung"); + } + listview.refresh(); + return; + } + + let item = selected[completed]; + + frappe.call({ + method: 'erpnext_custom.api.sync_custom_fields_to_woocommerce', + args: { item_code: item.name }, + callback: function(r) { + completed++; + if (r.message) { + success++; + } else { + failed++; + } + + // Fortschritt aktualisieren + let percent = Math.round((completed / selected.length) * 100); + document.getElementById('progress-bar').style.width = percent + '%'; + document.getElementById('progress-bar').innerText = percent + '%'; + document.getElementById('progress-text').innerText = completed + ' von ' + selected.length + ' verarbeitet'; + + processNext(); + }, + error: function() { + completed++; + failed++; + let percent = Math.round((completed / selected.length) * 100); + document.getElementById('progress-bar').style.width = percent + '%'; + document.getElementById('progress-bar').innerText = percent + '%'; + document.getElementById('progress-text').innerText = completed + ' von ' + selected.length + ' verarbeitet'; + processNext(); + } + }); + } + + processNext(); + }); + }, "WooCommerce"); + } +}; + +``` + + ### Nutzung - Im Item-Dokument unter WooCommerce ACF Mapping die gewünschten Felder eintragen.