blob: 955ef5e939616c070ae90bba533b468c1b098d1e [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",
66 filters: {'is_sales_item': 1}
Anand Doshi9b496142013-07-11 19:13:58 +053067 }
Anand Doshi99100a42013-07-04 17:13:53 +053068 });
69 }
Anand Doshibd67e872014-04-11 16:51:27 +053070
Rushabh Mehta698c0402016-11-22 23:16:40 +053071 if(this.frm.fields_dict["packed_items"] &&
72 this.frm.fields_dict["packed_items"].grid.get_field('batch_no')) {
Rohit Waghchauree887e922016-11-18 12:16:22 +053073 this.frm.set_query("batch_no", "packed_items", function(doc, cdt, cdn) {
74 return me.set_query_for_batch(doc, cdt, cdn)
75 });
76 }
Deepesh Gargef0d26c2020-01-06 15:34:15 +053077
78 if(this.frm.fields_dict["items"].grid.get_field('item_code')) {
79 this.frm.set_query("item_tax_template", "items", function(doc, cdt, cdn) {
80 return me.set_query_for_item_tax_template(doc, cdt, cdn)
81 });
82 }
83
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
209 if (item.serial_no && item.qty === item.serial_no.split(`\n`).length) {
210 return;
211 }
212
Shreyaa20157a2018-04-13 12:03:42 +0530213 if (item.serial_no && !item.batch_no) {
214 item.serial_no = null;
Anand Doshifc777182013-05-27 19:29:07 +0530215 }
Saqib14cdb242020-04-16 16:21:35 +0530216
Shreyaa20157a2018-04-13 12:03:42 +0530217 var has_batch_no;
218 frappe.db.get_value('Item', {'item_code': item.item_code}, 'has_batch_no', (r) => {
219 has_batch_no = r && r.has_batch_no;
220 if(item.item_code && item.warehouse) {
221 return this.frm.call({
222 method: "erpnext.stock.get_item_details.get_bin_details_and_serial_nos",
223 child: item,
224 args: {
225 item_code: item.item_code,
226 warehouse: item.warehouse,
Rohit Waghchaure6daab3c2019-09-19 17:01:26 +0530227 has_batch_no: has_batch_no || 0,
Shreyaa20157a2018-04-13 12:03:42 +0530228 stock_qty: item.stock_qty,
229 serial_no: item.serial_no || "",
230 },
231 callback:function(r){
232 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530233
234 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
235
Shreyaa20157a2018-04-13 12:03:42 +0530236 me.set_batch_number(cdt, cdn);
237 me.batch_no(doc, cdt, cdn);
238 }
239 }
240 });
241 }
242 })
Faris Ansari1fe891b2021-04-23 08:04:00 +0530243 }
Anand Doshibd67e872014-04-11 16:51:27 +0530244
Faris Ansari1fe891b2021-04-23 08:04:00 +0530245 toggle_editable_price_list_rate() {
Nabin Haitdd38a262014-12-26 13:15:21 +0530246 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 +0530247 var editable_price_list_rate = cint(frappe.defaults.get_default("editable_price_list_rate"));
Anand Doshibd67e872014-04-11 16:51:27 +0530248
Anand Doshi33fe8672013-08-02 12:39:10 +0530249 if(df && editable_price_list_rate) {
250 df.read_only = 0;
251 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530252 }
Anand Doshibd67e872014-04-11 16:51:27 +0530253
Faris Ansari1fe891b2021-04-23 08:04:00 +0530254 calculate_commission() {
Anand Doshi923d41d2013-05-28 17:23:36 +0530255 if(this.frm.fields_dict.commission_rate) {
256 if(this.frm.doc.commission_rate > 100) {
Pratik Vyasb52618c2014-04-14 16:25:30 +0530257 var msg = __(frappe.meta.get_label(this.frm.doc.doctype, "commission_rate", this.frm.doc.name)) +
258 " " + __("cannot be greater than 100");
Faris Ansariab74ca72017-05-30 12:54:42 +0530259 frappe.msgprint(msg);
Anand Doshi923d41d2013-05-28 17:23:36 +0530260 throw msg;
261 }
Anand Doshibd67e872014-04-11 16:51:27 +0530262
Nabin Hait5690be12015-02-12 16:09:11 +0530263 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 +0530264 precision("total_commission"));
265 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530266 }
Anand Doshibd67e872014-04-11 16:51:27 +0530267
Faris Ansari1fe891b2021-04-23 08:04:00 +0530268 calculate_contribution() {
Anand Doshi2168e392013-05-23 19:25:08 +0530269 var me = this;
Rushabh Mehtaaa355af2014-03-26 18:24:30 +0530270 $.each(this.frm.doc.doctype.sales_team || [], function(i, sales_person) {
Faris Ansariab74ca72017-05-30 12:54:42 +0530271 frappe.model.round_floats_in(sales_person);
272 if(sales_person.allocated_percentage) {
273 sales_person.allocated_amount = flt(
274 me.frm.doc.base_net_total * sales_person.allocated_percentage / 100.0,
275 precision("allocated_amount", sales_person));
276 }
277 });
Faris Ansari1fe891b2021-04-23 08:04:00 +0530278 }
Anand Doshibd67e872014-04-11 16:51:27 +0530279
Faris Ansari1fe891b2021-04-23 08:04:00 +0530280 calculate_incentive(row) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530281 if(row.allocated_amount)
282 {
283 row.incentives = flt(
284 row.allocated_amount * row.commission_rate / 100.0,
deepeshgarg007c3772f12018-09-26 15:55:43 +0530285 precision("incentives", row));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530286 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530287 }
deepeshgarg00786152eb2018-09-25 19:08:16 +0530288
Faris Ansari1fe891b2021-04-23 08:04:00 +0530289 batch_no(doc, cdt, cdn) {
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530290 var me = this;
291 var item = frappe.get_doc(cdt, cdn);
Saqiba6f98d42020-07-23 18:51:26 +0530292
293 if (item.serial_no) {
294 return;
295 }
296
Shreyaa20157a2018-04-13 12:03:42 +0530297 item.serial_no = null;
298 var has_serial_no;
299 frappe.db.get_value('Item', {'item_code': item.item_code}, 'has_serial_no', (r) => {
300 has_serial_no = r && r.has_serial_no;
301 if(item.warehouse && item.item_code && item.batch_no) {
302 return this.frm.call({
303 method: "erpnext.stock.get_item_details.get_batch_qty_and_serial_no",
304 child: item,
305 args: {
306 "batch_no": item.batch_no,
Maricaf0e87f72019-11-27 15:49:41 +0530307 "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 +0530308 "warehouse": item.warehouse,
309 "item_code": item.item_code,
310 "has_serial_no": has_serial_no
311 },
312 "fieldname": "actual_batch_qty"
313 });
314 }
315 })
Faris Ansari1fe891b2021-04-23 08:04:00 +0530316 }
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530317
Faris Ansari1fe891b2021-04-23 08:04:00 +0530318 set_dynamic_labels() {
319 super.set_dynamic_labels();
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530320 this.set_product_bundle_help(this.frm.doc);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530321 }
Nabin Hait0b157552014-06-24 17:02:45 +0530322
Faris Ansari1fe891b2021-04-23 08:04:00 +0530323 set_product_bundle_help(doc) {
Nabin Hait0b157552014-06-24 17:02:45 +0530324 if(!cur_frm.fields_dict.packing_list) return;
Nabin Haite7d15362014-12-25 16:01:55 +0530325 if ((doc.packed_items || []).length) {
Nabin Hait0b157552014-06-24 17:02:45 +0530326 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(true);
327
Faris Ansariab74ca72017-05-30 12:54:42 +0530328 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
329 var help_msg = "<div class='alert alert-warning'>" +
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530330 __("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 +0530331 "</div>";
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530332 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = help_msg;
Nabin Hait0b157552014-06-24 17:02:45 +0530333 }
334 } else {
335 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(false);
Faris Ansariab74ca72017-05-30 12:54:42 +0530336 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530337 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = '';
Nabin Hait0b157552014-06-24 17:02:45 +0530338 }
339 }
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530340 refresh_field('product_bundle_help');
Faris Ansari1fe891b2021-04-23 08:04:00 +0530341 }
Anand Doshi01de9452016-01-26 16:22:50 +0530342
Faris Ansari1fe891b2021-04-23 08:04:00 +0530343 company_address() {
Nabin Hait879e1622017-08-21 08:28:55 +0530344 var me = this;
345 if(this.frm.doc.company_address) {
346 frappe.call({
347 method: "frappe.contacts.doctype.address.address.get_address_display",
348 args: {"address_dict": this.frm.doc.company_address },
349 callback: function(r) {
350 if(r.message) {
351 me.frm.set_value("company_address_display", r.message)
352 }
353 }
354 })
355 } else {
356 this.frm.set_value("company_address_display", "");
357 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530358 }
tundebabzyacccdb32017-11-23 08:35:15 +0100359
Faris Ansari1fe891b2021-04-23 08:04:00 +0530360 conversion_factor(doc, cdt, cdn, dont_fetch_price_list_rate) {
361 super.conversion_factor(doc, cdt, cdn, dont_fetch_price_list_rate);
tundebabzyf9b5c742018-01-25 19:21:05 +0100362 if(frappe.meta.get_docfield(cdt, "stock_qty", cdn) &&
363 in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530364 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
365 this.set_batch_number(cdt, cdn);
366 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530367 }
tundebabzyacccdb32017-11-23 08:35:15 +0100368
Faris Ansari1fe891b2021-04-23 08:04:00 +0530369 batch_no(doc, cdt, cdn) {
370 super.batch_no(doc, cdt, cdn);
371 }
Deepesh Gargbd9bdc52021-01-28 12:05:57 +0530372
Faris Ansari1fe891b2021-04-23 08:04:00 +0530373 qty(doc, cdt, cdn) {
374 super.qty(doc, cdt, cdn);
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530375
376 if(in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
377 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
382 /* Determine appropriate batch number and set it in the form.
383 * @param {string} cdt - Document Doctype
384 * @param {string} cdn - Document name
385 */
Faris Ansari1fe891b2021-04-23 08:04:00 +0530386 set_batch_number(cdt, cdn) {
tundebabzyacccdb32017-11-23 08:35:15 +0100387 const doc = frappe.get_doc(cdt, cdn);
Saqibfaea8542020-03-26 13:18:57 +0530388 if (doc && doc.has_batch_no && doc.warehouse) {
tundebabzyacccdb32017-11-23 08:35:15 +0100389 this._set_batch_number(doc);
390 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530391 }
tundebabzyacccdb32017-11-23 08:35:15 +0100392
Faris Ansari1fe891b2021-04-23 08:04:00 +0530393 _set_batch_number(doc) {
Rohit Waghchauree1f07042021-08-23 14:27:55 +0530394 if (doc.batch_no) {
395 return
396 }
397
Saqibfaea8542020-03-26 13:18:57 +0530398 let args = {'item_code': doc.item_code, 'warehouse': doc.warehouse, 'qty': flt(doc.qty) * flt(doc.conversion_factor)};
399 if (doc.has_serial_no && doc.serial_no) {
400 args['serial_no'] = doc.serial_no
401 }
marination8a30cb22020-04-23 00:18:21 +0530402
tundebabzyacccdb32017-11-23 08:35:15 +0100403 return frappe.call({
404 method: 'erpnext.stock.doctype.batch.batch.get_batch_no',
Saqibfaea8542020-03-26 13:18:57 +0530405 args: args,
tundebabzyacccdb32017-11-23 08:35:15 +0100406 callback: function(r) {
407 if(r.message) {
408 frappe.model.set_value(doc.doctype, doc.name, 'batch_no', r.message);
tundebabzy8ae53ca2017-11-30 07:07:21 +0100409 } else {
410 frappe.model.set_value(doc.doctype, doc.name, 'batch_no', r.message);
tundebabzyacccdb32017-11-23 08:35:15 +0100411 }
412 }
413 });
Faris Ansari1fe891b2021-04-23 08:04:00 +0530414 }
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200415
Faris Ansari1fe891b2021-04-23 08:04:00 +0530416 update_auto_repeat_reference(doc) {
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200417 if (doc.auto_repeat) {
418 frappe.call({
Rucha Mahabal65a627c2019-07-17 13:50:32 +0530419 method:"frappe.automation.doctype.auto_repeat.auto_repeat.update_reference",
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530420 args:{
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200421 docname: doc.auto_repeat,
422 reference:doc.name
423 },
424 callback: function(r){
425 if (r.message=="success") {
426 frappe.show_alert({message:__("Auto repeat document updated"), indicator:'green'});
427 } else {
428 frappe.show_alert({message:__("An error occurred during the update process"), indicator:'red'});
429 }
430 }
431 })
432 }
433 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530434};
Anand Doshi43f087c2014-08-26 14:25:53 +0530435
Neil Trini Lasrado6e343e22016-03-09 17:02:59 +0530436frappe.ui.form.on(cur_frm.doctype,"project", function(frm) {
Nabin Hait10b155a2014-10-23 13:18:59 +0530437 if(in_list(["Delivery Note", "Sales Invoice"], frm.doc.doctype)) {
Rushabh Mehta532eedf2016-05-19 18:22:49 +0530438 if(frm.doc.project) {
439 frappe.call({
440 method:'erpnext.projects.doctype.project.project.get_cost_center_name' ,
441 args: { project: frm.doc.project },
442 callback: function(r, rt) {
443 if(!r.exc) {
444 $.each(frm.doc["items"] || [], function(i, row) {
445 if(r.message) {
446 frappe.model.set_value(row.doctype, row.name, "cost_center", r.message);
Mohammad Hasnain Mohsin Rajane15b6a92020-11-25 15:36:41 +0530447 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 +0530448 }
449 })
450 }
Nabin Hait10b155a2014-10-23 13:18:59 +0530451 }
Rushabh Mehta532eedf2016-05-19 18:22:49 +0530452 })
453 }
Nabin Hait10b155a2014-10-23 13:18:59 +0530454 }
Nabin Haite45ec662018-08-01 17:44:34 +0530455})
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530456
457frappe.ui.form.on(cur_frm.doctype, {
458 set_as_lost_dialog: function(frm) {
459 var dialog = new frappe.ui.Dialog({
460 title: __("Set as Lost"),
461 fields: [
Anupam Kumare447c792020-08-13 09:20:36 +0530462 {
463 "fieldtype": "Table MultiSelect",
464 "label": __("Lost Reasons"),
465 "fieldname": "lost_reason",
466 "options": frm.doctype === 'Opportunity' ? 'Opportunity Lost Reason Detail': 'Quotation Lost Reason Detail',
467 "reqd": 1
468 },
469 {
470 "fieldtype": "Text",
471 "label": __("Detailed Reason"),
472 "fieldname": "detailed_reason"
473 },
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530474 ],
475 primary_action: function() {
476 var values = dialog.get_values();
477 var reasons = values["lost_reason"];
478 var detailed_reason = values["detailed_reason"];
479
480 frm.call({
481 doc: frm.doc,
482 method: 'declare_enquiry_lost',
483 args: {
484 'lost_reasons_list': reasons,
485 'detailed_reason': detailed_reason
486 },
487 callback: function(r) {
488 dialog.hide();
489 frm.reload_doc();
490 },
491 });
492 refresh_field("lost_reason");
493 },
494 primary_action_label: __('Declare Lost')
495 });
496
497 dialog.show();
498 }
499})