Fetch value from previous row when adding row

Hi! Can somebody help me with this client script, it’s not working. See table below:

When adding row, I need the Start Odo to be automatically fetched based on previous row’s End Odo. This script if not working for me, can somebody help me?

frappe.ui.form.on('Fuel Consumption Monitoring', {
	refresh(frm) {
		frappe.ui.form.on("Fuel Monitoring Table", {
            fuel_monitoring_details_add: function(frm, cdt, cdn) {
                var d = frm.doc.fuel_monitoring_details;
                var total = 0;
                $.each(frm.doc.fuel_monitoring_details || [], function(i, d) {
	               total = d[i-1].end_odo;
	            });
                frm.set_value(d.doctype, d.name, "start_odo", total);
            }
	    });
	}
});

@mehmehly try this :
don’t put the code inside refresh

frappe.ui.form.on('Fuel Monitoring Table', {
	fuel_monitoring_details_add(frm,cdt,cdn){
	    if (locals[cdt][cdn].idx>1){
	        locals[cdt][cdn].start_odo=frm.doc.fuel_monitoring_details[d.idx-2].end_odo;
	    }
	}
})
1 Like

Unfortunately, it’s not working. The Start Odo is not auto populating any values when I add row

my working code for your kind reference, Roll Output Qty is the Child DocType. it implements a custom sequential index column which supports special char like -.

frappe.ui.form.on('Roll Output Qty', {   //子表代码需定义在主表单据类型中
	items_add: function(frm, cdt, cdn) {
		let row = locals[cdt][cdn];
		if (!row.roll_id){
			let previous_row_idx = frm.doc.items.length - 2;
			let previous_row_roll_id = frm.doc.items[previous_row_idx].roll_id;
			if (!previous_row_roll_id){
				return;
			}
			if (previous_row_roll_id.includes("-")){
				// 获取最后一个短横线 "-" 后的数字
				let lastNum = previous_row_roll_id.match(/-\d+$/)[0].slice(1);
				let numLength = lastNum.length;
				// 将字符串转为数字并加1
				lastNum = parseInt(lastNum) + 1;
				let newNum = lastNum.toString().padStart(numLength, "0");
				// 将新的数字添加到文本串中并返回
				row.roll_id = previous_row_roll_id.replace(/-\d+$/, "-" + newNum.toString());
			} else {
				let lastNum = previous_row_roll_id;
				let numLength = lastNum.length;
				// 将字符串转为数字并加1
				lastNum = parseInt(lastNum) + 1;
				let newNum = lastNum.toString().padStart(numLength, "0");
				// 将新的数字添加到文本串中并返回
				row.roll_id = newNum;
			}
		}
	}
})

This code worked for me: (revised your code, thanks!)

frappe.ui.form.on('Fuel Consumption Monitoring', {
	refresh(frm) {
		frappe.ui.form.on("Fuel Monitoring Table", {
		    fuel_monitoring_details_add: function(frm, cdt, cdn) {
                $.each(frm.doc.fuel_monitoring_details || [], function(i, d) {
                    if (d.idx>1){
                        frappe.model.set_value(d.doctype, d.name, "start_odo", frm.doc.fuel_monitoring_details[d.idx-2].end_odo);
                    }
                });
		    },
        });
	}
});