Mass create Opportunities from a Prospect

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!

2 Likes