blob: e3de49c57d814b5d2f26dc148431bbf6143d2ed7 [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();
Faris Ansari1fe891b2021-04-23 08:04:00 +053015 }
Rushabh Mehta532eedf2016-05-19 18:22:49 +053016
Faris Ansari1fe891b2021-04-23 08:04:00 +053017 onload() {
18 super.onload();
Anand Doshi9b496142013-07-11 19:13:58 +053019 this.setup_queries();
Rushabh Mehta30dc9a12017-11-17 14:31:09 +053020 this.frm.set_query('shipping_rule', function() {
21 return {
22 filters: {
23 "shipping_rule_type": "Selling"
24 }
25 };
26 });
Ankush Menat4551d7d2021-08-19 13:41:10 +053027 }
Anand Doshibd67e872014-04-11 16:51:27 +053028
Faris Ansari1fe891b2021-04-23 08:04:00 +053029 setup_queries() {
Anand Doshi99100a42013-07-04 17:13:53 +053030 var me = this;
Anand Doshibd67e872014-04-11 16:51:27 +053031
Rushabh Mehtab92087c2017-01-13 18:53:11 +053032 $.each([["customer", "customer"],
Anand Doshibd67e872014-04-11 16:51:27 +053033 ["lead", "lead"]],
Anand Doshid5d39ac2013-07-29 13:28:37 +053034 function(i, opts) {
Anand Doshibd67e872014-04-11 16:51:27 +053035 if(me.frm.fields_dict[opts[0]])
Anand Doshid5d39ac2013-07-29 13:28:37 +053036 me.frm.set_query(opts[0], erpnext.queries[opts[1]]);
37 });
Anand Doshibd67e872014-04-11 16:51:27 +053038
Rushabh Mehtab92087c2017-01-13 18:53:11 +053039 me.frm.set_query('contact_person', erpnext.queries.contact_query);
40 me.frm.set_query('customer_address', erpnext.queries.address_query);
41 me.frm.set_query('shipping_address_name', erpnext.queries.address_query);
Subin Tom98d41762021-12-21 12:35:44 +053042 me.frm.set_query('dispatch_address_name', erpnext.queries.dispatch_address_query);
Rushabh Mehtab92087c2017-01-13 18:53:11 +053043
Deepesh Garg3f376cc2022-06-02 13:57:54 +053044 erpnext.accounts.dimensions.setup_dimension_filters(me.frm, me.frm.doctype);
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",
Ankush Menat0e875f52022-05-16 12:14:07 +053066 filters: {'is_sales_item': 1, 'customer': cur_frm.doc.customer, 'has_variants': 0}
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
Faris Ansari1fe891b2021-04-23 08:04:00 +053084 }
Rohit Waghchauree887e922016-11-18 12:16:22 +053085
Faris Ansari1fe891b2021-04-23 08:04:00 +053086 refresh() {
87 super.refresh();
Ankush Menat4551d7d2021-08-19 13:41:10 +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));
Chillar Anand915b3432021-09-02 16:44:59 +053093
Nabin Hait2029ea92015-04-16 17:55:35 +053094 this.toggle_editable_price_list_rate();
Faris Ansari1fe891b2021-04-23 08:04:00 +053095 }
Anand Doshibd67e872014-04-11 16:51:27 +053096
Faris Ansari1fe891b2021-04-23 08:04:00 +053097 customer() {
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 });
Faris Ansari1fe891b2021-04-23 08:04:00 +0530102 }
Anand Doshibd67e872014-04-11 16:51:27 +0530103
Faris Ansari1fe891b2021-04-23 08:04:00 +0530104 customer_address() {
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");
Faris Ansari1fe891b2021-04-23 08:04:00 +0530107 }
Anand Doshibd67e872014-04-11 16:51:27 +0530108
Faris Ansari1fe891b2021-04-23 08:04:00 +0530109 shipping_address_name() {
Nabin Hait9d1f0772014-02-19 17:43:24 +0530110 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");
Faris Ansari1fe891b2021-04-23 08:04:00 +0530112 }
Anand Doshibd67e872014-04-11 16:51:27 +0530113
Subin Tom5265ba32021-07-13 14:58:17 +0530114 dispatch_address_name() {
115 erpnext.utils.get_address_display(this.frm, "dispatch_address_name", "dispatch_address");
116 }
117
Faris Ansari1fe891b2021-04-23 08:04:00 +0530118 sales_partner() {
Nabin Haita3dd72a2014-05-28 12:49:20 +0530119 this.apply_pricing_rule();
Faris Ansari1fe891b2021-04-23 08:04:00 +0530120 }
Nabin Haita3dd72a2014-05-28 12:49:20 +0530121
Faris Ansari1fe891b2021-04-23 08:04:00 +0530122 campaign() {
Nabin Haita3dd72a2014-05-28 12:49:20 +0530123 this.apply_pricing_rule();
Faris Ansari1fe891b2021-04-23 08:04:00 +0530124 }
Nabin Haita3dd72a2014-05-28 12:49:20 +0530125
Faris Ansari1fe891b2021-04-23 08:04:00 +0530126 selling_price_list() {
Anand Doshidffec8f2014-07-01 17:45:15 +0530127 this.apply_price_list();
rohitwaghchaure8e675eb2018-02-13 17:11:06 +0530128 this.set_dynamic_labels();
Faris Ansari1fe891b2021-04-23 08:04:00 +0530129 }
Anand Doshibd67e872014-04-11 16:51:27 +0530130
Faris Ansari1fe891b2021-04-23 08:04:00 +0530131 discount_percentage(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530132 var item = frappe.get_doc(cdt, cdn);
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530133 item.discount_amount = 0.0;
134 this.apply_discount_on_item(doc, cdt, cdn, 'discount_percentage');
Faris Ansari1fe891b2021-04-23 08:04:00 +0530135 }
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530136
Faris Ansari1fe891b2021-04-23 08:04:00 +0530137 discount_amount(doc, cdt, cdn) {
deepeshgarg007a9ea49c2019-07-04 15:56:34 +0530138
139 if(doc.name === cdn) {
140 return;
141 }
142
Nabin Hait593242f2019-04-05 19:35:02 +0530143 var item = frappe.get_doc(cdt, cdn);
144 item.discount_percentage = 0.0;
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530145 this.apply_discount_on_item(doc, cdt, cdn, 'discount_amount');
Faris Ansari1fe891b2021-04-23 08:04:00 +0530146 }
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530147
Faris Ansari1fe891b2021-04-23 08:04:00 +0530148 apply_discount_on_item(doc, cdt, cdn, field) {
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530149 var item = frappe.get_doc(cdt, cdn);
Nabin Haita7f757a2014-02-10 17:54:04 +0530150 if(!item.price_list_rate) {
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530151 item[field] = 0.0;
Anand Doshi923d41d2013-05-28 17:23:36 +0530152 } else {
Nabin Haita7f757a2014-02-10 17:54:04 +0530153 this.price_list_rate(doc, cdt, cdn);
Anand Doshi923d41d2013-05-28 17:23:36 +0530154 }
Saurabh5ada14b2016-02-26 18:02:55 +0530155 this.set_gross_profit(item);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530156 }
Anand Doshibd67e872014-04-11 16:51:27 +0530157
Faris Ansari1fe891b2021-04-23 08:04:00 +0530158 commission_rate() {
Anand Doshif3096132013-05-21 19:35:06 +0530159 this.calculate_commission();
Faris Ansari1fe891b2021-04-23 08:04:00 +0530160 }
Anand Doshibd67e872014-04-11 16:51:27 +0530161
Faris Ansari1fe891b2021-04-23 08:04:00 +0530162 total_commission() {
Raffael Meyere10ab162021-11-30 13:24:18 +0100163 frappe.model.round_floats_in(this.frm.doc, ["amount_eligible_for_commission", "total_commission"]);
Anand Doshibd67e872014-04-11 16:51:27 +0530164
Raffael Meyere10ab162021-11-30 13:24:18 +0100165 const { amount_eligible_for_commission } = this.frm.doc;
166 if(!amount_eligible_for_commission) return;
Anand Doshibd67e872014-04-11 16:51:27 +0530167
Raffael Meyere10ab162021-11-30 13:24:18 +0100168 this.frm.set_value(
169 "commission_rate", flt(
170 this.frm.doc.total_commission * 100.0 / amount_eligible_for_commission
171 )
172 );
Faris Ansari1fe891b2021-04-23 08:04:00 +0530173 }
Anand Doshibd67e872014-04-11 16:51:27 +0530174
Faris Ansari1fe891b2021-04-23 08:04:00 +0530175 allocated_percentage(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530176 var sales_person = frappe.get_doc(cdt, cdn);
Anand Doshif3096132013-05-21 19:35:06 +0530177 if(sales_person.allocated_percentage) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530178
Anand Doshif3096132013-05-21 19:35:06 +0530179 sales_person.allocated_percentage = flt(sales_person.allocated_percentage,
180 precision("allocated_percentage", sales_person));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530181
Raffael Meyere10ab162021-11-30 13:24:18 +0100182 sales_person.allocated_amount = flt(this.frm.doc.amount_eligible_for_commission *
Anand Doshibd67e872014-04-11 16:51:27 +0530183 sales_person.allocated_percentage / 100.0,
Anand Doshif3096132013-05-21 19:35:06 +0530184 precision("allocated_amount", sales_person));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530185 refresh_field(["allocated_amount"], sales_person);
Anand Doshif3096132013-05-21 19:35:06 +0530186
deepeshgarg00786152eb2018-09-25 19:08:16 +0530187 this.calculate_incentive(sales_person);
188 refresh_field(["allocated_percentage", "allocated_amount", "commission_rate","incentives"], sales_person.name,
Anand Doshif3096132013-05-21 19:35:06 +0530189 sales_person.parentfield);
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530190 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530191 }
deepeshgarg00786152eb2018-09-25 19:08:16 +0530192
Faris Ansari1fe891b2021-04-23 08:04:00 +0530193 sales_person(doc, cdt, cdn) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530194 var row = frappe.get_doc(cdt, cdn);
195 this.calculate_incentive(row);
196 refresh_field("incentives",row.name,row.parentfield);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530197 }
Anand Doshibd67e872014-04-11 16:51:27 +0530198
Faris Ansari1fe891b2021-04-23 08:04:00 +0530199 warehouse(doc, cdt, cdn) {
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530200 var me = this;
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530201 var item = frappe.get_doc(cdt, cdn);
Saqib14cdb242020-04-16 16:21:35 +0530202
marination734b57d2021-11-02 18:34:55 +0530203 // check if serial nos entered are as much as qty in row
204 if (item.serial_no) {
205 let serial_nos = item.serial_no.split(`\n`).filter(sn => sn.trim()); // filter out whitespaces
206 if (item.qty === serial_nos.length) return;
Saqib14cdb242020-04-16 16:21:35 +0530207 }
208
Shreyaa20157a2018-04-13 12:03:42 +0530209 if (item.serial_no && !item.batch_no) {
210 item.serial_no = null;
Anand Doshifc777182013-05-27 19:29:07 +0530211 }
Saqib14cdb242020-04-16 16:21:35 +0530212
Shreyaa20157a2018-04-13 12:03:42 +0530213 var has_batch_no;
214 frappe.db.get_value('Item', {'item_code': item.item_code}, 'has_batch_no', (r) => {
215 has_batch_no = r && r.has_batch_no;
216 if(item.item_code && item.warehouse) {
217 return this.frm.call({
218 method: "erpnext.stock.get_item_details.get_bin_details_and_serial_nos",
219 child: item,
220 args: {
221 item_code: item.item_code,
222 warehouse: item.warehouse,
Rohit Waghchaure6daab3c2019-09-19 17:01:26 +0530223 has_batch_no: has_batch_no || 0,
Shreyaa20157a2018-04-13 12:03:42 +0530224 stock_qty: item.stock_qty,
225 serial_no: item.serial_no || "",
226 },
227 callback:function(r){
228 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530229 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
Ankush Menatf89a64d2022-02-15 16:10:35 +0530230 if (has_batch_no) {
231 me.set_batch_number(cdt, cdn);
232 me.batch_no(doc, cdt, cdn);
233 }
Shreyaa20157a2018-04-13 12:03:42 +0530234 }
235 }
236 });
237 }
238 })
Faris Ansari1fe891b2021-04-23 08:04:00 +0530239 }
Anand Doshibd67e872014-04-11 16:51:27 +0530240
Faris Ansari1fe891b2021-04-23 08:04:00 +0530241 toggle_editable_price_list_rate() {
Nabin Haitdd38a262014-12-26 13:15:21 +0530242 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 +0530243 var editable_price_list_rate = cint(frappe.defaults.get_default("editable_price_list_rate"));
Anand Doshibd67e872014-04-11 16:51:27 +0530244
Anand Doshi33fe8672013-08-02 12:39:10 +0530245 if(df && editable_price_list_rate) {
Saqiba5baf902021-09-13 15:50:20 +0530246 const parent_field = frappe.meta.get_parentfield(this.frm.doc.doctype, this.frm.doc.doctype + " Item");
247 if (!this.frm.fields_dict[parent_field]) return;
248
249 this.frm.fields_dict[parent_field].grid.update_docfield_property(
250 'price_list_rate', 'read_only', 0
251 );
Anand Doshi33fe8672013-08-02 12:39:10 +0530252 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530253 }
Anand Doshibd67e872014-04-11 16:51:27 +0530254
Faris Ansari1fe891b2021-04-23 08:04:00 +0530255 calculate_commission() {
Deepesh Garg10632d72023-03-07 11:44:09 +0530256 if(!this.frm.fields_dict.commission_rate || this.frm.doc.docstatus === 1) return;
Anand Doshibd67e872014-04-11 16:51:27 +0530257
Raffael Meyere10ab162021-11-30 13:24:18 +0100258 if(this.frm.doc.commission_rate > 100) {
259 this.frm.set_value("commission_rate", 100);
260 frappe.throw(`${__(frappe.meta.get_label(
261 this.frm.doc.doctype, "commission_rate", this.frm.doc.name
262 ))} ${__("cannot be greater than 100")}`);
Anand Doshi923d41d2013-05-28 17:23:36 +0530263 }
Raffael Meyere10ab162021-11-30 13:24:18 +0100264
265 this.frm.doc.amount_eligible_for_commission = this.frm.doc.items.reduce(
266 (sum, item) => item.grant_commission ? sum + item.base_net_amount : sum, 0
267 )
268
269 this.frm.doc.total_commission = flt(
270 this.frm.doc.amount_eligible_for_commission * this.frm.doc.commission_rate / 100.0,
271 precision("total_commission")
272 );
273
274 refresh_field(["amount_eligible_for_commission", "total_commission"]);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530275 }
Anand Doshibd67e872014-04-11 16:51:27 +0530276
Faris Ansari1fe891b2021-04-23 08:04:00 +0530277 calculate_contribution() {
Anand Doshi2168e392013-05-23 19:25:08 +0530278 var me = this;
Rushabh Mehtaaa355af2014-03-26 18:24:30 +0530279 $.each(this.frm.doc.doctype.sales_team || [], function(i, sales_person) {
Faris Ansariab74ca72017-05-30 12:54:42 +0530280 frappe.model.round_floats_in(sales_person);
Raffael Meyere10ab162021-11-30 13:24:18 +0100281 if (!sales_person.allocated_percentage) return;
282
283 sales_person.allocated_amount = flt(
284 me.frm.doc.amount_eligible_for_commission
285 * sales_person.allocated_percentage
286 / 100.0,
287 precision("allocated_amount", sales_person)
288 );
Faris Ansariab74ca72017-05-30 12:54:42 +0530289 });
Faris Ansari1fe891b2021-04-23 08:04:00 +0530290 }
Anand Doshibd67e872014-04-11 16:51:27 +0530291
Faris Ansari1fe891b2021-04-23 08:04:00 +0530292 calculate_incentive(row) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530293 if(row.allocated_amount)
294 {
295 row.incentives = flt(
296 row.allocated_amount * row.commission_rate / 100.0,
deepeshgarg007c3772f12018-09-26 15:55:43 +0530297 precision("incentives", row));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530298 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530299 }
deepeshgarg00786152eb2018-09-25 19:08:16 +0530300
Faris Ansari1fe891b2021-04-23 08:04:00 +0530301 batch_no(doc, cdt, cdn) {
Daizy Modi19cd6872023-05-14 08:56:25 +0530302 super.batch_no(doc, cdt, cdn);
303
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530304 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 qty(doc, cdt, cdn) {
383 super.qty(doc, cdt, cdn);
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530384
385 if(in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
386 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
387 this.set_batch_number(cdt, cdn);
388 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530389 }
tundebabzyacccdb32017-11-23 08:35:15 +0100390
391 /* Determine appropriate batch number and set it in the form.
392 * @param {string} cdt - Document Doctype
393 * @param {string} cdn - Document name
394 */
Faris Ansari1fe891b2021-04-23 08:04:00 +0530395 set_batch_number(cdt, cdn) {
tundebabzyacccdb32017-11-23 08:35:15 +0100396 const doc = frappe.get_doc(cdt, cdn);
Saqibfaea8542020-03-26 13:18:57 +0530397 if (doc && doc.has_batch_no && doc.warehouse) {
tundebabzyacccdb32017-11-23 08:35:15 +0100398 this._set_batch_number(doc);
399 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530400 }
tundebabzyacccdb32017-11-23 08:35:15 +0100401
Faris Ansari1fe891b2021-04-23 08:04:00 +0530402 _set_batch_number(doc) {
Rohit Waghchauree1f07042021-08-23 14:27:55 +0530403 if (doc.batch_no) {
404 return
405 }
406
Saqibfaea8542020-03-26 13:18:57 +0530407 let args = {'item_code': doc.item_code, 'warehouse': doc.warehouse, 'qty': flt(doc.qty) * flt(doc.conversion_factor)};
408 if (doc.has_serial_no && doc.serial_no) {
409 args['serial_no'] = doc.serial_no
410 }
marination8a30cb22020-04-23 00:18:21 +0530411
tundebabzyacccdb32017-11-23 08:35:15 +0100412 return frappe.call({
413 method: 'erpnext.stock.doctype.batch.batch.get_batch_no',
Saqibfaea8542020-03-26 13:18:57 +0530414 args: args,
tundebabzyacccdb32017-11-23 08:35:15 +0100415 callback: function(r) {
416 if(r.message) {
417 frappe.model.set_value(doc.doctype, doc.name, 'batch_no', r.message);
418 }
419 }
420 });
Faris Ansari1fe891b2021-04-23 08:04:00 +0530421 }
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200422
Faris Ansari1fe891b2021-04-23 08:04:00 +0530423 update_auto_repeat_reference(doc) {
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200424 if (doc.auto_repeat) {
425 frappe.call({
Rucha Mahabal65a627c2019-07-17 13:50:32 +0530426 method:"frappe.automation.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 }
Faris Ansari1fe891b2021-04-23 08:04:00 +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);
Mohammad Hasnain Mohsin Rajane15b6a92020-11-25 15:36:41 +0530454 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 +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: [
Anupam Kumare447c792020-08-13 09:20:36 +0530469 {
470 "fieldtype": "Table MultiSelect",
471 "label": __("Lost Reasons"),
472 "fieldname": "lost_reason",
473 "options": frm.doctype === 'Opportunity' ? 'Opportunity Lost Reason Detail': 'Quotation Lost Reason Detail',
474 "reqd": 1
475 },
476 {
Anupam Kumar6954dd62021-11-09 19:36:27 +0530477 "fieldtype": "Table MultiSelect",
478 "label": __("Competitors"),
479 "fieldname": "competitors",
480 "options": "Competitor Detail"
481 },
482 {
Anupam Kumar925eca02022-01-29 22:32:03 +0530483 "fieldtype": "Small Text",
Anupam Kumare447c792020-08-13 09:20:36 +0530484 "label": __("Detailed Reason"),
485 "fieldname": "detailed_reason"
486 },
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530487 ],
488 primary_action: function() {
Anupam Kumar6954dd62021-11-09 19:36:27 +0530489 let values = dialog.get_values();
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530490
491 frm.call({
492 doc: frm.doc,
493 method: 'declare_enquiry_lost',
494 args: {
Anupam Kumar6954dd62021-11-09 19:36:27 +0530495 'lost_reasons_list': values.lost_reason,
Anupam Kumar896adc32022-01-31 12:09:54 +0530496 'competitors': values.competitors ? values.competitors : [],
Anupam Kumar6954dd62021-11-09 19:36:27 +0530497 'detailed_reason': values.detailed_reason
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530498 },
499 callback: function(r) {
500 dialog.hide();
501 frm.reload_doc();
502 },
503 });
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530504 },
505 primary_action_label: __('Declare Lost')
506 });
507
508 dialog.show();
509 }
Ankush Menat1646fbe2022-06-10 13:52:17 +0530510})