@Devershi_Vashistha Yes, it helps a lot. It was a spelling mistake. Here is the updated code.
After trying this code, please check the console log again.
frappe.ui.form.on("Filter", {
refresh: function(frm) {
if (!frm.is_new()) {
frm.add_custom_button('Apply Filter', () => frm.trigger('add_filtered_emails'));
frm.change_custom_button_type('Apply Filter', null, 'success');
}
},
add_filtered_emails: function(frm) {
let emails = [];
let pipe = new Promise ((resolve) => { resolve(frm.doc); });
pipe.then(doc => {
let filter = {};
if (!!doc.country) filter.country = doc.country;
if (!!doc.city) filter.city = doc.city;
frappe.db.get_list('Address', {
fields: ['email_id'],
filters: filter
}).then(data => {
$.each(data, function(i, v) {
emails.push(v.email_id);
});
});
return doc;
}).then(doc => {
let filter = {};
if (!!doc.intent) filter.intent = doc.intent;
if (!!doc.package) filter.package = doc.package;
if (!!doc.start_date && !!doc.end_date) {
filter.datetime = [
'between',
[doc.start_date + ' 00:00:00', doc.end_date + ' 00:00:00']
];
} else if (!!doc.start_date) {
filter.datetime = ['>=', doc.start_date + ' 00:00:00'];
} else if (!!doc.end_date) {
filter.datetime = ['<=', doc.end_date + ' 00:00:00'];
}
frappe.db.get_list('Session History Collection', {
fields: ['email'],
filters: filter
}).then(data => {
$.each(data, function(i, v) {
if (emails.indexOf(v.email) < 0) emails.push(v.email);
});
});
return doc;
})
.then(doc => {
frappe.db.get_list('Email Group Member', {
fields: ['email'],
filters: {
email: ['in', emails]
}
}).then(data => {
if (data.length) {
$.each(data, function(i, v) {
let idx = emails.indexOf(v.email);
if (idx >= 0) emails.splice(idx, 1);
});
}
let docs = [];
let args = [];
$.each(emails, function(i, v) {
docs.push({
doctype: 'Email Group Member',
email_group: doc.email_group,
email: v,
});
});
if (docs.length > 200) {
for (var i = 0, l = docs.length; i < l; i += 200) {
args.push(docs.slice(i, i + 200));
}
} else {
args = [docs];
}
let result = [];
$.each(args, function(i, arg) {
let ret = frappe.call({
type: 'POST',
method: 'frappe.client.insert_many',
args: {
docs: arg,
}
});
result.push.apply(result, ret);
});
// for debugging purpose only
console.log(
'Total existing members: ' + data.length,
'Total filtered emails: ' + emails.length,
'Total inserted emails: ' + result.length
);
});
});
}
});