blob: 6cb53c3bbe381aea42aea0a2a6c8a5364f837d92 [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
Deepesh Garg3f376cc2022-06-02 13:57:54 +053046 erpnext.accounts.dimensions.setup_dimension_filters(me.frm, me.frm.doctype);
Anand Doshi99100a42013-07-04 17:13:53 +053047
Rushabh Mehta4a404e92013-08-09 18:11:35 +053048 if(this.frm.fields_dict.selling_price_list) {
49 this.frm.set_query("selling_price_list", function() {
Nabin Haitdc15b4f2014-01-20 16:48:49 +053050 return { filters: { selling: 1 } };
Anand Doshi720a01a2013-07-26 11:32:02 +053051 });
Anand Doshi720a01a2013-07-26 11:32:02 +053052 }
Anand Doshibd67e872014-04-11 16:51:27 +053053
karthikeyan57fc60212019-07-04 22:46:16 +053054 if(this.frm.fields_dict.tc_name) {
55 this.frm.set_query("tc_name", function() {
56 return { filters: { selling: 1 } };
57 });
58 }
59
Nabin Haitdd38a262014-12-26 13:15:21 +053060 if(!this.frm.fields_dict["items"]) {
Anand Doshi99100a42013-07-04 17:13:53 +053061 return;
62 }
Anand Doshibd67e872014-04-11 16:51:27 +053063
Nabin Haitdd38a262014-12-26 13:15:21 +053064 if(this.frm.fields_dict["items"].grid.get_field('item_code')) {
65 this.frm.set_query("item_code", "items", function() {
Anand Doshi9b496142013-07-11 19:13:58 +053066 return {
Rushabh Mehtad973c162016-08-16 11:32:08 +053067 query: "erpnext.controllers.queries.item_query",
Ankush Menat0e875f52022-05-16 12:14:07 +053068 filters: {'is_sales_item': 1, 'customer': cur_frm.doc.customer, 'has_variants': 0}
Anand Doshi9b496142013-07-11 19:13:58 +053069 }
Anand Doshi99100a42013-07-04 17:13:53 +053070 });
71 }
Anand Doshibd67e872014-04-11 16:51:27 +053072
Rushabh Mehta698c0402016-11-22 23:16:40 +053073 if(this.frm.fields_dict["packed_items"] &&
74 this.frm.fields_dict["packed_items"].grid.get_field('batch_no')) {
Rohit Waghchauree887e922016-11-18 12:16:22 +053075 this.frm.set_query("batch_no", "packed_items", function(doc, cdt, cdn) {
76 return me.set_query_for_batch(doc, cdt, cdn)
77 });
78 }
Deepesh Gargef0d26c2020-01-06 15:34:15 +053079
80 if(this.frm.fields_dict["items"].grid.get_field('item_code')) {
81 this.frm.set_query("item_tax_template", "items", function(doc, cdt, cdn) {
82 return me.set_query_for_item_tax_template(doc, cdt, cdn)
83 });
84 }
85
Faris Ansari1fe891b2021-04-23 08:04:00 +053086 }
Rohit Waghchauree887e922016-11-18 12:16:22 +053087
Faris Ansari1fe891b2021-04-23 08:04:00 +053088 refresh() {
89 super.refresh();
Ankush Menat4551d7d2021-08-19 13:41:10 +053090
Rushabh Mehta8d39fd92017-01-16 13:06:07 +053091 frappe.dynamic_link = {doc: this.frm.doc, fieldname: 'customer', doctype: 'Customer'}
Rushabh Mehtab92087c2017-01-13 18:53:11 +053092
Anand Doshibd67e872014-04-11 16:51:27 +053093 this.frm.toggle_display("customer_name",
Akhilesh Darjee5ce1b8b2013-12-09 16:29:04 +053094 (this.frm.doc.customer_name && this.frm.doc.customer_name!==this.frm.doc.customer));
Chillar Anand915b3432021-09-02 16:44:59 +053095
Nabin Hait2029ea92015-04-16 17:55:35 +053096 this.toggle_editable_price_list_rate();
Faris Ansari1fe891b2021-04-23 08:04:00 +053097 }
Anand Doshibd67e872014-04-11 16:51:27 +053098
Faris Ansari1fe891b2021-04-23 08:04:00 +053099 customer() {
Nabin Haita3dd72a2014-05-28 12:49:20 +0530100 var me = this;
Nabin Haite45ec662018-08-01 17:44:34 +0530101 erpnext.utils.get_party_details(this.frm, null, null, function() {
102 me.apply_price_list();
103 });
Faris Ansari1fe891b2021-04-23 08:04:00 +0530104 }
Anand Doshibd67e872014-04-11 16:51:27 +0530105
Faris Ansari1fe891b2021-04-23 08:04:00 +0530106 customer_address() {
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530107 erpnext.utils.get_address_display(this.frm, "customer_address");
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500108 erpnext.utils.set_taxes_from_address(this.frm, "customer_address", "customer_address", "shipping_address_name");
Faris Ansari1fe891b2021-04-23 08:04:00 +0530109 }
Anand Doshibd67e872014-04-11 16:51:27 +0530110
Faris Ansari1fe891b2021-04-23 08:04:00 +0530111 shipping_address_name() {
Nabin Hait9d1f0772014-02-19 17:43:24 +0530112 erpnext.utils.get_address_display(this.frm, "shipping_address_name", "shipping_address");
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500113 erpnext.utils.set_taxes_from_address(this.frm, "shipping_address_name", "customer_address", "shipping_address_name");
Faris Ansari1fe891b2021-04-23 08:04:00 +0530114 }
Anand Doshibd67e872014-04-11 16:51:27 +0530115
Subin Tom5265ba32021-07-13 14:58:17 +0530116 dispatch_address_name() {
117 erpnext.utils.get_address_display(this.frm, "dispatch_address_name", "dispatch_address");
118 }
119
Faris Ansari1fe891b2021-04-23 08:04:00 +0530120 sales_partner() {
Nabin Haita3dd72a2014-05-28 12:49:20 +0530121 this.apply_pricing_rule();
Faris Ansari1fe891b2021-04-23 08:04:00 +0530122 }
Nabin Haita3dd72a2014-05-28 12:49:20 +0530123
Faris Ansari1fe891b2021-04-23 08:04:00 +0530124 campaign() {
Nabin Haita3dd72a2014-05-28 12:49:20 +0530125 this.apply_pricing_rule();
Faris Ansari1fe891b2021-04-23 08:04:00 +0530126 }
Nabin Haita3dd72a2014-05-28 12:49:20 +0530127
Faris Ansari1fe891b2021-04-23 08:04:00 +0530128 selling_price_list() {
Anand Doshidffec8f2014-07-01 17:45:15 +0530129 this.apply_price_list();
rohitwaghchaure8e675eb2018-02-13 17:11:06 +0530130 this.set_dynamic_labels();
Faris Ansari1fe891b2021-04-23 08:04:00 +0530131 }
Anand Doshibd67e872014-04-11 16:51:27 +0530132
Faris Ansari1fe891b2021-04-23 08:04:00 +0530133 discount_percentage(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530134 var item = frappe.get_doc(cdt, cdn);
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530135 item.discount_amount = 0.0;
136 this.apply_discount_on_item(doc, cdt, cdn, 'discount_percentage');
Faris Ansari1fe891b2021-04-23 08:04:00 +0530137 }
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530138
Faris Ansari1fe891b2021-04-23 08:04:00 +0530139 discount_amount(doc, cdt, cdn) {
deepeshgarg007a9ea49c2019-07-04 15:56:34 +0530140
141 if(doc.name === cdn) {
142 return;
143 }
144
Nabin Hait593242f2019-04-05 19:35:02 +0530145 var item = frappe.get_doc(cdt, cdn);
146 item.discount_percentage = 0.0;
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530147 this.apply_discount_on_item(doc, cdt, cdn, 'discount_amount');
Faris Ansari1fe891b2021-04-23 08:04:00 +0530148 }
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530149
Faris Ansari1fe891b2021-04-23 08:04:00 +0530150 apply_discount_on_item(doc, cdt, cdn, field) {
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530151 var item = frappe.get_doc(cdt, cdn);
Nabin Haita7f757a2014-02-10 17:54:04 +0530152 if(!item.price_list_rate) {
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530153 item[field] = 0.0;
Anand Doshi923d41d2013-05-28 17:23:36 +0530154 } else {
Nabin Haita7f757a2014-02-10 17:54:04 +0530155 this.price_list_rate(doc, cdt, cdn);
Anand Doshi923d41d2013-05-28 17:23:36 +0530156 }
Saurabh5ada14b2016-02-26 18:02:55 +0530157 this.set_gross_profit(item);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530158 }
Anand Doshibd67e872014-04-11 16:51:27 +0530159
Faris Ansari1fe891b2021-04-23 08:04:00 +0530160 commission_rate() {
Anand Doshif3096132013-05-21 19:35:06 +0530161 this.calculate_commission();
Faris Ansari1fe891b2021-04-23 08:04:00 +0530162 }
Anand Doshibd67e872014-04-11 16:51:27 +0530163
Faris Ansari1fe891b2021-04-23 08:04:00 +0530164 total_commission() {
Raffael Meyere10ab162021-11-30 13:24:18 +0100165 frappe.model.round_floats_in(this.frm.doc, ["amount_eligible_for_commission", "total_commission"]);
Anand Doshibd67e872014-04-11 16:51:27 +0530166
Raffael Meyere10ab162021-11-30 13:24:18 +0100167 const { amount_eligible_for_commission } = this.frm.doc;
168 if(!amount_eligible_for_commission) return;
Anand Doshibd67e872014-04-11 16:51:27 +0530169
Raffael Meyere10ab162021-11-30 13:24:18 +0100170 this.frm.set_value(
171 "commission_rate", flt(
172 this.frm.doc.total_commission * 100.0 / amount_eligible_for_commission
173 )
174 );
Faris Ansari1fe891b2021-04-23 08:04:00 +0530175 }
Anand Doshibd67e872014-04-11 16:51:27 +0530176
Faris Ansari1fe891b2021-04-23 08:04:00 +0530177 allocated_percentage(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530178 var sales_person = frappe.get_doc(cdt, cdn);
Anand Doshif3096132013-05-21 19:35:06 +0530179 if(sales_person.allocated_percentage) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530180
Anand Doshif3096132013-05-21 19:35:06 +0530181 sales_person.allocated_percentage = flt(sales_person.allocated_percentage,
182 precision("allocated_percentage", sales_person));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530183
Raffael Meyere10ab162021-11-30 13:24:18 +0100184 sales_person.allocated_amount = flt(this.frm.doc.amount_eligible_for_commission *
Anand Doshibd67e872014-04-11 16:51:27 +0530185 sales_person.allocated_percentage / 100.0,
Anand Doshif3096132013-05-21 19:35:06 +0530186 precision("allocated_amount", sales_person));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530187 refresh_field(["allocated_amount"], sales_person);
Anand Doshif3096132013-05-21 19:35:06 +0530188
deepeshgarg00786152eb2018-09-25 19:08:16 +0530189 this.calculate_incentive(sales_person);
190 refresh_field(["allocated_percentage", "allocated_amount", "commission_rate","incentives"], sales_person.name,
Anand Doshif3096132013-05-21 19:35:06 +0530191 sales_person.parentfield);
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530192 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530193 }
deepeshgarg00786152eb2018-09-25 19:08:16 +0530194
Faris Ansari1fe891b2021-04-23 08:04:00 +0530195 sales_person(doc, cdt, cdn) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530196 var row = frappe.get_doc(cdt, cdn);
197 this.calculate_incentive(row);
198 refresh_field("incentives",row.name,row.parentfield);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530199 }
Anand Doshibd67e872014-04-11 16:51:27 +0530200
Faris Ansari1fe891b2021-04-23 08:04:00 +0530201 warehouse(doc, cdt, cdn) {
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530202 var me = this;
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530203 var item = frappe.get_doc(cdt, cdn);
Saqib14cdb242020-04-16 16:21:35 +0530204
marination734b57d2021-11-02 18:34:55 +0530205 // check if serial nos entered are as much as qty in row
206 if (item.serial_no) {
207 let serial_nos = item.serial_no.split(`\n`).filter(sn => sn.trim()); // filter out whitespaces
208 if (item.qty === serial_nos.length) return;
Saqib14cdb242020-04-16 16:21:35 +0530209 }
210
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 }
Saqib14cdb242020-04-16 16:21:35 +0530214
Shreyaa20157a2018-04-13 12:03:42 +0530215 var has_batch_no;
216 frappe.db.get_value('Item', {'item_code': item.item_code}, 'has_batch_no', (r) => {
217 has_batch_no = r && r.has_batch_no;
218 if(item.item_code && item.warehouse) {
219 return this.frm.call({
220 method: "erpnext.stock.get_item_details.get_bin_details_and_serial_nos",
221 child: item,
222 args: {
223 item_code: item.item_code,
224 warehouse: item.warehouse,
Rohit Waghchaure6daab3c2019-09-19 17:01:26 +0530225 has_batch_no: has_batch_no || 0,
Shreyaa20157a2018-04-13 12:03:42 +0530226 stock_qty: item.stock_qty,
227 serial_no: item.serial_no || "",
228 },
229 callback:function(r){
230 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530231 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
Ankush Menatf89a64d2022-02-15 16:10:35 +0530232 if (has_batch_no) {
233 me.set_batch_number(cdt, cdn);
234 me.batch_no(doc, cdt, cdn);
235 }
Shreyaa20157a2018-04-13 12:03:42 +0530236 }
237 }
238 });
239 }
240 })
Faris Ansari1fe891b2021-04-23 08:04:00 +0530241 }
Anand Doshibd67e872014-04-11 16:51:27 +0530242
Faris Ansari1fe891b2021-04-23 08:04:00 +0530243 toggle_editable_price_list_rate() {
Nabin Haitdd38a262014-12-26 13:15:21 +0530244 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 +0530245 var editable_price_list_rate = cint(frappe.defaults.get_default("editable_price_list_rate"));
Anand Doshibd67e872014-04-11 16:51:27 +0530246
Anand Doshi33fe8672013-08-02 12:39:10 +0530247 if(df && editable_price_list_rate) {
Saqiba5baf902021-09-13 15:50:20 +0530248 const parent_field = frappe.meta.get_parentfield(this.frm.doc.doctype, this.frm.doc.doctype + " Item");
249 if (!this.frm.fields_dict[parent_field]) return;
250
251 this.frm.fields_dict[parent_field].grid.update_docfield_property(
252 'price_list_rate', 'read_only', 0
253 );
Anand Doshi33fe8672013-08-02 12:39:10 +0530254 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530255 }
Anand Doshibd67e872014-04-11 16:51:27 +0530256
Faris Ansari1fe891b2021-04-23 08:04:00 +0530257 calculate_commission() {
Raffael Meyere10ab162021-11-30 13:24:18 +0100258 if(!this.frm.fields_dict.commission_rate) return;
Anand Doshibd67e872014-04-11 16:51:27 +0530259
Raffael Meyere10ab162021-11-30 13:24:18 +0100260 if(this.frm.doc.commission_rate > 100) {
261 this.frm.set_value("commission_rate", 100);
262 frappe.throw(`${__(frappe.meta.get_label(
263 this.frm.doc.doctype, "commission_rate", this.frm.doc.name
264 ))} ${__("cannot be greater than 100")}`);
Anand Doshi923d41d2013-05-28 17:23:36 +0530265 }
Raffael Meyere10ab162021-11-30 13:24:18 +0100266
267 this.frm.doc.amount_eligible_for_commission = this.frm.doc.items.reduce(
268 (sum, item) => item.grant_commission ? sum + item.base_net_amount : sum, 0
269 )
270
271 this.frm.doc.total_commission = flt(
272 this.frm.doc.amount_eligible_for_commission * this.frm.doc.commission_rate / 100.0,
273 precision("total_commission")
274 );
275
276 refresh_field(["amount_eligible_for_commission", "total_commission"]);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530277 }
Anand Doshibd67e872014-04-11 16:51:27 +0530278
Faris Ansari1fe891b2021-04-23 08:04:00 +0530279 calculate_contribution() {
Anand Doshi2168e392013-05-23 19:25:08 +0530280 var me = this;
Rushabh Mehtaaa355af2014-03-26 18:24:30 +0530281 $.each(this.frm.doc.doctype.sales_team || [], function(i, sales_person) {
Faris Ansariab74ca72017-05-30 12:54:42 +0530282 frappe.model.round_floats_in(sales_person);
Raffael Meyere10ab162021-11-30 13:24:18 +0100283 if (!sales_person.allocated_percentage) return;
284
285 sales_person.allocated_amount = flt(
286 me.frm.doc.amount_eligible_for_commission
287 * sales_person.allocated_percentage
288 / 100.0,
289 precision("allocated_amount", sales_person)
290 );
Faris Ansariab74ca72017-05-30 12:54:42 +0530291 });
Faris Ansari1fe891b2021-04-23 08:04:00 +0530292 }
Anand Doshibd67e872014-04-11 16:51:27 +0530293
Faris Ansari1fe891b2021-04-23 08:04:00 +0530294 calculate_incentive(row) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530295 if(row.allocated_amount)
296 {
297 row.incentives = flt(
298 row.allocated_amount * row.commission_rate / 100.0,
deepeshgarg007c3772f12018-09-26 15:55:43 +0530299 precision("incentives", row));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530300 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530301 }
deepeshgarg00786152eb2018-09-25 19:08:16 +0530302
Faris Ansari1fe891b2021-04-23 08:04:00 +0530303 batch_no(doc, cdt, cdn) {
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530304 var me = this;
305 var item = frappe.get_doc(cdt, cdn);
Saqiba6f98d42020-07-23 18:51:26 +0530306
307 if (item.serial_no) {
308 return;
309 }
310
Shreyaa20157a2018-04-13 12:03:42 +0530311 item.serial_no = null;
312 var has_serial_no;
313 frappe.db.get_value('Item', {'item_code': item.item_code}, 'has_serial_no', (r) => {
314 has_serial_no = r && r.has_serial_no;
315 if(item.warehouse && item.item_code && item.batch_no) {
316 return this.frm.call({
317 method: "erpnext.stock.get_item_details.get_batch_qty_and_serial_no",
318 child: item,
319 args: {
320 "batch_no": item.batch_no,
Maricaf0e87f72019-11-27 15:49:41 +0530321 "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 +0530322 "warehouse": item.warehouse,
323 "item_code": item.item_code,
324 "has_serial_no": has_serial_no
325 },
326 "fieldname": "actual_batch_qty"
327 });
328 }
329 })
Faris Ansari1fe891b2021-04-23 08:04:00 +0530330 }
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530331
Faris Ansari1fe891b2021-04-23 08:04:00 +0530332 set_dynamic_labels() {
333 super.set_dynamic_labels();
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530334 this.set_product_bundle_help(this.frm.doc);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530335 }
Nabin Hait0b157552014-06-24 17:02:45 +0530336
Faris Ansari1fe891b2021-04-23 08:04:00 +0530337 set_product_bundle_help(doc) {
Nabin Hait0b157552014-06-24 17:02:45 +0530338 if(!cur_frm.fields_dict.packing_list) return;
Nabin Haite7d15362014-12-25 16:01:55 +0530339 if ((doc.packed_items || []).length) {
Nabin Hait0b157552014-06-24 17:02:45 +0530340 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(true);
341
Faris Ansariab74ca72017-05-30 12:54:42 +0530342 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
343 var help_msg = "<div class='alert alert-warning'>" +
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530344 __("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 +0530345 "</div>";
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530346 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = help_msg;
Nabin Hait0b157552014-06-24 17:02:45 +0530347 }
348 } else {
349 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(false);
Faris Ansariab74ca72017-05-30 12:54:42 +0530350 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530351 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = '';
Nabin Hait0b157552014-06-24 17:02:45 +0530352 }
353 }
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530354 refresh_field('product_bundle_help');
Faris Ansari1fe891b2021-04-23 08:04:00 +0530355 }
Anand Doshi01de9452016-01-26 16:22:50 +0530356
Faris Ansari1fe891b2021-04-23 08:04:00 +0530357 company_address() {
Nabin Hait879e1622017-08-21 08:28:55 +0530358 var me = this;
359 if(this.frm.doc.company_address) {
360 frappe.call({
361 method: "frappe.contacts.doctype.address.address.get_address_display",
362 args: {"address_dict": this.frm.doc.company_address },
363 callback: function(r) {
364 if(r.message) {
365 me.frm.set_value("company_address_display", r.message)
366 }
367 }
368 })
369 } else {
370 this.frm.set_value("company_address_display", "");
371 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530372 }
tundebabzyacccdb32017-11-23 08:35:15 +0100373
Faris Ansari1fe891b2021-04-23 08:04:00 +0530374 conversion_factor(doc, cdt, cdn, dont_fetch_price_list_rate) {
375 super.conversion_factor(doc, cdt, cdn, dont_fetch_price_list_rate);
tundebabzyf9b5c742018-01-25 19:21:05 +0100376 if(frappe.meta.get_docfield(cdt, "stock_qty", cdn) &&
377 in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530378 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
379 this.set_batch_number(cdt, cdn);
380 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530381 }
tundebabzyacccdb32017-11-23 08:35:15 +0100382
Faris Ansari1fe891b2021-04-23 08:04:00 +0530383 batch_no(doc, cdt, cdn) {
384 super.batch_no(doc, cdt, cdn);
385 }
Deepesh Gargbd9bdc52021-01-28 12:05:57 +0530386
Faris Ansari1fe891b2021-04-23 08:04:00 +0530387 qty(doc, cdt, cdn) {
388 super.qty(doc, cdt, cdn);
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530389
390 if(in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
391 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
392 this.set_batch_number(cdt, cdn);
393 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530394 }
tundebabzyacccdb32017-11-23 08:35:15 +0100395
396 /* Determine appropriate batch number and set it in the form.
397 * @param {string} cdt - Document Doctype
398 * @param {string} cdn - Document name
399 */
Faris Ansari1fe891b2021-04-23 08:04:00 +0530400 set_batch_number(cdt, cdn) {
tundebabzyacccdb32017-11-23 08:35:15 +0100401 const doc = frappe.get_doc(cdt, cdn);
Saqibfaea8542020-03-26 13:18:57 +0530402 if (doc && doc.has_batch_no && doc.warehouse) {
tundebabzyacccdb32017-11-23 08:35:15 +0100403 this._set_batch_number(doc);
404 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530405 }
tundebabzyacccdb32017-11-23 08:35:15 +0100406
Faris Ansari1fe891b2021-04-23 08:04:00 +0530407 _set_batch_number(doc) {
Rohit Waghchauree1f07042021-08-23 14:27:55 +0530408 if (doc.batch_no) {
409 return
410 }
411
Saqibfaea8542020-03-26 13:18:57 +0530412 let args = {'item_code': doc.item_code, 'warehouse': doc.warehouse, 'qty': flt(doc.qty) * flt(doc.conversion_factor)};
413 if (doc.has_serial_no && doc.serial_no) {
414 args['serial_no'] = doc.serial_no
415 }
marination8a30cb22020-04-23 00:18:21 +0530416
tundebabzyacccdb32017-11-23 08:35:15 +0100417 return frappe.call({
418 method: 'erpnext.stock.doctype.batch.batch.get_batch_no',
Saqibfaea8542020-03-26 13:18:57 +0530419 args: args,
tundebabzyacccdb32017-11-23 08:35:15 +0100420 callback: function(r) {
421 if(r.message) {
422 frappe.model.set_value(doc.doctype, doc.name, 'batch_no', r.message);
tundebabzy8ae53ca2017-11-30 07:07:21 +0100423 } else {
424 frappe.model.set_value(doc.doctype, doc.name, 'batch_no', r.message);
tundebabzyacccdb32017-11-23 08:35:15 +0100425 }
426 }
427 });
Faris Ansari1fe891b2021-04-23 08:04:00 +0530428 }
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200429
Faris Ansari1fe891b2021-04-23 08:04:00 +0530430 update_auto_repeat_reference(doc) {
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200431 if (doc.auto_repeat) {
432 frappe.call({
Rucha Mahabal65a627c2019-07-17 13:50:32 +0530433 method:"frappe.automation.doctype.auto_repeat.auto_repeat.update_reference",
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530434 args:{
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200435 docname: doc.auto_repeat,
436 reference:doc.name
437 },
438 callback: function(r){
439 if (r.message=="success") {
440 frappe.show_alert({message:__("Auto repeat document updated"), indicator:'green'});
441 } else {
442 frappe.show_alert({message:__("An error occurred during the update process"), indicator:'red'});
443 }
444 }
445 })
446 }
447 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530448};
Anand Doshi43f087c2014-08-26 14:25:53 +0530449
Neil Trini Lasrado6e343e22016-03-09 17:02:59 +0530450frappe.ui.form.on(cur_frm.doctype,"project", function(frm) {
Nabin Hait10b155a2014-10-23 13:18:59 +0530451 if(in_list(["Delivery Note", "Sales Invoice"], frm.doc.doctype)) {
Rushabh Mehta532eedf2016-05-19 18:22:49 +0530452 if(frm.doc.project) {
453 frappe.call({
454 method:'erpnext.projects.doctype.project.project.get_cost_center_name' ,
455 args: { project: frm.doc.project },
456 callback: function(r, rt) {
457 if(!r.exc) {
458 $.each(frm.doc["items"] || [], function(i, row) {
459 if(r.message) {
460 frappe.model.set_value(row.doctype, row.name, "cost_center", r.message);
Mohammad Hasnain Mohsin Rajane15b6a92020-11-25 15:36:41 +0530461 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 +0530462 }
463 })
464 }
Nabin Hait10b155a2014-10-23 13:18:59 +0530465 }
Rushabh Mehta532eedf2016-05-19 18:22:49 +0530466 })
467 }
Nabin Hait10b155a2014-10-23 13:18:59 +0530468 }
Nabin Haite45ec662018-08-01 17:44:34 +0530469})
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530470
471frappe.ui.form.on(cur_frm.doctype, {
472 set_as_lost_dialog: function(frm) {
473 var dialog = new frappe.ui.Dialog({
474 title: __("Set as Lost"),
475 fields: [
Anupam Kumare447c792020-08-13 09:20:36 +0530476 {
477 "fieldtype": "Table MultiSelect",
478 "label": __("Lost Reasons"),
479 "fieldname": "lost_reason",
480 "options": frm.doctype === 'Opportunity' ? 'Opportunity Lost Reason Detail': 'Quotation Lost Reason Detail',
481 "reqd": 1
482 },
483 {
Anupam Kumar6954dd62021-11-09 19:36:27 +0530484 "fieldtype": "Table MultiSelect",
485 "label": __("Competitors"),
486 "fieldname": "competitors",
487 "options": "Competitor Detail"
488 },
489 {
Anupam Kumar925eca02022-01-29 22:32:03 +0530490 "fieldtype": "Small Text",
Anupam Kumare447c792020-08-13 09:20:36 +0530491 "label": __("Detailed Reason"),
492 "fieldname": "detailed_reason"
493 },
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530494 ],
495 primary_action: function() {
Anupam Kumar6954dd62021-11-09 19:36:27 +0530496 let values = dialog.get_values();
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530497
498 frm.call({
499 doc: frm.doc,
500 method: 'declare_enquiry_lost',
501 args: {
Anupam Kumar6954dd62021-11-09 19:36:27 +0530502 'lost_reasons_list': values.lost_reason,
Anupam Kumar896adc32022-01-31 12:09:54 +0530503 'competitors': values.competitors ? values.competitors : [],
Anupam Kumar6954dd62021-11-09 19:36:27 +0530504 'detailed_reason': values.detailed_reason
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530505 },
506 callback: function(r) {
507 dialog.hide();
508 frm.reload_doc();
509 },
510 });
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530511 },
512 primary_action_label: __('Declare Lost')
513 });
514
515 dialog.show();
516 }
Anupam Kumar6954dd62021-11-09 19:36:27 +0530517})