blob: 0954de4e665da013932fcf77e4ed90a59d9e2a93 [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");
Faris Ansari1fe891b2021-04-23 08:04:00 +053012erpnext.selling.SellingController = class SellingController extends erpnext.TransactionController {
13 setup() {
14 super.setup();
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");
Faris Ansari1fe891b2021-04-23 08:04:00 +053017 }
Rushabh Mehta532eedf2016-05-19 18:22:49 +053018
Faris Ansari1fe891b2021-04-23 08:04:00 +053019 onload() {
20 super.onload();
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 });
Ankush Menat4551d7d2021-08-19 13:41:10 +053029 }
Anand Doshibd67e872014-04-11 16:51:27 +053030
Faris Ansari1fe891b2021-04-23 08:04:00 +053031 setup_queries() {
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);
Subin Tom98d41762021-12-21 12:35:44 +053044 me.frm.set_query('dispatch_address_name', erpnext.queries.dispatch_address_query);
Rushabh Mehtab92087c2017-01-13 18:53:11 +053045
Anand Doshi99100a42013-07-04 17:13:53 +053046
Rushabh Mehta4a404e92013-08-09 18:11:35 +053047 if(this.frm.fields_dict.selling_price_list) {
48 this.frm.set_query("selling_price_list", function() {
Nabin Haitdc15b4f2014-01-20 16:48:49 +053049 return { filters: { selling: 1 } };
Anand Doshi720a01a2013-07-26 11:32:02 +053050 });
Anand Doshi720a01a2013-07-26 11:32:02 +053051 }
Anand Doshibd67e872014-04-11 16:51:27 +053052
karthikeyan57fc60212019-07-04 22:46:16 +053053 if(this.frm.fields_dict.tc_name) {
54 this.frm.set_query("tc_name", function() {
55 return { filters: { selling: 1 } };
56 });
57 }
58
Nabin Haitdd38a262014-12-26 13:15:21 +053059 if(!this.frm.fields_dict["items"]) {
Anand Doshi99100a42013-07-04 17:13:53 +053060 return;
61 }
Anand Doshibd67e872014-04-11 16:51:27 +053062
Nabin Haitdd38a262014-12-26 13:15:21 +053063 if(this.frm.fields_dict["items"].grid.get_field('item_code')) {
64 this.frm.set_query("item_code", "items", function() {
Anand Doshi9b496142013-07-11 19:13:58 +053065 return {
Rushabh Mehtad973c162016-08-16 11:32:08 +053066 query: "erpnext.controllers.queries.item_query",
Ankush Menat0e875f52022-05-16 12:14:07 +053067 filters: {'is_sales_item': 1, 'customer': cur_frm.doc.customer, 'has_variants': 0}
Anand Doshi9b496142013-07-11 19:13:58 +053068 }
Anand Doshi99100a42013-07-04 17:13:53 +053069 });
70 }
Anand Doshibd67e872014-04-11 16:51:27 +053071
Rushabh Mehta698c0402016-11-22 23:16:40 +053072 if(this.frm.fields_dict["packed_items"] &&
73 this.frm.fields_dict["packed_items"].grid.get_field('batch_no')) {
Rohit Waghchauree887e922016-11-18 12:16:22 +053074 this.frm.set_query("batch_no", "packed_items", function(doc, cdt, cdn) {
75 return me.set_query_for_batch(doc, cdt, cdn)
76 });
77 }
Deepesh Gargef0d26c2020-01-06 15:34:15 +053078
79 if(this.frm.fields_dict["items"].grid.get_field('item_code')) {
80 this.frm.set_query("item_tax_template", "items", function(doc, cdt, cdn) {
81 return me.set_query_for_item_tax_template(doc, cdt, cdn)
82 });
83 }
84
Faris Ansari1fe891b2021-04-23 08:04:00 +053085 }
Rohit Waghchauree887e922016-11-18 12:16:22 +053086
Faris Ansari1fe891b2021-04-23 08:04:00 +053087 refresh() {
88 super.refresh();
Ankush Menat4551d7d2021-08-19 13:41:10 +053089
Rushabh Mehta8d39fd92017-01-16 13:06:07 +053090 frappe.dynamic_link = {doc: this.frm.doc, fieldname: 'customer', doctype: 'Customer'}
Rushabh Mehtab92087c2017-01-13 18:53:11 +053091
Anand Doshibd67e872014-04-11 16:51:27 +053092 this.frm.toggle_display("customer_name",
Akhilesh Darjee5ce1b8b2013-12-09 16:29:04 +053093 (this.frm.doc.customer_name && this.frm.doc.customer_name!==this.frm.doc.customer));
Chillar Anand915b3432021-09-02 16:44:59 +053094
Nabin Hait2029ea92015-04-16 17:55:35 +053095 this.toggle_editable_price_list_rate();
Faris Ansari1fe891b2021-04-23 08:04:00 +053096 }
Anand Doshibd67e872014-04-11 16:51:27 +053097
Faris Ansari1fe891b2021-04-23 08:04:00 +053098 customer() {
Nabin Haita3dd72a2014-05-28 12:49:20 +053099 var me = this;
Nabin Haite45ec662018-08-01 17:44:34 +0530100 erpnext.utils.get_party_details(this.frm, null, null, function() {
101 me.apply_price_list();
102 });
Faris Ansari1fe891b2021-04-23 08:04:00 +0530103 }
Anand Doshibd67e872014-04-11 16:51:27 +0530104
Faris Ansari1fe891b2021-04-23 08:04:00 +0530105 customer_address() {
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530106 erpnext.utils.get_address_display(this.frm, "customer_address");
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500107 erpnext.utils.set_taxes_from_address(this.frm, "customer_address", "customer_address", "shipping_address_name");
Faris Ansari1fe891b2021-04-23 08:04:00 +0530108 }
Anand Doshibd67e872014-04-11 16:51:27 +0530109
Faris Ansari1fe891b2021-04-23 08:04:00 +0530110 shipping_address_name() {
Nabin Hait9d1f0772014-02-19 17:43:24 +0530111 erpnext.utils.get_address_display(this.frm, "shipping_address_name", "shipping_address");
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500112 erpnext.utils.set_taxes_from_address(this.frm, "shipping_address_name", "customer_address", "shipping_address_name");
Faris Ansari1fe891b2021-04-23 08:04:00 +0530113 }
Anand Doshibd67e872014-04-11 16:51:27 +0530114
Subin Tom5265ba32021-07-13 14:58:17 +0530115 dispatch_address_name() {
116 erpnext.utils.get_address_display(this.frm, "dispatch_address_name", "dispatch_address");
117 }
118
Faris Ansari1fe891b2021-04-23 08:04:00 +0530119 sales_partner() {
Nabin Haita3dd72a2014-05-28 12:49:20 +0530120 this.apply_pricing_rule();
Faris Ansari1fe891b2021-04-23 08:04:00 +0530121 }
Nabin Haita3dd72a2014-05-28 12:49:20 +0530122
Faris Ansari1fe891b2021-04-23 08:04:00 +0530123 campaign() {
Nabin Haita3dd72a2014-05-28 12:49:20 +0530124 this.apply_pricing_rule();
Faris Ansari1fe891b2021-04-23 08:04:00 +0530125 }
Nabin Haita3dd72a2014-05-28 12:49:20 +0530126
Faris Ansari1fe891b2021-04-23 08:04:00 +0530127 selling_price_list() {
Anand Doshidffec8f2014-07-01 17:45:15 +0530128 this.apply_price_list();
rohitwaghchaure8e675eb2018-02-13 17:11:06 +0530129 this.set_dynamic_labels();
Faris Ansari1fe891b2021-04-23 08:04:00 +0530130 }
Anand Doshibd67e872014-04-11 16:51:27 +0530131
Faris Ansari1fe891b2021-04-23 08:04:00 +0530132 discount_percentage(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530133 var item = frappe.get_doc(cdt, cdn);
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530134 item.discount_amount = 0.0;
135 this.apply_discount_on_item(doc, cdt, cdn, 'discount_percentage');
Faris Ansari1fe891b2021-04-23 08:04:00 +0530136 }
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530137
Faris Ansari1fe891b2021-04-23 08:04:00 +0530138 discount_amount(doc, cdt, cdn) {
deepeshgarg007a9ea49c2019-07-04 15:56:34 +0530139
140 if(doc.name === cdn) {
141 return;
142 }
143
Nabin Hait593242f2019-04-05 19:35:02 +0530144 var item = frappe.get_doc(cdt, cdn);
145 item.discount_percentage = 0.0;
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530146 this.apply_discount_on_item(doc, cdt, cdn, 'discount_amount');
Faris Ansari1fe891b2021-04-23 08:04:00 +0530147 }
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530148
Faris Ansari1fe891b2021-04-23 08:04:00 +0530149 apply_discount_on_item(doc, cdt, cdn, field) {
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530150 var item = frappe.get_doc(cdt, cdn);
Nabin Haita7f757a2014-02-10 17:54:04 +0530151 if(!item.price_list_rate) {
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530152 item[field] = 0.0;
Anand Doshi923d41d2013-05-28 17:23:36 +0530153 } else {
Nabin Haita7f757a2014-02-10 17:54:04 +0530154 this.price_list_rate(doc, cdt, cdn);
Anand Doshi923d41d2013-05-28 17:23:36 +0530155 }
Saurabh5ada14b2016-02-26 18:02:55 +0530156 this.set_gross_profit(item);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530157 }
Anand Doshibd67e872014-04-11 16:51:27 +0530158
Faris Ansari1fe891b2021-04-23 08:04:00 +0530159 commission_rate() {
Anand Doshif3096132013-05-21 19:35:06 +0530160 this.calculate_commission();
Faris Ansari1fe891b2021-04-23 08:04:00 +0530161 }
Anand Doshibd67e872014-04-11 16:51:27 +0530162
Faris Ansari1fe891b2021-04-23 08:04:00 +0530163 total_commission() {
Raffael Meyere10ab162021-11-30 13:24:18 +0100164 frappe.model.round_floats_in(this.frm.doc, ["amount_eligible_for_commission", "total_commission"]);
Anand Doshibd67e872014-04-11 16:51:27 +0530165
Raffael Meyere10ab162021-11-30 13:24:18 +0100166 const { amount_eligible_for_commission } = this.frm.doc;
167 if(!amount_eligible_for_commission) return;
Anand Doshibd67e872014-04-11 16:51:27 +0530168
Raffael Meyere10ab162021-11-30 13:24:18 +0100169 this.frm.set_value(
170 "commission_rate", flt(
171 this.frm.doc.total_commission * 100.0 / amount_eligible_for_commission
172 )
173 );
Faris Ansari1fe891b2021-04-23 08:04:00 +0530174 }
Anand Doshibd67e872014-04-11 16:51:27 +0530175
Faris Ansari1fe891b2021-04-23 08:04:00 +0530176 allocated_percentage(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530177 var sales_person = frappe.get_doc(cdt, cdn);
Anand Doshif3096132013-05-21 19:35:06 +0530178 if(sales_person.allocated_percentage) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530179
Anand Doshif3096132013-05-21 19:35:06 +0530180 sales_person.allocated_percentage = flt(sales_person.allocated_percentage,
181 precision("allocated_percentage", sales_person));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530182
Raffael Meyere10ab162021-11-30 13:24:18 +0100183 sales_person.allocated_amount = flt(this.frm.doc.amount_eligible_for_commission *
Anand Doshibd67e872014-04-11 16:51:27 +0530184 sales_person.allocated_percentage / 100.0,
Anand Doshif3096132013-05-21 19:35:06 +0530185 precision("allocated_amount", sales_person));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530186 refresh_field(["allocated_amount"], sales_person);
Anand Doshif3096132013-05-21 19:35:06 +0530187
deepeshgarg00786152eb2018-09-25 19:08:16 +0530188 this.calculate_incentive(sales_person);
189 refresh_field(["allocated_percentage", "allocated_amount", "commission_rate","incentives"], sales_person.name,
Anand Doshif3096132013-05-21 19:35:06 +0530190 sales_person.parentfield);
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530191 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530192 }
deepeshgarg00786152eb2018-09-25 19:08:16 +0530193
Faris Ansari1fe891b2021-04-23 08:04:00 +0530194 sales_person(doc, cdt, cdn) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530195 var row = frappe.get_doc(cdt, cdn);
196 this.calculate_incentive(row);
197 refresh_field("incentives",row.name,row.parentfield);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530198 }
Anand Doshibd67e872014-04-11 16:51:27 +0530199
Faris Ansari1fe891b2021-04-23 08:04:00 +0530200 warehouse(doc, cdt, cdn) {
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530201 var me = this;
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530202 var item = frappe.get_doc(cdt, cdn);
Saqib14cdb242020-04-16 16:21:35 +0530203
marination734b57d2021-11-02 18:34:55 +0530204 // check if serial nos entered are as much as qty in row
205 if (item.serial_no) {
206 let serial_nos = item.serial_no.split(`\n`).filter(sn => sn.trim()); // filter out whitespaces
207 if (item.qty === serial_nos.length) return;
Saqib14cdb242020-04-16 16:21:35 +0530208 }
209
Shreyaa20157a2018-04-13 12:03:42 +0530210 if (item.serial_no && !item.batch_no) {
211 item.serial_no = null;
Anand Doshifc777182013-05-27 19:29:07 +0530212 }
Saqib14cdb242020-04-16 16:21:35 +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,
Rohit Waghchaure6daab3c2019-09-19 17:01:26 +0530224 has_batch_no: has_batch_no || 0,
Shreyaa20157a2018-04-13 12:03:42 +0530225 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)) {
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530230 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
Ankush Menatf89a64d2022-02-15 16:10:35 +0530231 if (has_batch_no) {
232 me.set_batch_number(cdt, cdn);
233 me.batch_no(doc, cdt, cdn);
234 }
Shreyaa20157a2018-04-13 12:03:42 +0530235 }
236 }
237 });
238 }
239 })
Faris Ansari1fe891b2021-04-23 08:04:00 +0530240 }
Anand Doshibd67e872014-04-11 16:51:27 +0530241
Faris Ansari1fe891b2021-04-23 08:04:00 +0530242 toggle_editable_price_list_rate() {
Nabin Haitdd38a262014-12-26 13:15:21 +0530243 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 +0530244 var editable_price_list_rate = cint(frappe.defaults.get_default("editable_price_list_rate"));
Anand Doshibd67e872014-04-11 16:51:27 +0530245
Anand Doshi33fe8672013-08-02 12:39:10 +0530246 if(df && editable_price_list_rate) {
Saqiba5baf902021-09-13 15:50:20 +0530247 const parent_field = frappe.meta.get_parentfield(this.frm.doc.doctype, this.frm.doc.doctype + " Item");
248 if (!this.frm.fields_dict[parent_field]) return;
249
250 this.frm.fields_dict[parent_field].grid.update_docfield_property(
251 'price_list_rate', 'read_only', 0
252 );
Anand Doshi33fe8672013-08-02 12:39:10 +0530253 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530254 }
Anand Doshibd67e872014-04-11 16:51:27 +0530255
Faris Ansari1fe891b2021-04-23 08:04:00 +0530256 calculate_commission() {
Raffael Meyere10ab162021-11-30 13:24:18 +0100257 if(!this.frm.fields_dict.commission_rate) return;
Anand Doshibd67e872014-04-11 16:51:27 +0530258
Raffael Meyere10ab162021-11-30 13:24:18 +0100259 if(this.frm.doc.commission_rate > 100) {
260 this.frm.set_value("commission_rate", 100);
261 frappe.throw(`${__(frappe.meta.get_label(
262 this.frm.doc.doctype, "commission_rate", this.frm.doc.name
263 ))} ${__("cannot be greater than 100")}`);
Anand Doshi923d41d2013-05-28 17:23:36 +0530264 }
Raffael Meyere10ab162021-11-30 13:24:18 +0100265
266 this.frm.doc.amount_eligible_for_commission = this.frm.doc.items.reduce(
267 (sum, item) => item.grant_commission ? sum + item.base_net_amount : sum, 0
268 )
269
270 this.frm.doc.total_commission = flt(
271 this.frm.doc.amount_eligible_for_commission * this.frm.doc.commission_rate / 100.0,
272 precision("total_commission")
273 );
274
275 refresh_field(["amount_eligible_for_commission", "total_commission"]);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530276 }
Anand Doshibd67e872014-04-11 16:51:27 +0530277
Faris Ansari1fe891b2021-04-23 08:04:00 +0530278 calculate_contribution() {
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);
Raffael Meyere10ab162021-11-30 13:24:18 +0100282 if (!sales_person.allocated_percentage) return;
283
284 sales_person.allocated_amount = flt(
285 me.frm.doc.amount_eligible_for_commission
286 * sales_person.allocated_percentage
287 / 100.0,
288 precision("allocated_amount", sales_person)
289 );
Faris Ansariab74ca72017-05-30 12:54:42 +0530290 });
Faris Ansari1fe891b2021-04-23 08:04:00 +0530291 }
Anand Doshibd67e872014-04-11 16:51:27 +0530292
Faris Ansari1fe891b2021-04-23 08:04:00 +0530293 calculate_incentive(row) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530294 if(row.allocated_amount)
295 {
296 row.incentives = flt(
297 row.allocated_amount * row.commission_rate / 100.0,
deepeshgarg007c3772f12018-09-26 15:55:43 +0530298 precision("incentives", row));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530299 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530300 }
deepeshgarg00786152eb2018-09-25 19:08:16 +0530301
Faris Ansari1fe891b2021-04-23 08:04:00 +0530302 batch_no(doc, cdt, cdn) {
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530303 var me = this;
304 var item = frappe.get_doc(cdt, cdn);
Saqiba6f98d42020-07-23 18:51:26 +0530305
306 if (item.serial_no) {
307 return;
308 }
309
Shreyaa20157a2018-04-13 12:03:42 +0530310 item.serial_no = null;
311 var has_serial_no;
312 frappe.db.get_value('Item', {'item_code': item.item_code}, 'has_serial_no', (r) => {
313 has_serial_no = r && r.has_serial_no;
314 if(item.warehouse && item.item_code && item.batch_no) {
315 return this.frm.call({
316 method: "erpnext.stock.get_item_details.get_batch_qty_and_serial_no",
317 child: item,
318 args: {
319 "batch_no": item.batch_no,
Maricaf0e87f72019-11-27 15:49:41 +0530320 "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 +0530321 "warehouse": item.warehouse,
322 "item_code": item.item_code,
323 "has_serial_no": has_serial_no
324 },
325 "fieldname": "actual_batch_qty"
326 });
327 }
328 })
Faris Ansari1fe891b2021-04-23 08:04:00 +0530329 }
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530330
Faris Ansari1fe891b2021-04-23 08:04:00 +0530331 set_dynamic_labels() {
332 super.set_dynamic_labels();
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530333 this.set_product_bundle_help(this.frm.doc);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530334 }
Nabin Hait0b157552014-06-24 17:02:45 +0530335
Faris Ansari1fe891b2021-04-23 08:04:00 +0530336 set_product_bundle_help(doc) {
Nabin Hait0b157552014-06-24 17:02:45 +0530337 if(!cur_frm.fields_dict.packing_list) return;
Nabin Haite7d15362014-12-25 16:01:55 +0530338 if ((doc.packed_items || []).length) {
Nabin Hait0b157552014-06-24 17:02:45 +0530339 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(true);
340
Faris Ansariab74ca72017-05-30 12:54:42 +0530341 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
342 var help_msg = "<div class='alert alert-warning'>" +
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530343 __("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 +0530344 "</div>";
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530345 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = help_msg;
Nabin Hait0b157552014-06-24 17:02:45 +0530346 }
347 } else {
348 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(false);
Faris Ansariab74ca72017-05-30 12:54:42 +0530349 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530350 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = '';
Nabin Hait0b157552014-06-24 17:02:45 +0530351 }
352 }
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530353 refresh_field('product_bundle_help');
Faris Ansari1fe891b2021-04-23 08:04:00 +0530354 }
Anand Doshi01de9452016-01-26 16:22:50 +0530355
Faris Ansari1fe891b2021-04-23 08:04:00 +0530356 company_address() {
Nabin Hait879e1622017-08-21 08:28:55 +0530357 var me = this;
358 if(this.frm.doc.company_address) {
359 frappe.call({
360 method: "frappe.contacts.doctype.address.address.get_address_display",
361 args: {"address_dict": this.frm.doc.company_address },
362 callback: function(r) {
363 if(r.message) {
364 me.frm.set_value("company_address_display", r.message)
365 }
366 }
367 })
368 } else {
369 this.frm.set_value("company_address_display", "");
370 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530371 }
tundebabzyacccdb32017-11-23 08:35:15 +0100372
Faris Ansari1fe891b2021-04-23 08:04:00 +0530373 conversion_factor(doc, cdt, cdn, dont_fetch_price_list_rate) {
374 super.conversion_factor(doc, cdt, cdn, dont_fetch_price_list_rate);
tundebabzyf9b5c742018-01-25 19:21:05 +0100375 if(frappe.meta.get_docfield(cdt, "stock_qty", cdn) &&
376 in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530377 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
378 this.set_batch_number(cdt, cdn);
379 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530380 }
tundebabzyacccdb32017-11-23 08:35:15 +0100381
Faris Ansari1fe891b2021-04-23 08:04:00 +0530382 batch_no(doc, cdt, cdn) {
383 super.batch_no(doc, cdt, cdn);
384 }
Deepesh Gargbd9bdc52021-01-28 12:05:57 +0530385
Faris Ansari1fe891b2021-04-23 08:04:00 +0530386 qty(doc, cdt, cdn) {
387 super.qty(doc, cdt, cdn);
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530388
389 if(in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
390 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
391 this.set_batch_number(cdt, cdn);
392 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530393 }
tundebabzyacccdb32017-11-23 08:35:15 +0100394
395 /* Determine appropriate batch number and set it in the form.
396 * @param {string} cdt - Document Doctype
397 * @param {string} cdn - Document name
398 */
Faris Ansari1fe891b2021-04-23 08:04:00 +0530399 set_batch_number(cdt, cdn) {
tundebabzyacccdb32017-11-23 08:35:15 +0100400 const doc = frappe.get_doc(cdt, cdn);
Saqibfaea8542020-03-26 13:18:57 +0530401 if (doc && doc.has_batch_no && doc.warehouse) {
tundebabzyacccdb32017-11-23 08:35:15 +0100402 this._set_batch_number(doc);
403 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530404 }
tundebabzyacccdb32017-11-23 08:35:15 +0100405
Faris Ansari1fe891b2021-04-23 08:04:00 +0530406 _set_batch_number(doc) {
Rohit Waghchauree1f07042021-08-23 14:27:55 +0530407 if (doc.batch_no) {
408 return
409 }
410
Saqibfaea8542020-03-26 13:18:57 +0530411 let args = {'item_code': doc.item_code, 'warehouse': doc.warehouse, 'qty': flt(doc.qty) * flt(doc.conversion_factor)};
412 if (doc.has_serial_no && doc.serial_no) {
413 args['serial_no'] = doc.serial_no
414 }
marination8a30cb22020-04-23 00:18:21 +0530415
tundebabzyacccdb32017-11-23 08:35:15 +0100416 return frappe.call({
417 method: 'erpnext.stock.doctype.batch.batch.get_batch_no',
Saqibfaea8542020-03-26 13:18:57 +0530418 args: args,
tundebabzyacccdb32017-11-23 08:35:15 +0100419 callback: function(r) {
420 if(r.message) {
421 frappe.model.set_value(doc.doctype, doc.name, 'batch_no', r.message);
tundebabzy8ae53ca2017-11-30 07:07:21 +0100422 } else {
423 frappe.model.set_value(doc.doctype, doc.name, 'batch_no', r.message);
tundebabzyacccdb32017-11-23 08:35:15 +0100424 }
425 }
426 });
Faris Ansari1fe891b2021-04-23 08:04:00 +0530427 }
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200428
Faris Ansari1fe891b2021-04-23 08:04:00 +0530429 update_auto_repeat_reference(doc) {
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200430 if (doc.auto_repeat) {
431 frappe.call({
Rucha Mahabal65a627c2019-07-17 13:50:32 +0530432 method:"frappe.automation.doctype.auto_repeat.auto_repeat.update_reference",
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530433 args:{
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200434 docname: doc.auto_repeat,
435 reference:doc.name
436 },
437 callback: function(r){
438 if (r.message=="success") {
439 frappe.show_alert({message:__("Auto repeat document updated"), indicator:'green'});
440 } else {
441 frappe.show_alert({message:__("An error occurred during the update process"), indicator:'red'});
442 }
443 }
444 })
445 }
446 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530447};
Anand Doshi43f087c2014-08-26 14:25:53 +0530448
Neil Trini Lasrado6e343e22016-03-09 17:02:59 +0530449frappe.ui.form.on(cur_frm.doctype,"project", function(frm) {
Nabin Hait10b155a2014-10-23 13:18:59 +0530450 if(in_list(["Delivery Note", "Sales Invoice"], frm.doc.doctype)) {
Rushabh Mehta532eedf2016-05-19 18:22:49 +0530451 if(frm.doc.project) {
452 frappe.call({
453 method:'erpnext.projects.doctype.project.project.get_cost_center_name' ,
454 args: { project: frm.doc.project },
455 callback: function(r, rt) {
456 if(!r.exc) {
457 $.each(frm.doc["items"] || [], function(i, row) {
458 if(r.message) {
459 frappe.model.set_value(row.doctype, row.name, "cost_center", r.message);
Mohammad Hasnain Mohsin Rajane15b6a92020-11-25 15:36:41 +0530460 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 +0530461 }
462 })
463 }
Nabin Hait10b155a2014-10-23 13:18:59 +0530464 }
Rushabh Mehta532eedf2016-05-19 18:22:49 +0530465 })
466 }
Nabin Hait10b155a2014-10-23 13:18:59 +0530467 }
Nabin Haite45ec662018-08-01 17:44:34 +0530468})
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530469
470frappe.ui.form.on(cur_frm.doctype, {
471 set_as_lost_dialog: function(frm) {
472 var dialog = new frappe.ui.Dialog({
473 title: __("Set as Lost"),
474 fields: [
Anupam Kumare447c792020-08-13 09:20:36 +0530475 {
476 "fieldtype": "Table MultiSelect",
477 "label": __("Lost Reasons"),
478 "fieldname": "lost_reason",
479 "options": frm.doctype === 'Opportunity' ? 'Opportunity Lost Reason Detail': 'Quotation Lost Reason Detail',
480 "reqd": 1
481 },
482 {
Anupam Kumar6954dd62021-11-09 19:36:27 +0530483 "fieldtype": "Table MultiSelect",
484 "label": __("Competitors"),
485 "fieldname": "competitors",
486 "options": "Competitor Detail"
487 },
488 {
Anupam Kumar925eca02022-01-29 22:32:03 +0530489 "fieldtype": "Small Text",
Anupam Kumare447c792020-08-13 09:20:36 +0530490 "label": __("Detailed Reason"),
491 "fieldname": "detailed_reason"
492 },
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530493 ],
494 primary_action: function() {
Anupam Kumar6954dd62021-11-09 19:36:27 +0530495 let values = dialog.get_values();
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530496
497 frm.call({
498 doc: frm.doc,
499 method: 'declare_enquiry_lost',
500 args: {
Anupam Kumar6954dd62021-11-09 19:36:27 +0530501 'lost_reasons_list': values.lost_reason,
Anupam Kumar896adc32022-01-31 12:09:54 +0530502 'competitors': values.competitors ? values.competitors : [],
Anupam Kumar6954dd62021-11-09 19:36:27 +0530503 'detailed_reason': values.detailed_reason
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530504 },
505 callback: function(r) {
506 dialog.hide();
507 frm.reload_doc();
508 },
509 });
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530510 },
511 primary_action_label: __('Declare Lost')
512 });
513
514 dialog.show();
515 }
Anupam Kumar6954dd62021-11-09 19:36:27 +0530516})