How to make Customer Issue from Customer Form?

Hi, everybody.
I want to have a function “Make Customer Issue” from Customer Form.
Example.

How can I do that ?

You can create a new doc like:

frappe.model.with_doctype("Customer Issue", function() {
  var doc = frappe.model.get_new_doc("Customer Issue");
  doc.customer = frm.customer;
  frappe.set_route("Form", "Customer Issue", doc.name);
}
2 Likes

Thank, rmehta.
I want to create a new Customer Issue from Customer From like create Maintenance Visit from Customer Issue.
EX: in customer.js

// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt

frappe.provide("erpnext.selling");
frappe.require("assets/erpnext/js/utils.js");

erpnext.selling.Customer = frappe.ui.form.Controller.extend({
    make_issue: function() {
        frappe.model.open_mapped_doc({
            method: "erpnext.selling.doctype.customer.customer.make_issue",
            frm: cur_frm
        })
    },
    make_customer_issue: function() {
        frappe.model.open_mapped_doc({
            method: "erpnext.selling.doctype.customer.customer.make_customer_issue",
            frm: cur_frm
        })
    }
});

cur_frm.cscript.onload = function(doc, dt, dn) {
    cur_frm.cscript.load_defaults(doc, dt, dn);
}

cur_frm.cscript.load_defaults = function(doc, dt, dn) {
    doc = locals[doc.doctype][doc.name];
    if(!(doc.__islocal && doc.lead_name)) { return; }

    var fields_to_refresh = frappe.model.set_default_values(doc);
    if(fields_to_refresh) { refresh_many(fields_to_refresh); }
}

cur_frm.add_fetch('lead_name', 'company_name', 'customer_name');
cur_frm.add_fetch('default_sales_partner','commission_rate','default_commission_rate');

cur_frm.cscript.refresh = function(doc, dt, dn) {
    cur_frm.cscript.setup_dashboard(doc);

    if(frappe.defaults.get_default("cust_master_name")!="Naming Series") {
        cur_frm.toggle_display("naming_series", false);
    } else {
        erpnext.toggle_naming_series();
    }

    if(doc.__islocal){
        hide_field(['address_html','contact_html']);
    }else{
        unhide_field(['address_html','contact_html']);
        // make lists
        erpnext.utils.render_address_and_contact(cur_frm);
    }
    cur_frm.add_custom_button(__('Make Issue'),
                this.make_issue, frappe.boot.doctype_icons["Issue"], "btn-default")
    cur_frm.add_custom_button(__('Make Customer Issue'),
                this.make_customer_issue, frappe.boot.doctype_icons["Customer Issue"], "btn-default")
}

cur_frm.cscript.validate = function(doc, dt, dn) {
    if(doc.lead_name) frappe.model.clear_doc("Lead", doc.lead_name);
}

cur_frm.cscript.setup_dashboard = function(doc) {
    cur_frm.dashboard.reset(doc);
    if(doc.__islocal)
        return;
    if (in_list(user_roles, "Accounts User") || in_list(user_roles, "Accounts Manager"))
        cur_frm.dashboard.set_headline('<span class="text-muted">'+ __('Loading...')+ '</span>')

    cur_frm.dashboard.add_doctype_badge("Opportunity", "customer");
    cur_frm.dashboard.add_doctype_badge("Quotation", "customer");
    cur_frm.dashboard.add_doctype_badge("Sales Order", "customer");
    cur_frm.dashboard.add_doctype_badge("Delivery Note", "customer");
    cur_frm.dashboard.add_doctype_badge("Sales Invoice", "customer");

    return frappe.call({
        type: "GET",
        method: "erpnext.selling.doctype.customer.customer.get_dashboard_info",
        args: {
            customer: cur_frm.doc.name
        },
        callback: function(r) {
            if (in_list(user_roles, "Accounts User") || in_list(user_roles, "Accounts Manager")) {
                if(r.message["company_currency"].length == 1) {
                    cur_frm.dashboard.set_headline(
                        __("Total Billing This Year: ") + "<b>"
                        + format_currency(r.message.total_billing, r.message["company_currency"][0])
                        + '</b> / <span class="text-muted">' + __("Unpaid") + ": <b>"
                        + format_currency(r.message.total_unpaid, r.message["company_currency"][0])
                        + '</b></span>');
                }
            }
            cur_frm.dashboard.set_badge_count(r.message);
        }
    });
}

cur_frm.fields_dict['customer_group'].get_query = function(doc, dt, dn) {
    return{
        filters:{'is_group': 'No'}
    }
}

cur_frm.fields_dict.lead_name.get_query = function(doc, cdt, cdn) {
    return{
        query: "erpnext.controllers.queries.lead_query"
    }
}

cur_frm.fields_dict['default_price_list'].get_query = function(doc, cdt, cdn) {
    return{
        filters:{'selling': 1}
    }
}

cur_frm.fields_dict['accounts'].grid.get_field('account').get_query = function(doc, cdt, cdn) {
    var d  = locals[cdt][cdn];
    return {
        filters: {
            'account_type': 'Receivable',
            'company': d.company,
            'group_or_ledger': 'Ledger'
        }
    }
}