blob: 04285735abdc9febef5f27fed7b05a92919ef061 [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
Anand Doshi99100a42013-07-04 17:13:53 +053045
Rushabh Mehta4a404e92013-08-09 18:11:35 +053046 if(this.frm.fields_dict.selling_price_list) {
47 this.frm.set_query("selling_price_list", function() {
Nabin Haitdc15b4f2014-01-20 16:48:49 +053048 return { filters: { selling: 1 } };
Anand Doshi720a01a2013-07-26 11:32:02 +053049 });
Anand Doshi720a01a2013-07-26 11:32:02 +053050 }
Anand Doshibd67e872014-04-11 16:51:27 +053051
karthikeyan57fc60212019-07-04 22:46:16 +053052 if(this.frm.fields_dict.tc_name) {
53 this.frm.set_query("tc_name", function() {
54 return { filters: { selling: 1 } };
55 });
56 }
57
Nabin Haitdd38a262014-12-26 13:15:21 +053058 if(!this.frm.fields_dict["items"]) {
Anand Doshi99100a42013-07-04 17:13:53 +053059 return;
60 }
Anand Doshibd67e872014-04-11 16:51:27 +053061
Nabin Haitdd38a262014-12-26 13:15:21 +053062 if(this.frm.fields_dict["items"].grid.get_field('item_code')) {
63 this.frm.set_query("item_code", "items", function() {
Anand Doshi9b496142013-07-11 19:13:58 +053064 return {
Rushabh Mehtad973c162016-08-16 11:32:08 +053065 query: "erpnext.controllers.queries.item_query",
66 filters: {'is_sales_item': 1}
Anand Doshi9b496142013-07-11 19:13:58 +053067 }
Anand Doshi99100a42013-07-04 17:13:53 +053068 });
69 }
Anand Doshibd67e872014-04-11 16:51:27 +053070
Rushabh Mehta698c0402016-11-22 23:16:40 +053071 if(this.frm.fields_dict["packed_items"] &&
72 this.frm.fields_dict["packed_items"].grid.get_field('batch_no')) {
Rohit Waghchauree887e922016-11-18 12:16:22 +053073 this.frm.set_query("batch_no", "packed_items", function(doc, cdt, cdn) {
74 return me.set_query_for_batch(doc, cdt, cdn)
75 });
76 }
Deepesh Gargef0d26c2020-01-06 15:34:15 +053077
78 if(this.frm.fields_dict["items"].grid.get_field('item_code')) {
79 this.frm.set_query("item_tax_template", "items", function(doc, cdt, cdn) {
80 return me.set_query_for_item_tax_template(doc, cdt, cdn)
81 });
82 }
83
Rohit Waghchauree887e922016-11-18 12:16:22 +053084 },
85
Anand Doshic4a54fe2013-08-01 18:19:51 +053086 refresh: function() {
87 this._super();
Rushabh Mehtab92087c2017-01-13 18:53:11 +053088
Rushabh Mehta8d39fd92017-01-16 13:06:07 +053089 frappe.dynamic_link = {doc: this.frm.doc, fieldname: 'customer', doctype: 'Customer'}
Rushabh Mehtab92087c2017-01-13 18:53:11 +053090
Anand Doshibd67e872014-04-11 16:51:27 +053091 this.frm.toggle_display("customer_name",
Akhilesh Darjee5ce1b8b2013-12-09 16:29:04 +053092 (this.frm.doc.customer_name && this.frm.doc.customer_name!==this.frm.doc.customer));
Nabin Haite7d15362014-12-25 16:01:55 +053093 if(this.frm.fields_dict.packed_items) {
94 var packing_list_exists = (this.frm.doc.packed_items || []).length;
Anand Doshic4a54fe2013-08-01 18:19:51 +053095 this.frm.toggle_display("packing_list", packing_list_exists ? true : false);
96 }
Nabin Hait2029ea92015-04-16 17:55:35 +053097 this.toggle_editable_price_list_rate();
Rushabh Mehta8aded132013-07-04 12:50:52 +053098 },
Anand Doshibd67e872014-04-11 16:51:27 +053099
Anand Doshi3543f302013-05-24 19:25:01 +0530100 customer: function() {
Nabin Haita3dd72a2014-05-28 12:49:20 +0530101 var me = this;
Nabin Haite45ec662018-08-01 17:44:34 +0530102 erpnext.utils.get_party_details(this.frm, null, null, function() {
103 me.apply_price_list();
104 });
Anand Doshi3543f302013-05-24 19:25:01 +0530105 },
Anand Doshibd67e872014-04-11 16:51:27 +0530106
Nabin Haita279d782013-07-15 13:04:33 +0530107 customer_address: function() {
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530108 erpnext.utils.get_address_display(this.frm, "customer_address");
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500109 erpnext.utils.set_taxes_from_address(this.frm, "customer_address", "customer_address", "shipping_address_name");
Nabin Haita279d782013-07-15 13:04:33 +0530110 },
Anand Doshibd67e872014-04-11 16:51:27 +0530111
Nabin Hait9d1f0772014-02-19 17:43:24 +0530112 shipping_address_name: function() {
113 erpnext.utils.get_address_display(this.frm, "shipping_address_name", "shipping_address");
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500114 erpnext.utils.set_taxes_from_address(this.frm, "shipping_address_name", "customer_address", "shipping_address_name");
Nabin Hait9d1f0772014-02-19 17:43:24 +0530115 },
Anand Doshibd67e872014-04-11 16:51:27 +0530116
Nabin Haita3dd72a2014-05-28 12:49:20 +0530117 sales_partner: function() {
118 this.apply_pricing_rule();
119 },
120
121 campaign: function() {
122 this.apply_pricing_rule();
123 },
124
Rushabh Mehta4a404e92013-08-09 18:11:35 +0530125 selling_price_list: function() {
Anand Doshidffec8f2014-07-01 17:45:15 +0530126 this.apply_price_list();
rohitwaghchaure8e675eb2018-02-13 17:11:06 +0530127 this.set_dynamic_labels();
Anand Doshif3096132013-05-21 19:35:06 +0530128 },
Anand Doshibd67e872014-04-11 16:51:27 +0530129
Nabin Haita7f757a2014-02-10 17:54:04 +0530130 discount_percentage: function(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530131 var item = frappe.get_doc(cdt, cdn);
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530132 item.discount_amount = 0.0;
133 this.apply_discount_on_item(doc, cdt, cdn, 'discount_percentage');
134 },
135
136 discount_amount: function(doc, cdt, cdn) {
deepeshgarg007a9ea49c2019-07-04 15:56:34 +0530137
138 if(doc.name === cdn) {
139 return;
140 }
141
Nabin Hait593242f2019-04-05 19:35:02 +0530142 var item = frappe.get_doc(cdt, cdn);
143 item.discount_percentage = 0.0;
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530144 this.apply_discount_on_item(doc, cdt, cdn, 'discount_amount');
145 },
146
147 apply_discount_on_item: function(doc, cdt, cdn, field) {
148 var item = frappe.get_doc(cdt, cdn);
Nabin Haita7f757a2014-02-10 17:54:04 +0530149 if(!item.price_list_rate) {
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530150 item[field] = 0.0;
Anand Doshi923d41d2013-05-28 17:23:36 +0530151 } else {
Nabin Haita7f757a2014-02-10 17:54:04 +0530152 this.price_list_rate(doc, cdt, cdn);
Anand Doshi923d41d2013-05-28 17:23:36 +0530153 }
Saurabh5ada14b2016-02-26 18:02:55 +0530154 this.set_gross_profit(item);
Anand Doshif3096132013-05-21 19:35:06 +0530155 },
Anand Doshibd67e872014-04-11 16:51:27 +0530156
Anand Doshif3096132013-05-21 19:35:06 +0530157 commission_rate: function() {
158 this.calculate_commission();
159 refresh_field("total_commission");
160 },
Anand Doshibd67e872014-04-11 16:51:27 +0530161
Anand Doshif3096132013-05-21 19:35:06 +0530162 total_commission: function() {
Nabin Hait5690be12015-02-12 16:09:11 +0530163 if(this.frm.doc.base_net_total) {
164 frappe.model.round_floats_in(this.frm.doc, ["base_net_total", "total_commission"]);
Anand Doshibd67e872014-04-11 16:51:27 +0530165
Nabin Hait5690be12015-02-12 16:09:11 +0530166 if(this.frm.doc.base_net_total < this.frm.doc.total_commission) {
Pratik Vyasb52618c2014-04-14 16:25:30 +0530167 var msg = (__("[Error]") + " " +
168 __(frappe.meta.get_label(this.frm.doc.doctype, "total_commission",
Anand Doshibd67e872014-04-11 16:51:27 +0530169 this.frm.doc.name)) + " > " +
Nabin Hait5690be12015-02-12 16:09:11 +0530170 __(frappe.meta.get_label(this.frm.doc.doctype, "base_net_total", this.frm.doc.name)));
Faris Ansariab74ca72017-05-30 12:54:42 +0530171 frappe.msgprint(msg);
Anand Doshif3096132013-05-21 19:35:06 +0530172 throw msg;
173 }
Anand Doshibd67e872014-04-11 16:51:27 +0530174
175 this.frm.set_value("commission_rate",
Nabin Hait5690be12015-02-12 16:09:11 +0530176 flt(this.frm.doc.total_commission * 100.0 / this.frm.doc.base_net_total));
Anand Doshif3096132013-05-21 19:35:06 +0530177 }
178 },
Anand Doshibd67e872014-04-11 16:51:27 +0530179
Anand Doshif3096132013-05-21 19:35:06 +0530180 allocated_percentage: function(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530181 var sales_person = frappe.get_doc(cdt, cdn);
Anand Doshif3096132013-05-21 19:35:06 +0530182 if(sales_person.allocated_percentage) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530183
Anand Doshif3096132013-05-21 19:35:06 +0530184 sales_person.allocated_percentage = flt(sales_person.allocated_percentage,
185 precision("allocated_percentage", sales_person));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530186
Nabin Hait5690be12015-02-12 16:09:11 +0530187 sales_person.allocated_amount = flt(this.frm.doc.base_net_total *
Anand Doshibd67e872014-04-11 16:51:27 +0530188 sales_person.allocated_percentage / 100.0,
Anand Doshif3096132013-05-21 19:35:06 +0530189 precision("allocated_amount", sales_person));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530190 refresh_field(["allocated_amount"], sales_person);
Anand Doshif3096132013-05-21 19:35:06 +0530191
deepeshgarg00786152eb2018-09-25 19:08:16 +0530192 this.calculate_incentive(sales_person);
193 refresh_field(["allocated_percentage", "allocated_amount", "commission_rate","incentives"], sales_person.name,
Anand Doshif3096132013-05-21 19:35:06 +0530194 sales_person.parentfield);
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530195 }
deepeshgarg00786152eb2018-09-25 19:08:16 +0530196 },
197
198 sales_person: function(doc, cdt, cdn) {
199 var row = frappe.get_doc(cdt, cdn);
200 this.calculate_incentive(row);
201 refresh_field("incentives",row.name,row.parentfield);
Anand Doshif3096132013-05-21 19:35:06 +0530202 },
Anand Doshibd67e872014-04-11 16:51:27 +0530203
Anand Doshifc777182013-05-27 19:29:07 +0530204 warehouse: function(doc, cdt, cdn) {
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530205 var me = this;
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530206 var item = frappe.get_doc(cdt, cdn);
Saqib14cdb242020-04-16 16:21:35 +0530207
208 if (item.serial_no && item.qty === item.serial_no.split(`\n`).length) {
209 return;
210 }
211
Shreyaa20157a2018-04-13 12:03:42 +0530212 if (item.serial_no && !item.batch_no) {
213 item.serial_no = null;
Anand Doshifc777182013-05-27 19:29:07 +0530214 }
Saqib14cdb242020-04-16 16:21:35 +0530215
Shreyaa20157a2018-04-13 12:03:42 +0530216 var has_batch_no;
217 frappe.db.get_value('Item', {'item_code': item.item_code}, 'has_batch_no', (r) => {
218 has_batch_no = r && r.has_batch_no;
219 if(item.item_code && item.warehouse) {
220 return this.frm.call({
221 method: "erpnext.stock.get_item_details.get_bin_details_and_serial_nos",
222 child: item,
223 args: {
224 item_code: item.item_code,
225 warehouse: item.warehouse,
Rohit Waghchaure6daab3c2019-09-19 17:01:26 +0530226 has_batch_no: has_batch_no || 0,
Shreyaa20157a2018-04-13 12:03:42 +0530227 stock_qty: item.stock_qty,
228 serial_no: item.serial_no || "",
229 },
230 callback:function(r){
231 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530232
233 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
234
Shreyaa20157a2018-04-13 12:03:42 +0530235 me.set_batch_number(cdt, cdn);
236 me.batch_no(doc, cdt, cdn);
237 }
238 }
239 });
240 }
241 })
Anand Doshifc777182013-05-27 19:29:07 +0530242 },
Anand Doshibd67e872014-04-11 16:51:27 +0530243
Anand Doshi33fe8672013-08-02 12:39:10 +0530244 toggle_editable_price_list_rate: function() {
Nabin Haitdd38a262014-12-26 13:15:21 +0530245 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 +0530246 var editable_price_list_rate = cint(frappe.defaults.get_default("editable_price_list_rate"));
Anand Doshibd67e872014-04-11 16:51:27 +0530247
Anand Doshi33fe8672013-08-02 12:39:10 +0530248 if(df && editable_price_list_rate) {
249 df.read_only = 0;
250 }
251 },
Anand Doshibd67e872014-04-11 16:51:27 +0530252
Anand Doshif3096132013-05-21 19:35:06 +0530253 calculate_commission: function() {
Anand Doshi923d41d2013-05-28 17:23:36 +0530254 if(this.frm.fields_dict.commission_rate) {
255 if(this.frm.doc.commission_rate > 100) {
Pratik Vyasb52618c2014-04-14 16:25:30 +0530256 var msg = __(frappe.meta.get_label(this.frm.doc.doctype, "commission_rate", this.frm.doc.name)) +
257 " " + __("cannot be greater than 100");
Faris Ansariab74ca72017-05-30 12:54:42 +0530258 frappe.msgprint(msg);
Anand Doshi923d41d2013-05-28 17:23:36 +0530259 throw msg;
260 }
Anand Doshibd67e872014-04-11 16:51:27 +0530261
Nabin Hait5690be12015-02-12 16:09:11 +0530262 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 +0530263 precision("total_commission"));
264 }
Anand Doshif3096132013-05-21 19:35:06 +0530265 },
Anand Doshibd67e872014-04-11 16:51:27 +0530266
Anand Doshif3096132013-05-21 19:35:06 +0530267 calculate_contribution: function() {
Anand Doshi2168e392013-05-23 19:25:08 +0530268 var me = this;
Rushabh Mehtaaa355af2014-03-26 18:24:30 +0530269 $.each(this.frm.doc.doctype.sales_team || [], function(i, sales_person) {
Faris Ansariab74ca72017-05-30 12:54:42 +0530270 frappe.model.round_floats_in(sales_person);
271 if(sales_person.allocated_percentage) {
272 sales_person.allocated_amount = flt(
273 me.frm.doc.base_net_total * sales_person.allocated_percentage / 100.0,
274 precision("allocated_amount", sales_person));
275 }
276 });
Anand Doshif3096132013-05-21 19:35:06 +0530277 },
Anand Doshibd67e872014-04-11 16:51:27 +0530278
deepeshgarg00786152eb2018-09-25 19:08:16 +0530279 calculate_incentive: function(row) {
280 if(row.allocated_amount)
281 {
282 row.incentives = flt(
283 row.allocated_amount * row.commission_rate / 100.0,
deepeshgarg007c3772f12018-09-26 15:55:43 +0530284 precision("incentives", row));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530285 }
286 },
287
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530288 batch_no: function(doc, cdt, cdn) {
289 var me = this;
290 var item = frappe.get_doc(cdt, cdn);
Saqiba6f98d42020-07-23 18:51:26 +0530291
292 if (item.serial_no) {
293 return;
294 }
295
Shreyaa20157a2018-04-13 12:03:42 +0530296 item.serial_no = null;
297 var has_serial_no;
298 frappe.db.get_value('Item', {'item_code': item.item_code}, 'has_serial_no', (r) => {
299 has_serial_no = r && r.has_serial_no;
300 if(item.warehouse && item.item_code && item.batch_no) {
301 return this.frm.call({
302 method: "erpnext.stock.get_item_details.get_batch_qty_and_serial_no",
303 child: item,
304 args: {
305 "batch_no": item.batch_no,
Maricaf0e87f72019-11-27 15:49:41 +0530306 "stock_qty": item.stock_qty || item.qty, //if stock_qty field is not available fetch qty (in case of Packed Items table)
Shreyaa20157a2018-04-13 12:03:42 +0530307 "warehouse": item.warehouse,
308 "item_code": item.item_code,
309 "has_serial_no": has_serial_no
310 },
311 "fieldname": "actual_batch_qty"
312 });
313 }
314 })
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530315 },
316
Anand Doshi2168e392013-05-23 19:25:08 +0530317 set_dynamic_labels: function() {
Anand Doshi61a2f682013-06-21 17:55:31 +0530318 this._super();
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530319 this.set_product_bundle_help(this.frm.doc);
Nabin Hait0b157552014-06-24 17:02:45 +0530320 },
321
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530322 set_product_bundle_help: function(doc) {
Nabin Hait0b157552014-06-24 17:02:45 +0530323 if(!cur_frm.fields_dict.packing_list) return;
Nabin Haite7d15362014-12-25 16:01:55 +0530324 if ((doc.packed_items || []).length) {
Nabin Hait0b157552014-06-24 17:02:45 +0530325 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(true);
326
Faris Ansariab74ca72017-05-30 12:54:42 +0530327 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
328 var help_msg = "<div class='alert alert-warning'>" +
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530329 __("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 +0530330 "</div>";
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530331 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = help_msg;
Nabin Hait0b157552014-06-24 17:02:45 +0530332 }
333 } else {
334 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(false);
Faris Ansariab74ca72017-05-30 12:54:42 +0530335 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530336 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = '';
Nabin Hait0b157552014-06-24 17:02:45 +0530337 }
338 }
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530339 refresh_field('product_bundle_help');
Saurabheba7aa42015-12-16 09:57:59 +0530340 },
Anand Doshi01de9452016-01-26 16:22:50 +0530341
Nabin Hait879e1622017-08-21 08:28:55 +0530342 company_address: function() {
343 var me = this;
344 if(this.frm.doc.company_address) {
345 frappe.call({
346 method: "frappe.contacts.doctype.address.address.get_address_display",
347 args: {"address_dict": this.frm.doc.company_address },
348 callback: function(r) {
349 if(r.message) {
350 me.frm.set_value("company_address_display", r.message)
351 }
352 }
353 })
354 } else {
355 this.frm.set_value("company_address_display", "");
356 }
tundebabzyacccdb32017-11-23 08:35:15 +0100357 },
358
359 conversion_factor: function(doc, cdt, cdn, dont_fetch_price_list_rate) {
360 this._super(doc, cdt, cdn, dont_fetch_price_list_rate);
tundebabzyf9b5c742018-01-25 19:21:05 +0100361 if(frappe.meta.get_docfield(cdt, "stock_qty", cdn) &&
362 in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530363 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
364 this.set_batch_number(cdt, cdn);
365 }
tundebabzyacccdb32017-11-23 08:35:15 +0100366 },
367
Deepesh Gargbd9bdc52021-01-28 12:05:57 +0530368 batch_no: function(doc, cdt, cdn) {
369 this._super(doc, cdt, cdn);
370 },
371
tundebabzyacccdb32017-11-23 08:35:15 +0100372 qty: function(doc, cdt, cdn) {
Shreyaa20157a2018-04-13 12:03:42 +0530373 this._super(doc, cdt, cdn);
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530374
375 if(in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
376 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
377 this.set_batch_number(cdt, cdn);
378 }
tundebabzyacccdb32017-11-23 08:35:15 +0100379 },
380
381 /* Determine appropriate batch number and set it in the form.
382 * @param {string} cdt - Document Doctype
383 * @param {string} cdn - Document name
384 */
385 set_batch_number: function(cdt, cdn) {
386 const doc = frappe.get_doc(cdt, cdn);
Saqibfaea8542020-03-26 13:18:57 +0530387 if (doc && doc.has_batch_no && doc.warehouse) {
tundebabzyacccdb32017-11-23 08:35:15 +0100388 this._set_batch_number(doc);
389 }
390 },
391
392 _set_batch_number: function(doc) {
Saqibfaea8542020-03-26 13:18:57 +0530393 let args = {'item_code': doc.item_code, 'warehouse': doc.warehouse, 'qty': flt(doc.qty) * flt(doc.conversion_factor)};
394 if (doc.has_serial_no && doc.serial_no) {
395 args['serial_no'] = doc.serial_no
396 }
marination8a30cb22020-04-23 00:18:21 +0530397
tundebabzyacccdb32017-11-23 08:35:15 +0100398 return frappe.call({
399 method: 'erpnext.stock.doctype.batch.batch.get_batch_no',
Saqibfaea8542020-03-26 13:18:57 +0530400 args: args,
tundebabzyacccdb32017-11-23 08:35:15 +0100401 callback: function(r) {
402 if(r.message) {
403 frappe.model.set_value(doc.doctype, doc.name, 'batch_no', r.message);
tundebabzy8ae53ca2017-11-30 07:07:21 +0100404 } else {
405 frappe.model.set_value(doc.doctype, doc.name, 'batch_no', r.message);
tundebabzyacccdb32017-11-23 08:35:15 +0100406 }
407 }
408 });
409 },
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200410
411 update_auto_repeat_reference: function(doc) {
412 if (doc.auto_repeat) {
413 frappe.call({
Rucha Mahabal65a627c2019-07-17 13:50:32 +0530414 method:"frappe.automation.doctype.auto_repeat.auto_repeat.update_reference",
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530415 args:{
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200416 docname: doc.auto_repeat,
417 reference:doc.name
418 },
419 callback: function(r){
420 if (r.message=="success") {
421 frappe.show_alert({message:__("Auto repeat document updated"), indicator:'green'});
422 } else {
423 frappe.show_alert({message:__("An error occurred during the update process"), indicator:'red'});
424 }
425 }
426 })
427 }
428 }
Nabin Hait0b157552014-06-24 17:02:45 +0530429});
Anand Doshi43f087c2014-08-26 14:25:53 +0530430
Neil Trini Lasrado6e343e22016-03-09 17:02:59 +0530431frappe.ui.form.on(cur_frm.doctype,"project", function(frm) {
Nabin Hait10b155a2014-10-23 13:18:59 +0530432 if(in_list(["Delivery Note", "Sales Invoice"], frm.doc.doctype)) {
Rushabh Mehta532eedf2016-05-19 18:22:49 +0530433 if(frm.doc.project) {
434 frappe.call({
435 method:'erpnext.projects.doctype.project.project.get_cost_center_name' ,
436 args: { project: frm.doc.project },
437 callback: function(r, rt) {
438 if(!r.exc) {
439 $.each(frm.doc["items"] || [], function(i, row) {
440 if(r.message) {
441 frappe.model.set_value(row.doctype, row.name, "cost_center", r.message);
Mohammad Hasnain Mohsin Rajane15b6a92020-11-25 15:36:41 +0530442 frappe.msgprint(__("Cost Center For Item with Item Code {0} has been Changed to {1}", [row.item_name, r.message]));
Rushabh Mehta532eedf2016-05-19 18:22:49 +0530443 }
444 })
445 }
Nabin Hait10b155a2014-10-23 13:18:59 +0530446 }
Rushabh Mehta532eedf2016-05-19 18:22:49 +0530447 })
448 }
Nabin Hait10b155a2014-10-23 13:18:59 +0530449 }
Nabin Haite45ec662018-08-01 17:44:34 +0530450})
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530451
452frappe.ui.form.on(cur_frm.doctype, {
453 set_as_lost_dialog: function(frm) {
454 var dialog = new frappe.ui.Dialog({
455 title: __("Set as Lost"),
456 fields: [
Anupam Kumare447c792020-08-13 09:20:36 +0530457 {
458 "fieldtype": "Table MultiSelect",
459 "label": __("Lost Reasons"),
460 "fieldname": "lost_reason",
461 "options": frm.doctype === 'Opportunity' ? 'Opportunity Lost Reason Detail': 'Quotation Lost Reason Detail',
462 "reqd": 1
463 },
464 {
465 "fieldtype": "Text",
466 "label": __("Detailed Reason"),
467 "fieldname": "detailed_reason"
468 },
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530469 ],
470 primary_action: function() {
471 var values = dialog.get_values();
472 var reasons = values["lost_reason"];
473 var detailed_reason = values["detailed_reason"];
474
475 frm.call({
476 doc: frm.doc,
477 method: 'declare_enquiry_lost',
478 args: {
479 'lost_reasons_list': reasons,
480 'detailed_reason': detailed_reason
481 },
482 callback: function(r) {
483 dialog.hide();
484 frm.reload_doc();
485 },
486 });
487 refresh_field("lost_reason");
488 },
489 primary_action_label: __('Declare Lost')
490 });
491
492 dialog.show();
493 }
494})