blob: e508476576d0f1678614022f89365ed0624b1045 [file] [log] [blame]
Anand Doshi885e0742015-03-03 14:55:30 +05301// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
Rushabh Mehtae67d1fb2013-08-05 14:59:54 +05302// License: GNU General Public License v3. See license.txt
Rushabh Mehta3966f1d2012-02-23 12:35:32 +05303
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +05304
Nabin Hait613d0812015-02-23 11:58:15 +05305cur_frm.cscript.tax_table = "Sales Taxes and Charges";
Rushabh Mehta621283c2016-04-21 19:00:34 +05306{% include 'erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.js' %}
Nabin Hait613d0812015-02-23 11:58:15 +05307
Rushabh Mehtab09d9da2014-01-02 11:47:23 +05308
Rushabh Mehtae10cf022014-09-12 13:09:41 +05309cur_frm.email_field = "contact_email";
10
Rushabh Mehtabe2ee182016-04-29 17:22:42 +053011frappe.provide("erpnext.selling");
Anand Doshi3543f302013-05-24 19:25:01 +053012erpnext.selling.SellingController = erpnext.TransactionController.extend({
Rushabh Mehta532eedf2016-05-19 18:22:49 +053013 setup: function() {
14 this._super();
deepeshgarg00786152eb2018-09-25 19:08:16 +053015 this.frm.add_fetch("sales_partner", "commission_rate", "commission_rate");
16 this.frm.add_fetch("sales_person", "commission_rate", "commission_rate");
Rushabh Mehta532eedf2016-05-19 18:22:49 +053017 },
18
Anand Doshi9b496142013-07-11 19:13:58 +053019 onload: function() {
20 this._super();
Anand Doshi9b496142013-07-11 19:13:58 +053021 this.setup_queries();
Rushabh Mehta30dc9a12017-11-17 14:31:09 +053022 this.frm.set_query('shipping_rule', function() {
23 return {
24 filters: {
25 "shipping_rule_type": "Selling"
26 }
27 };
28 });
Anand Doshi9b496142013-07-11 19:13:58 +053029 },
Anand Doshibd67e872014-04-11 16:51:27 +053030
Anand Doshi9b496142013-07-11 19:13:58 +053031 setup_queries: function() {
Anand Doshi99100a42013-07-04 17:13:53 +053032 var me = this;
Anand Doshibd67e872014-04-11 16:51:27 +053033
Rushabh Mehtab92087c2017-01-13 18:53:11 +053034 $.each([["customer", "customer"],
Anand Doshibd67e872014-04-11 16:51:27 +053035 ["lead", "lead"]],
Anand Doshid5d39ac2013-07-29 13:28:37 +053036 function(i, opts) {
Anand Doshibd67e872014-04-11 16:51:27 +053037 if(me.frm.fields_dict[opts[0]])
Anand Doshid5d39ac2013-07-29 13:28:37 +053038 me.frm.set_query(opts[0], erpnext.queries[opts[1]]);
39 });
Anand Doshibd67e872014-04-11 16:51:27 +053040
Rushabh Mehtab92087c2017-01-13 18:53:11 +053041 me.frm.set_query('contact_person', erpnext.queries.contact_query);
42 me.frm.set_query('customer_address', erpnext.queries.address_query);
43 me.frm.set_query('shipping_address_name', erpnext.queries.address_query);
44
Akhilesh Darjee4f721562014-01-29 16:31:38 +053045 if(this.frm.fields_dict.taxes_and_charges) {
46 this.frm.set_query("taxes_and_charges", function() {
Saurabhf52dc072013-07-10 13:07:49 +053047 return {
48 filters: [
Rushabh Mehtaab1ed012015-05-08 11:08:48 +053049 ['Sales Taxes and Charges Template', 'company', '=', me.frm.doc.company],
50 ['Sales Taxes and Charges Template', 'docstatus', '!=', 2]
Saurabhf52dc072013-07-10 13:07:49 +053051 ]
52 }
Anand Doshi99100a42013-07-04 17:13:53 +053053 });
54 }
Anand Doshi99100a42013-07-04 17:13:53 +053055
Rushabh Mehta4a404e92013-08-09 18:11:35 +053056 if(this.frm.fields_dict.selling_price_list) {
57 this.frm.set_query("selling_price_list", function() {
Nabin Haitdc15b4f2014-01-20 16:48:49 +053058 return { filters: { selling: 1 } };
Anand Doshi720a01a2013-07-26 11:32:02 +053059 });
Anand Doshi720a01a2013-07-26 11:32:02 +053060 }
Anand Doshibd67e872014-04-11 16:51:27 +053061
karthikeyan57fc60212019-07-04 22:46:16 +053062 if(this.frm.fields_dict.tc_name) {
63 this.frm.set_query("tc_name", function() {
64 return { filters: { selling: 1 } };
65 });
66 }
67
Nabin Haitdd38a262014-12-26 13:15:21 +053068 if(!this.frm.fields_dict["items"]) {
Anand Doshi99100a42013-07-04 17:13:53 +053069 return;
70 }
Anand Doshibd67e872014-04-11 16:51:27 +053071
Nabin Haitdd38a262014-12-26 13:15:21 +053072 if(this.frm.fields_dict["items"].grid.get_field('item_code')) {
73 this.frm.set_query("item_code", "items", function() {
Anand Doshi9b496142013-07-11 19:13:58 +053074 return {
Rushabh Mehtad973c162016-08-16 11:32:08 +053075 query: "erpnext.controllers.queries.item_query",
76 filters: {'is_sales_item': 1}
Anand Doshi9b496142013-07-11 19:13:58 +053077 }
Anand Doshi99100a42013-07-04 17:13:53 +053078 });
79 }
Anand Doshibd67e872014-04-11 16:51:27 +053080
Rushabh Mehta698c0402016-11-22 23:16:40 +053081 if(this.frm.fields_dict["packed_items"] &&
82 this.frm.fields_dict["packed_items"].grid.get_field('batch_no')) {
Rohit Waghchauree887e922016-11-18 12:16:22 +053083 this.frm.set_query("batch_no", "packed_items", function(doc, cdt, cdn) {
84 return me.set_query_for_batch(doc, cdt, cdn)
85 });
86 }
Rohit Waghchauree887e922016-11-18 12:16:22 +053087 },
88
Anand Doshic4a54fe2013-08-01 18:19:51 +053089 refresh: function() {
90 this._super();
Rushabh Mehtab92087c2017-01-13 18:53:11 +053091
Rushabh Mehta8d39fd92017-01-16 13:06:07 +053092 frappe.dynamic_link = {doc: this.frm.doc, fieldname: 'customer', doctype: 'Customer'}
Rushabh Mehtab92087c2017-01-13 18:53:11 +053093
Anand Doshibd67e872014-04-11 16:51:27 +053094 this.frm.toggle_display("customer_name",
Akhilesh Darjee5ce1b8b2013-12-09 16:29:04 +053095 (this.frm.doc.customer_name && this.frm.doc.customer_name!==this.frm.doc.customer));
Nabin Haite7d15362014-12-25 16:01:55 +053096 if(this.frm.fields_dict.packed_items) {
97 var packing_list_exists = (this.frm.doc.packed_items || []).length;
Anand Doshic4a54fe2013-08-01 18:19:51 +053098 this.frm.toggle_display("packing_list", packing_list_exists ? true : false);
99 }
Nabin Hait2029ea92015-04-16 17:55:35 +0530100 this.toggle_editable_price_list_rate();
Rushabh Mehta8aded132013-07-04 12:50:52 +0530101 },
Anand Doshibd67e872014-04-11 16:51:27 +0530102
Anand Doshi3543f302013-05-24 19:25:01 +0530103 customer: function() {
Nabin Haita3dd72a2014-05-28 12:49:20 +0530104 var me = this;
Nabin Haite45ec662018-08-01 17:44:34 +0530105 erpnext.utils.get_party_details(this.frm, null, null, function() {
106 me.apply_price_list();
107 });
Anand Doshi3543f302013-05-24 19:25:01 +0530108 },
Anand Doshibd67e872014-04-11 16:51:27 +0530109
Nabin Haita279d782013-07-15 13:04:33 +0530110 customer_address: function() {
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530111 erpnext.utils.get_address_display(this.frm, "customer_address");
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500112 erpnext.utils.set_taxes_from_address(this.frm, "customer_address", "customer_address", "shipping_address_name");
Nabin Haita279d782013-07-15 13:04:33 +0530113 },
Anand Doshibd67e872014-04-11 16:51:27 +0530114
Nabin Hait9d1f0772014-02-19 17:43:24 +0530115 shipping_address_name: function() {
116 erpnext.utils.get_address_display(this.frm, "shipping_address_name", "shipping_address");
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500117 erpnext.utils.set_taxes_from_address(this.frm, "shipping_address_name", "customer_address", "shipping_address_name");
Nabin Hait9d1f0772014-02-19 17:43:24 +0530118 },
Anand Doshibd67e872014-04-11 16:51:27 +0530119
Nabin Haita3dd72a2014-05-28 12:49:20 +0530120 sales_partner: function() {
121 this.apply_pricing_rule();
122 },
123
124 campaign: function() {
125 this.apply_pricing_rule();
126 },
127
Rushabh Mehta4a404e92013-08-09 18:11:35 +0530128 selling_price_list: function() {
Anand Doshidffec8f2014-07-01 17:45:15 +0530129 this.apply_price_list();
rohitwaghchaure8e675eb2018-02-13 17:11:06 +0530130 this.set_dynamic_labels();
Anand Doshif3096132013-05-21 19:35:06 +0530131 },
Anand Doshibd67e872014-04-11 16:51:27 +0530132
Nabin Haita7f757a2014-02-10 17:54:04 +0530133 price_list_rate: function(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530134 var item = frappe.get_doc(cdt, cdn);
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530135 frappe.model.round_floats_in(item, ["price_list_rate", "discount_percentage"]);
Anand Doshibd67e872014-04-11 16:51:27 +0530136
mbauskara52472c2016-03-05 15:10:25 +0530137 // check if child doctype is Sales Order Item/Qutation Item and calculate the rate
138 if(in_list(["Quotation Item", "Sales Order Item", "Delivery Note Item", "Sales Invoice Item"]), cdt)
Rohit Waghchaure6087fe12016-04-09 14:31:09 +0530139 this.apply_pricing_rule_on_item(item);
mbauskara52472c2016-03-05 15:10:25 +0530140 else
141 item.rate = flt(item.price_list_rate * (1 - item.discount_percentage / 100.0),
142 precision("rate", item));
143
Anand Doshif3096132013-05-21 19:35:06 +0530144 this.calculate_taxes_and_totals();
145 },
Anand Doshibd67e872014-04-11 16:51:27 +0530146
Nabin Haita7f757a2014-02-10 17:54:04 +0530147 discount_percentage: function(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530148 var item = frappe.get_doc(cdt, cdn);
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530149 item.discount_amount = 0.0;
150 this.apply_discount_on_item(doc, cdt, cdn, 'discount_percentage');
151 },
152
153 discount_amount: function(doc, cdt, cdn) {
deepeshgarg007a9ea49c2019-07-04 15:56:34 +0530154
155 if(doc.name === cdn) {
156 return;
157 }
158
Nabin Hait593242f2019-04-05 19:35:02 +0530159 var item = frappe.get_doc(cdt, cdn);
160 item.discount_percentage = 0.0;
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530161 this.apply_discount_on_item(doc, cdt, cdn, 'discount_amount');
162 },
163
164 apply_discount_on_item: function(doc, cdt, cdn, field) {
165 var item = frappe.get_doc(cdt, cdn);
Nabin Haita7f757a2014-02-10 17:54:04 +0530166 if(!item.price_list_rate) {
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530167 item[field] = 0.0;
Anand Doshi923d41d2013-05-28 17:23:36 +0530168 } else {
Nabin Haita7f757a2014-02-10 17:54:04 +0530169 this.price_list_rate(doc, cdt, cdn);
Anand Doshi923d41d2013-05-28 17:23:36 +0530170 }
Saurabh5ada14b2016-02-26 18:02:55 +0530171 this.set_gross_profit(item);
Anand Doshif3096132013-05-21 19:35:06 +0530172 },
Anand Doshibd67e872014-04-11 16:51:27 +0530173
Anand Doshif3096132013-05-21 19:35:06 +0530174 commission_rate: function() {
175 this.calculate_commission();
176 refresh_field("total_commission");
177 },
Anand Doshibd67e872014-04-11 16:51:27 +0530178
Anand Doshif3096132013-05-21 19:35:06 +0530179 total_commission: function() {
Nabin Hait5690be12015-02-12 16:09:11 +0530180 if(this.frm.doc.base_net_total) {
181 frappe.model.round_floats_in(this.frm.doc, ["base_net_total", "total_commission"]);
Anand Doshibd67e872014-04-11 16:51:27 +0530182
Nabin Hait5690be12015-02-12 16:09:11 +0530183 if(this.frm.doc.base_net_total < this.frm.doc.total_commission) {
Pratik Vyasb52618c2014-04-14 16:25:30 +0530184 var msg = (__("[Error]") + " " +
185 __(frappe.meta.get_label(this.frm.doc.doctype, "total_commission",
Anand Doshibd67e872014-04-11 16:51:27 +0530186 this.frm.doc.name)) + " > " +
Nabin Hait5690be12015-02-12 16:09:11 +0530187 __(frappe.meta.get_label(this.frm.doc.doctype, "base_net_total", this.frm.doc.name)));
Faris Ansariab74ca72017-05-30 12:54:42 +0530188 frappe.msgprint(msg);
Anand Doshif3096132013-05-21 19:35:06 +0530189 throw msg;
190 }
Anand Doshibd67e872014-04-11 16:51:27 +0530191
192 this.frm.set_value("commission_rate",
Nabin Hait5690be12015-02-12 16:09:11 +0530193 flt(this.frm.doc.total_commission * 100.0 / this.frm.doc.base_net_total));
Anand Doshif3096132013-05-21 19:35:06 +0530194 }
195 },
Anand Doshibd67e872014-04-11 16:51:27 +0530196
Anand Doshif3096132013-05-21 19:35:06 +0530197 allocated_percentage: function(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530198 var sales_person = frappe.get_doc(cdt, cdn);
Anand Doshif3096132013-05-21 19:35:06 +0530199 if(sales_person.allocated_percentage) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530200
Anand Doshif3096132013-05-21 19:35:06 +0530201 sales_person.allocated_percentage = flt(sales_person.allocated_percentage,
202 precision("allocated_percentage", sales_person));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530203
Nabin Hait5690be12015-02-12 16:09:11 +0530204 sales_person.allocated_amount = flt(this.frm.doc.base_net_total *
Anand Doshibd67e872014-04-11 16:51:27 +0530205 sales_person.allocated_percentage / 100.0,
Anand Doshif3096132013-05-21 19:35:06 +0530206 precision("allocated_amount", sales_person));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530207 refresh_field(["allocated_amount"], sales_person);
Anand Doshif3096132013-05-21 19:35:06 +0530208
deepeshgarg00786152eb2018-09-25 19:08:16 +0530209 this.calculate_incentive(sales_person);
210 refresh_field(["allocated_percentage", "allocated_amount", "commission_rate","incentives"], sales_person.name,
Anand Doshif3096132013-05-21 19:35:06 +0530211 sales_person.parentfield);
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530212 }
deepeshgarg00786152eb2018-09-25 19:08:16 +0530213 },
214
215 sales_person: function(doc, cdt, cdn) {
216 var row = frappe.get_doc(cdt, cdn);
217 this.calculate_incentive(row);
218 refresh_field("incentives",row.name,row.parentfield);
Anand Doshif3096132013-05-21 19:35:06 +0530219 },
Anand Doshibd67e872014-04-11 16:51:27 +0530220
Anand Doshifc777182013-05-27 19:29:07 +0530221 warehouse: function(doc, cdt, cdn) {
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530222 var me = this;
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530223 var item = frappe.get_doc(cdt, cdn);
Shreyaa20157a2018-04-13 12:03:42 +0530224 if (item.serial_no && !item.batch_no) {
225 item.serial_no = null;
Anand Doshifc777182013-05-27 19:29:07 +0530226 }
Shreyaa20157a2018-04-13 12:03:42 +0530227 var has_batch_no;
228 frappe.db.get_value('Item', {'item_code': item.item_code}, 'has_batch_no', (r) => {
229 has_batch_no = r && r.has_batch_no;
230 if(item.item_code && item.warehouse) {
231 return this.frm.call({
232 method: "erpnext.stock.get_item_details.get_bin_details_and_serial_nos",
233 child: item,
234 args: {
235 item_code: item.item_code,
236 warehouse: item.warehouse,
Rohit Waghchaure6daab3c2019-09-19 17:01:26 +0530237 has_batch_no: has_batch_no || 0,
Shreyaa20157a2018-04-13 12:03:42 +0530238 stock_qty: item.stock_qty,
239 serial_no: item.serial_no || "",
240 },
241 callback:function(r){
242 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530243
244 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
245
Shreyaa20157a2018-04-13 12:03:42 +0530246 me.set_batch_number(cdt, cdn);
247 me.batch_no(doc, cdt, cdn);
248 }
249 }
250 });
251 }
252 })
Anand Doshifc777182013-05-27 19:29:07 +0530253 },
Anand Doshibd67e872014-04-11 16:51:27 +0530254
Anand Doshi33fe8672013-08-02 12:39:10 +0530255 toggle_editable_price_list_rate: function() {
Nabin Haitdd38a262014-12-26 13:15:21 +0530256 var df = frappe.meta.get_docfield(this.frm.doc.doctype + " Item", "price_list_rate", this.frm.doc.name);
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530257 var editable_price_list_rate = cint(frappe.defaults.get_default("editable_price_list_rate"));
Anand Doshibd67e872014-04-11 16:51:27 +0530258
Anand Doshi33fe8672013-08-02 12:39:10 +0530259 if(df && editable_price_list_rate) {
260 df.read_only = 0;
261 }
262 },
Anand Doshibd67e872014-04-11 16:51:27 +0530263
Anand Doshif3096132013-05-21 19:35:06 +0530264 calculate_commission: function() {
Anand Doshi923d41d2013-05-28 17:23:36 +0530265 if(this.frm.fields_dict.commission_rate) {
266 if(this.frm.doc.commission_rate > 100) {
Pratik Vyasb52618c2014-04-14 16:25:30 +0530267 var msg = __(frappe.meta.get_label(this.frm.doc.doctype, "commission_rate", this.frm.doc.name)) +
268 " " + __("cannot be greater than 100");
Faris Ansariab74ca72017-05-30 12:54:42 +0530269 frappe.msgprint(msg);
Anand Doshi923d41d2013-05-28 17:23:36 +0530270 throw msg;
271 }
Anand Doshibd67e872014-04-11 16:51:27 +0530272
Nabin Hait5690be12015-02-12 16:09:11 +0530273 this.frm.doc.total_commission = flt(this.frm.doc.base_net_total * this.frm.doc.commission_rate / 100.0,
Anand Doshi923d41d2013-05-28 17:23:36 +0530274 precision("total_commission"));
275 }
Anand Doshif3096132013-05-21 19:35:06 +0530276 },
Anand Doshibd67e872014-04-11 16:51:27 +0530277
Anand Doshif3096132013-05-21 19:35:06 +0530278 calculate_contribution: function() {
Anand Doshi2168e392013-05-23 19:25:08 +0530279 var me = this;
Rushabh Mehtaaa355af2014-03-26 18:24:30 +0530280 $.each(this.frm.doc.doctype.sales_team || [], function(i, sales_person) {
Faris Ansariab74ca72017-05-30 12:54:42 +0530281 frappe.model.round_floats_in(sales_person);
282 if(sales_person.allocated_percentage) {
283 sales_person.allocated_amount = flt(
284 me.frm.doc.base_net_total * sales_person.allocated_percentage / 100.0,
285 precision("allocated_amount", sales_person));
286 }
287 });
Anand Doshif3096132013-05-21 19:35:06 +0530288 },
Anand Doshibd67e872014-04-11 16:51:27 +0530289
deepeshgarg00786152eb2018-09-25 19:08:16 +0530290 calculate_incentive: function(row) {
291 if(row.allocated_amount)
292 {
293 row.incentives = flt(
294 row.allocated_amount * row.commission_rate / 100.0,
deepeshgarg007c3772f12018-09-26 15:55:43 +0530295 precision("incentives", row));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530296 }
297 },
298
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530299 batch_no: function(doc, cdt, cdn) {
300 var me = this;
301 var item = frappe.get_doc(cdt, cdn);
Shreyaa20157a2018-04-13 12:03:42 +0530302 item.serial_no = null;
303 var has_serial_no;
304 frappe.db.get_value('Item', {'item_code': item.item_code}, 'has_serial_no', (r) => {
305 has_serial_no = r && r.has_serial_no;
306 if(item.warehouse && item.item_code && item.batch_no) {
307 return this.frm.call({
308 method: "erpnext.stock.get_item_details.get_batch_qty_and_serial_no",
309 child: item,
310 args: {
311 "batch_no": item.batch_no,
312 "stock_qty": item.stock_qty,
313 "warehouse": item.warehouse,
314 "item_code": item.item_code,
315 "has_serial_no": has_serial_no
316 },
317 "fieldname": "actual_batch_qty"
318 });
319 }
320 })
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530321 },
322
Anand Doshi2168e392013-05-23 19:25:08 +0530323 set_dynamic_labels: function() {
Anand Doshi61a2f682013-06-21 17:55:31 +0530324 this._super();
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530325 this.set_product_bundle_help(this.frm.doc);
Nabin Hait0b157552014-06-24 17:02:45 +0530326 },
327
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530328 set_product_bundle_help: function(doc) {
Nabin Hait0b157552014-06-24 17:02:45 +0530329 if(!cur_frm.fields_dict.packing_list) return;
Nabin Haite7d15362014-12-25 16:01:55 +0530330 if ((doc.packed_items || []).length) {
Nabin Hait0b157552014-06-24 17:02:45 +0530331 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(true);
332
Faris Ansariab74ca72017-05-30 12:54:42 +0530333 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
334 var help_msg = "<div class='alert alert-warning'>" +
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530335 __("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.")+
Nabin Hait0b157552014-06-24 17:02:45 +0530336 "</div>";
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530337 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = help_msg;
Nabin Hait0b157552014-06-24 17:02:45 +0530338 }
339 } else {
340 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(false);
Faris Ansariab74ca72017-05-30 12:54:42 +0530341 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530342 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = '';
Nabin Hait0b157552014-06-24 17:02:45 +0530343 }
344 }
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530345 refresh_field('product_bundle_help');
Saurabheba7aa42015-12-16 09:57:59 +0530346 },
Anand Doshi01de9452016-01-26 16:22:50 +0530347
mbauskara52472c2016-03-05 15:10:25 +0530348 margin_rate_or_amount: function(doc, cdt, cdn) {
mbauskar1e9c1642016-01-18 16:21:25 +0530349 // calculated the revised total margin and rate on margin rate changes
Faris Ansariab74ca72017-05-30 12:54:42 +0530350 var item = locals[cdt][cdn];
Rohit Waghchaure6087fe12016-04-09 14:31:09 +0530351 this.apply_pricing_rule_on_item(item)
mbauskara52472c2016-03-05 15:10:25 +0530352 this.calculate_taxes_and_totals();
mbauskar1e9c1642016-01-18 16:21:25 +0530353 cur_frm.refresh_fields();
354 },
mbauskar1e428ae2016-01-19 19:52:22 +0530355
mbauskara52472c2016-03-05 15:10:25 +0530356 margin_type: function(doc, cdt, cdn){
mbauskar1e9c1642016-01-18 16:21:25 +0530357 // calculate the revised total margin and rate on margin type changes
Faris Ansariab74ca72017-05-30 12:54:42 +0530358 var item = locals[cdt][cdn];
Nabin Haite72c98d2017-05-24 09:01:44 +0530359 if(!item.margin_type) {
360 frappe.model.set_value(cdt, cdn, "margin_rate_or_amount", 0);
361 } else {
362 this.apply_pricing_rule_on_item(item, doc,cdt, cdn)
363 this.calculate_taxes_and_totals();
364 cur_frm.refresh_fields();
365 }
Nabin Hait879e1622017-08-21 08:28:55 +0530366 },
367
368 company_address: function() {
369 var me = this;
370 if(this.frm.doc.company_address) {
371 frappe.call({
372 method: "frappe.contacts.doctype.address.address.get_address_display",
373 args: {"address_dict": this.frm.doc.company_address },
374 callback: function(r) {
375 if(r.message) {
376 me.frm.set_value("company_address_display", r.message)
377 }
378 }
379 })
380 } else {
381 this.frm.set_value("company_address_display", "");
382 }
tundebabzyacccdb32017-11-23 08:35:15 +0100383 },
384
385 conversion_factor: function(doc, cdt, cdn, dont_fetch_price_list_rate) {
386 this._super(doc, cdt, cdn, dont_fetch_price_list_rate);
tundebabzyf9b5c742018-01-25 19:21:05 +0100387 if(frappe.meta.get_docfield(cdt, "stock_qty", cdn) &&
388 in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530389 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
390 this.set_batch_number(cdt, cdn);
391 }
tundebabzyacccdb32017-11-23 08:35:15 +0100392 },
393
394 qty: function(doc, cdt, cdn) {
Shreyaa20157a2018-04-13 12:03:42 +0530395 this._super(doc, cdt, cdn);
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530396
397 if(in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
398 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
399 this.set_batch_number(cdt, cdn);
400 }
tundebabzyacccdb32017-11-23 08:35:15 +0100401 },
402
403 /* Determine appropriate batch number and set it in the form.
404 * @param {string} cdt - Document Doctype
405 * @param {string} cdn - Document name
406 */
407 set_batch_number: function(cdt, cdn) {
408 const doc = frappe.get_doc(cdt, cdn);
rohitwaghchaure15f8fe02017-11-24 10:46:27 +0530409 if (doc && doc.has_batch_no) {
tundebabzyacccdb32017-11-23 08:35:15 +0100410 this._set_batch_number(doc);
411 }
412 },
413
414 _set_batch_number: function(doc) {
415 return frappe.call({
416 method: 'erpnext.stock.doctype.batch.batch.get_batch_no',
417 args: {'item_code': doc.item_code, 'warehouse': doc.warehouse, 'qty': flt(doc.qty) * flt(doc.conversion_factor)},
418 callback: function(r) {
419 if(r.message) {
420 frappe.model.set_value(doc.doctype, doc.name, 'batch_no', r.message);
tundebabzy8ae53ca2017-11-30 07:07:21 +0100421 } else {
422 frappe.model.set_value(doc.doctype, doc.name, 'batch_no', r.message);
tundebabzyacccdb32017-11-23 08:35:15 +0100423 }
424 }
425 });
426 },
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200427
428 update_auto_repeat_reference: function(doc) {
429 if (doc.auto_repeat) {
430 frappe.call({
Rucha Mahabal65a627c2019-07-17 13:50:32 +0530431 method:"frappe.automation.doctype.auto_repeat.auto_repeat.update_reference",
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530432 args:{
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200433 docname: doc.auto_repeat,
434 reference:doc.name
435 },
436 callback: function(r){
437 if (r.message=="success") {
438 frappe.show_alert({message:__("Auto repeat document updated"), indicator:'green'});
439 } else {
440 frappe.show_alert({message:__("An error occurred during the update process"), indicator:'red'});
441 }
442 }
443 })
444 }
445 }
Nabin Hait0b157552014-06-24 17:02:45 +0530446});
Anand Doshi43f087c2014-08-26 14:25:53 +0530447
Neil Trini Lasrado6e343e22016-03-09 17:02:59 +0530448frappe.ui.form.on(cur_frm.doctype,"project", function(frm) {
Nabin Hait10b155a2014-10-23 13:18:59 +0530449 if(in_list(["Delivery Note", "Sales Invoice"], frm.doc.doctype)) {
Rushabh Mehta532eedf2016-05-19 18:22:49 +0530450 if(frm.doc.project) {
451 frappe.call({
452 method:'erpnext.projects.doctype.project.project.get_cost_center_name' ,
453 args: { project: frm.doc.project },
454 callback: function(r, rt) {
455 if(!r.exc) {
456 $.each(frm.doc["items"] || [], function(i, row) {
457 if(r.message) {
458 frappe.model.set_value(row.doctype, row.name, "cost_center", r.message);
Faris Ansariab74ca72017-05-30 12:54:42 +0530459 frappe.msgprint(__("Cost Center For Item with Item Code '"+row.item_name+"' has been Changed to "+ r.message));
Rushabh Mehta532eedf2016-05-19 18:22:49 +0530460 }
461 })
462 }
Nabin Hait10b155a2014-10-23 13:18:59 +0530463 }
Rushabh Mehta532eedf2016-05-19 18:22:49 +0530464 })
465 }
Nabin Hait10b155a2014-10-23 13:18:59 +0530466 }
Nabin Haite45ec662018-08-01 17:44:34 +0530467})
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530468
469frappe.ui.form.on(cur_frm.doctype, {
470 set_as_lost_dialog: function(frm) {
471 var dialog = new frappe.ui.Dialog({
472 title: __("Set as Lost"),
473 fields: [
474 {"fieldtype": "Table MultiSelect",
475 "label": __("Lost Reasons"),
476 "fieldname": "lost_reason",
477 "options": "Lost Reason Detail",
478 "reqd": 1},
479
480 {"fieldtype": "Text", "label": __("Detailed Reason"), "fieldname": "detailed_reason"},
481 ],
482 primary_action: function() {
483 var values = dialog.get_values();
484 var reasons = values["lost_reason"];
485 var detailed_reason = values["detailed_reason"];
486
487 frm.call({
488 doc: frm.doc,
489 method: 'declare_enquiry_lost',
490 args: {
491 'lost_reasons_list': reasons,
492 'detailed_reason': detailed_reason
493 },
494 callback: function(r) {
495 dialog.hide();
496 frm.reload_doc();
497 },
498 });
499 refresh_field("lost_reason");
500 },
501 primary_action_label: __('Declare Lost')
502 });
503
504 dialog.show();
505 }
506})