blob: 98ad8a7cdbb6cb0025bcd35645b8415525351ab4 [file] [log] [blame]
Anand Doshi885e0742015-03-03 14:55:30 +05301// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
Rushabh Mehtae67d1fb2013-08-05 14:59:54 +05302// License: GNU General Public License v3. See license.txt
Rushabh Mehta3966f1d2012-02-23 12:35:32 +05303
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +05304
Nabin Hait613d0812015-02-23 11:58:15 +05305cur_frm.cscript.tax_table = "Sales Taxes and Charges";
Rushabh Mehta621283c2016-04-21 19:00:34 +05306{% include 'erpnext/accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.js' %}
Nabin Hait613d0812015-02-23 11:58:15 +05307
Rushabh Mehtab09d9da2014-01-02 11:47:23 +05308
Rushabh Mehtae10cf022014-09-12 13:09:41 +05309cur_frm.email_field = "contact_email";
10
Rushabh Mehtabe2ee182016-04-29 17:22:42 +053011frappe.provide("erpnext.selling");
Faris Ansari1fe891b2021-04-23 08:04:00 +053012erpnext.selling.SellingController = class SellingController extends erpnext.TransactionController {
13 setup() {
14 super.setup();
Faris Ansari1fe891b2021-04-23 08:04:00 +053015 }
Rushabh Mehta532eedf2016-05-19 18:22:49 +053016
Faris Ansari1fe891b2021-04-23 08:04:00 +053017 onload() {
18 super.onload();
Anand Doshi9b496142013-07-11 19:13:58 +053019 this.setup_queries();
Rushabh Mehta30dc9a12017-11-17 14:31:09 +053020 this.frm.set_query('shipping_rule', function() {
21 return {
22 filters: {
23 "shipping_rule_type": "Selling"
24 }
25 };
26 });
Ankush Menat4551d7d2021-08-19 13:41:10 +053027 }
Anand Doshibd67e872014-04-11 16:51:27 +053028
Faris Ansari1fe891b2021-04-23 08:04:00 +053029 setup_queries() {
Anand Doshi99100a42013-07-04 17:13:53 +053030 var me = this;
Anand Doshibd67e872014-04-11 16:51:27 +053031
Rushabh Mehtab92087c2017-01-13 18:53:11 +053032 $.each([["customer", "customer"],
Anand Doshibd67e872014-04-11 16:51:27 +053033 ["lead", "lead"]],
Anand Doshid5d39ac2013-07-29 13:28:37 +053034 function(i, opts) {
Anand Doshibd67e872014-04-11 16:51:27 +053035 if(me.frm.fields_dict[opts[0]])
Anand Doshid5d39ac2013-07-29 13:28:37 +053036 me.frm.set_query(opts[0], erpnext.queries[opts[1]]);
37 });
Anand Doshibd67e872014-04-11 16:51:27 +053038
Rushabh Mehtab92087c2017-01-13 18:53:11 +053039 me.frm.set_query('contact_person', erpnext.queries.contact_query);
40 me.frm.set_query('customer_address', erpnext.queries.address_query);
41 me.frm.set_query('shipping_address_name', erpnext.queries.address_query);
Subin Tom98d41762021-12-21 12:35:44 +053042 me.frm.set_query('dispatch_address_name', erpnext.queries.dispatch_address_query);
Rushabh Mehtab92087c2017-01-13 18:53:11 +053043
Deepesh Garg3f376cc2022-06-02 13:57:54 +053044 erpnext.accounts.dimensions.setup_dimension_filters(me.frm, me.frm.doctype);
Anand Doshi99100a42013-07-04 17:13:53 +053045
Rushabh Mehta4a404e92013-08-09 18:11:35 +053046 if(this.frm.fields_dict.selling_price_list) {
47 this.frm.set_query("selling_price_list", function() {
Nabin Haitdc15b4f2014-01-20 16:48:49 +053048 return { filters: { selling: 1 } };
Anand Doshi720a01a2013-07-26 11:32:02 +053049 });
Anand Doshi720a01a2013-07-26 11:32:02 +053050 }
Anand Doshibd67e872014-04-11 16:51:27 +053051
karthikeyan57fc60212019-07-04 22:46:16 +053052 if(this.frm.fields_dict.tc_name) {
53 this.frm.set_query("tc_name", function() {
54 return { filters: { selling: 1 } };
55 });
56 }
57
Nabin Haitdd38a262014-12-26 13:15:21 +053058 if(!this.frm.fields_dict["items"]) {
Anand Doshi99100a42013-07-04 17:13:53 +053059 return;
60 }
Anand Doshibd67e872014-04-11 16:51:27 +053061
Nabin Haitdd38a262014-12-26 13:15:21 +053062 if(this.frm.fields_dict["items"].grid.get_field('item_code')) {
63 this.frm.set_query("item_code", "items", function() {
Anand Doshi9b496142013-07-11 19:13:58 +053064 return {
Rushabh Mehtad973c162016-08-16 11:32:08 +053065 query: "erpnext.controllers.queries.item_query",
Ankush Menat0e875f52022-05-16 12:14:07 +053066 filters: {'is_sales_item': 1, 'customer': cur_frm.doc.customer, 'has_variants': 0}
Anand Doshi9b496142013-07-11 19:13:58 +053067 }
Anand Doshi99100a42013-07-04 17:13:53 +053068 });
69 }
Anand Doshibd67e872014-04-11 16:51:27 +053070
Rushabh Mehta698c0402016-11-22 23:16:40 +053071 if(this.frm.fields_dict["packed_items"] &&
72 this.frm.fields_dict["packed_items"].grid.get_field('batch_no')) {
Rohit Waghchauree887e922016-11-18 12:16:22 +053073 this.frm.set_query("batch_no", "packed_items", function(doc, cdt, cdn) {
74 return me.set_query_for_batch(doc, cdt, cdn)
75 });
76 }
Deepesh Gargef0d26c2020-01-06 15:34:15 +053077
78 if(this.frm.fields_dict["items"].grid.get_field('item_code')) {
79 this.frm.set_query("item_tax_template", "items", function(doc, cdt, cdn) {
80 return me.set_query_for_item_tax_template(doc, cdt, cdn)
81 });
82 }
83
Faris Ansari1fe891b2021-04-23 08:04:00 +053084 }
Rohit Waghchauree887e922016-11-18 12:16:22 +053085
Faris Ansari1fe891b2021-04-23 08:04:00 +053086 refresh() {
87 super.refresh();
Ankush Menat4551d7d2021-08-19 13:41:10 +053088
Rushabh Mehta8d39fd92017-01-16 13:06:07 +053089 frappe.dynamic_link = {doc: this.frm.doc, fieldname: 'customer', doctype: 'Customer'}
Rushabh Mehtab92087c2017-01-13 18:53:11 +053090
Anand Doshibd67e872014-04-11 16:51:27 +053091 this.frm.toggle_display("customer_name",
Akhilesh Darjee5ce1b8b2013-12-09 16:29:04 +053092 (this.frm.doc.customer_name && this.frm.doc.customer_name!==this.frm.doc.customer));
Chillar Anand915b3432021-09-02 16:44:59 +053093
Nabin Hait2029ea92015-04-16 17:55:35 +053094 this.toggle_editable_price_list_rate();
Faris Ansari1fe891b2021-04-23 08:04:00 +053095 }
Anand Doshibd67e872014-04-11 16:51:27 +053096
Faris Ansari1fe891b2021-04-23 08:04:00 +053097 customer() {
Nabin Haita3dd72a2014-05-28 12:49:20 +053098 var me = this;
Nabin Haite45ec662018-08-01 17:44:34 +053099 erpnext.utils.get_party_details(this.frm, null, null, function() {
100 me.apply_price_list();
101 });
Faris Ansari1fe891b2021-04-23 08:04:00 +0530102 }
Anand Doshibd67e872014-04-11 16:51:27 +0530103
Faris Ansari1fe891b2021-04-23 08:04:00 +0530104 customer_address() {
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530105 erpnext.utils.get_address_display(this.frm, "customer_address");
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500106 erpnext.utils.set_taxes_from_address(this.frm, "customer_address", "customer_address", "shipping_address_name");
Faris Ansari1fe891b2021-04-23 08:04:00 +0530107 }
Anand Doshibd67e872014-04-11 16:51:27 +0530108
Faris Ansari1fe891b2021-04-23 08:04:00 +0530109 shipping_address_name() {
Nabin Hait9d1f0772014-02-19 17:43:24 +0530110 erpnext.utils.get_address_display(this.frm, "shipping_address_name", "shipping_address");
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500111 erpnext.utils.set_taxes_from_address(this.frm, "shipping_address_name", "customer_address", "shipping_address_name");
Faris Ansari1fe891b2021-04-23 08:04:00 +0530112 }
Anand Doshibd67e872014-04-11 16:51:27 +0530113
Subin Tom5265ba32021-07-13 14:58:17 +0530114 dispatch_address_name() {
115 erpnext.utils.get_address_display(this.frm, "dispatch_address_name", "dispatch_address");
116 }
117
Faris Ansari1fe891b2021-04-23 08:04:00 +0530118 sales_partner() {
Nabin Haita3dd72a2014-05-28 12:49:20 +0530119 this.apply_pricing_rule();
Faris Ansari1fe891b2021-04-23 08:04:00 +0530120 }
Nabin Haita3dd72a2014-05-28 12:49:20 +0530121
Faris Ansari1fe891b2021-04-23 08:04:00 +0530122 campaign() {
Nabin Haita3dd72a2014-05-28 12:49:20 +0530123 this.apply_pricing_rule();
Faris Ansari1fe891b2021-04-23 08:04:00 +0530124 }
Nabin Haita3dd72a2014-05-28 12:49:20 +0530125
Faris Ansari1fe891b2021-04-23 08:04:00 +0530126 selling_price_list() {
Anand Doshidffec8f2014-07-01 17:45:15 +0530127 this.apply_price_list();
rohitwaghchaure8e675eb2018-02-13 17:11:06 +0530128 this.set_dynamic_labels();
Faris Ansari1fe891b2021-04-23 08:04:00 +0530129 }
Anand Doshibd67e872014-04-11 16:51:27 +0530130
Faris Ansari1fe891b2021-04-23 08:04:00 +0530131 discount_percentage(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530132 var item = frappe.get_doc(cdt, cdn);
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530133 item.discount_amount = 0.0;
134 this.apply_discount_on_item(doc, cdt, cdn, 'discount_percentage');
Faris Ansari1fe891b2021-04-23 08:04:00 +0530135 }
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530136
Faris Ansari1fe891b2021-04-23 08:04:00 +0530137 discount_amount(doc, cdt, cdn) {
deepeshgarg007a9ea49c2019-07-04 15:56:34 +0530138
139 if(doc.name === cdn) {
140 return;
141 }
142
Nabin Hait593242f2019-04-05 19:35:02 +0530143 var item = frappe.get_doc(cdt, cdn);
144 item.discount_percentage = 0.0;
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530145 this.apply_discount_on_item(doc, cdt, cdn, 'discount_amount');
Faris Ansari1fe891b2021-04-23 08:04:00 +0530146 }
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530147
Faris Ansari1fe891b2021-04-23 08:04:00 +0530148 apply_discount_on_item(doc, cdt, cdn, field) {
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530149 var item = frappe.get_doc(cdt, cdn);
Nabin Haita7f757a2014-02-10 17:54:04 +0530150 if(!item.price_list_rate) {
Rohit Waghchaure8bfe3302019-03-18 14:34:19 +0530151 item[field] = 0.0;
Anand Doshi923d41d2013-05-28 17:23:36 +0530152 } else {
Nabin Haita7f757a2014-02-10 17:54:04 +0530153 this.price_list_rate(doc, cdt, cdn);
Anand Doshi923d41d2013-05-28 17:23:36 +0530154 }
Saurabh5ada14b2016-02-26 18:02:55 +0530155 this.set_gross_profit(item);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530156 }
Anand Doshibd67e872014-04-11 16:51:27 +0530157
Faris Ansari1fe891b2021-04-23 08:04:00 +0530158 commission_rate() {
Anand Doshif3096132013-05-21 19:35:06 +0530159 this.calculate_commission();
Faris Ansari1fe891b2021-04-23 08:04:00 +0530160 }
Anand Doshibd67e872014-04-11 16:51:27 +0530161
Faris Ansari1fe891b2021-04-23 08:04:00 +0530162 total_commission() {
Raffael Meyere10ab162021-11-30 13:24:18 +0100163 frappe.model.round_floats_in(this.frm.doc, ["amount_eligible_for_commission", "total_commission"]);
Anand Doshibd67e872014-04-11 16:51:27 +0530164
Raffael Meyere10ab162021-11-30 13:24:18 +0100165 const { amount_eligible_for_commission } = this.frm.doc;
166 if(!amount_eligible_for_commission) return;
Anand Doshibd67e872014-04-11 16:51:27 +0530167
Raffael Meyere10ab162021-11-30 13:24:18 +0100168 this.frm.set_value(
169 "commission_rate", flt(
170 this.frm.doc.total_commission * 100.0 / amount_eligible_for_commission
171 )
172 );
Faris Ansari1fe891b2021-04-23 08:04:00 +0530173 }
Anand Doshibd67e872014-04-11 16:51:27 +0530174
Faris Ansari1fe891b2021-04-23 08:04:00 +0530175 allocated_percentage(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530176 var sales_person = frappe.get_doc(cdt, cdn);
Anand Doshif3096132013-05-21 19:35:06 +0530177 if(sales_person.allocated_percentage) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530178
Anand Doshif3096132013-05-21 19:35:06 +0530179 sales_person.allocated_percentage = flt(sales_person.allocated_percentage,
180 precision("allocated_percentage", sales_person));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530181
Raffael Meyere10ab162021-11-30 13:24:18 +0100182 sales_person.allocated_amount = flt(this.frm.doc.amount_eligible_for_commission *
Anand Doshibd67e872014-04-11 16:51:27 +0530183 sales_person.allocated_percentage / 100.0,
Anand Doshif3096132013-05-21 19:35:06 +0530184 precision("allocated_amount", sales_person));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530185 refresh_field(["allocated_amount"], sales_person);
Anand Doshif3096132013-05-21 19:35:06 +0530186
deepeshgarg00786152eb2018-09-25 19:08:16 +0530187 this.calculate_incentive(sales_person);
188 refresh_field(["allocated_percentage", "allocated_amount", "commission_rate","incentives"], sales_person.name,
Anand Doshif3096132013-05-21 19:35:06 +0530189 sales_person.parentfield);
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530190 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530191 }
deepeshgarg00786152eb2018-09-25 19:08:16 +0530192
Faris Ansari1fe891b2021-04-23 08:04:00 +0530193 sales_person(doc, cdt, cdn) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530194 var row = frappe.get_doc(cdt, cdn);
195 this.calculate_incentive(row);
196 refresh_field("incentives",row.name,row.parentfield);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530197 }
Anand Doshibd67e872014-04-11 16:51:27 +0530198
Faris Ansari1fe891b2021-04-23 08:04:00 +0530199 toggle_editable_price_list_rate() {
Nabin Haitdd38a262014-12-26 13:15:21 +0530200 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 +0530201 var editable_price_list_rate = cint(frappe.defaults.get_default("editable_price_list_rate"));
Anand Doshibd67e872014-04-11 16:51:27 +0530202
Anand Doshi33fe8672013-08-02 12:39:10 +0530203 if(df && editable_price_list_rate) {
Saqiba5baf902021-09-13 15:50:20 +0530204 const parent_field = frappe.meta.get_parentfield(this.frm.doc.doctype, this.frm.doc.doctype + " Item");
205 if (!this.frm.fields_dict[parent_field]) return;
206
207 this.frm.fields_dict[parent_field].grid.update_docfield_property(
208 'price_list_rate', 'read_only', 0
209 );
Anand Doshi33fe8672013-08-02 12:39:10 +0530210 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530211 }
Anand Doshibd67e872014-04-11 16:51:27 +0530212
Faris Ansari1fe891b2021-04-23 08:04:00 +0530213 calculate_commission() {
Deepesh Garg10632d72023-03-07 11:44:09 +0530214 if(!this.frm.fields_dict.commission_rate || this.frm.doc.docstatus === 1) return;
Anand Doshibd67e872014-04-11 16:51:27 +0530215
Raffael Meyere10ab162021-11-30 13:24:18 +0100216 if(this.frm.doc.commission_rate > 100) {
217 this.frm.set_value("commission_rate", 100);
218 frappe.throw(`${__(frappe.meta.get_label(
219 this.frm.doc.doctype, "commission_rate", this.frm.doc.name
220 ))} ${__("cannot be greater than 100")}`);
Anand Doshi923d41d2013-05-28 17:23:36 +0530221 }
Raffael Meyere10ab162021-11-30 13:24:18 +0100222
223 this.frm.doc.amount_eligible_for_commission = this.frm.doc.items.reduce(
224 (sum, item) => item.grant_commission ? sum + item.base_net_amount : sum, 0
225 )
226
227 this.frm.doc.total_commission = flt(
228 this.frm.doc.amount_eligible_for_commission * this.frm.doc.commission_rate / 100.0,
229 precision("total_commission")
230 );
231
232 refresh_field(["amount_eligible_for_commission", "total_commission"]);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530233 }
Anand Doshibd67e872014-04-11 16:51:27 +0530234
Faris Ansari1fe891b2021-04-23 08:04:00 +0530235 calculate_contribution() {
Anand Doshi2168e392013-05-23 19:25:08 +0530236 var me = this;
Rushabh Mehtaaa355af2014-03-26 18:24:30 +0530237 $.each(this.frm.doc.doctype.sales_team || [], function(i, sales_person) {
Faris Ansariab74ca72017-05-30 12:54:42 +0530238 frappe.model.round_floats_in(sales_person);
Raffael Meyere10ab162021-11-30 13:24:18 +0100239 if (!sales_person.allocated_percentage) return;
240
241 sales_person.allocated_amount = flt(
242 me.frm.doc.amount_eligible_for_commission
243 * sales_person.allocated_percentage
244 / 100.0,
245 precision("allocated_amount", sales_person)
246 );
Faris Ansariab74ca72017-05-30 12:54:42 +0530247 });
Faris Ansari1fe891b2021-04-23 08:04:00 +0530248 }
Anand Doshibd67e872014-04-11 16:51:27 +0530249
Faris Ansari1fe891b2021-04-23 08:04:00 +0530250 calculate_incentive(row) {
deepeshgarg00786152eb2018-09-25 19:08:16 +0530251 if(row.allocated_amount)
252 {
253 row.incentives = flt(
254 row.allocated_amount * row.commission_rate / 100.0,
deepeshgarg007c3772f12018-09-26 15:55:43 +0530255 precision("incentives", row));
deepeshgarg00786152eb2018-09-25 19:08:16 +0530256 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530257 }
deepeshgarg00786152eb2018-09-25 19:08:16 +0530258
Faris Ansari1fe891b2021-04-23 08:04:00 +0530259 set_dynamic_labels() {
260 super.set_dynamic_labels();
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530261 this.set_product_bundle_help(this.frm.doc);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530262 }
Nabin Hait0b157552014-06-24 17:02:45 +0530263
Faris Ansari1fe891b2021-04-23 08:04:00 +0530264 set_product_bundle_help(doc) {
Nabin Hait0b157552014-06-24 17:02:45 +0530265 if(!cur_frm.fields_dict.packing_list) return;
Nabin Haite7d15362014-12-25 16:01:55 +0530266 if ((doc.packed_items || []).length) {
Nabin Hait0b157552014-06-24 17:02:45 +0530267 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(true);
268
Faris Ansariab74ca72017-05-30 12:54:42 +0530269 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
270 var help_msg = "<div class='alert alert-warning'>" +
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530271 __("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 +0530272 "</div>";
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530273 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = help_msg;
Nabin Hait0b157552014-06-24 17:02:45 +0530274 }
275 } else {
276 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(false);
Faris Ansariab74ca72017-05-30 12:54:42 +0530277 if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530278 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = '';
Nabin Hait0b157552014-06-24 17:02:45 +0530279 }
280 }
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530281 refresh_field('product_bundle_help');
Faris Ansari1fe891b2021-04-23 08:04:00 +0530282 }
Anand Doshi01de9452016-01-26 16:22:50 +0530283
Faris Ansari1fe891b2021-04-23 08:04:00 +0530284 company_address() {
Nabin Hait879e1622017-08-21 08:28:55 +0530285 var me = this;
286 if(this.frm.doc.company_address) {
287 frappe.call({
288 method: "frappe.contacts.doctype.address.address.get_address_display",
289 args: {"address_dict": this.frm.doc.company_address },
290 callback: function(r) {
291 if(r.message) {
292 me.frm.set_value("company_address_display", r.message)
293 }
294 }
295 })
296 } else {
297 this.frm.set_value("company_address_display", "");
298 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530299 }
tundebabzyacccdb32017-11-23 08:35:15 +0100300
Faris Ansari1fe891b2021-04-23 08:04:00 +0530301 conversion_factor(doc, cdt, cdn, dont_fetch_price_list_rate) {
302 super.conversion_factor(doc, cdt, cdn, dont_fetch_price_list_rate);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530303 }
tundebabzyacccdb32017-11-23 08:35:15 +0100304
Faris Ansari1fe891b2021-04-23 08:04:00 +0530305 qty(doc, cdt, cdn) {
306 super.qty(doc, cdt, cdn);
Faris Ansari1fe891b2021-04-23 08:04:00 +0530307 }
tundebabzyacccdb32017-11-23 08:35:15 +0100308
Rohit Waghchaure6c9b2122022-12-05 14:48:18 +0530309 pick_serial_and_batch(doc, cdt, cdn) {
310 let item = locals[cdt][cdn];
311 let me = this;
312 let path = "assets/erpnext/js/utils/serial_no_batch_selector.js";
313
314 frappe.db.get_value("Item", item.item_code, ["has_batch_no", "has_serial_no"])
315 .then((r) => {
316 if (r.message && (r.message.has_batch_no || r.message.has_serial_no)) {
317 item.has_serial_no = r.message.has_serial_no;
318 item.has_batch_no = r.message.has_batch_no;
Rohit Waghchauree6143ab2023-03-13 14:51:43 +0530319 item.type_of_transaction = item.qty > 0 ? "Outward":"Inward";
Rohit Waghchaure674bd3e2023-03-17 16:42:59 +0530320 item.outward = item.qty > 0 ? 1 : 0;
Rohit Waghchaure6c9b2122022-12-05 14:48:18 +0530321
322 item.title = item.has_serial_no ?
323 __("Select Serial No") : __("Select Batch No");
324
325 if (item.has_serial_no && item.has_batch_no) {
326 item.title = __("Select Serial and Batch");
327 }
328
329 frappe.require(path, function() {
Rohit Waghchaure5bb31732023-03-21 10:54:41 +0530330 new erpnext.SerialBatchPackageSelector(
Rohit Waghchaure6c9b2122022-12-05 14:48:18 +0530331 me.frm, item, (r) => {
332 if (r) {
Rohit Waghchaurec1132d12023-03-24 10:14:09 +0530333 frappe.model.set_value(item.doctype, item.name, {
334 "serial_and_batch_bundle": r.name,
335 "qty": Math.abs(r.total_qty)
336 });
Rohit Waghchaure6c9b2122022-12-05 14:48:18 +0530337 }
338 }
339 );
340 });
341 }
342 });
343 }
344
Faris Ansari1fe891b2021-04-23 08:04:00 +0530345 update_auto_repeat_reference(doc) {
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200346 if (doc.auto_repeat) {
347 frappe.call({
Rucha Mahabal65a627c2019-07-17 13:50:32 +0530348 method:"frappe.automation.doctype.auto_repeat.auto_repeat.update_reference",
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530349 args:{
Charles-Henri Decultot8b223102018-06-28 10:57:58 +0200350 docname: doc.auto_repeat,
351 reference:doc.name
352 },
353 callback: function(r){
354 if (r.message=="success") {
355 frappe.show_alert({message:__("Auto repeat document updated"), indicator:'green'});
356 } else {
357 frappe.show_alert({message:__("An error occurred during the update process"), indicator:'red'});
358 }
359 }
360 })
361 }
362 }
Faris Ansari1fe891b2021-04-23 08:04:00 +0530363};
Anand Doshi43f087c2014-08-26 14:25:53 +0530364
Neil Trini Lasrado6e343e22016-03-09 17:02:59 +0530365frappe.ui.form.on(cur_frm.doctype,"project", function(frm) {
Nabin Hait10b155a2014-10-23 13:18:59 +0530366 if(in_list(["Delivery Note", "Sales Invoice"], frm.doc.doctype)) {
Rushabh Mehta532eedf2016-05-19 18:22:49 +0530367 if(frm.doc.project) {
368 frappe.call({
369 method:'erpnext.projects.doctype.project.project.get_cost_center_name' ,
370 args: { project: frm.doc.project },
371 callback: function(r, rt) {
372 if(!r.exc) {
373 $.each(frm.doc["items"] || [], function(i, row) {
374 if(r.message) {
375 frappe.model.set_value(row.doctype, row.name, "cost_center", r.message);
Mohammad Hasnain Mohsin Rajane15b6a92020-11-25 15:36:41 +0530376 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 +0530377 }
378 })
379 }
Nabin Hait10b155a2014-10-23 13:18:59 +0530380 }
Rushabh Mehta532eedf2016-05-19 18:22:49 +0530381 })
382 }
Nabin Hait10b155a2014-10-23 13:18:59 +0530383 }
Nabin Haite45ec662018-08-01 17:44:34 +0530384})
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530385
386frappe.ui.form.on(cur_frm.doctype, {
387 set_as_lost_dialog: function(frm) {
388 var dialog = new frappe.ui.Dialog({
389 title: __("Set as Lost"),
390 fields: [
Anupam Kumare447c792020-08-13 09:20:36 +0530391 {
392 "fieldtype": "Table MultiSelect",
393 "label": __("Lost Reasons"),
394 "fieldname": "lost_reason",
395 "options": frm.doctype === 'Opportunity' ? 'Opportunity Lost Reason Detail': 'Quotation Lost Reason Detail',
396 "reqd": 1
397 },
398 {
Anupam Kumar6954dd62021-11-09 19:36:27 +0530399 "fieldtype": "Table MultiSelect",
400 "label": __("Competitors"),
401 "fieldname": "competitors",
402 "options": "Competitor Detail"
403 },
404 {
Anupam Kumar925eca02022-01-29 22:32:03 +0530405 "fieldtype": "Small Text",
Anupam Kumare447c792020-08-13 09:20:36 +0530406 "label": __("Detailed Reason"),
407 "fieldname": "detailed_reason"
408 },
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530409 ],
410 primary_action: function() {
Anupam Kumar6954dd62021-11-09 19:36:27 +0530411 let values = dialog.get_values();
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530412
413 frm.call({
414 doc: frm.doc,
415 method: 'declare_enquiry_lost',
416 args: {
Anupam Kumar6954dd62021-11-09 19:36:27 +0530417 'lost_reasons_list': values.lost_reason,
Anupam Kumar896adc32022-01-31 12:09:54 +0530418 'competitors': values.competitors ? values.competitors : [],
Anupam Kumar6954dd62021-11-09 19:36:27 +0530419 'detailed_reason': values.detailed_reason
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530420 },
421 callback: function(r) {
422 dialog.hide();
423 frm.reload_doc();
424 },
425 });
deepeshgarg007d9a768a2018-12-29 19:33:44 +0530426 },
427 primary_action_label: __('Declare Lost')
428 });
429
430 dialog.show();
431 }
Ankush Menat1646fbe2022-06-10 13:52:17 +0530432})