- This is the quick entry form When trying to add issue and save.
- But when the same issue is opened after some time. It displays “Not Saved”. Is this a bug?
Share your code.
I think, the refresh event runs every time, so not save option show in your issue doctype.
var count = 0;
frappe.ui.form.on('Issue', {
after_save:function(frm) {
if(frm.doc.status === "Open" || frm.doc.status === "Replied" || frm.doc.status === "On Hold" || frm.doc.status === "Resolved"){
count = 0;
frappe.call({
method: 'frappe.client.set_value',
args: {
doctype: frm.doc.doctype,
name: frm.doc.name,
fieldname: 'starting_date',
value:frm.doc.opening_date+ " "+ frm.doc.opening_time
},
callback: function(response) {
if (response.message) {
console.log("Starting date updated successfully!");
// frm.set_value('starting_date', frm.doc.opening_date+ " "+ frm.doc.opening_time);
frm.reload_doc();
} else {
console.log("Failed to update starting date.");
}
}
});
}
if(frm.doc.status === "Closed" && count === 0){
// frm.set_value('resolution_date', frappe.datetime.now_datetime());
//frm.set_value('starting_date', frm.doc.opening_date+ " "+ frm.doc.opening_time);
frappe.call({
method: 'frappe.client.set_value',
args: {
doctype: frm.doc.doctype,
name: frm.doc.name,
fieldname: 'resolution_date',
value:frappe.datetime.now_datetime()
},
callback: function(response) {
if (response.message) {
console.log("Resolution date updated successfully!");
// frm.set_value('starting_date', frm.doc.opening_date+ " "+ frm.doc.opening_time);
frm.reload_doc();
} else {
console.log("Failed to update resolution date.");
}
}
});
}
var delayTime = 1000;
setTimeout(function() {
if(frm.doc.starting_date && frm.doc.resolution_date){
var closed_date = frm.doc.resolution_date;
var opened_date = frm.doc.starting_date;
var new_closedDate = new Date(closed_date);
var new_openedOpened = new Date(opened_date);
var timeDifference = new_closedDate.getTime() - new_openedOpened.getTime();
var days = Math.floor(timeDifference / (1000 * 3600 * 24));
var hours = Math.floor((timeDifference % (1000 * 3600 * 24)) / (1000 *60*60));
var mins = Math.floor((timeDifference % (1000 * 60 * 60)) / (1000 *60));
var secs =Math.floor((timeDifference % (1000 * 60 )) / (1000 ));
frappe.call({
method: 'frappe.client.set_value',
args: {
doctype: frm.doc.doctype,
name: frm.doc.name,
fieldname: 'work_duration_',
value:days + " "+ hours + ":"+mins+":"+secs
},
callback: function(response) {
if (response.message) {
console.log("success!");
//frm.set_value('starting_date', frm.doc.opening_date+ " "+ frm.doc.opening_time);
frm.reload_doc();
} else {
console.log("Failed.");
}
}
});}},delayTime);
},
onload:function(frm){
var fields = frm.fields_dict;
if(frm.doc.status == "Closed" ){
for (var fieldname in fields) {
// Set all fields as read-only except for the specific field
if (fieldname !== 'status') {
frm.set_df_property(fieldname, 'read_only', 1);
}
}
}
},
timeline_refresh:function(frm){
if(frm.doc.status == "Open") {
frm.set_value('starting_date', frm.doc.opening_date+ " "+ frm.doc.opening_time);
count = 0;
}
if(frm.doc.status == "Closed" ){
count = 1;
if(frm.doc.resolution_date === undefined){
frappe.call({
method: 'frappe.client.set_value',
args: {
doctype: frm.doc.doctype,
name: frm.doc.name,
fieldname: 'resolution_date',
value:frm.doc.opening_date+ " "+ frm.doc.opening_time
},
callback: function(response) {
if (response.message) {
console.log("success!");
//frm.set_value('starting_date', frm.doc.opening_date+ " "+ frm.doc.opening_time);
frm.reload_doc();
} else {
console.log("Failed.");
}
}
});
}}
},
refresh:function(frm){
if(frm.doc.opened_by === undefined){
frappe.call({
method: 'frappe.client.get_value',
args: {
doctype: 'User',
filters: { name: frappe.session.user },
fieldname: 'full_name'
},
callback: function(response) {
var full_name = response.message.full_name;
// Set the value to a field
frm.set_value('opened_by', full_name);
frm.set_df_property('opened_by', 'read_only', 1);
}
});}
},
status:function(frm){
var fields = frm.fields_dict;
if(frm.doc.status == "Closed"){
// Iterate through the fields
for (var fieldname in fields) {
// Set all fields as read-only except for the specific field
if (fieldname !== 'status') {
frm.set_df_property(fieldname, 'read_only', 1);
}
}
}
else{
for (var fieldname2 in fields) {
// Set all fields as read-only 0 except for the specific field
if(fieldname2 == 'opening_date' || fieldname2 == 'opening_time' || fieldname2 == "opened_by"){
frm.set_df_property(fieldname2, 'read_only', 1)}
else{
frm.set_df_property(fieldname2, 'read_only', 0)
}
}
}
//if(frm.doc.closed_by === undefined){
frappe.call({
method: 'frappe.client.get_value',
args: {
doctype: 'User',
filters: { name: frappe.session.user },
fieldname: 'full_name'
},
callback: function(response) {
var full_name = response.message.full_name;
// Set the value to a field
frm.set_value('closed_by', full_name);
frm.set_df_property('closed_by', 'read_only', 1);
}
});//}
}
})
Hi @Prasant_Pant,
Hmm code is too long, I didn’t catch it in a short time but unnecessary content i removed so please try it.
frappe.ui.form.on('Issue', {
after_save: function(frm) {
if (frm.doc.status === "Open" || frm.doc.status === "Replied" || frm.doc.status === "On Hold" || frm.doc.status === "Resolved") {
if (!frm.doc.starting_date) {
frappe.call({
method: 'frappe.client.set_value',
args: {
doctype: frm.doc.doctype,
name: frm.doc.name,
fieldname: 'starting_date',
value: frm.doc.opening_date + " " + frm.doc.opening_time
},
callback: function(response) {
if (response.message) {
console.log("Starting date updated successfully!");
} else {
console.log("Failed to update starting date.");
}
}
});
}
}
if (frm.doc.status === "Closed" && !frm.doc.resolution_date) {
frappe.call({
method: 'frappe.client.set_value',
args: {
doctype: frm.doc.doctype,
name: frm.doc.name,
fieldname: 'resolution_date',
value: frappe.datetime.now_datetime()
},
callback: function(response) {
if (response.message) {
console.log("Resolution date updated successfully!");
} else {
console.log("Failed to update resolution date.");
}
}
});
}
var delayTime = 1000;
setTimeout(function() {
if (frm.doc.starting_date && frm.doc.resolution_date) {
var closed_date = frm.doc.resolution_date;
var opened_date = frm.doc.starting_date;
var new_closedDate = new Date(closed_date);
var new_openedOpened = new Date(opened_date);
var timeDifference = new_closedDate.getTime() - new_openedOpened.getTime();
var days = Math.floor(timeDifference / (1000 * 3600 * 24));
var hours = Math.floor((timeDifference % (1000 * 3600 * 24)) / (1000 * 60 * 60));
var mins = Math.floor((timeDifference % (1000 * 60 * 60)) / (1000 * 60));
var secs = Math.floor((timeDifference % (1000 * 60)) / 1000);
frappe.call({
method: 'frappe.client.set_value',
args: {
doctype: frm.doc.doctype,
name: frm.doc.name,
fieldname: 'work_duration_',
value: days + " " + hours + ":" + mins + ":" + secs
},
callback: function(response) {
if (response.message) {
console.log("Work duration updated successfully!");
} else {
console.log("Failed to update work duration.");
}
}
});
}
}, delayTime);
},
onload: function(frm) {
if (frm.doc.status === "Closed") {
frm.set_df_property('status', 'read_only', 1);
} else {
frm.set_df_property('status', 'read_only', 0);
}
},
timeline_refresh: function(frm) {
if (frm.doc.status === "Open") {
frm.set_value('starting_date', frm.doc.opening_date + " " + frm.doc.opening_time);
}
if (frm.doc.status === "Closed" && !frm.doc.resolution_date) {
frappe.call({
method: 'frappe.client.set_value',
args: {
doctype: frm.doc.doctype,
name: frm.doc.name,
fieldname: 'resolution_date',
value: frm.doc.opening_date + " " + frm.doc.opening_time
},
callback: function(response) {
if (response.message) {
console.log("Resolution date updated successfully!");
} else {
console.log("Failed to update resolution date.");
}
}
});
}
},
refresh: function(frm) {
if (!frm.doc.opened_by) {
frappe.call({
method: 'frappe.client.get_value',
args: {
doctype: 'User',
filters: { name: frappe.session.user },
fieldname: 'full_name'
},
callback: function(response) {
var full_name = response.message.full_name;
frm.set_value('opened_by', full_name);
frm.set_df_property('opened_by', 'read_only', 1);
}
});
}
frappe.call({
method: 'frappe.client.get_value',
args: {
doctype: 'User',
filters: { name: frappe.session.user },
fieldname: 'full_name'
},
callback: function(response) {
var full_name = response.message.full_name;
frm.set_value('closed_by', full_name);
frm.set_df_property('closed_by', 'read_only', 1);
}
});
},
status: function(frm) {
if (frm.doc.status === "Closed") {
frm.set_df_property('status', 'read_only', 1);
} else {
frm.set_df_property('status', 'read_only', 0);
}
}
});
Then reload and check it.
Thank You!