# Skripte # Filter ## Einleitung Auf ein Linkfeld kann mit einigen wenigen Zeilen ein Filter eingestellt werden. Eine allgemeine Vorlage findet sich im nächsten Code Block. Wir passen die Inhalte in 'Mein Dokumententype', 'name\_of\_your\_field', 'Linked Doctype', 'fieldname', 'in' und '\["option1", "option2", "..."\]' an. Es muss auf die Groß- und Kleinschreibung geachtet werden. ``` frappe.ui.form.on("Mein Dokumententype", { setup: function(frm) { frm.set_query("name_of_your_field", function() { return { filters: [ ["Linked Doctype","fieldname", "in", ["Open", "Working"]] ] } }); } }); ``` ##### Erklärung der Inhalte
**Inhalt****Erklärung**
Mein DokumententypeCustomization für dieses Doctype
name\_of\_your\_fieldFeldname
Linked DoctypeAuswählbarer Doctype
fieldnameFeldname auf den ausgewählten Doctype
inOperator ( vgl. Filter des auswählbaren Doctypes in seiner Listensicht )
\["Open", "Working", "..."\]Filtern nach "Open" oder "Working"
## Beispiele ### Offene Projekte in den Zeiterfassungen filtern ``` frappe.ui.form.on('Timesheet', { setup: function(frm) { frm.set_query("parent_project", function() { return { filters: [ ["Project","status", "in", ["Open"]] ] } }); } }) ``` Screenshot: [![image-1637225997643.png](https://handbuch.tueit.de/uploads/images/gallery/2021-11/scaled-1680-/image-1637225997643.png)](https://handbuch.tueit.de/uploads/images/gallery/2021-11/image-1637225997643.png) ### Überprüfen ob ein Häkchen (Check) gesetzt ist
Im DoctypeElement
Feldextention (Type Link)
Ziel DoctypeProtocol Template
zu überprüfendes Feldcheckliste\_ist\_eine\_erweiterung
zu überprüfender Wert1 (häkchen gesetzt)
[![image-1637500640301.png](https://handbuch.tueit.de/uploads/images/gallery/2021-11/scaled-1680-/image-1637500640301.png)](https://handbuch.tueit.de/uploads/images/gallery/2021-11/image-1637500640301.png) ``` frappe.ui.form.on('Element', { setup: function(frm) { frm.set_query("extension", function() { return { filters: [ ["Protocol Template","checkliste_ist_eine_erweiterung", 'in' , ['1']] ] } }); } }); ``` [![image-1637500414448.png](https://handbuch.tueit.de/uploads/images/gallery/2021-11/scaled-1680-/image-1637500414448.png)](https://handbuch.tueit.de/uploads/images/gallery/2021-11/image-1637500414448.png) # Tabelleneintrag beim Speichern ändern ## Tabelleneintrag beim Speichern ändern Wir können bevor auf den Speichern-Button in einem Dokument geklickt wird einzelne Felder in einer Tabelle ändern. 1. Im folgenden Beispiel muss 'frm.doc.items' im gesamten Skript mit 'frm.doc.feldname\_der\_tabelle' ersetzt werden. 2. 'Doctype' mit dem richtigen Doctype ersetzten und auf Groß- und Kleinschreibung achten 3. Mit 'frappe.model.set\_value(...)' wird das Feld 'rate' in der Zeile geändert und auf '0' eingestellt 4. Die letzte Zeile aktualisiert das Feld 'rate' damit der Anwender die Änderung sehen kann ``` frappe.ui.form.on('Doctype', { validate(frm) { for (let i = 0; i < frm.doc.items.length; i++) { var item = frm.doc.items[i]; frappe.model.set_value(item.doctype, item.name,"rate","0"); frm.refresh_fields("rate"); } } }); ``` # Copy childtable ( Get Items From ) ## Einleitung Mit Hilfe von dem Skript können Item-Positionen von einem Dokument eines Doctypes auf ein Dokument eines anderen Doctypes kopiert werden. Kopiert werden die Positionen vom Anwender auf einem Weg. Wir betätigen den Button 'Get Items from' auf dem anderen Doctype und wählen im Dropdown-Menü ein Quelldoctype aus. Ein Beispiel hier ist am Doctype Quotation implementiert. ## Vor Anbringung des Skriptes Wir erstellen ein neuen Doctype mit einer Childtable oder wählen einen Doctype mit Childtable aus. Direkt im Anschluss kann der Skript angebracht werden. ## Anbringung 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. [![image-1637682718562.png](https://handbuch.tueit.de/uploads/images/gallery/2021-11/scaled-1680-/image-1637682718562.png)](https://handbuch.tueit.de/uploads/images/gallery/2021-11/image-1637682718562.png) ##### Minimal running version Der Script muss leicht angepasst werden bevor wir kopieren können. 1. Zeile 9 enthält den Doctype in den die Tabellenpositionen kopiert werden 2. Zeile 11 enthält den Doctype von dem die Positionen stammen 3. 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]); } }); } } }); } ``` # Anpassung der Preise der Itempositionen je nach Ausprägung eines Attributs ## Intro Manchmal ist es notwendig vor dem Speichern eines Dokuments Anpassung von Feldern in der Itempositionstabelle zu machen. Diese Änderungen können abhängig sein von einem Attribut / einem Feld des jeweiligen Tabelleneintrages oder der Tabellenposition. ## Anleitung Das Skript unterhalb kann genau so als Client Skript für Angebote eingebaut werden. In der Variable fields ( Zeile 9 ) können die Item Felder gelistet werden, die bei der Änderung geändert werden. In Zeile 19 kann anstelle der letzten 0 ein String-Value, ein Integer-Value, ein Float-Value oder eine Variable eingefügt werden, die dem geänderten Wert vom Feld in fields entspricht. ``` // Set item fields before save // Date: 18.01.2022 // Version: 0.1.0 // Author: Marius Widmann // Licence: // Fields in the items table that should be set to zero var fields = [ "rate", ]; frappe.ui.form.on('Quotation', { validate(frm) { frappe.show_progress('Adapting prices based on Positionsart...', 0, 100, 'Please wait'); for (let i = 0; i < frm.doc.items.length; i++) { var item = frm.doc.items[i]; if(item.positionsart != "Standard"){ for ( let j = 0; j < fields.length; j++ ) { frappe.model.set_value(item.doctype, item.name,fields[j],0); frm.refresh_fields(fields[j]); frappe.show_progress('Adapting prices based on Positionsart...', ((i+1)*(j+1))/((frm.doc.items.length)*(fields.length))*100, 100, 'Please wait'); } } } frappe.show_progress('Adapting prices based on Positionsart...', 100, 100, 'Please close'); } }); ```