blob: eb02867720ce90564da64cabb22d5fc5f321b0ad [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 });
Faris Ansari1fe891b2021-04-23 08:04:00 +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();
Rushabh Mehtab92087c2017-01-13 18:53:11 +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));
Nabin Haite7d15362014-12-25 16:01:55 +053093 if(this.frm.fields_dict.packed_items) {
94 var packing_list_exists = (this.frm.doc.packed_items || []).length;
Anand Doshic4a54fe2013-08-01 18:19:51 +053095 this.frm.toggle_display("packing_list", packing_list_exists ? true : false);
96 }
Nabin Hait2029ea92015-04-16 17:55:35 +053097 this.toggle_editable_price_list_rate();
Faris Ansari1fe891b2021-04-23 08:04:00 +053098 }
Anand Doshibd67e872014-04-11 16:51:27 +053099
Faris Ansari1fe891b2021-04-23 08:04:00 +0530100 customer() {
Nabin Haita3dd72a2014-05-28 12:49:20 +0530101 var me = this;
Nabin Haite45ec662018-08-01 17:44:34 +0530102 erpnext.utils.get_party_details(this.frm, null, null, function() {
103 me.apply_price_list();
104 });
Faris Ansari1fe891b2021-04-23 08:04:00 +0530105 }
Anand Doshibd67e872014-04-11 16:51:27 +0530106
Faris Ansari1fe891b2021-04-23 08:04:00 +0530107 customer_address() {
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530108 erpnext.utils.get_address_display(this.frm, "customer_address");
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500109 erpnext.utils.set_taxes_from_address(this.frm, "customer_address", "customer_address", "shipping_address_name");
Faris Ansari1fe891b2021-04-23 08:04:00 +0530110 }
Anand Doshibd67e872014-04-11 16:51:27 +0530111
Faris Ansari1fe891b2021-04-23 08:04:00 +0530112 shipping_address_name() {
Nabin Hait9d1f0772014-02-19 17:43:24 +0530113 erpnext.utils.get_address_display(this.frm, "shipping_address_name", "shipping_address");
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500114 erpnext.utils.set_taxes_from_address(this.frm, "shipping_address_name", "customer_address", "shipping_address_name");
Faris Ansari1fe891b2021-04-23 08:04:00 +0530115 }
Anand Doshibd67e872014-04-11 16:51:27 +0530116
Faris Ansari1fe891b2021-04-23 08:04:00 +0530117 sales_partner() {
Nabin Haita3dd72a2014-05-28 12:49:20 +0530118 this.apply_pricing_rule();
Faris Ansari1fe891b2021-04-23 08:04:00 +0530119 }
Nabin Haita3dd72a2014-05-28 12:49:20 +0530120
Faris Ansari1fe891b2021-04-23 08:04:00 +0530121 campaign() {
Nabin Haita3dd72a2014-05-28 12:49:20 +0530122 this.apply_pricing_rule();
Faris Ansari1fe891b2021-04-23 08:04:00 +0530123 }
Nabin Haita3dd72a2014-05-28 12:49:20 +0530124
Faris Ansari1fe891b2021-04-23 08:04:00 +0530125 selling_price_list() {
Anand Doshidffec8f2014-07-01 17:45:15 +0530126 this.apply_price_list();
rohitwaghchaure8e675eb2018-02-13 17:11:06 +0530127 this.set_dynamic_labels();
Faris Ansari1fe891b2021-04-23 08:04:00 +0530128 }
Anand Doshibd67e872014-04-11 16:51:27 +0530129
Faris Ansari1fe891b2021-04-23 08:04:00 +0530130 discount_percentage(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530131 var item = frappe.get_doc(cdt, cdn);
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530132 item.discount_amount = 0.0;
133 this.apply_discount_on_item(doc, cdt, cdn, 'discount_percentage');
Faris Ansari1fe891b2021-04-23 08:04:00 +0530134 }
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530135
Faris Ansari1fe891b2021-04-23 08:04:00 +0530136 discount_amount(doc, cdt, cdn) {
deepeshgarg007a9ea49c2019-07-04 15:56:34 +0530137
138 if(doc.name === cdn) {
139 return;
140 }
141
Nabin Hait593242f2019-04-05 19:35:02 +0530142 var item = frappe.get_doc(cdt, cdn);
143 item.discount_percentage = 0.0;
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530144 this.apply_discount_on_item(doc, cdt, cdn, 'discount_amount');
Faris Ansari1fe891b2021-04-23 08:04:00 +0530145 }
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530146
Faris Ansari1fe891b2021-04-23 08:04:00 +0530147 apply_discount_on_item(doc, cdt, cdn, field) {
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530148 var item = frappe.get_doc(cdt, cdn);
Nabin Haita7f757a2014-02-10 17:54:04 +0530149 if(!item.price_list_rate) {
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530150 item[field] = 0.0;
Anand Doshi923d41d2013-05-28 17:23:36 +0530151 } else {
Nabin Haita7f757a2014-02-10 17:54:04 +0530152 this.price_list_rate(doc, cdt, cdn);
Anand Doshi923d41d2013-05-28 17:23:36 +0530153 }
Saurabh5ada14b2016-02-26 18:02:55 +0530154 this.set_gross_profit(item);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530155 }
Anand Doshibd67e872014-04-11 16:51:27 +0530156
Faris Ansari1fe891b2021-04-23 08:04:00 +0530157 commission_rate() {
Anand Doshif3096132013-05-21 19:35:06 +0530158 this.calculate_commission();
159 refresh_field("total_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() {
Nabin Hait5690be12015-02-12 16:09:11 +0530163 if(this.frm.doc.base_net_total) {
164 frappe.model.round_floats_in(this.frm.doc, ["base_net_total", "total_commission"]);
Anand Doshibd67e872014-04-11 16:51:27 +0530165
Nabin Hait5690be12015-02-12 16:09:11 +0530166 if(this.frm.doc.base_net_total < this.frm.doc.total_commission) {
Pratik Vyasb52618c2014-04-14 16:25:30 +0530167 var msg = (__("[Error]") + " " +
168 __(frappe.meta.get_label(this.frm.doc.doctype, "total_commission",
Anand Doshibd67e872014-04-11 16:51:27 +0530169 this.frm.doc.name)) + " > " +
Nabin Hait5690be12015-02-12 16:09:11 +0530170 __(frappe.meta.get_label(this.frm.doc.doctype, "base_net_total", this.frm.doc.name)));
Faris Ansariab74ca72017-05-30 12:54:42 +0530171 frappe.msgprint(msg);
Anand Doshif3096132013-05-21 19:35:06 +0530172 throw msg;
173 }
Anand Doshibd67e872014-04-11 16:51:27 +0530174
175 this.frm.set_value("commission_rate",
Nabin Hait5690be12015-02-12 16:09:11 +0530176 flt(this.frm.doc.total_commission * 100.0 / this.frm.doc.base_net_total));
Anand Doshif3096132013-05-21 19:35:06 +0530177 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530178 }
Anand Doshibd67e872014-04-11 16:51:27 +0530179
Faris Ansari1fe891b2021-04-23 08:04:00 +0530180 allocated_percentage(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530181 var sales_person = frappe.get_doc(cdt, cdn);
Anand Doshif3096132013-05-21 19:35:06 +0530182 if(sales_person.allocated_percentage) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530183
Anand Doshif3096132013-05-21 19:35:06 +0530184 sales_person.allocated_percentage = flt(sales_person.allocated_percentage,
185 precision("allocated_percentage", sales_person));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530186
Nabin Hait5690be12015-02-12 16:09:11 +0530187 sales_person.allocated_amount = flt(this.frm.doc.base_net_total *
Anand Doshibd67e872014-04-11 16:51:27 +0530188 sales_person.allocated_percentage / 100.0,
Anand Doshif3096132013-05-21 19:35:06 +0530189 precision("allocated_amount", sales_person));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530190 refresh_field(["allocated_amount"], sales_person);
Anand Doshif3096132013-05-21 19:35:06 +0530191
deepeshgarg00786152eb2018-09-25 19:08:16 +0530192 this.calculate_incentive(sales_person);
193 refresh_field(["allocated_percentage", "allocated_amount", "commission_rate","incentives"], sales_person.name,
Anand Doshif3096132013-05-21 19:35:06 +0530194 sales_person.parentfield);
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530195 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530196 }
deepeshgarg00786152eb2018-09-25 19:08:16 +0530197
Faris Ansari1fe891b2021-04-23 08:04:00 +0530198 sales_person(doc, cdt, cdn) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530199 var row = frappe.get_doc(cdt, cdn);
200 this.calculate_incentive(row);
201 refresh_field("incentives",row.name,row.parentfield);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530202 }
Anand Doshibd67e872014-04-11 16:51:27 +0530203
Faris Ansari1fe891b2021-04-23 08:04:00 +0530204 warehouse(doc, cdt, cdn) {
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530205 var me = this;
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530206 var item = frappe.get_doc(cdt, cdn);
Saqib14cdb242020-04-16 16:21:35 +0530207
208 if (item.serial_no && item.qty === item.serial_no.split(`\n`).length) {
209 return;
210 }
211
Shreyaa20157a2018-04-13 12:03:42 +0530212 if (item.serial_no && !item.batch_no) {
213 item.serial_no = null;
Anand Doshifc777182013-05-27 19:29:07 +0530214 }
Saqib14cdb242020-04-16 16:21:35 +0530215
Shreyaa20157a2018-04-13 12:03:42 +0530216 var has_batch_no;
217 frappe.db.get_value('Item', {'item_code': item.item_code}, 'has_batch_no', (r) => {
218 has_batch_no = r && r.has_batch_no;
219 if(item.item_code && item.warehouse) {
220 return this.frm.call({
221 method: "erpnext.stock.get_item_details.get_bin_details_and_serial_nos",
222 child: item,
223 args: {
224 item_code: item.item_code,
225 warehouse: item.warehouse,
Rohit Waghchaure6daab3c2019-09-19 17:01:26 +0530226 has_batch_no: has_batch_no || 0,
Shreyaa20157a2018-04-13 12:03:42 +0530227 stock_qty: item.stock_qty,
228 serial_no: item.serial_no || "",
229 },
230 callback:function(r){
231 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530232
233 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
234
Shreyaa20157a2018-04-13 12:03:42 +0530235 me.set_batch_number(cdt, cdn);
236 me.batch_no(doc, cdt, cdn);
237 }
238 }
239 });
240 }
241 })
Faris Ansari1fe891b2021-04-23 08:04:00 +0530242 }
Anand Doshibd67e872014-04-11 16:51:27 +0530243
Faris Ansari1fe891b2021-04-23 08:04:00 +0530244 toggle_editable_price_list_rate() {
Nabin Haitdd38a262014-12-26 13:15:21 +0530245 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 +0530246 var editable_price_list_rate = cint(frappe.defaults.get_default("editable_price_list_rate"));
Anand Doshibd67e872014-04-11 16:51:27 +0530247
Anand Doshi33fe8672013-08-02 12:39:10 +0530248 if(df && editable_price_list_rate) {
249 df.read_only = 0;
250 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530251 }
Anand Doshibd67e872014-04-11 16:51:27 +0530252
Faris Ansari1fe891b2021-04-23 08:04:00 +0530253 calculate_commission() {
Anand Doshi923d41d2013-05-28 17:23:36 +0530254 if(this.frm.fields_dict.commission_rate) {
255 if(this.frm.doc.commission_rate > 100) {
Pratik Vyasb52618c2014-04-14 16:25:30 +0530256 var msg = __(frappe.meta.get_label(this.frm.doc.doctype, "commission_rate", this.frm.doc.name)) +
257 " " + __("cannot be greater than 100");
Faris Ansariab74ca72017-05-30 12:54:42 +0530258 frappe.msgprint(msg);
Anand Doshi923d41d2013-05-28 17:23:36 +0530259 throw msg;
260 }
Anand Doshibd67e872014-04-11 16:51:27 +0530261
Nabin Hait5690be12015-02-12 16:09:11 +0530262 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 +0530263 precision("total_commission"));
264 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530265 }
Anand Doshibd67e872014-04-11 16:51:27 +0530266
Faris Ansari1fe891b2021-04-23 08:04:00 +0530267 calculate_contribution() {
Anand Doshi2168e392013-05-23 19:25:08 +0530268 var me = this;
Rushabh Mehtaaa355af2014-03-26 18:24:30 +0530269 $.each(this.frm.doc.doctype.sales_team || [], function(i, sales_person) {
Faris Ansariab74ca72017-05-30 12:54:42 +0530270 frappe.model.round_floats_in(sales_person);
271 if(sales_person.allocated_percentage) {
272 sales_person.allocated_amount = flt(
273 me.frm.doc.base_net_total * sales_person.allocated_percentage / 100.0,
274 precision("allocated_amount", sales_person));
275 }
276 });
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_incentive(row) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530280 if(row.allocated_amount)
281 {
282 row.incentives = flt(
283 row.allocated_amount * row.commission_rate / 100.0,
deepeshgarg007c3772f12018-09-26 15:55:43 +0530284 precision("incentives", row));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530285 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530286 }
deepeshgarg00786152eb2018-09-25 19:08:16 +0530287
Faris Ansari1fe891b2021-04-23 08:04:00 +0530288 batch_no(doc, cdt, cdn) {
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530289 var me = this;
290 var item = frappe.get_doc(cdt, cdn);
Saqiba6f98d42020-07-23 18:51:26 +0530291
292 if (item.serial_no) {
293 return;
294 }
295
Shreyaa20157a2018-04-13 12:03:42 +0530296 item.serial_no = null;
297 var has_serial_no;
298 frappe.db.get_value('Item', {'item_code': item.item_code}, 'has_serial_no', (r) => {
299 has_serial_no = r && r.has_serial_no;
300 if(item.warehouse && item.item_code && item.batch_no) {
301 return this.frm.call({
302 method: "erpnext.stock.get_item_details.get_batch_qty_and_serial_no",
303 child: item,
304 args: {
305 "batch_no": item.batch_no,
Maricaf0e87f72019-11-27 15:49:41 +0530306 "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 +0530307 "warehouse": item.warehouse,
308 "item_code": item.item_code,
309 "has_serial_no": has_serial_no
310 },
311 "fieldname": "actual_batch_qty"
312 });
313 }
314 })
Faris Ansari1fe891b2021-04-23 08:04:00 +0530315 }
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530316
Faris Ansari1fe891b2021-04-23 08:04:00 +0530317 set_dynamic_labels() {
318 super.set_dynamic_labels();
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530319 this.set_product_bundle_help(this.frm.doc);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530320 }
Nabin Hait0b157552014-06-24 17:02:45 +0530321
Faris Ansari1fe891b2021-04-23 08:04:00 +0530322 set_product_bundle_help(doc) {
Nabin Hait0b157552014-06-24 17:02:45 +0530323 if(!cur_frm.fields_dict.packing_list) return;
Nabin Haite7d15362014-12-25 16:01:55 +0530324 if ((doc.packed_items || []).length) {
Nabin Hait0b157552014-06-24 17:02:45 +0530325 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(true);
326
Faris Ansariab74ca72017-05-30 12:54:42 +0530327 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
328 var help_msg = "<div class='alert alert-warning'>" +
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530329 __("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 +0530330 "</div>";
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530331 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = help_msg;
Nabin Hait0b157552014-06-24 17:02:45 +0530332 }
333 } else {
334 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(false);
Faris Ansariab74ca72017-05-30 12:54:42 +0530335 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530336 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = '';
Nabin Hait0b157552014-06-24 17:02:45 +0530337 }
338 }
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530339 refresh_field('product_bundle_help');
Faris Ansari1fe891b2021-04-23 08:04:00 +0530340 }
Anand Doshi01de9452016-01-26 16:22:50 +0530341
Faris Ansari1fe891b2021-04-23 08:04:00 +0530342 company_address() {
Nabin Hait879e1622017-08-21 08:28:55 +0530343 var me = this;
344 if(this.frm.doc.company_address) {
345 frappe.call({
346 method: "frappe.contacts.doctype.address.address.get_address_display",
347 args: {"address_dict": this.frm.doc.company_address },
348 callback: function(r) {
349 if(r.message) {
350 me.frm.set_value("company_address_display", r.message)
351 }
352 }
353 })
354 } else {
355 this.frm.set_value("company_address_display", "");
356 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530357 }
tundebabzyacccdb32017-11-23 08:35:15 +0100358
Faris Ansari1fe891b2021-04-23 08:04:00 +0530359 conversion_factor(doc, cdt, cdn, dont_fetch_price_list_rate) {
360 super.conversion_factor(doc, cdt, cdn, dont_fetch_price_list_rate);
tundebabzyf9b5c742018-01-25 19:21:05 +0100361 if(frappe.meta.get_docfield(cdt, "stock_qty", cdn) &&
362 in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530363 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
364 this.set_batch_number(cdt, cdn);
365 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530366 }
tundebabzyacccdb32017-11-23 08:35:15 +0100367
Faris Ansari1fe891b2021-04-23 08:04:00 +0530368 batch_no(doc, cdt, cdn) {
369 super.batch_no(doc, cdt, cdn);
370 }
Deepesh Gargbd9bdc52021-01-28 12:05:57 +0530371
Faris Ansari1fe891b2021-04-23 08:04:00 +0530372 qty(doc, cdt, cdn) {
373 super.qty(doc, cdt, cdn);
Deepesh Gargfb29ffc2019-06-28 14:08:08 +0530374
375 if(in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
376 if (doc.doctype === 'Sales Invoice' && (!doc.update_stock)) return;
377 this.set_batch_number(cdt, cdn);
378 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530379 }
tundebabzyacccdb32017-11-23 08:35:15 +0100380
381 /* Determine appropriate batch number and set it in the form.
382 * @param {string} cdt - Document Doctype
383 * @param {string} cdn - Document name
384 */
Faris Ansari1fe891b2021-04-23 08:04:00 +0530385 set_batch_number(cdt, cdn) {
tundebabzyacccdb32017-11-23 08:35:15 +0100386 const doc = frappe.get_doc(cdt, cdn);
Saqibfaea8542020-03-26 13:18:57 +0530387 if (doc && doc.has_batch_no && doc.warehouse) {
tundebabzyacccdb32017-11-23 08:35:15 +0100388 this._set_batch_number(doc);
389 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530390 }
tundebabzyacccdb32017-11-23 08:35:15 +0100391
Faris Ansari1fe891b2021-04-23 08:04:00 +0530392 _set_batch_number(doc) {
Saqibfaea8542020-03-26 13:18:57 +0530393 let args = {'item_code': doc.item_code, 'warehouse': doc.warehouse, 'qty': flt(doc.qty) * flt(doc.conversion_factor)};
394 if (doc.has_serial_no && doc.serial_no) {
395 args['serial_no'] = doc.serial_no
396 }
marination8a30cb22020-04-23 00:18:21 +0530397
tundebabzyacccdb32017-11-23 08:35:15 +0100398 return frappe.call({
399 method: 'erpnext.stock.doctype.batch.batch.get_batch_no',
Saqibfaea8542020-03-26 13:18:57 +0530400 args: args,
tundebabzyacccdb32017-11-23 08:35:15 +0100401 callback: function(r) {
402 if(r.message) {
403 frappe.model.set_value(doc.doctype, doc.name, 'batch_no', r.message);
tundebabzy8ae53ca2017-11-30 07:07:21 +0100404 } else {
405 frappe.model.set_value(doc.doctype, doc.name, 'batch_no', r.message);
tundebabzyacccdb32017-11-23 08:35:15 +0100406 }
407 }
408 });
Faris Ansari1fe891b2021-04-23 08:04:00 +0530409 }
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200410
Faris Ansari1fe891b2021-04-23 08:04:00 +0530411 update_auto_repeat_reference(doc) {
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200412 if (doc.auto_repeat) {
413 frappe.call({
Rucha Mahabal65a627c2019-07-17 13:50:32 +0530414 method:"frappe.automation.doctype.auto_repeat.auto_repeat.update_reference",
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530415 args:{
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200416 docname: doc.auto_repeat,
417 reference:doc.name
418 },
419 callback: function(r){
420 if (r.message=="success") {
421 frappe.show_alert({message:__("Auto repeat document updated"), indicator:'green'});
422 } else {
423 frappe.show_alert({message:__("An error occurred during the update process"), indicator:'red'});
424 }
425 }
426 })
427 }
428 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530429};
Anand Doshi43f087c2014-08-26 14:25:53 +0530430
Neil Trini Lasrado6e343e22016-03-09 17:02:59 +0530431frappe.ui.form.on(cur_frm.doctype,"project", function(frm) {
Nabin Hait10b155a2014-10-23 13:18:59 +0530432 if(in_list(["Delivery Note", "Sales Invoice"], frm.doc.doctype)) {
Rushabh Mehta532eedf2016-05-19 18:22:49 +0530433 if(frm.doc.project) {
434 frappe.call({
435 method:'erpnext.projects.doctype.project.project.get_cost_center_name' ,
436 args: { project: frm.doc.project },
437 callback: function(r, rt) {
438 if(!r.exc) {
439 $.each(frm.doc["items"] || [], function(i, row) {
440 if(r.message) {
441 frappe.model.set_value(row.doctype, row.name, "cost_center", r.message);
Mohammad Hasnain Mohsin Rajane15b6a92020-11-25 15:36:41 +0530442 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 +0530443 }
444 })
445 }
Nabin Hait10b155a2014-10-23 13:18:59 +0530446 }
Rushabh Mehta532eedf2016-05-19 18:22:49 +0530447 })
448 }
Nabin Hait10b155a2014-10-23 13:18:59 +0530449 }
Nabin Haite45ec662018-08-01 17:44:34 +0530450})
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530451
452frappe.ui.form.on(cur_frm.doctype, {
453 set_as_lost_dialog: function(frm) {
454 var dialog = new frappe.ui.Dialog({
455 title: __("Set as Lost"),
456 fields: [
Anupam Kumare447c792020-08-13 09:20:36 +0530457 {
458 "fieldtype": "Table MultiSelect",
459 "label": __("Lost Reasons"),
460 "fieldname": "lost_reason",
461 "options": frm.doctype === 'Opportunity' ? 'Opportunity Lost Reason Detail': 'Quotation Lost Reason Detail',
462 "reqd": 1
463 },
464 {
465 "fieldtype": "Text",
466 "label": __("Detailed Reason"),
467 "fieldname": "detailed_reason"
468 },
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530469 ],
470 primary_action: function() {
471 var values = dialog.get_values();
472 var reasons = values["lost_reason"];
473 var detailed_reason = values["detailed_reason"];
474
475 frm.call({
476 doc: frm.doc,
477 method: 'declare_enquiry_lost',
478 args: {
479 'lost_reasons_list': reasons,
480 'detailed_reason': detailed_reason
481 },
482 callback: function(r) {
483 dialog.hide();
484 frm.reload_doc();
485 },
486 });
487 refresh_field("lost_reason");
488 },
489 primary_action_label: __('Declare Lost')
490 });
491
492 dialog.show();
493 }
494})