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
|
### Nutzung
|
||||||
|
|
||||||
- Im Item-Dokument unter WooCommerce ACF Mapping die gewünschten Felder eintragen.
|
- Im Item-Dokument unter WooCommerce ACF Mapping die gewünschten Felder eintragen.
|
||||||
|
|||||||
Reference in New Issue
Block a user