// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
{% include 'erpnext/selling/sales_common.js' %}
{% include 'erpnext/buying/doctype/purchase_common/purchase_common.js' %};
erpnext.selling.QuotationController = erpnext.selling.SellingController.extend({
onload: function(doc, dt, dn) {
var me = this;
this._super(doc, dt, dn);
if(doc.customer && !doc.quotation_to)
doc.quotation_to = "Customer";
else if(doc.lead && !doc.quotation_to)
doc.quotation_to = "Lead";
},
refresh: function(doc, dt, dn) {
this._super(doc, dt, dn);
if(doc.docstatus == 1 && doc.status!=='Lost') {
cur_frm.add_custom_button(__('Make Purchase Order'),
cur_frm.cscript['Make Purchase Order']);
if(doc.status!=="Ordered") {
cur_frm.add_custom_button(__('Set as Lost'),
cur_frm.cscript['Declare Order Lost']);
}
}
if (this.frm.doc.docstatus===0) {
cur_frm.add_custom_button(__('Supplier Quotation'),
function() {
erpnext.utils.map_current_doc({
method: "erpnext.buying.doctype.supplier_quotation.supplier_quotation.make_supplier_quotation",
source_doctype: "Supplier Quotation",
get_query_filters: {
status: ["not in", ["Lost", "Closed"]],
enquiry_type: cur_frm.doc.order_type,
customer: cur_frm.doc.customer || undefined,
lead: cur_frm.doc.lead || undefined,
company: cur_frm.doc.company
}
})
}, __("Get items from"), "btn-default");
}
this.toggle_reqd_lead_customer();
},
quotation_to: function() {
var me = this;
if (this.frm.doc.quotation_to == "Lead") {
this.frm.set_value("customer", null);
this.frm.set_value("contact_person", null);
} else if (this.frm.doc.quotation_to == "Customer") {
this.frm.set_value("lead", null);
}
this.toggle_reqd_lead_customer();
},
toggle_reqd_lead_customer: function() {
var me = this;
this.frm.toggle_reqd("lead", this.frm.doc.quotation_to == "Lead");
this.frm.toggle_reqd("customer", this.frm.doc.quotation_to == "Customer");
// to overwrite the customer_filter trigger from queries.js
$.each(["customer_address", "shipping_address_name"],
function(i, opts) {
me.frm.set_query(opts, me.frm.doc.quotation_to==="Lead"
? erpnext.queries["lead_filter"] : erpnext.queries["customer_filter"]);
}
);
},
tc_name: function() {
this.get_terms();
},
validate_company_and_party: function(party_field) {
if(!this.frm.doc.quotation_to) {
msgprint(__("Please select a value for {0} quotation_to {1}", [this.frm.doc.doctype, this.frm.doc.name]));
return false;
} else if (this.frm.doc.quotation_to == "Lead") {
return true;
} else {
return this._super(party_field);
}
},
lead: function() {
var me = this;
frappe.call({
method: "erpnext.crm.doctype.lead.lead.get_lead_details",
args: {
'lead': this.frm.doc.lead,
'posting_date': this.frm.doc.transaction_date,
'company': this.frm.doc.company,
},
callback: function(r) {
if(r.message) {
me.frm.updating_party_details = true;
me.frm.set_value(r.message);
me.frm.refresh();
me.frm.updating_party_details = false;
}
}
})
}
});
cur_frm.script_manager.make(erpnext.selling.QuotationController);
cur_frm.fields_dict.lead.get_query = function(doc,cdt,cdn) {
return{ query: "erpnext.controllers.queries.lead_query" }
}
cur_frm.cscript['Make Purchase Order'] = function() {
frappe.model.open_mapped_doc({
method: "erpnext.buying.doctype.purchase_order.purchase_order.make_purchase_order"
frm: cur_frm
})
}
cur_frm.cscript['Declare Order Lost'] = function(){
var dialog = new frappe.ui.Dialog({
title: "Set as Lost",
fields: [
{"fieldtype": "Text", "label": __("Reason for losing"), "fieldname": "reason",
"reqd": 1 },
{"fieldtype": "Button", "label": __("Update"), "fieldname": "update"},
]
});
dialog.fields_dict.update.$input.click(function() {
args = dialog.get_values();
if(!args) return;
return cur_frm.call({
method: "declare_order_lost",
doc: cur_frm.doc,
args: args.reason,
callback: function(r) {
if(r.exc) {
msgprint(__("There were errors."));
return;
}
dialog.hide();
cur_frm.refresh();
},
btn: this
})
});
dialog.show();
}
cur_frm.cscript.on_submit = function(doc, cdt, cdn) {
if(cint(frappe.boot.notification_settings.quotation))
cur_frm.email_doc(frappe.boot.notification_settings.quotation_message);
}
frappe.ui.form.on("Quotation Item", "items_on_form_rendered", function(frm, cdt, cdn) {
// enable tax_amount field if Actual
})
frappe.ui.form.on("Quotation Item", "stock_balance", function(frm, cdt, cdn) {
var d = frappe.model.get_doc(cdt, cdn);
frappe.route_options = {"item_code": d.item_code};
frappe.set_route("query-report", "Stock Balance");
})