-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathpaste_child_table
More file actions
78 lines (78 loc) · 3.24 KB
/
Copy pathpaste_child_table
File metadata and controls
78 lines (78 loc) · 3.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// field.$input[0].onpaste = clipboard_paste
clipboard_paste = function(e) {
// if ($(e.target).val()) return;
var cur_table_field =$(e.target).closest('div [data-fieldtype="Table"]').data('fieldname');
var cur_field = $(e.target).data('fieldname');
var cur_grid= cur_frm.get_field(cur_table_field).grid;
var cur_grid_rows = cur_grid.grid_rows;
var cur_doctype = cur_grid.doctype;
var cur_row_docname =$(e.target).closest('div .grid-row').data('name');
var row_idx = locals[cur_doctype][cur_row_docname].idx;
var clipboardData, pastedData;
// Get pasted data via clipboard API
clipboardData = event.clipboardData || window.clipboardData || event.originalEvent.clipboardData;
pastedData = clipboardData.getData('Text');
// if (window.clipboardData && window.clipboardData.getData) { // IE
// pastedText = window.clipboardData.getData('Text');
// } else if (e.clipboardData && e.clipboardData.getData) {
// pastedText = e.clipboardData.getData('text/plain');
// }
if (!pastedData) return;
var data = frappe.utils.csv_to_array(pastedData,'\t');
if (data.length === 1 & data[0].length === 1) return;
if (data.length > 100){
data = data.slice(0, 100);
frappe.msgprint('for performance, only the first 100 rows processed!');
}
var fieldnames = [];
get_field = function(name_or_label){
var fieldname;
$.each(cur_grid.meta.fields,(ci,field)=>{
name_or_label = name_or_label.toLowerCase()
if (field.fieldname.toLowerCase() === name_or_label ||
(field.label && field.label.toLowerCase() === name_or_label)){
fieldname = field.fieldname;
return false;
}
});
return fieldname;
}
if (get_field(data[0][0])){ // for raw data with column header
$.each(data[0], (ci, column)=>{fieldnames.push(get_field(column));});
data.shift();
}
else{ // no column header, map to the existing visible columns
var visible_columns = cur_grid_rows[0].get_visible_columns();
var find;
$.each(visible_columns, (ci, column)=>{
if (column.fieldname === cur_field) find = true;
find && fieldnames.push(column.fieldname);
})
}
$.each(data, function(i, row) {
var blank_row = true;
$.each(row, function(ci, value) {
if(value) {
blank_row = false;
return false;
}
});
if(!blank_row) {
if (row_idx > cur_frm.doc[cur_table_field].length){
cur_grid.add_new_row();
}
var cur_row = cur_grid_rows[row_idx - 1];
row_idx ++;
var row_name = cur_row.doc.name;
// var row_dict = {};
$.each(row, function(ci, value) {
if (fieldnames[ci]) frappe.model.set_value(cur_doctype, row_name, fieldnames[ci], value);
// row_dict[fieldnames[ci]] = value;
});
// row_dict && frappe.model.set_value(cur_doctype, row_name, row_dict);
frappe.show_progress(__('Processing'), i, data.length);
}
});
frappe.hide_progress();
return false; // Prevent the default handler from running.
}