README.md aktualisiert

This commit is contained in:
2026-06-08 16:38:15 +02:00
parent eb47598846
commit 70208d3c76
+116
View File
@@ -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: `<div id="sync-progress" style="margin: 20px 0;">
<div class="progress">
<div class="progress-bar" id="progress-bar" style="width: 0%;">0%</div>
</div>
<p id="progress-text" style="text-align:center; margin-top:10px;">0 von ${selected.length} verarbeitet</p>
</div>`
}
],
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.