blob: 00efb4f2198f9b3d49da07bd5a56fc4189d1f6c1 [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) {
Nabin Hait593242f2019-04-05 19:35:02 +0530154 var item = frappe.get_doc(cdt, cdn);
155 item.discount_percentage = 0.0;
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530156 this.apply_discount_on_item(doc, cdt, cdn, 'discount_amount');
157 },
158
159 apply_discount_on_item: function(doc, cdt, cdn, field) {
160 var item = frappe.get_doc(cdt, cdn);
Nabin Haita7f757a2014-02-10 17:54:04 +0530161 if(!item.price_list_rate) {
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530162 item[field] = 0.0;
Anand Doshi923d41d2013-05-28 17:23:36 +0530163 } else {
Nabin Haita7f757a2014-02-10 17:54:04 +0530164 this.price_list_rate(doc, cdt, cdn);
Anand Doshi923d41d2013-05-28 17:23:36 +0530165 }
Saurabh5ada14b2016-02-26 18:02:55 +0530166 this.set_gross_profit(item);
Anand Doshif3096132013-05-21 19:35:06 +0530167 },
Anand Doshibd67e872014-04-11 16:51:27 +0530168
Anand Doshif3096132013-05-21 19:35:06 +0530169 commission_rate: function() {
170 this.calculate_commission();
171 refresh_field("total_commission");
172 },
Anand Doshibd67e872014-04-11 16:51:27 +0530173
Anand Doshif3096132013-05-21 19:35:06 +0530174 total_commission: function() {
Nabin Hait5690be12015-02-12 16:09:11 +0530175 if(this.frm.doc.base_net_total) {
176 frappe.model.round_floats_in(this.frm.doc, ["base_net_total", "total_commission"]);
Anand Doshibd67e872014-04-11 16:51:27 +0530177
Nabin Hait5690be12015-02-12 16:09:11 +0530178 if(this.frm.doc.base_net_total < this.frm.doc.total_commission) {
Pratik Vyasb52618c2014-04-14 16:25:30 +0530179 var msg = (__("[Error]") + " " +
180 __(frappe.meta.get_label(this.frm.doc.doctype, "total_commission",
Anand Doshibd67e872014-04-11 16:51:27 +0530181 this.frm.doc.name)) + " > " +
Nabin Hait5690be12015-02-12 16:09:11 +0530182 __(frappe.meta.get_label(this.frm.doc.doctype, "base_net_total", this.frm.doc.name)));
Faris Ansariab74ca72017-05-30 12:54:42 +0530183 frappe.msgprint(msg);
Anand Doshif3096132013-05-21 19:35:06 +0530184 throw msg;
185 }
Anand Doshibd67e872014-04-11 16:51:27 +0530186
187 this.frm.set_value("commission_rate",
Nabin Hait5690be12015-02-12 16:09:11 +0530188 flt(this.frm.doc.total_commission * 100.0 / this.frm.doc.base_net_total));
Anand Doshif3096132013-05-21 19:35:06 +0530189 }
190 },
Anand Doshibd67e872014-04-11 16:51:27 +0530191
Anand Doshif3096132013-05-21 19:35:06 +0530192 allocated_percentage: function(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530193 var sales_person = frappe.get_doc(cdt, cdn);
Anand Doshif3096132013-05-21 19:35:06 +0530194 if(sales_person.allocated_percentage) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530195
Anand Doshif3096132013-05-21 19:35:06 +0530196 sales_person.allocated_percentage = flt(sales_person.allocated_percentage,
197 precision("allocated_percentage", sales_person));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530198
Nabin Hait5690be12015-02-12 16:09:11 +0530199 sales_person.allocated_amount = flt(this.frm.doc.base_net_total *
Anand Doshibd67e872014-04-11 16:51:27 +0530200 sales_person.allocated_percentage / 100.0,
Anand Doshif3096132013-05-21 19:35:06 +0530201 precision("allocated_amount", sales_person));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530202 refresh_field(["allocated_amount"], sales_person);
Anand Doshif3096132013-05-21 19:35:06 +0530203
deepeshgarg00786152eb2018-09-25 19:08:16 +0530204 this.calculate_incentive(sales_person);
205 refresh_field(["allocated_percentage", "allocated_amount", "commission_rate","incentives"], sales_person.name,
Anand Doshif3096132013-05-21 19:35:06 +0530206 sales_person.parentfield);
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530207 }
deepeshgarg00786152eb2018-09-25 19:08:16 +0530208 },
209
210 sales_person: function(doc, cdt, cdn) {
211 var row = frappe.get_doc(cdt, cdn);
212 this.calculate_incentive(row);
213 refresh_field("incentives",row.name,row.parentfield);
Anand Doshif3096132013-05-21 19:35:06 +0530214 },
Anand Doshibd67e872014-04-11 16:51:27 +0530215
Anand Doshifc777182013-05-27 19:29:07 +0530216 warehouse: function(doc, cdt, cdn) {
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530217 var me = this;
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530218 var item = frappe.get_doc(cdt, cdn);
Shreyaa20157a2018-04-13 12:03:42 +0530219 if (item.serial_no && !item.batch_no) {
220 item.serial_no = null;
Anand Doshifc777182013-05-27 19:29:07 +0530221 }
Shreyaa20157a2018-04-13 12:03:42 +0530222 var has_batch_no;
223 frappe.db.get_value('Item', {'item_code': item.item_code}, 'has_batch_no', (r) => {
224 has_batch_no = r && r.has_batch_no;
225 if(item.item_code && item.warehouse) {
226 return this.frm.call({
227 method: "erpnext.stock.get_item_details.get_bin_details_and_serial_nos",
228 child: item,
229 args: {
230 item_code: item.item_code,
231 warehouse: item.warehouse,
232 has_batch_no: has_batch_no,
233 stock_qty: item.stock_qty,
234 serial_no: item.serial_no || "",
235 },
236 callback:function(r){
237 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530238
239 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
240
Shreyaa20157a2018-04-13 12:03:42 +0530241 me.set_batch_number(cdt, cdn);
242 me.batch_no(doc, cdt, cdn);
243 }
244 }
245 });
246 }
247 })
Anand Doshifc777182013-05-27 19:29:07 +0530248 },
Anand Doshibd67e872014-04-11 16:51:27 +0530249
Anand Doshi33fe8672013-08-02 12:39:10 +0530250 toggle_editable_price_list_rate: function() {
Nabin Haitdd38a262014-12-26 13:15:21 +0530251 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 +0530252 var editable_price_list_rate = cint(frappe.defaults.get_default("editable_price_list_rate"));
Anand Doshibd67e872014-04-11 16:51:27 +0530253
Anand Doshi33fe8672013-08-02 12:39:10 +0530254 if(df && editable_price_list_rate) {
255 df.read_only = 0;
256 }
257 },
Anand Doshibd67e872014-04-11 16:51:27 +0530258
Anand Doshif3096132013-05-21 19:35:06 +0530259 calculate_commission: function() {
Anand Doshi923d41d2013-05-28 17:23:36 +0530260 if(this.frm.fields_dict.commission_rate) {
261 if(this.frm.doc.commission_rate > 100) {
Pratik Vyasb52618c2014-04-14 16:25:30 +0530262 var msg = __(frappe.meta.get_label(this.frm.doc.doctype, "commission_rate", this.frm.doc.name)) +
263 " " + __("cannot be greater than 100");
Faris Ansariab74ca72017-05-30 12:54:42 +0530264 frappe.msgprint(msg);
Anand Doshi923d41d2013-05-28 17:23:36 +0530265 throw msg;
266 }
Anand Doshibd67e872014-04-11 16:51:27 +0530267
Nabin Hait5690be12015-02-12 16:09:11 +0530268 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 +0530269 precision("total_commission"));
270 }
Anand Doshif3096132013-05-21 19:35:06 +0530271 },
Anand Doshibd67e872014-04-11 16:51:27 +0530272
Anand Doshif3096132013-05-21 19:35:06 +0530273 calculate_contribution: function() {
Anand Doshi2168e392013-05-23 19:25:08 +0530274 var me = this;
Rushabh Mehtaaa355af2014-03-26 18:24:30 +0530275 $.each(this.frm.doc.doctype.sales_team || [], function(i, sales_person) {
Faris Ansariab74ca72017-05-30 12:54:42 +0530276 frappe.model.round_floats_in(sales_person);
277 if(sales_person.allocated_percentage) {
278 sales_person.allocated_amount = flt(
279 me.frm.doc.base_net_total * sales_person.allocated_percentage / 100.0,
280 precision("allocated_amount", sales_person));
281 }
282 });
Anand Doshif3096132013-05-21 19:35:06 +0530283 },
Anand Doshibd67e872014-04-11 16:51:27 +0530284
deepeshgarg00786152eb2018-09-25 19:08:16 +0530285 calculate_incentive: function(row) {
286 if(row.allocated_amount)
287 {
288 row.incentives = flt(
289 row.allocated_amount * row.commission_rate / 100.0,
deepeshgarg007c3772f12018-09-26 15:55:43 +0530290 precision("incentives", row));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530291 }
292 },
293
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530294 batch_no: function(doc, cdt, cdn) {
295 var me = this;
296 var item = frappe.get_doc(cdt, cdn);
Shreyaa20157a2018-04-13 12:03:42 +0530297 item.serial_no = null;
298 var has_serial_no;
299 frappe.db.get_value('Item', {'item_code': item.item_code}, 'has_serial_no', (r) => {
300 has_serial_no = r && r.has_serial_no;
301 if(item.warehouse && item.item_code && item.batch_no) {
302 return this.frm.call({
303 method: "erpnext.stock.get_item_details.get_batch_qty_and_serial_no",
304 child: item,
305 args: {
306 "batch_no": item.batch_no,
307 "stock_qty": item.stock_qty,
308 "warehouse": item.warehouse,
309 "item_code": item.item_code,
310 "has_serial_no": has_serial_no
311 },
312 "fieldname": "actual_batch_qty"
313 });
314 }
315 })
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530316 },
317
Anand Doshi2168e392013-05-23 19:25:08 +0530318 set_dynamic_labels: function() {
Anand Doshi61a2f682013-06-21 17:55:31 +0530319 this._super();
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530320 this.set_product_bundle_help(this.frm.doc);
Nabin Hait0b157552014-06-24 17:02:45 +0530321 },
322
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530323 set_product_bundle_help: function(doc) {
Nabin Hait0b157552014-06-24 17:02:45 +0530324 if(!cur_frm.fields_dict.packing_list) return;
Nabin Haite7d15362014-12-25 16:01:55 +0530325 if ((doc.packed_items || []).length) {
Nabin Hait0b157552014-06-24 17:02:45 +0530326 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(true);
327
Faris Ansariab74ca72017-05-30 12:54:42 +0530328 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
329 var help_msg = "<div class='alert alert-warning'>" +
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530330 __("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 +0530331 "</div>";
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530332 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = help_msg;
Nabin Hait0b157552014-06-24 17:02:45 +0530333 }
334 } else {
335 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(false);
Faris Ansariab74ca72017-05-30 12:54:42 +0530336 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530337 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = '';
Nabin Hait0b157552014-06-24 17:02:45 +0530338 }
339 }
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530340 refresh_field('product_bundle_help');
Saurabheba7aa42015-12-16 09:57:59 +0530341 },
Anand Doshi01de9452016-01-26 16:22:50 +0530342
mbauskara52472c2016-03-05 15:10:25 +0530343 margin_rate_or_amount: function(doc, cdt, cdn) {
mbauskar1e9c1642016-01-18 16:21:25 +0530344 // calculated the revised total margin and rate on margin rate changes
Faris Ansariab74ca72017-05-30 12:54:42 +0530345 var item = locals[cdt][cdn];
Rohit Waghchaure6087fe12016-04-09 14:31:09 +0530346 this.apply_pricing_rule_on_item(item)
mbauskara52472c2016-03-05 15:10:25 +0530347 this.calculate_taxes_and_totals();
mbauskar1e9c1642016-01-18 16:21:25 +0530348 cur_frm.refresh_fields();
349 },
mbauskar1e428ae2016-01-19 19:52:22 +0530350
mbauskara52472c2016-03-05 15:10:25 +0530351 margin_type: function(doc, cdt, cdn){
mbauskar1e9c1642016-01-18 16:21:25 +0530352 // calculate the revised total margin and rate on margin type changes
Faris Ansariab74ca72017-05-30 12:54:42 +0530353 var item = locals[cdt][cdn];
Nabin Haite72c98d2017-05-24 09:01:44 +0530354 if(!item.margin_type) {
355 frappe.model.set_value(cdt, cdn, "margin_rate_or_amount", 0);
356 } else {
357 this.apply_pricing_rule_on_item(item, doc,cdt, cdn)
358 this.calculate_taxes_and_totals();
359 cur_frm.refresh_fields();
360 }
Nabin Hait879e1622017-08-21 08:28:55 +0530361 },
362
363 company_address: function() {
364 var me = this;
365 if(this.frm.doc.company_address) {
366 frappe.call({
367 method: "frappe.contacts.doctype.address.address.get_address_display",
368 args: {"address_dict": this.frm.doc.company_address },
369 callback: function(r) {
370 if(r.message) {
371 me.frm.set_value("company_address_display", r.message)
372 }
373 }
374 })
375 } else {
376 this.frm.set_value("company_address_display", "");
377 }
tundebabzyacccdb32017-11-23 08:35:15 +0100378 },
379
380 conversion_factor: function(doc, cdt, cdn, dont_fetch_price_list_rate) {
381 this._super(doc, cdt, cdn, dont_fetch_price_list_rate);
tundebabzyf9b5c742018-01-25 19:21:05 +0100382 if(frappe.meta.get_docfield(cdt, "stock_qty", cdn) &&
383 in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530384 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
385 this.set_batch_number(cdt, cdn);
386 }
tundebabzyacccdb32017-11-23 08:35:15 +0100387 },
388
389 qty: function(doc, cdt, cdn) {
Shreyaa20157a2018-04-13 12:03:42 +0530390 this._super(doc, cdt, cdn);
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530391
392 if(in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
393 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
394 this.set_batch_number(cdt, cdn);
395 }
tundebabzyacccdb32017-11-23 08:35:15 +0100396 },
397
398 /* Determine appropriate batch number and set it in the form.
399 * @param {string} cdt - Document Doctype
400 * @param {string} cdn - Document name
401 */
402 set_batch_number: function(cdt, cdn) {
403 const doc = frappe.get_doc(cdt, cdn);
rohitwaghchaure15f8fe02017-11-24 10:46:27 +0530404 if (doc && doc.has_batch_no) {
tundebabzyacccdb32017-11-23 08:35:15 +0100405 this._set_batch_number(doc);
406 }
407 },
408
409 _set_batch_number: function(doc) {
410 return frappe.call({
411 method: 'erpnext.stock.doctype.batch.batch.get_batch_no',
412 args: {'item_code': doc.item_code, 'warehouse': doc.warehouse, 'qty': flt(doc.qty) * flt(doc.conversion_factor)},
413 callback: function(r) {
414 if(r.message) {
415 frappe.model.set_value(doc.doctype, doc.name, 'batch_no', r.message);
tundebabzy8ae53ca2017-11-30 07:07:21 +0100416 } else {
417 frappe.model.set_value(doc.doctype, doc.name, 'batch_no', r.message);
tundebabzyacccdb32017-11-23 08:35:15 +0100418 }
419 }
420 });
421 },
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200422
423 update_auto_repeat_reference: function(doc) {
424 if (doc.auto_repeat) {
425 frappe.call({
426 method:"frappe.desk.doctype.auto_repeat.auto_repeat.update_reference",
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530427 args:{
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200428 docname: doc.auto_repeat,
429 reference:doc.name
430 },
431 callback: function(r){
432 if (r.message=="success") {
433 frappe.show_alert({message:__("Auto repeat document updated"), indicator:'green'});
434 } else {
435 frappe.show_alert({message:__("An error occurred during the update process"), indicator:'red'});
436 }
437 }
438 })
439 }
440 }
Nabin Hait0b157552014-06-24 17:02:45 +0530441});
Anand Doshi43f087c2014-08-26 14:25:53 +0530442
Neil Trini Lasrado6e343e22016-03-09 17:02:59 +0530443frappe.ui.form.on(cur_frm.doctype,"project", function(frm) {
Nabin Hait10b155a2014-10-23 13:18:59 +0530444 if(in_list(["Delivery Note", "Sales Invoice"], frm.doc.doctype)) {
Rushabh Mehta532eedf2016-05-19 18:22:49 +0530445 if(frm.doc.project) {
446 frappe.call({
447 method:'erpnext.projects.doctype.project.project.get_cost_center_name' ,
448 args: { project: frm.doc.project },
449 callback: function(r, rt) {
450 if(!r.exc) {
451 $.each(frm.doc["items"] || [], function(i, row) {
452 if(r.message) {
453 frappe.model.set_value(row.doctype, row.name, "cost_center", r.message);
Faris Ansariab74ca72017-05-30 12:54:42 +0530454 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 +0530455 }
456 })
457 }
Nabin Hait10b155a2014-10-23 13:18:59 +0530458 }
Rushabh Mehta532eedf2016-05-19 18:22:49 +0530459 })
460 }
Nabin Hait10b155a2014-10-23 13:18:59 +0530461 }
Nabin Haite45ec662018-08-01 17:44:34 +0530462})
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530463
464frappe.ui.form.on(cur_frm.doctype, {
465 set_as_lost_dialog: function(frm) {
466 var dialog = new frappe.ui.Dialog({
467 title: __("Set as Lost"),
468 fields: [
469 {"fieldtype": "Table MultiSelect",
470 "label": __("Lost Reasons"),
471 "fieldname": "lost_reason",
472 "options": "Lost Reason Detail",
473 "reqd": 1},
474
475 {"fieldtype": "Text", "label": __("Detailed Reason"), "fieldname": "detailed_reason"},
476 ],
477 primary_action: function() {
478 var values = dialog.get_values();
479 var reasons = values["lost_reason"];
480 var detailed_reason = values["detailed_reason"];
481
482 frm.call({
483 doc: frm.doc,
484 method: 'declare_enquiry_lost',
485 args: {
486 'lost_reasons_list': reasons,
487 'detailed_reason': detailed_reason
488 },
489 callback: function(r) {
490 dialog.hide();
491 frm.reload_doc();
492 },
493 });
494 refresh_field("lost_reason");
495 },
496 primary_action_label: __('Declare Lost')
497 });
498
499 dialog.show();
500 }
501})