I need not submit if some condition is true on event before_submit.
It’s possible?
frappe.validated = false;
works, but that’s inside of a for condition, I think that’s my problem
for (i = 0; i < array_timesheet.length; i++){
task_name = array_timesheet[i]
$.each (frm.doc.time_logs, function(i, d){
if (task_name == d.task){
total_hours += d.hours;
}
});
//get_doc
frappe.call({
method: "frappe.client.get",
args: {
doctype: "Task",
name: task_name,
},
callback: function(r){
var task_doc = r.message;
total_hours += task_doc.actual_time;
if (total_hours > task_doc.expected_time){
frappe.throw("Total de horas do projeto excedido! Contate seu Administrator.")
frappe.validated = false;
}
}
});
}
I need do a break;
the for loop, but I can’t do that cause it’s illegal call break method inside a callback
I would restructure your code so that you only do one callback. Assemble it in an object with your for
loop and then pass it once.
Consider using frappe.db.get_value
and frappe.db.set_value
instead - you’re only looking at one value, why are you collecting the whole record to do that? It’s more expensive but maybe not materially so.
I don’t need set value, just get.
First, I got the values of time_logs table, my array variable will receive the taskxxxx of each row.
Then, I do a get doc for each index of my array variable and compaire if the hours expended is greater then expected, if yes, stop all and do not submit a document.
I’ll do this on python side, so I’ll create a new app and etc…
Thank you for reply
Hi its correct to do this on python, just do frappe.throw() to break, It will stop if something is not correct.
Solved!
frappe.validated = false;
has to be first then frappe.throw("message");