Hi @Hiro,
Please apply the ListView client script and set it according to your specific scenario.
frappe.listview_settings["Prospect"] = {
onload: function(listview) {
listview.page.add_action_item(__("Create Opportunities"), () => {
let prospect_ids = listview.get_checked_items(true);
if (prospect_ids.length > 0) {
create_opportunities(prospect_ids);
} else {
frappe.msgprint("Please select at least one prospect.");
}
});
}
};
function create_opportunities(prospect_ids) {
frappe.call({
method: "frappe.client.get_list",
args: {
doctype: "Prospect",
filters: { name: ["in", prospect_ids] },
fields: ["name", "prospect_owner", "market_segment", "industry",
"territory", "website", "annual_revenue", "no_of_employees"]
},
callback: function(response) {
if (response.message) {
let prospects = response.message;
prospects.forEach(prospect => {
let new_opportunity = frappe.model.get_new_doc("Opportunity");
new_opportunity.opportunity_from = "Prospect";
new_opportunity.party_name = prospect.name;
new_opportunity.opportunity_owner = prospect.prospect_owner;
new_opportunity.market_segment = prospect.market_segment;
new_opportunity.industry = prospect.industry;
new_opportunity.territory = prospect.territory;
new_opportunity.website = prospect.website;
new_opportunity.annual_revenue = prospect.annual_revenue;
new_opportunity.no_of_employees = prospect.no_of_employees;
frappe.db.insert(new_opportunity).then(() => {
frappe.msgprint(`Opportunity created for prospect: ${prospect.name}`);
});
});
}
}
});
}
If you want to learn, check it out.
It’s a similar concept for bulk updates or creation, so make sure to watch both videos.
Hope this helps!