blob: 965d2b0219c7e0cd0bfd9c42a993170f50aa18a2 [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
Nabin Haitdd38a262014-12-26 13:15:21 +053062 if(!this.frm.fields_dict["items"]) {
Anand Doshi99100a42013-07-04 17:13:53 +053063 return;
64 }
Anand Doshibd67e872014-04-11 16:51:27 +053065
Nabin Haitdd38a262014-12-26 13:15:21 +053066 if(this.frm.fields_dict["items"].grid.get_field('item_code')) {
67 this.frm.set_query("item_code", "items", function() {
Anand Doshi9b496142013-07-11 19:13:58 +053068 return {
Rushabh Mehtad973c162016-08-16 11:32:08 +053069 query: "erpnext.controllers.queries.item_query",
70 filters: {'is_sales_item': 1}
Anand Doshi9b496142013-07-11 19:13:58 +053071 }
Anand Doshi99100a42013-07-04 17:13:53 +053072 });
73 }
Anand Doshibd67e872014-04-11 16:51:27 +053074
Rushabh Mehta698c0402016-11-22 23:16:40 +053075 if(this.frm.fields_dict["packed_items"] &&
76 this.frm.fields_dict["packed_items"].grid.get_field('batch_no')) {
Rohit Waghchauree887e922016-11-18 12:16:22 +053077 this.frm.set_query("batch_no", "packed_items", function(doc, cdt, cdn) {
78 return me.set_query_for_batch(doc, cdt, cdn)
79 });
80 }
Rohit Waghchauree887e922016-11-18 12:16:22 +053081 },
82
Anand Doshic4a54fe2013-08-01 18:19:51 +053083 refresh: function() {
84 this._super();
Rushabh Mehtab92087c2017-01-13 18:53:11 +053085
Rushabh Mehta8d39fd92017-01-16 13:06:07 +053086 frappe.dynamic_link = {doc: this.frm.doc, fieldname: 'customer', doctype: 'Customer'}
Rushabh Mehtab92087c2017-01-13 18:53:11 +053087
Anand Doshibd67e872014-04-11 16:51:27 +053088 this.frm.toggle_display("customer_name",
Akhilesh Darjee5ce1b8b2013-12-09 16:29:04 +053089 (this.frm.doc.customer_name && this.frm.doc.customer_name!==this.frm.doc.customer));
Nabin Haite7d15362014-12-25 16:01:55 +053090 if(this.frm.fields_dict.packed_items) {
91 var packing_list_exists = (this.frm.doc.packed_items || []).length;
Anand Doshic4a54fe2013-08-01 18:19:51 +053092 this.frm.toggle_display("packing_list", packing_list_exists ? true : false);
93 }
Nabin Hait2029ea92015-04-16 17:55:35 +053094 this.toggle_editable_price_list_rate();
Rushabh Mehta8aded132013-07-04 12:50:52 +053095 },
Anand Doshibd67e872014-04-11 16:51:27 +053096
Anand Doshi3543f302013-05-24 19:25:01 +053097 customer: function() {
Nabin Haita3dd72a2014-05-28 12:49:20 +053098 var me = this;
Nabin Haite45ec662018-08-01 17:44:34 +053099 erpnext.utils.get_party_details(this.frm, null, null, function() {
100 me.apply_price_list();
101 });
Anand Doshi3543f302013-05-24 19:25:01 +0530102 },
Anand Doshibd67e872014-04-11 16:51:27 +0530103
Nabin Haita279d782013-07-15 13:04:33 +0530104 customer_address: function() {
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530105 erpnext.utils.get_address_display(this.frm, "customer_address");
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500106 erpnext.utils.set_taxes_from_address(this.frm, "customer_address", "customer_address", "shipping_address_name");
Nabin Haita279d782013-07-15 13:04:33 +0530107 },
Anand Doshibd67e872014-04-11 16:51:27 +0530108
Nabin Hait9d1f0772014-02-19 17:43:24 +0530109 shipping_address_name: function() {
110 erpnext.utils.get_address_display(this.frm, "shipping_address_name", "shipping_address");
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500111 erpnext.utils.set_taxes_from_address(this.frm, "shipping_address_name", "customer_address", "shipping_address_name");
Nabin Hait9d1f0772014-02-19 17:43:24 +0530112 },
Anand Doshibd67e872014-04-11 16:51:27 +0530113
Nabin Haita3dd72a2014-05-28 12:49:20 +0530114 sales_partner: function() {
115 this.apply_pricing_rule();
116 },
117
118 campaign: function() {
119 this.apply_pricing_rule();
120 },
121
Rushabh Mehta4a404e92013-08-09 18:11:35 +0530122 selling_price_list: function() {
Anand Doshidffec8f2014-07-01 17:45:15 +0530123 this.apply_price_list();
rohitwaghchaure8e675eb2018-02-13 17:11:06 +0530124 this.set_dynamic_labels();
Anand Doshif3096132013-05-21 19:35:06 +0530125 },
Anand Doshibd67e872014-04-11 16:51:27 +0530126
Nabin Haita7f757a2014-02-10 17:54:04 +0530127 price_list_rate: function(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530128 var item = frappe.get_doc(cdt, cdn);
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530129 frappe.model.round_floats_in(item, ["price_list_rate", "discount_percentage"]);
Anand Doshibd67e872014-04-11 16:51:27 +0530130
mbauskara52472c2016-03-05 15:10:25 +0530131 // check if child doctype is Sales Order Item/Qutation Item and calculate the rate
132 if(in_list(["Quotation Item", "Sales Order Item", "Delivery Note Item", "Sales Invoice Item"]), cdt)
Rohit Waghchaure6087fe12016-04-09 14:31:09 +0530133 this.apply_pricing_rule_on_item(item);
mbauskara52472c2016-03-05 15:10:25 +0530134 else
135 item.rate = flt(item.price_list_rate * (1 - item.discount_percentage / 100.0),
136 precision("rate", item));
137
Anand Doshif3096132013-05-21 19:35:06 +0530138 this.calculate_taxes_and_totals();
139 },
Anand Doshibd67e872014-04-11 16:51:27 +0530140
Nabin Haita7f757a2014-02-10 17:54:04 +0530141 discount_percentage: function(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530142 var item = frappe.get_doc(cdt, cdn);
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530143 item.discount_amount = 0.0;
144 this.apply_discount_on_item(doc, cdt, cdn, 'discount_percentage');
145 },
146
147 discount_amount: function(doc, cdt, cdn) {
148 this.apply_discount_on_item(doc, cdt, cdn, 'discount_amount');
149 },
150
151 apply_discount_on_item: function(doc, cdt, cdn, field) {
152 var item = frappe.get_doc(cdt, cdn);
Nabin Haita7f757a2014-02-10 17:54:04 +0530153 if(!item.price_list_rate) {
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530154 item[field] = 0.0;
Anand Doshi923d41d2013-05-28 17:23:36 +0530155 } else {
Nabin Haita7f757a2014-02-10 17:54:04 +0530156 this.price_list_rate(doc, cdt, cdn);
Anand Doshi923d41d2013-05-28 17:23:36 +0530157 }
Saurabh5ada14b2016-02-26 18:02:55 +0530158 this.set_gross_profit(item);
Anand Doshif3096132013-05-21 19:35:06 +0530159 },
Anand Doshibd67e872014-04-11 16:51:27 +0530160
Anand Doshif3096132013-05-21 19:35:06 +0530161 commission_rate: function() {
162 this.calculate_commission();
163 refresh_field("total_commission");
164 },
Anand Doshibd67e872014-04-11 16:51:27 +0530165
Anand Doshif3096132013-05-21 19:35:06 +0530166 total_commission: function() {
Nabin Hait5690be12015-02-12 16:09:11 +0530167 if(this.frm.doc.base_net_total) {
168 frappe.model.round_floats_in(this.frm.doc, ["base_net_total", "total_commission"]);
Anand Doshibd67e872014-04-11 16:51:27 +0530169
Nabin Hait5690be12015-02-12 16:09:11 +0530170 if(this.frm.doc.base_net_total < this.frm.doc.total_commission) {
Pratik Vyasb52618c2014-04-14 16:25:30 +0530171 var msg = (__("[Error]") + " " +
172 __(frappe.meta.get_label(this.frm.doc.doctype, "total_commission",
Anand Doshibd67e872014-04-11 16:51:27 +0530173 this.frm.doc.name)) + " > " +
Nabin Hait5690be12015-02-12 16:09:11 +0530174 __(frappe.meta.get_label(this.frm.doc.doctype, "base_net_total", this.frm.doc.name)));
Faris Ansariab74ca72017-05-30 12:54:42 +0530175 frappe.msgprint(msg);
Anand Doshif3096132013-05-21 19:35:06 +0530176 throw msg;
177 }
Anand Doshibd67e872014-04-11 16:51:27 +0530178
179 this.frm.set_value("commission_rate",
Nabin Hait5690be12015-02-12 16:09:11 +0530180 flt(this.frm.doc.total_commission * 100.0 / this.frm.doc.base_net_total));
Anand Doshif3096132013-05-21 19:35:06 +0530181 }
182 },
Anand Doshibd67e872014-04-11 16:51:27 +0530183
Anand Doshif3096132013-05-21 19:35:06 +0530184 allocated_percentage: function(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530185 var sales_person = frappe.get_doc(cdt, cdn);
Anand Doshif3096132013-05-21 19:35:06 +0530186 if(sales_person.allocated_percentage) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530187
Anand Doshif3096132013-05-21 19:35:06 +0530188 sales_person.allocated_percentage = flt(sales_person.allocated_percentage,
189 precision("allocated_percentage", sales_person));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530190
Nabin Hait5690be12015-02-12 16:09:11 +0530191 sales_person.allocated_amount = flt(this.frm.doc.base_net_total *
Anand Doshibd67e872014-04-11 16:51:27 +0530192 sales_person.allocated_percentage / 100.0,
Anand Doshif3096132013-05-21 19:35:06 +0530193 precision("allocated_amount", sales_person));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530194 refresh_field(["allocated_amount"], sales_person);
Anand Doshif3096132013-05-21 19:35:06 +0530195
deepeshgarg00786152eb2018-09-25 19:08:16 +0530196 this.calculate_incentive(sales_person);
197 refresh_field(["allocated_percentage", "allocated_amount", "commission_rate","incentives"], sales_person.name,
Anand Doshif3096132013-05-21 19:35:06 +0530198 sales_person.parentfield);
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530199 }
deepeshgarg00786152eb2018-09-25 19:08:16 +0530200 },
201
202 sales_person: function(doc, cdt, cdn) {
203 var row = frappe.get_doc(cdt, cdn);
204 this.calculate_incentive(row);
205 refresh_field("incentives",row.name,row.parentfield);
Anand Doshif3096132013-05-21 19:35:06 +0530206 },
Anand Doshibd67e872014-04-11 16:51:27 +0530207
Anand Doshifc777182013-05-27 19:29:07 +0530208 warehouse: function(doc, cdt, cdn) {
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530209 var me = this;
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530210 var item = frappe.get_doc(cdt, cdn);
Shreyaa20157a2018-04-13 12:03:42 +0530211 if (item.serial_no && !item.batch_no) {
212 item.serial_no = null;
Anand Doshifc777182013-05-27 19:29:07 +0530213 }
Shreyaa20157a2018-04-13 12:03:42 +0530214 var has_batch_no;
215 frappe.db.get_value('Item', {'item_code': item.item_code}, 'has_batch_no', (r) => {
216 has_batch_no = r && r.has_batch_no;
217 if(item.item_code && item.warehouse) {
218 return this.frm.call({
219 method: "erpnext.stock.get_item_details.get_bin_details_and_serial_nos",
220 child: item,
221 args: {
222 item_code: item.item_code,
223 warehouse: item.warehouse,
224 has_batch_no: has_batch_no,
225 stock_qty: item.stock_qty,
226 serial_no: item.serial_no || "",
227 },
228 callback:function(r){
229 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
230 me.set_batch_number(cdt, cdn);
231 me.batch_no(doc, cdt, cdn);
232 }
233 }
234 });
235 }
236 })
Anand Doshifc777182013-05-27 19:29:07 +0530237 },
Anand Doshibd67e872014-04-11 16:51:27 +0530238
Anand Doshi33fe8672013-08-02 12:39:10 +0530239 toggle_editable_price_list_rate: function() {
Nabin Haitdd38a262014-12-26 13:15:21 +0530240 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 +0530241 var editable_price_list_rate = cint(frappe.defaults.get_default("editable_price_list_rate"));
Anand Doshibd67e872014-04-11 16:51:27 +0530242
Anand Doshi33fe8672013-08-02 12:39:10 +0530243 if(df && editable_price_list_rate) {
244 df.read_only = 0;
245 }
246 },
Anand Doshibd67e872014-04-11 16:51:27 +0530247
Anand Doshif3096132013-05-21 19:35:06 +0530248 calculate_commission: function() {
Anand Doshi923d41d2013-05-28 17:23:36 +0530249 if(this.frm.fields_dict.commission_rate) {
250 if(this.frm.doc.commission_rate > 100) {
Pratik Vyasb52618c2014-04-14 16:25:30 +0530251 var msg = __(frappe.meta.get_label(this.frm.doc.doctype, "commission_rate", this.frm.doc.name)) +
252 " " + __("cannot be greater than 100");
Faris Ansariab74ca72017-05-30 12:54:42 +0530253 frappe.msgprint(msg);
Anand Doshi923d41d2013-05-28 17:23:36 +0530254 throw msg;
255 }
Anand Doshibd67e872014-04-11 16:51:27 +0530256
Nabin Hait5690be12015-02-12 16:09:11 +0530257 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 +0530258 precision("total_commission"));
259 }
Anand Doshif3096132013-05-21 19:35:06 +0530260 },
Anand Doshibd67e872014-04-11 16:51:27 +0530261
Anand Doshif3096132013-05-21 19:35:06 +0530262 calculate_contribution: function() {
Anand Doshi2168e392013-05-23 19:25:08 +0530263 var me = this;
Rushabh Mehtaaa355af2014-03-26 18:24:30 +0530264 $.each(this.frm.doc.doctype.sales_team || [], function(i, sales_person) {
Faris Ansariab74ca72017-05-30 12:54:42 +0530265 frappe.model.round_floats_in(sales_person);
266 if(sales_person.allocated_percentage) {
267 sales_person.allocated_amount = flt(
268 me.frm.doc.base_net_total * sales_person.allocated_percentage / 100.0,
269 precision("allocated_amount", sales_person));
270 }
271 });
Anand Doshif3096132013-05-21 19:35:06 +0530272 },
Anand Doshibd67e872014-04-11 16:51:27 +0530273
deepeshgarg00786152eb2018-09-25 19:08:16 +0530274 calculate_incentive: function(row) {
275 if(row.allocated_amount)
276 {
277 row.incentives = flt(
278 row.allocated_amount * row.commission_rate / 100.0,
deepeshgarg007c3772f12018-09-26 15:55:43 +0530279 precision("incentives", row));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530280 }
281 },
282
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530283 batch_no: function(doc, cdt, cdn) {
284 var me = this;
285 var item = frappe.get_doc(cdt, cdn);
Shreyaa20157a2018-04-13 12:03:42 +0530286 item.serial_no = null;
287 var has_serial_no;
288 frappe.db.get_value('Item', {'item_code': item.item_code}, 'has_serial_no', (r) => {
289 has_serial_no = r && r.has_serial_no;
290 if(item.warehouse && item.item_code && item.batch_no) {
291 return this.frm.call({
292 method: "erpnext.stock.get_item_details.get_batch_qty_and_serial_no",
293 child: item,
294 args: {
295 "batch_no": item.batch_no,
296 "stock_qty": item.stock_qty,
297 "warehouse": item.warehouse,
298 "item_code": item.item_code,
299 "has_serial_no": has_serial_no
300 },
301 "fieldname": "actual_batch_qty"
302 });
303 }
304 })
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530305 },
306
Anand Doshi2168e392013-05-23 19:25:08 +0530307 set_dynamic_labels: function() {
Anand Doshi61a2f682013-06-21 17:55:31 +0530308 this._super();
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530309 this.set_product_bundle_help(this.frm.doc);
Nabin Hait0b157552014-06-24 17:02:45 +0530310 },
311
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530312 set_product_bundle_help: function(doc) {
Nabin Hait0b157552014-06-24 17:02:45 +0530313 if(!cur_frm.fields_dict.packing_list) return;
Nabin Haite7d15362014-12-25 16:01:55 +0530314 if ((doc.packed_items || []).length) {
Nabin Hait0b157552014-06-24 17:02:45 +0530315 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(true);
316
Faris Ansariab74ca72017-05-30 12:54:42 +0530317 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
318 var help_msg = "<div class='alert alert-warning'>" +
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530319 __("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 +0530320 "</div>";
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530321 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = help_msg;
Nabin Hait0b157552014-06-24 17:02:45 +0530322 }
323 } else {
324 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(false);
Faris Ansariab74ca72017-05-30 12:54:42 +0530325 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530326 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = '';
Nabin Hait0b157552014-06-24 17:02:45 +0530327 }
328 }
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530329 refresh_field('product_bundle_help');
Saurabheba7aa42015-12-16 09:57:59 +0530330 },
Anand Doshi01de9452016-01-26 16:22:50 +0530331
mbauskara52472c2016-03-05 15:10:25 +0530332 margin_rate_or_amount: function(doc, cdt, cdn) {
mbauskar1e9c1642016-01-18 16:21:25 +0530333 // calculated the revised total margin and rate on margin rate changes
Faris Ansariab74ca72017-05-30 12:54:42 +0530334 var item = locals[cdt][cdn];
Rohit Waghchaure6087fe12016-04-09 14:31:09 +0530335 this.apply_pricing_rule_on_item(item)
mbauskara52472c2016-03-05 15:10:25 +0530336 this.calculate_taxes_and_totals();
mbauskar1e9c1642016-01-18 16:21:25 +0530337 cur_frm.refresh_fields();
338 },
mbauskar1e428ae2016-01-19 19:52:22 +0530339
mbauskara52472c2016-03-05 15:10:25 +0530340 margin_type: function(doc, cdt, cdn){
mbauskar1e9c1642016-01-18 16:21:25 +0530341 // calculate the revised total margin and rate on margin type changes
Faris Ansariab74ca72017-05-30 12:54:42 +0530342 var item = locals[cdt][cdn];
Nabin Haite72c98d2017-05-24 09:01:44 +0530343 if(!item.margin_type) {
344 frappe.model.set_value(cdt, cdn, "margin_rate_or_amount", 0);
345 } else {
346 this.apply_pricing_rule_on_item(item, doc,cdt, cdn)
347 this.calculate_taxes_and_totals();
348 cur_frm.refresh_fields();
349 }
Nabin Hait879e1622017-08-21 08:28:55 +0530350 },
351
352 company_address: function() {
353 var me = this;
354 if(this.frm.doc.company_address) {
355 frappe.call({
356 method: "frappe.contacts.doctype.address.address.get_address_display",
357 args: {"address_dict": this.frm.doc.company_address },
358 callback: function(r) {
359 if(r.message) {
360 me.frm.set_value("company_address_display", r.message)
361 }
362 }
363 })
364 } else {
365 this.frm.set_value("company_address_display", "");
366 }
tundebabzyacccdb32017-11-23 08:35:15 +0100367 },
368
369 conversion_factor: function(doc, cdt, cdn, dont_fetch_price_list_rate) {
370 this._super(doc, cdt, cdn, dont_fetch_price_list_rate);
tundebabzyf9b5c742018-01-25 19:21:05 +0100371 if(frappe.meta.get_docfield(cdt, "stock_qty", cdn) &&
372 in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
tundebabzyacccdb32017-11-23 08:35:15 +0100373 this.set_batch_number(cdt, cdn);
374 }
375 },
376
377 qty: function(doc, cdt, cdn) {
Shreyaa20157a2018-04-13 12:03:42 +0530378 this._super(doc, cdt, cdn);
tundebabzyacccdb32017-11-23 08:35:15 +0100379 this.set_batch_number(cdt, cdn);
380 },
381
382 /* Determine appropriate batch number and set it in the form.
383 * @param {string} cdt - Document Doctype
384 * @param {string} cdn - Document name
385 */
386 set_batch_number: function(cdt, cdn) {
387 const doc = frappe.get_doc(cdt, cdn);
rohitwaghchaure15f8fe02017-11-24 10:46:27 +0530388 if (doc && doc.has_batch_no) {
tundebabzyacccdb32017-11-23 08:35:15 +0100389 this._set_batch_number(doc);
390 }
391 },
392
393 _set_batch_number: function(doc) {
394 return frappe.call({
395 method: 'erpnext.stock.doctype.batch.batch.get_batch_no',
396 args: {'item_code': doc.item_code, 'warehouse': doc.warehouse, 'qty': flt(doc.qty) * flt(doc.conversion_factor)},
397 callback: function(r) {
398 if(r.message) {
399 frappe.model.set_value(doc.doctype, doc.name, 'batch_no', r.message);
tundebabzy8ae53ca2017-11-30 07:07:21 +0100400 } else {
401 frappe.model.set_value(doc.doctype, doc.name, 'batch_no', r.message);
tundebabzyacccdb32017-11-23 08:35:15 +0100402 }
403 }
404 });
405 },
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200406
407 update_auto_repeat_reference: function(doc) {
408 if (doc.auto_repeat) {
409 frappe.call({
410 method:"frappe.desk.doctype.auto_repeat.auto_repeat.update_reference",
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530411 args:{
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200412 docname: doc.auto_repeat,
413 reference:doc.name
414 },
415 callback: function(r){
416 if (r.message=="success") {
417 frappe.show_alert({message:__("Auto repeat document updated"), indicator:'green'});
418 } else {
419 frappe.show_alert({message:__("An error occurred during the update process"), indicator:'red'});
420 }
421 }
422 })
423 }
424 }
Nabin Hait0b157552014-06-24 17:02:45 +0530425});
Anand Doshi43f087c2014-08-26 14:25:53 +0530426
Neil Trini Lasrado6e343e22016-03-09 17:02:59 +0530427frappe.ui.form.on(cur_frm.doctype,"project", function(frm) {
Nabin Hait10b155a2014-10-23 13:18:59 +0530428 if(in_list(["Delivery Note", "Sales Invoice"], frm.doc.doctype)) {
Rushabh Mehta532eedf2016-05-19 18:22:49 +0530429 if(frm.doc.project) {
430 frappe.call({
431 method:'erpnext.projects.doctype.project.project.get_cost_center_name' ,
432 args: { project: frm.doc.project },
433 callback: function(r, rt) {
434 if(!r.exc) {
435 $.each(frm.doc["items"] || [], function(i, row) {
436 if(r.message) {
437 frappe.model.set_value(row.doctype, row.name, "cost_center", r.message);
Faris Ansariab74ca72017-05-30 12:54:42 +0530438 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 +0530439 }
440 })
441 }
Nabin Hait10b155a2014-10-23 13:18:59 +0530442 }
Rushabh Mehta532eedf2016-05-19 18:22:49 +0530443 })
444 }
Nabin Hait10b155a2014-10-23 13:18:59 +0530445 }
Nabin Haite45ec662018-08-01 17:44:34 +0530446})
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530447
448frappe.ui.form.on(cur_frm.doctype, {
449 set_as_lost_dialog: function(frm) {
450 var dialog = new frappe.ui.Dialog({
451 title: __("Set as Lost"),
452 fields: [
453 {"fieldtype": "Table MultiSelect",
454 "label": __("Lost Reasons"),
455 "fieldname": "lost_reason",
456 "options": "Lost Reason Detail",
457 "reqd": 1},
458
459 {"fieldtype": "Text", "label": __("Detailed Reason"), "fieldname": "detailed_reason"},
460 ],
461 primary_action: function() {
462 var values = dialog.get_values();
463 var reasons = values["lost_reason"];
464 var detailed_reason = values["detailed_reason"];
465
466 frm.call({
467 doc: frm.doc,
468 method: 'declare_enquiry_lost',
469 args: {
470 'lost_reasons_list': reasons,
471 'detailed_reason': detailed_reason
472 },
473 callback: function(r) {
474 dialog.hide();
475 frm.reload_doc();
476 },
477 });
478 refresh_field("lost_reason");
479 },
480 primary_action_label: __('Declare Lost')
481 });
482
483 dialog.show();
484 }
485})