blob: a86e60494e82c2341660a477cd04906eb0fbb6be [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);
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",
DeeMysterioaa826242021-09-14 13:58:18 +053066 filters: {'is_sales_item': 1, 'customer': cur_frm.doc.customer}
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();
160 refresh_field("total_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() {
Nabin Hait5690be12015-02-12 16:09:11 +0530164 if(this.frm.doc.base_net_total) {
165 frappe.model.round_floats_in(this.frm.doc, ["base_net_total", "total_commission"]);
Anand Doshibd67e872014-04-11 16:51:27 +0530166
Nabin Hait5690be12015-02-12 16:09:11 +0530167 if(this.frm.doc.base_net_total < this.frm.doc.total_commission) {
Pratik Vyasb52618c2014-04-14 16:25:30 +0530168 var msg = (__("[Error]") + " " +
169 __(frappe.meta.get_label(this.frm.doc.doctype, "total_commission",
Anand Doshibd67e872014-04-11 16:51:27 +0530170 this.frm.doc.name)) + " > " +
Nabin Hait5690be12015-02-12 16:09:11 +0530171 __(frappe.meta.get_label(this.frm.doc.doctype, "base_net_total", this.frm.doc.name)));
Faris Ansariab74ca72017-05-30 12:54:42 +0530172 frappe.msgprint(msg);
Anand Doshif3096132013-05-21 19:35:06 +0530173 throw msg;
174 }
Anand Doshibd67e872014-04-11 16:51:27 +0530175
176 this.frm.set_value("commission_rate",
Nabin Hait5690be12015-02-12 16:09:11 +0530177 flt(this.frm.doc.total_commission * 100.0 / this.frm.doc.base_net_total));
Anand Doshif3096132013-05-21 19:35:06 +0530178 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530179 }
Anand Doshibd67e872014-04-11 16:51:27 +0530180
Faris Ansari1fe891b2021-04-23 08:04:00 +0530181 allocated_percentage(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530182 var sales_person = frappe.get_doc(cdt, cdn);
Anand Doshif3096132013-05-21 19:35:06 +0530183 if(sales_person.allocated_percentage) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530184
Anand Doshif3096132013-05-21 19:35:06 +0530185 sales_person.allocated_percentage = flt(sales_person.allocated_percentage,
186 precision("allocated_percentage", sales_person));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530187
Nabin Hait5690be12015-02-12 16:09:11 +0530188 sales_person.allocated_amount = flt(this.frm.doc.base_net_total *
Anand Doshibd67e872014-04-11 16:51:27 +0530189 sales_person.allocated_percentage / 100.0,
Anand Doshif3096132013-05-21 19:35:06 +0530190 precision("allocated_amount", sales_person));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530191 refresh_field(["allocated_amount"], sales_person);
Anand Doshif3096132013-05-21 19:35:06 +0530192
deepeshgarg00786152eb2018-09-25 19:08:16 +0530193 this.calculate_incentive(sales_person);
194 refresh_field(["allocated_percentage", "allocated_amount", "commission_rate","incentives"], sales_person.name,
Anand Doshif3096132013-05-21 19:35:06 +0530195 sales_person.parentfield);
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530196 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530197 }
deepeshgarg00786152eb2018-09-25 19:08:16 +0530198
Faris Ansari1fe891b2021-04-23 08:04:00 +0530199 sales_person(doc, cdt, cdn) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530200 var row = frappe.get_doc(cdt, cdn);
201 this.calculate_incentive(row);
202 refresh_field("incentives",row.name,row.parentfield);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530203 }
Anand Doshibd67e872014-04-11 16:51:27 +0530204
Faris Ansari1fe891b2021-04-23 08:04:00 +0530205 warehouse(doc, cdt, cdn) {
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530206 var me = this;
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530207 var item = frappe.get_doc(cdt, cdn);
Saqib14cdb242020-04-16 16:21:35 +0530208
marination734b57d2021-11-02 18:34:55 +0530209 // check if serial nos entered are as much as qty in row
210 if (item.serial_no) {
211 let serial_nos = item.serial_no.split(`\n`).filter(sn => sn.trim()); // filter out whitespaces
212 if (item.qty === serial_nos.length) return;
Saqib14cdb242020-04-16 16:21:35 +0530213 }
214
Shreyaa20157a2018-04-13 12:03:42 +0530215 if (item.serial_no && !item.batch_no) {
216 item.serial_no = null;
Anand Doshifc777182013-05-27 19:29:07 +0530217 }
Saqib14cdb242020-04-16 16:21:35 +0530218
Shreyaa20157a2018-04-13 12:03:42 +0530219 var has_batch_no;
220 frappe.db.get_value('Item', {'item_code': item.item_code}, 'has_batch_no', (r) => {
221 has_batch_no = r && r.has_batch_no;
222 if(item.item_code && item.warehouse) {
223 return this.frm.call({
224 method: "erpnext.stock.get_item_details.get_bin_details_and_serial_nos",
225 child: item,
226 args: {
227 item_code: item.item_code,
228 warehouse: item.warehouse,
Rohit Waghchaure6daab3c2019-09-19 17:01:26 +0530229 has_batch_no: has_batch_no || 0,
Shreyaa20157a2018-04-13 12:03:42 +0530230 stock_qty: item.stock_qty,
231 serial_no: item.serial_no || "",
232 },
233 callback:function(r){
234 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530235
236 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
237
Shreyaa20157a2018-04-13 12:03:42 +0530238 me.set_batch_number(cdt, cdn);
239 me.batch_no(doc, cdt, cdn);
240 }
241 }
242 });
243 }
244 })
Faris Ansari1fe891b2021-04-23 08:04:00 +0530245 }
Anand Doshibd67e872014-04-11 16:51:27 +0530246
Faris Ansari1fe891b2021-04-23 08:04:00 +0530247 toggle_editable_price_list_rate() {
Nabin Haitdd38a262014-12-26 13:15:21 +0530248 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 +0530249 var editable_price_list_rate = cint(frappe.defaults.get_default("editable_price_list_rate"));
Anand Doshibd67e872014-04-11 16:51:27 +0530250
Anand Doshi33fe8672013-08-02 12:39:10 +0530251 if(df && editable_price_list_rate) {
Saqiba5baf902021-09-13 15:50:20 +0530252 const parent_field = frappe.meta.get_parentfield(this.frm.doc.doctype, this.frm.doc.doctype + " Item");
253 if (!this.frm.fields_dict[parent_field]) return;
254
255 this.frm.fields_dict[parent_field].grid.update_docfield_property(
256 'price_list_rate', 'read_only', 0
257 );
Anand Doshi33fe8672013-08-02 12:39:10 +0530258 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530259 }
Anand Doshibd67e872014-04-11 16:51:27 +0530260
Faris Ansari1fe891b2021-04-23 08:04:00 +0530261 calculate_commission() {
Anand Doshi923d41d2013-05-28 17:23:36 +0530262 if(this.frm.fields_dict.commission_rate) {
263 if(this.frm.doc.commission_rate > 100) {
Pratik Vyasb52618c2014-04-14 16:25:30 +0530264 var msg = __(frappe.meta.get_label(this.frm.doc.doctype, "commission_rate", this.frm.doc.name)) +
265 " " + __("cannot be greater than 100");
Faris Ansariab74ca72017-05-30 12:54:42 +0530266 frappe.msgprint(msg);
Anand Doshi923d41d2013-05-28 17:23:36 +0530267 throw msg;
268 }
Anand Doshibd67e872014-04-11 16:51:27 +0530269
Nabin Hait5690be12015-02-12 16:09:11 +0530270 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 +0530271 precision("total_commission"));
272 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530273 }
Anand Doshibd67e872014-04-11 16:51:27 +0530274
Faris Ansari1fe891b2021-04-23 08:04:00 +0530275 calculate_contribution() {
Anand Doshi2168e392013-05-23 19:25:08 +0530276 var me = this;
Rushabh Mehtaaa355af2014-03-26 18:24:30 +0530277 $.each(this.frm.doc.doctype.sales_team || [], function(i, sales_person) {
Faris Ansariab74ca72017-05-30 12:54:42 +0530278 frappe.model.round_floats_in(sales_person);
279 if(sales_person.allocated_percentage) {
280 sales_person.allocated_amount = flt(
281 me.frm.doc.base_net_total * sales_person.allocated_percentage / 100.0,
282 precision("allocated_amount", sales_person));
283 }
284 });
Faris Ansari1fe891b2021-04-23 08:04:00 +0530285 }
Anand Doshibd67e872014-04-11 16:51:27 +0530286
Faris Ansari1fe891b2021-04-23 08:04:00 +0530287 calculate_incentive(row) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530288 if(row.allocated_amount)
289 {
290 row.incentives = flt(
291 row.allocated_amount * row.commission_rate / 100.0,
deepeshgarg007c3772f12018-09-26 15:55:43 +0530292 precision("incentives", row));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530293 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530294 }
deepeshgarg00786152eb2018-09-25 19:08:16 +0530295
Faris Ansari1fe891b2021-04-23 08:04:00 +0530296 batch_no(doc, cdt, cdn) {
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530297 var me = this;
298 var item = frappe.get_doc(cdt, cdn);
Saqiba6f98d42020-07-23 18:51:26 +0530299
300 if (item.serial_no) {
301 return;
302 }
303
Shreyaa20157a2018-04-13 12:03:42 +0530304 item.serial_no = null;
305 var has_serial_no;
306 frappe.db.get_value('Item', {'item_code': item.item_code}, 'has_serial_no', (r) => {
307 has_serial_no = r && r.has_serial_no;
308 if(item.warehouse && item.item_code && item.batch_no) {
309 return this.frm.call({
310 method: "erpnext.stock.get_item_details.get_batch_qty_and_serial_no",
311 child: item,
312 args: {
313 "batch_no": item.batch_no,
Maricaf0e87f72019-11-27 15:49:41 +0530314 "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 +0530315 "warehouse": item.warehouse,
316 "item_code": item.item_code,
317 "has_serial_no": has_serial_no
318 },
319 "fieldname": "actual_batch_qty"
320 });
321 }
322 })
Faris Ansari1fe891b2021-04-23 08:04:00 +0530323 }
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530324
Faris Ansari1fe891b2021-04-23 08:04:00 +0530325 set_dynamic_labels() {
326 super.set_dynamic_labels();
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530327 this.set_product_bundle_help(this.frm.doc);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530328 }
Nabin Hait0b157552014-06-24 17:02:45 +0530329
Faris Ansari1fe891b2021-04-23 08:04:00 +0530330 set_product_bundle_help(doc) {
Nabin Hait0b157552014-06-24 17:02:45 +0530331 if(!cur_frm.fields_dict.packing_list) return;
Nabin Haite7d15362014-12-25 16:01:55 +0530332 if ((doc.packed_items || []).length) {
Nabin Hait0b157552014-06-24 17:02:45 +0530333 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(true);
334
Faris Ansariab74ca72017-05-30 12:54:42 +0530335 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
336 var help_msg = "<div class='alert alert-warning'>" +
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530337 __("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 +0530338 "</div>";
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530339 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = help_msg;
Nabin Hait0b157552014-06-24 17:02:45 +0530340 }
341 } else {
342 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(false);
Faris Ansariab74ca72017-05-30 12:54:42 +0530343 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530344 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = '';
Nabin Hait0b157552014-06-24 17:02:45 +0530345 }
346 }
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530347 refresh_field('product_bundle_help');
Faris Ansari1fe891b2021-04-23 08:04:00 +0530348 }
Anand Doshi01de9452016-01-26 16:22:50 +0530349
Faris Ansari1fe891b2021-04-23 08:04:00 +0530350 company_address() {
Nabin Hait879e1622017-08-21 08:28:55 +0530351 var me = this;
352 if(this.frm.doc.company_address) {
353 frappe.call({
354 method: "frappe.contacts.doctype.address.address.get_address_display",
355 args: {"address_dict": this.frm.doc.company_address },
356 callback: function(r) {
357 if(r.message) {
358 me.frm.set_value("company_address_display", r.message)
359 }
360 }
361 })
362 } else {
363 this.frm.set_value("company_address_display", "");
364 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530365 }
tundebabzyacccdb32017-11-23 08:35:15 +0100366
Faris Ansari1fe891b2021-04-23 08:04:00 +0530367 conversion_factor(doc, cdt, cdn, dont_fetch_price_list_rate) {
368 super.conversion_factor(doc, cdt, cdn, dont_fetch_price_list_rate);
tundebabzyf9b5c742018-01-25 19:21:05 +0100369 if(frappe.meta.get_docfield(cdt, "stock_qty", cdn) &&
370 in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530371 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
372 this.set_batch_number(cdt, cdn);
373 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530374 }
tundebabzyacccdb32017-11-23 08:35:15 +0100375
Faris Ansari1fe891b2021-04-23 08:04:00 +0530376 batch_no(doc, cdt, cdn) {
377 super.batch_no(doc, cdt, cdn);
378 }
Deepesh Gargbd9bdc52021-01-28 12:05:57 +0530379
Faris Ansari1fe891b2021-04-23 08:04:00 +0530380 qty(doc, cdt, cdn) {
381 super.qty(doc, cdt, cdn);
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530382
383 if(in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
384 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
385 this.set_batch_number(cdt, cdn);
386 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530387 }
tundebabzyacccdb32017-11-23 08:35:15 +0100388
389 /* Determine appropriate batch number and set it in the form.
390 * @param {string} cdt - Document Doctype
391 * @param {string} cdn - Document name
392 */
Faris Ansari1fe891b2021-04-23 08:04:00 +0530393 set_batch_number(cdt, cdn) {
tundebabzyacccdb32017-11-23 08:35:15 +0100394 const doc = frappe.get_doc(cdt, cdn);
Saqibfaea8542020-03-26 13:18:57 +0530395 if (doc && doc.has_batch_no && doc.warehouse) {
tundebabzyacccdb32017-11-23 08:35:15 +0100396 this._set_batch_number(doc);
397 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530398 }
tundebabzyacccdb32017-11-23 08:35:15 +0100399
Faris Ansari1fe891b2021-04-23 08:04:00 +0530400 _set_batch_number(doc) {
Rohit Waghchauree1f07042021-08-23 14:27:55 +0530401 if (doc.batch_no) {
402 return
403 }
404
Saqibfaea8542020-03-26 13:18:57 +0530405 let args = {'item_code': doc.item_code, 'warehouse': doc.warehouse, 'qty': flt(doc.qty) * flt(doc.conversion_factor)};
406 if (doc.has_serial_no && doc.serial_no) {
407 args['serial_no'] = doc.serial_no
408 }
marination8a30cb22020-04-23 00:18:21 +0530409
tundebabzyacccdb32017-11-23 08:35:15 +0100410 return frappe.call({
411 method: 'erpnext.stock.doctype.batch.batch.get_batch_no',
Saqibfaea8542020-03-26 13:18:57 +0530412 args: args,
tundebabzyacccdb32017-11-23 08:35:15 +0100413 callback: function(r) {
414 if(r.message) {
415 frappe.model.set_value(doc.doctype, doc.name, 'batch_no', r.message);
tundebabzy8ae53ca2017-11-30 07:07:21 +0100416 } else {
417 frappe.model.set_value(doc.doctype, doc.name, 'batch_no', r.message);
tundebabzyacccdb32017-11-23 08:35:15 +0100418 }
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 {
477 "fieldtype": "Text",
478 "label": __("Detailed Reason"),
479 "fieldname": "detailed_reason"
480 },
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530481 ],
482 primary_action: function() {
483 var values = dialog.get_values();
484 var reasons = values["lost_reason"];
485 var detailed_reason = values["detailed_reason"];
486
487 frm.call({
488 doc: frm.doc,
489 method: 'declare_enquiry_lost',
490 args: {
491 'lost_reasons_list': reasons,
492 'detailed_reason': detailed_reason
493 },
494 callback: function(r) {
495 dialog.hide();
496 frm.reload_doc();
497 },
498 });
499 refresh_field("lost_reason");
500 },
501 primary_action_label: __('Declare Lost')
502 });
503
504 dialog.show();
505 }
506})