Copy childtable ( Get Items From )
Einbau eines 'Get Items From'-Buttons
Das Skript ist einfach einzufügen und an einigen wenigen Stellen anzupassen. Der Skript wird als "Client Script" im ERPNext hinzugefügt. (1) Ist der Doctype auf dem der Button erscheint. (2) Ist eine Skriptart die es auszuwählen gilt ( 'Form' ) und mit (3) kann der Script aktiviert werden.
Minimal running version
Der Script muss leicht angepasst werden bevor wir kopieren können.
- Zeile 9 enthält den Doctype in den die Tabellenpositionen kopiert werden
- Zeile 11 enthält den Doctype von dem die Positionen stammen
- Zeile 20 bis 29 müssen entsprechend den Kommentaren auf einen anderen Doctype angepasst werden.
/*
Author: Marius Widmann
Datum: 17.12.2021
Version: 2.0
Usage:
To use this script create a client script for the doctype where the table should be pasted to
and change line 9,11,20,21 and the fetch-from fields starting in line 22.
*/
frappe.ui.form.on('Quotation', { // Doctype we are working on
refresh(frm) {
frm.add_custom_button('Angebotsvorlage', function () { frm.trigger('get_items') }, __("Get Items From")); // Button name = 'Angebotsvorlage'
},
get_items(frm){
copy_child_table(frm);
}
});
function copy_child_table(frm) {
var cur_frm = frm;
var from = ["Angebotsvorlage","angebotsvorlage_item"]; // From ["Doctype","Doctypechildtable"]
var to = [cur_frm,"items"]; // To [frm, "Doctypechildtable"]
var fields = [ // Fetch these fields
"item_code",
"item_name",
"positionsart",
"description",
"qty",
"uom",
"rate"];
let dialog = new frappe.ui.form.MultiSelectDialog({
doctype: from[0],
target: to[0],
setters: { },
date_field: "creation",
get_query() {
return {
filters: { }
};
},
action(selections) {
for(var n = 0; n < selections.length; n++){
var id = selections[0];
frappe.db.get_doc(from[0], id)
.then(doc => {
for(var n = 0; n < doc[from[1]].length; n++){
// Copy-Paste Operation
var item=doc[from[1]][n];
var child = {};
for(var m = 0; m < fields.length; m++){
child[fields[m]] = item[fields[m]]
}
cur_frm.add_child(to[1],child);
cur_frm.refresh_fields(to[1]);
}
});
}
}
});
}