function GetFileAttachments(frm, arrItemCode) { //Get files which are added to given items frappe.db.get_list("File", { filters: [ ['attached_to_name', 'in', arrItemCode], ['attached_to_doctype', '=', "Item"] ], fields: ["file_name", "file_url", "folder"], limit: 9999 }).then((data) => { let arrFileExt = [];//File extensions let arrFileExtInfo = [];//json let strFileExt = ""; let jsonFileInfo = { file_ext: [], file_count: [] } let dIndex = -1;//File index search for(let i=0; i<data.length; i++) { strFileExt = data[i].file_name.substring(data[i].file_name.lastIndexOf(".")+1); if(arrFileExt.indexOf(strFileExt) === -1) { arrFileExt.push(strFileExt); arrFileExtInfo.push({'file_ext': strFileExt}); jsonFileInfo.file_ext.push(strFileExt); jsonFileInfo.file_count.push(1); } else { dIndex = jsonFileInfo.file_ext.indexOf(strFileExt); jsonFileInfo.file_count[dIndex] = jsonFileInfo.file_count[dIndex] + 1; } } for(let i=0; i<arrFileExtInfo.length; i++) { strFileExt = arrFileExtInfo[i].file_ext; dIndex = jsonFileInfo.file_ext.indexOf(strFileExt); arrFileExtInfo[i].file_count = jsonFileInfo.file_count[dIndex]; } const fields = [ { label: 'Files', fieldtype: 'Table', fieldname: 'files', description: __('Select File Types'), fields: [ { fieldtype: 'Data', fieldname: 'file_ext', options: '', reqd: 0, readonly: 1, label: __('File Type'), in_list_view: 1 }, { fieldtype: 'Int', fieldname: 'file_count', options: '', reqd: 0, readonly: 1, label: __('File Count'), in_list_view: 1 } ], data: arrFileExtInfo, get_data: () => { return r.message//ERR } }] var d = new frappe.ui.Dialog({ title: __('Select File Types'), fields: fields, primary_action: function(dataTable) { let arrPromFile = []; for(let i=0; i<d.fields_dict.files.df.data.length; i++) {//Her dosya turu icin strFileExt = d.fields_dict.files.df.data[i].file_ext; //Does the file type is selected? if (typeof d.fields_dict.files.df.data[i].__checked !== 'undefined') { if (d.fields_dict.files.df.data[i].__checked === 1) { //Select the files which have the same extension for(let j=0; j<data.length; j++) {//For each file if (strFileExt == data[j].file_name.substring(data[j].file_name.lastIndexOf(".")+1)) { //Extensions match const docFile = frappe.model.get_new_doc('File'); docFile.file_name = data[j].file_name; docFile.attached_to_doctype = frm.doctype; docFile.attached_to_name = frm.docname; docFile.file_url = data[j].file_url; docFile.folder = data[j].folder; arrPromFile.push(frappe.db.insert(docFile)); } } } } }//File operations are completed. d.hide(); Promise.all(arrPromFile).then((result) => { frm.reload_doc(); }) }, primary_action_label: __('Attach Files') }); d.show(); }); } frappe.ui.form.on('Request for Quotation', { refresh(frm) { frm.add_custom_button(__('Get Item Attachments'), function(){ let arrItemCode = []; $.each(frm.doc.items, function(i, d) { arrItemCode.push(d.item_code); }); GetFileAttachments(frm, arrItemCode); }); } });