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 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.