I want to make field amount of index 0 readonly. How do I do it?
frappe.ui.form.on("Purchase Invoice", "onload", function(frm){
frm.doc.installment[0].amount = 0.00;
});
I tried
frm.toggle_enable(frm.doc.installment[0].amount,false);
but doesn’t work
also tried frm.doc.installment[0].toggle_enable(“amount”,false); but
frm.doc.installment[0].toggle_enable is not a function
tried Make child table field readonly
But it affects all rows, I want to change a specific row only
I tried cur_frm.get_field("installment").grid.grid_rows[0].columns.amount.df.read_only = 1;
index is 0, but still affects all rows
JoEz
July 31, 2017, 11:25am
5
@johnskywalker any news on this?
Hi, was able to manage a workaround. User can still change the value, but on the trigger I save the old value and just set it again
1 Like
jcyh
October 24, 2017, 9:35am
8
is that any update until now ? set specific child table row to be readonly ~
Hi,
Take a look at Tax and Charges Child Table in Purchase Order , you’ll see that rate field will toggle according to selected charged_type field.
All code is here > apps/erpnext/erpnext/public/js/controllers/accounts.js
To simplify code is consist of 4 part
// File > doctype/<main_doctype_name>/<main_doctype_name.js
File > doctype/purchase_order/purchase_order.js
//frappe.ui.form.on("<Main DocType Name>", {
frappe.ui.form.on("Purchase Order", {
// 1. This get triggered a lot, I don't know how to explain.
setup: function(frm) {
$(frm.wrapper).on("grid-row-render", function(e, grid_row) {
//if(in_list(["<Child Table DocType Name>"], grid_row.doc.doctype)) {
if(in_list(["Purchase Taxes and Charges"], grid_row.doc.doctype)) {
console.log("aaa");
console.log(grid_row);
toggle_test(grid_row);
}
});
},
// 2. This will be triggered when child table open form dialog
//<child_table_field_names>_on_form_rendered: function(frm) {
taxes_on_form_rendered: function(frm) {
console.log("bbb");
console.log(frm.open_grid_row());
toggle_test(frm.open_grid_row());
},
});
//frappe.ui.form.on("<Child Table DocType Name>", {
frappe.ui.form.on("Purchase Taxes and Charges", {
// 3. This will be triggered when charge_type is change
//<field_names_in_child_table>: function(frm, cdt, cdn) {
charge_type: function(frm, cdt, cdn) {
var grid_row = frm.open_grid_row();
if (!grid_row) {
//grid_row = frm.get_field("<child_table_field_names>").grid.get_row(cdn)
grid_row = frm.get_field("taxes").grid.get_row(cdn)
}
console.log("ccc");
console.log(grid_row);
toggle_test(grid_row);
}
});
// 4. Toggle function
function toggle_test (grid_row) {
var charge_type_is_actual = grid_row.doc.charge_type==="Actual"
grid_row.toggle_editable("tax_amount", charge_type_is_actual);
grid_row.toggle_reqd("tax_amount", charge_type_is_actual);
grid_row.toggle_editable("rate", !charge_type_is_actual);
grid_row.toggle_reqd("rate", !charge_type_is_actual);
}
Hope this help
I tried to disable some fields when form load, I followed your code but it didn’t work.
But it works when i tried in browser console
grid_row = cur_frm.get_field("taxes").grid.get_row("b15286759b");
grid_row.toggle_editable("field_name", false);
1 Like
Misbah
February 17, 2020, 6:10am
12
@magic-overflow
You can Try This code, I hope can help you
setup: function(frm){
$(frm.wrapper).on('grid-row-render', function(e, grid_row) {
if(in_list(['Sales Invoice Item'], grid_row.doc.doctype)) {
if(grid_row) {
if(grid_row.doc.item_group==="Misbah") {
grid_row.toggle_editable("discount_multi_field_item", false);
}else{
grid_row.toggle_editable("discount_multi_field_item", true);
}
}
}
});
}
Hi,
I have tried your code and when
if (!grid_row) {
//grid_row = frm.get_field(“<child_table_field_names>”).grid.get_row(cdn)
grid_row = frm.get_field(“taxes”).grid.get_row(cdn)
}
above i am giving my child table’s field name it is showing can not read property of grid field so as u suggested in one of your post i gave form’s child table’s filed name and because of it when i am setting grid_row.toggle_editable(“score”,false) it is making all row’s score readonly.
please help me out.
Regards,
Vishakha
Hi any update on my query/
Kindly help.
SanRam
February 26, 2020, 6:30am
16
use this(grid_row.toggle_editable(“score”,false)) with some conditions.
means, make editable false if your condition is true
Ex. if(condition){
grid_row.toggle_editable(“score”,false)
}