blob: 623941755d1b36a4908a9d94ee213f2014f2ec5e [file] [log] [blame]
Anand Doshi885e0742015-03-03 14:55:30 +05301// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
Rushabh Mehtab09d9da2014-01-02 11:47:23 +05302// License: GNU General Public License v3. See license.txt
3
Rushabh Mehta793ba6b2014-02-14 15:47:51 +05304frappe.provide("erpnext.utils");
Rushabh Mehta8bbca6f2016-04-12 19:16:33 +05305
Ankush Menatec74a5e2024-03-10 19:45:40 +05306const SALES_DOCTYPES = ["Quotation", "Sales Order", "Delivery Note", "Sales Invoice"];
7const PURCHASE_DOCTYPES = ["Supplier Quotation", "Purchase Order", "Purchase Receipt", "Purchase Invoice"];
Sagar Vorad0508292022-07-29 13:20:34 +05308
Ankush Menatec74a5e2024-03-10 19:45:40 +05309erpnext.utils.get_party_details = function (frm, method, args, callback) {
marinatione27b9962020-07-03 22:03:25 +053010 if (!method) {
Rushabh Mehtacc008cc2014-02-03 16:14:56 +053011 method = "erpnext.accounts.party.get_party_details";
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053012 }
Deepesh Garg6e2c13f2019-12-10 15:55:05 +053013
marinatione27b9962020-07-03 22:03:25 +053014 if (!args) {
Ankush Menatec74a5e2024-03-10 19:45:40 +053015 if (
16 (frm.doctype != "Purchase Order" && frm.doc.customer) ||
barredterrad2387512024-03-19 12:03:36 +010017 (frm.doc.party_name && ["Quotation", "Opportunity"].includes(frm.doc.doctype))
Ankush Menatec74a5e2024-03-10 19:45:40 +053018 ) {
Nabin Hait34c551d2019-07-03 10:34:31 +053019 let party_type = "Customer";
barredterrad2387512024-03-19 12:03:36 +010020 if (frm.doc.quotation_to && ["Lead", "Prospect"].includes(frm.doc.quotation_to)) {
Nabin Hait47ce6de2023-06-06 15:19:04 +053021 party_type = frm.doc.quotation_to;
Nabin Hait34c551d2019-07-03 10:34:31 +053022 }
23
Anand Doshi78eeacb2014-04-23 19:15:15 +053024 args = {
Nabin Hait34c551d2019-07-03 10:34:31 +053025 party: frm.doc.customer || frm.doc.party_name,
26 party_type: party_type,
Ankush Menatec74a5e2024-03-10 19:45:40 +053027 price_list: frm.doc.selling_price_list,
Rushabh Mehta24da7612014-01-29 15:26:04 +053028 };
marinatione27b9962020-07-03 22:03:25 +053029 } else if (frm.doc.supplier) {
Anand Doshi78eeacb2014-04-23 19:15:15 +053030 args = {
Rushabh Mehtacc008cc2014-02-03 16:14:56 +053031 party: frm.doc.supplier,
32 party_type: "Supplier",
Shreya Shah3a9eec22018-02-16 13:05:21 +053033 bill_date: frm.doc.bill_date,
Ankush Menatec74a5e2024-03-10 19:45:40 +053034 price_list: frm.doc.buying_price_list,
Rushabh Mehta24da7612014-01-29 15:26:04 +053035 };
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053036 }
shreyas22d26a12016-02-01 15:32:32 +053037
Sagar Vorad0508292022-07-29 13:20:34 +053038 if (!args) {
39 if (in_list(SALES_DOCTYPES, frm.doc.doctype)) {
Deepesh Garg6e2c13f2019-12-10 15:55:05 +053040 args = {
41 party: frm.doc.customer || frm.doc.party_name,
Ankush Menatec74a5e2024-03-10 19:45:40 +053042 party_type: "Customer",
Sagar Vorad0508292022-07-29 13:20:34 +053043 };
Deepesh Garg6e2c13f2019-12-10 15:55:05 +053044 }
45
Sagar Vorad0508292022-07-29 13:20:34 +053046 if (in_list(PURCHASE_DOCTYPES, frm.doc.doctype)) {
Deepesh Garg6e2c13f2019-12-10 15:55:05 +053047 args = {
48 party: frm.doc.supplier,
Ankush Menatec74a5e2024-03-10 19:45:40 +053049 party_type: "Supplier",
Sagar Vorad0508292022-07-29 13:20:34 +053050 };
Deepesh Garg6e2c13f2019-12-10 15:55:05 +053051 }
52 }
53
Sagar Vorad0508292022-07-29 13:20:34 +053054 if (!args || !args.party) return;
55
56 args.posting_date = frm.doc.posting_date || frm.doc.transaction_date;
57 args.fetch_payment_terms_template = cint(!frm.doc.ignore_default_payment_terms_template);
58 }
59
60 if (in_list(SALES_DOCTYPES, frm.doc.doctype)) {
61 if (!args.company_address && frm.doc.company_address) {
62 args.company_address = frm.doc.company_address;
Anand Doshi9a4d1652015-10-12 16:23:51 +053063 }
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053064 }
Sagar Vorad0508292022-07-29 13:20:34 +053065
66 if (in_list(PURCHASE_DOCTYPES, frm.doc.doctype)) {
67 if (!args.company_address && frm.doc.billing_address) {
68 args.company_address = frm.doc.billing_address;
69 }
70
71 if (!args.shipping_address && frm.doc.shipping_address) {
72 args.shipping_address = frm.doc.shipping_address;
73 }
74 }
75
marinatione27b9962020-07-03 22:03:25 +053076 if (frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
Ankush Menatec74a5e2024-03-10 19:45:40 +053077 if (
78 !erpnext.utils.validate_mandatory(
79 frm,
80 "Posting / Transaction Date",
81 args.posting_date,
82 args.party_type == "Customer" ? "customer" : "supplier"
83 )
84 )
85 return;
Nabin Hait00818bf2015-10-23 16:10:56 +053086 }
shreyas22d26a12016-02-01 15:32:32 +053087
Ankush Menatec74a5e2024-03-10 19:45:40 +053088 if (
89 !erpnext.utils.validate_mandatory(
90 frm,
91 "Company",
92 frm.doc.company,
93 args.party_type == "Customer" ? "customer" : "supplier"
94 )
95 ) {
marinatione27b9962020-07-03 22:03:25 +053096 return;
97 }
98
Rushabh Mehtacc008cc2014-02-03 16:14:56 +053099 args.currency = frm.doc.currency;
100 args.company = frm.doc.company;
Nabin Hait4d7c4fc2014-06-18 16:40:27 +0530101 args.doctype = frm.doc.doctype;
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530102 frappe.call({
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530103 method: method,
104 args: args,
Ankush Menatec74a5e2024-03-10 19:45:40 +0530105 callback: function (r) {
marinatione27b9962020-07-03 22:03:25 +0530106 if (r.message) {
Zarrar7f8024c2018-08-01 17:45:05 +0530107 frm.supplier_tds = r.message.supplier_tds;
Rushabh Mehta49dd7be2014-01-28 17:43:10 +0530108 frm.updating_party_details = true;
Rushabh Mehtadab11722017-07-17 15:31:17 +0530109 frappe.run_serially([
110 () => frm.set_value(r.message),
111 () => {
112 frm.updating_party_details = false;
marinatione27b9962020-07-03 22:03:25 +0530113 if (callback) callback();
Rushabh Mehtadab11722017-07-17 15:31:17 +0530114 frm.refresh();
115 erpnext.utils.add_item(frm);
Ankush Menatec74a5e2024-03-10 19:45:40 +0530116 },
Rushabh Mehtadab11722017-07-17 15:31:17 +0530117 ]);
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530118 }
Ankush Menatec74a5e2024-03-10 19:45:40 +0530119 },
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530120 });
Ankush Menatec74a5e2024-03-10 19:45:40 +0530121};
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530122
Ankush Menatec74a5e2024-03-10 19:45:40 +0530123erpnext.utils.add_item = function (frm) {
marinatione27b9962020-07-03 22:03:25 +0530124 if (frm.is_new()) {
Rushabh Mehta50954372017-02-23 17:03:46 +0530125 var prev_route = frappe.get_prev_route();
Ankush Menatec74a5e2024-03-10 19:45:40 +0530126 if (prev_route[1] === "Item" && !(frm.doc.items && frm.doc.items.length)) {
Rushabh Mehta50954372017-02-23 17:03:46 +0530127 // add row
Ankush Menatec74a5e2024-03-10 19:45:40 +0530128 var item = frm.add_child("items");
129 frm.refresh_field("items");
Rushabh Mehta50954372017-02-23 17:03:46 +0530130
131 // set item
Ankush Menatec74a5e2024-03-10 19:45:40 +0530132 frappe.model.set_value(item.doctype, item.name, "item_code", prev_route[2]);
Rushabh Mehta50954372017-02-23 17:03:46 +0530133 }
134 }
Ankush Menatec74a5e2024-03-10 19:45:40 +0530135};
Rushabh Mehta50954372017-02-23 17:03:46 +0530136
Ankush Menatec74a5e2024-03-10 19:45:40 +0530137erpnext.utils.get_address_display = function (frm, address_field, display_field, is_your_company_address) {
marinatione27b9962020-07-03 22:03:25 +0530138 if (frm.updating_party_details) return;
shreyas22d26a12016-02-01 15:32:32 +0530139
marinatione27b9962020-07-03 22:03:25 +0530140 if (!address_field) {
141 if (frm.doctype != "Purchase Order" && frm.doc.customer) {
Rushabh Mehta49dd7be2014-01-28 17:43:10 +0530142 address_field = "customer_address";
marinatione27b9962020-07-03 22:03:25 +0530143 } else if (frm.doc.supplier) {
Rushabh Mehta49dd7be2014-01-28 17:43:10 +0530144 address_field = "supplier_address";
Nabin Hait9d1f0772014-02-19 17:43:24 +0530145 } else return;
Anand Doshi78eeacb2014-04-23 19:15:15 +0530146 }
shreyas22d26a12016-02-01 15:32:32 +0530147
marinatione27b9962020-07-03 22:03:25 +0530148 if (!display_field) display_field = "address_display";
149 if (frm.doc[address_field]) {
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530150 frappe.call({
KanchanChauhan1dc26b12017-06-13 15:26:35 +0530151 method: "frappe.contacts.doctype.address.address.get_address_display",
Ankush Menatec74a5e2024-03-10 19:45:40 +0530152 args: { address_dict: frm.doc[address_field] },
153 callback: function (r) {
marinatione27b9962020-07-03 22:03:25 +0530154 if (r.message) {
Ankush Menatec74a5e2024-03-10 19:45:40 +0530155 frm.set_value(display_field, r.message);
Neil Trini Lasrado09f9c962015-08-26 10:41:31 +0530156 }
Ankush Menatec74a5e2024-03-10 19:45:40 +0530157 },
158 });
Nabin Hait62211172016-03-16 16:22:03 +0530159 } else {
Ankush Menatec74a5e2024-03-10 19:45:40 +0530160 frm.set_value(display_field, "");
Nabin Haitb87e9f22014-01-29 19:51:36 +0530161 }
Anand Doshi2f957f22016-04-08 17:36:10 +0530162};
Rushabh Mehta5d0e8de2016-04-11 17:34:25 +0530163
Ankush Menatec74a5e2024-03-10 19:45:40 +0530164erpnext.utils.set_taxes_from_address = function (
165 frm,
166 triggered_from_field,
167 billing_address_field,
168 shipping_address_field
169) {
marinatione27b9962020-07-03 22:03:25 +0530170 if (frm.updating_party_details) return;
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500171
marinatione27b9962020-07-03 22:03:25 +0530172 if (frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
Ankush Menatec74a5e2024-03-10 19:45:40 +0530173 if (
174 !erpnext.utils.validate_mandatory(
175 frm,
176 "Lead / Customer / Supplier",
177 frm.doc.customer || frm.doc.supplier || frm.doc.lead || frm.doc.party_name,
178 triggered_from_field
179 )
180 ) {
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500181 return;
182 }
183
Ankush Menatec74a5e2024-03-10 19:45:40 +0530184 if (
185 !erpnext.utils.validate_mandatory(
186 frm,
187 "Posting / Transaction Date",
188 frm.doc.posting_date || frm.doc.transaction_date,
189 triggered_from_field
190 )
191 ) {
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500192 return;
193 }
194 } else {
195 return;
196 }
197
198 frappe.call({
199 method: "erpnext.accounts.party.get_address_tax_category",
200 args: {
Ankush Menatec74a5e2024-03-10 19:45:40 +0530201 tax_category: frm.doc.tax_category,
202 billing_address: frm.doc[billing_address_field],
203 shipping_address: frm.doc[shipping_address_field],
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500204 },
Ankush Menatec74a5e2024-03-10 19:45:40 +0530205 callback: function (r) {
206 if (!r.exc) {
marinatione27b9962020-07-03 22:03:25 +0530207 if (frm.doc.tax_category != r.message) {
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500208 frm.set_value("tax_category", r.message);
209 } else {
210 erpnext.utils.set_taxes(frm, triggered_from_field);
211 }
212 }
Ankush Menatec74a5e2024-03-10 19:45:40 +0530213 },
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500214 });
215};
216
Ankush Menatec74a5e2024-03-10 19:45:40 +0530217erpnext.utils.set_taxes = function (frm, triggered_from_field) {
marinatione27b9962020-07-03 22:03:25 +0530218 if (frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
219 if (!erpnext.utils.validate_mandatory(frm, "Company", frm.doc.company, triggered_from_field)) {
220 return;
221 }
222
Ankush Menatec74a5e2024-03-10 19:45:40 +0530223 if (
224 !erpnext.utils.validate_mandatory(
225 frm,
226 "Lead / Customer / Supplier",
227 frm.doc.customer || frm.doc.supplier || frm.doc.lead || frm.doc.party_name,
228 triggered_from_field
229 )
230 ) {
Faris Ansariab74ca72017-05-30 12:54:42 +0530231 return;
232 }
Anand Doshi2f957f22016-04-08 17:36:10 +0530233
Ankush Menatec74a5e2024-03-10 19:45:40 +0530234 if (
235 !erpnext.utils.validate_mandatory(
236 frm,
237 "Posting / Transaction Date",
238 frm.doc.posting_date || frm.doc.transaction_date,
239 triggered_from_field
240 )
241 ) {
Anand Doshi2f957f22016-04-08 17:36:10 +0530242 return;
243 }
244 } else {
245 return;
246 }
247
248 var party_type, party;
249 if (frm.doc.lead) {
Ankush Menatec74a5e2024-03-10 19:45:40 +0530250 party_type = "Lead";
Anand Doshi2f957f22016-04-08 17:36:10 +0530251 party = frm.doc.lead;
252 } else if (frm.doc.customer) {
Ankush Menatec74a5e2024-03-10 19:45:40 +0530253 party_type = "Customer";
Anand Doshi2f957f22016-04-08 17:36:10 +0530254 party = frm.doc.customer;
255 } else if (frm.doc.supplier) {
Ankush Menatec74a5e2024-03-10 19:45:40 +0530256 party_type = "Supplier";
Anand Doshi2f957f22016-04-08 17:36:10 +0530257 party = frm.doc.supplier;
Ankush Menatec74a5e2024-03-10 19:45:40 +0530258 } else if (frm.doc.quotation_to) {
Nabin Hait34c551d2019-07-03 10:34:31 +0530259 party_type = frm.doc.quotation_to;
260 party = frm.doc.party_name;
Anand Doshi2f957f22016-04-08 17:36:10 +0530261 }
262
Rohit Waghchaure4f3b7da2020-09-15 14:47:36 +0530263 if (!frm.doc.company) {
Deepesh Garg0aff6d82020-09-19 18:05:58 +0530264 frappe.throw(__("Kindly select the company first"));
Rohit Waghchaure4f3b7da2020-09-15 14:47:36 +0530265 }
266
Anand Doshi2f957f22016-04-08 17:36:10 +0530267 frappe.call({
268 method: "erpnext.accounts.party.set_taxes",
269 args: {
Ankush Menatec74a5e2024-03-10 19:45:40 +0530270 party: party,
271 party_type: party_type,
272 posting_date: frm.doc.posting_date || frm.doc.transaction_date,
273 company: frm.doc.company,
274 customer_group: frm.doc.customer_group,
275 supplier_group: frm.doc.supplier_group,
276 tax_category: frm.doc.tax_category,
277 billing_address:
278 frm.doc.customer || frm.doc.lead ? frm.doc.customer_address : frm.doc.supplier_address,
279 shipping_address: frm.doc.shipping_address_name,
Anand Doshi2f957f22016-04-08 17:36:10 +0530280 },
Ankush Menatec74a5e2024-03-10 19:45:40 +0530281 callback: function (r) {
282 if (r.message) {
283 frm.set_value("taxes_and_charges", r.message);
Anand Doshi2f957f22016-04-08 17:36:10 +0530284 }
Ankush Menatec74a5e2024-03-10 19:45:40 +0530285 },
Anand Doshi2f957f22016-04-08 17:36:10 +0530286 });
Saif Ur Rehman67786682018-12-27 02:11:07 +0500287};
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530288
barredterra23f0bb42022-10-19 12:26:56 +0200289erpnext.utils.get_contact_details = function (frm) {
marinatione27b9962020-07-03 22:03:25 +0530290 if (frm.updating_party_details) return;
Anand Doshi78eeacb2014-04-23 19:15:15 +0530291
marinatione27b9962020-07-03 22:03:25 +0530292 if (frm.doc["contact_person"]) {
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530293 frappe.call({
KanchanChauhan1dc26b12017-06-13 15:26:35 +0530294 method: "frappe.contacts.doctype.contact.contact.get_contact_details",
barredterra23f0bb42022-10-19 12:26:56 +0200295 args: { contact: frm.doc.contact_person },
296 callback: function (r) {
297 if (r.message) frm.set_value(r.message);
298 },
299 });
300 } else {
301 frm.set_value({
302 contact_person: "",
303 contact_display: "",
304 contact_email: "",
305 contact_mobile: "",
306 contact_phone: "",
307 contact_designation: "",
308 contact_department: "",
309 });
Nabin Haitb87e9f22014-01-29 19:51:36 +0530310 }
barredterra23f0bb42022-10-19 12:26:56 +0200311};
Nabin Hait00818bf2015-10-23 16:10:56 +0530312
Ankush Menatec74a5e2024-03-10 19:45:40 +0530313erpnext.utils.validate_mandatory = function (frm, label, value, trigger_on) {
marinatione27b9962020-07-03 22:03:25 +0530314 if (!value) {
Nabin Hait00818bf2015-10-23 16:10:56 +0530315 frm.doc[trigger_on] = "";
316 refresh_field(trigger_on);
Ankush Menatec74a5e2024-03-10 19:45:40 +0530317 frappe.throw({ message: __("Please enter {0} first", [label]), title: __("Mandatory") });
Nabin Hait00818bf2015-10-23 16:10:56 +0530318 return false;
319 }
320 return true;
Ankush Menatec74a5e2024-03-10 19:45:40 +0530321};
shreyas22d26a12016-02-01 15:32:32 +0530322
Ankush Menatec74a5e2024-03-10 19:45:40 +0530323erpnext.utils.get_shipping_address = function (frm, callback) {
Maxwell Moraisa2c1d922018-08-27 03:35:41 -0300324 if (frm.doc.company) {
Ankush Menatec74a5e2024-03-10 19:45:40 +0530325 if (
326 frm.doc.inter_company_order_reference ||
327 frm.doc.internal_invoice_reference ||
328 frm.doc.internal_order_reference
329 ) {
Deepesh Gargb4be2922021-01-28 13:09:56 +0530330 if (callback) {
331 return callback();
332 }
333 }
rohitwaghchaure5ecc26b2018-06-04 11:00:24 +0530334 frappe.call({
Abhishek Balam89419c92020-10-14 20:09:05 +0530335 method: "erpnext.accounts.custom.address.get_shipping_address",
rohitwaghchaure5ecc26b2018-06-04 11:00:24 +0530336 args: {
337 company: frm.doc.company,
Ankush Menatec74a5e2024-03-10 19:45:40 +0530338 address: frm.doc.shipping_address,
rohitwaghchaure5ecc26b2018-06-04 11:00:24 +0530339 },
Ankush Menatec74a5e2024-03-10 19:45:40 +0530340 callback: function (r) {
Deepesh Gargfd467e62021-08-30 17:53:59 +0530341 if (r.message) {
Ankush Menatec74a5e2024-03-10 19:45:40 +0530342 frm.set_value("shipping_address", r.message[0]); //Address title or name
343 frm.set_value("shipping_address_display", r.message[1]); //Address to be displayed on the page
rohitwaghchaure5ecc26b2018-06-04 11:00:24 +0530344 }
Rohit Waghchaureb2e7a1f2016-04-11 12:10:20 +0530345
Ankush Menatec74a5e2024-03-10 19:45:40 +0530346 if (callback) {
rohitwaghchaure5ecc26b2018-06-04 11:00:24 +0530347 return callback();
348 }
Ankush Menatec74a5e2024-03-10 19:45:40 +0530349 },
rohitwaghchaure5ecc26b2018-06-04 11:00:24 +0530350 });
351 } else {
352 frappe.msgprint(__("Select company first"));
353 }
Ankush Menatec74a5e2024-03-10 19:45:40 +0530354};