README.md aktualisiert
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user