brotherton-erpnext/erpnext/selling/sales_common.js

329 lines
9.6 KiB
JavaScript
Raw Normal View History

// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// License: GNU General Public License v3. See license.txt
2012-02-23 07:05:32 +00:00
cur_frm.cscript.tax_table = "Sales Taxes and Charges";
2015-05-06 17:29:00 +00:00
{% include 'accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.js' %}
2014-02-14 10:17:51 +00:00
frappe.provide("erpnext.selling");
frappe.require("assets/erpnext/js/controllers/transaction.js");
2014-09-12 07:39:41 +00:00
cur_frm.email_field = "contact_email";
erpnext.selling.SellingController = erpnext.TransactionController.extend({
2013-07-11 13:43:58 +00:00
onload: function() {
this._super();
this.setup_queries();
},
2013-07-11 13:43:58 +00:00
setup_queries: function() {
var me = this;
this.frm.add_fetch("sales_partner", "commission_rate", "commission_rate");
$.each([["customer_address", "customer_filter"],
["shipping_address_name", "customer_filter"],
["contact_person", "customer_filter"],
["customer", "customer"],
["lead", "lead"]],
function(i, opts) {
if(me.frm.fields_dict[opts[0]])
me.frm.set_query(opts[0], erpnext.queries[opts[1]]);
});
if(this.frm.fields_dict.taxes_and_charges) {
this.frm.set_query("taxes_and_charges", function() {
2013-07-10 07:37:49 +00:00
return {
filters: [
2015-05-08 05:38:48 +00:00
['Sales Taxes and Charges Template', 'company', '=', me.frm.doc.company],
['Sales Taxes and Charges Template', 'docstatus', '!=', 2]
2013-07-10 07:37:49 +00:00
]
}
});
}
if(this.frm.fields_dict.selling_price_list) {
this.frm.set_query("selling_price_list", function() {
return { filters: { selling: 1 } };
});
}
2014-12-26 07:45:21 +00:00
if(!this.frm.fields_dict["items"]) {
return;
}
2014-12-26 07:45:21 +00:00
if(this.frm.fields_dict["items"].grid.get_field('item_code')) {
this.frm.set_query("item_code", "items", function() {
2013-07-11 13:43:58 +00:00
return {
query: "erpnext.controllers.queries.item_query",
filters: {'is_sales_item': 1}
2013-07-11 13:43:58 +00:00
}
});
}
2014-12-26 07:45:21 +00:00
if(this.frm.fields_dict["items"].grid.get_field('batch_no')) {
this.frm.set_query("batch_no", "items", function(doc, cdt, cdn) {
2014-03-27 08:47:33 +00:00
var item = frappe.get_doc(cdt, cdn);
if(!item.item_code) {
2014-04-14 10:55:30 +00:00
frappe.throw(__("Please enter Item Code to get batch no"));
} else {
2013-10-18 06:59:11 +00:00
filters = {
'item_code': item.item_code,
'posting_date': me.frm.doc.posting_date || nowdate(),
2013-10-18 06:59:11 +00:00
}
if(item.warehouse) filters["warehouse"] = item.warehouse
2013-10-18 06:59:11 +00:00
return {
query : "erpnext.controllers.queries.get_batch_no",
2013-10-18 06:59:11 +00:00
filters: filters
}
}
});
}
},
refresh: function() {
this._super();
this.frm.toggle_display("customer_name",
(this.frm.doc.customer_name && this.frm.doc.customer_name!==this.frm.doc.customer));
if(this.frm.fields_dict.packed_items) {
var packing_list_exists = (this.frm.doc.packed_items || []).length;
this.frm.toggle_display("packing_list", packing_list_exists ? true : false);
}
2015-04-16 12:25:35 +00:00
this.toggle_editable_price_list_rate();
},
customer: function() {
2014-05-28 07:19:20 +00:00
var me = this;
erpnext.utils.get_party_details(this.frm, null, null, function(){me.apply_pricing_rule()});
},
2013-07-15 07:34:33 +00:00
customer_address: function() {
erpnext.utils.get_address_display(this.frm, "customer_address");
2013-07-15 07:34:33 +00:00
},
2014-02-19 12:13:24 +00:00
shipping_address_name: function() {
erpnext.utils.get_address_display(this.frm, "shipping_address_name", "shipping_address");
},
2014-05-28 07:19:20 +00:00
sales_partner: function() {
this.apply_pricing_rule();
},
campaign: function() {
this.apply_pricing_rule();
},
selling_price_list: function() {
2014-07-01 12:15:15 +00:00
this.apply_price_list();
},
2014-02-10 12:24:04 +00:00
price_list_rate: function(doc, cdt, cdn) {
2014-03-27 08:47:33 +00:00
var item = frappe.get_doc(cdt, cdn);
2014-02-14 10:17:51 +00:00
frappe.model.round_floats_in(item, ["price_list_rate", "discount_percentage"]);
item.rate = flt(item.price_list_rate * (1 - item.discount_percentage / 100.0),
precision("rate", item));
this.set_gross_profit(item);
this.calculate_taxes_and_totals();
},
2014-02-10 12:24:04 +00:00
discount_percentage: function(doc, cdt, cdn) {
2014-03-27 08:47:33 +00:00
var item = frappe.get_doc(cdt, cdn);
2014-02-10 12:24:04 +00:00
if(!item.price_list_rate) {
item.discount_percentage = 0.0;
} else {
2014-02-10 12:24:04 +00:00
this.price_list_rate(doc, cdt, cdn);
}
this.set_gross_profit(item);
},
commission_rate: function() {
this.calculate_commission();
refresh_field("total_commission");
},
total_commission: function() {
if(this.frm.doc.base_net_total) {
frappe.model.round_floats_in(this.frm.doc, ["base_net_total", "total_commission"]);
if(this.frm.doc.base_net_total < this.frm.doc.total_commission) {
2014-04-14 10:55:30 +00:00
var msg = (__("[Error]") + " " +
__(frappe.meta.get_label(this.frm.doc.doctype, "total_commission",
this.frm.doc.name)) + " > " +
__(frappe.meta.get_label(this.frm.doc.doctype, "base_net_total", this.frm.doc.name)));
msgprint(msg);
throw msg;
}
this.frm.set_value("commission_rate",
flt(this.frm.doc.total_commission * 100.0 / this.frm.doc.base_net_total));
}
},
allocated_percentage: function(doc, cdt, cdn) {
2014-03-27 08:47:33 +00:00
var sales_person = frappe.get_doc(cdt, cdn);
if(sales_person.allocated_percentage) {
sales_person.allocated_percentage = flt(sales_person.allocated_percentage,
precision("allocated_percentage", sales_person));
sales_person.allocated_amount = flt(this.frm.doc.base_net_total *
sales_person.allocated_percentage / 100.0,
precision("allocated_amount", sales_person));
refresh_field(["allocated_percentage", "allocated_amount"], sales_person.name,
sales_person.parentfield);
}
},
warehouse: function(doc, cdt, cdn) {
var me = this;
2014-03-27 08:47:33 +00:00
var item = frappe.get_doc(cdt, cdn);
if(item.item_code && item.warehouse) {
return this.frm.call({
method: "erpnext.stock.get_item_details.get_bin_details",
child: item,
args: {
item_code: item.item_code,
warehouse: item.warehouse,
},
callback:function(r){
if (inList(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
me.batch_no(doc, cdt, cdn);
}
}
});
}
},
toggle_editable_price_list_rate: function() {
2014-12-26 07:45:21 +00:00
var df = frappe.meta.get_docfield(this.frm.doc.doctype + " Item", "price_list_rate", this.frm.doc.name);
2014-02-14 10:17:51 +00:00
var editable_price_list_rate = cint(frappe.defaults.get_default("editable_price_list_rate"));
if(df && editable_price_list_rate) {
df.read_only = 0;
}
},
calculate_commission: function() {
if(this.frm.fields_dict.commission_rate) {
if(this.frm.doc.commission_rate > 100) {
2014-04-14 10:55:30 +00:00
var msg = __(frappe.meta.get_label(this.frm.doc.doctype, "commission_rate", this.frm.doc.name)) +
" " + __("cannot be greater than 100");
msgprint(msg);
throw msg;
}
this.frm.doc.total_commission = flt(this.frm.doc.base_net_total * this.frm.doc.commission_rate / 100.0,
precision("total_commission"));
}
},
calculate_contribution: function() {
2013-05-23 13:55:08 +00:00
var me = this;
$.each(this.frm.doc.doctype.sales_team || [], function(i, sales_person) {
2014-02-14 10:17:51 +00:00
frappe.model.round_floats_in(sales_person);
if(sales_person.allocated_percentage) {
sales_person.allocated_amount = flt(
me.frm.doc.base_net_total * sales_person.allocated_percentage / 100.0,
precision("allocated_amount", sales_person));
}
});
},
2013-07-15 12:58:14 +00:00
shipping_rule: function() {
var me = this;
if(this.frm.doc.shipping_rule) {
return this.frm.call({
2013-07-15 12:58:14 +00:00
doc: this.frm.doc,
method: "apply_shipping_rule",
callback: function(r) {
if(!r.exc) {
me.calculate_taxes_and_totals();
}
}
})
}
},
batch_no: function(doc, cdt, cdn) {
var me = this;
var item = frappe.get_doc(cdt, cdn);
2015-03-20 09:36:30 +00:00
2015-03-30 10:34:55 +00:00
if(item.warehouse && item.item_code && item.batch_no) {
return this.frm.call({
method: "erpnext.stock.get_item_details.get_batch_qty",
child: item,
args: {
"batch_no": item.batch_no,
"warehouse": item.warehouse,
"item_code": item.item_code
},
"fieldname": "actual_batch_qty"
});
}
},
2013-05-23 13:55:08 +00:00
set_dynamic_labels: function() {
this._super();
2015-07-07 08:29:23 +00:00
this.set_product_bundle_help(this.frm.doc);
},
2015-07-07 08:29:23 +00:00
set_product_bundle_help: function(doc) {
if(!cur_frm.fields_dict.packing_list) return;
if ((doc.packed_items || []).length) {
$(cur_frm.fields_dict.packing_list.row.wrapper).toggle(true);
if (inList(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
help_msg = "<div class='alert alert-warning'>" +
2015-07-07 08:29:23 +00:00
__("For 'Product Bundle' items, Warehouse, Serial No and Batch No will be considered from the 'Packing List' table. If Warehouse and Batch No are same for all packing items for any 'Product Bundle' item, those values can be entered in the main Item table, values will be copied to 'Packing List' table.")+
"</div>";
2015-07-07 08:29:23 +00:00
frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = help_msg;
}
} else {
$(cur_frm.fields_dict.packing_list.row.wrapper).toggle(false);
if (inList(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
2015-07-07 08:29:23 +00:00
frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = '';
}
}
2015-07-07 08:29:23 +00:00
refresh_field('product_bundle_help');
},
make_payment_request: function() {
frappe.call({
method:"erpnext.accounts.doctype.payment_request.payment_request.make_payment_request",
args: {
"dt": cur_frm.doc.doctype,
"dn": cur_frm.doc.name,
"recipient_id": cur_frm.doc.contact_email
},
callback: function(r) {
2015-12-17 04:18:44 +00:00
if(!r.exc){
var doc = frappe.model.sync(r.message);
console.log(r.message)
frappe.set_route("Form", r.message.doctype, r.message.name);
2015-12-17 04:18:44 +00:00
}
}
})
}
});
2016-03-09 11:32:59 +00:00
frappe.ui.form.on(cur_frm.doctype,"project", function(frm) {
2014-10-23 07:48:59 +00:00
if(in_list(["Delivery Note", "Sales Invoice"], frm.doc.doctype)) {
frappe.call({
method:'erpnext.projects.doctype.project.project.get_cost_center_name' ,
2016-03-09 11:32:59 +00:00
args: { project: frm.doc.project },
2014-10-23 07:48:59 +00:00
callback: function(r, rt) {
if(!r.exc) {
2014-12-26 07:45:21 +00:00
$.each(frm.doc["items"] || [], function(i, row) {
frappe.model.set_value(row.doctype, row.name, "cost_center", r.message);
msgprint(__("Cost Center For Item with Item Code '"+row.item_name+"' has been Changed to "+ r.message));
2014-10-23 07:48:59 +00:00
})
}
}
2014-10-23 07:48:59 +00:00
})
}
})