diff --git a/msp/public/js/sales_invoice.js b/msp/public/js/sales_invoice.js index 3627ac7..fb67d63 100644 --- a/msp/public/js/sales_invoice.js +++ b/msp/public/js/sales_invoice.js @@ -204,9 +204,16 @@ function show_ohne_berechnung_dialog(frm) { } function apply_ohne_berechnung(frm, selected_items) { + // Werte direkt auf den Doc-Objekten setzen (ohne einzelne set_value-Events) selected_items.forEach(item => { + const doc_item = locals[item.doctype][item.name]; + if (!doc_item) return; + // 100% Rabatt setzen - frappe.model.set_value(item.doctype, item.name, 'discount_percentage', 100); + doc_item.discount_percentage = 100; + doc_item.discount_amount = 0; + doc_item.rate = 0; + doc_item.amount = 0; // Beschreibung bereinigen und "ohne Berechnung" genau einmal anhängen let desc = item.description || ''; @@ -225,11 +232,14 @@ function apply_ohne_berechnung(frm, selected_items) { // Standard-Zeile einmal anhängen const stamp = '
ohne Berechnung
'; - desc = (desc ? desc + stamp : stamp); - - frappe.model.set_value(item.doctype, item.name, 'description', desc); + doc_item.description = (desc ? desc + stamp : stamp); }); + // Einmalig Formular neu berechnen und aktualisieren + frm.dirty(); + frm.script_manager.trigger('calculate_taxes_and_totals'); + frm.refresh_fields(); + frappe.show_alert({ message: __("{0} Artikel wurden auf 'ohne Berechnung' gesetzt.", [selected_items.length]), indicator: 'green'