blob: 644adff1e27335286a6d1dfcfb1a4de307f521f9 [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
Sagar Vorad0508292022-07-29 13:20:34 +05306const SALES_DOCTYPES = ['Quotation', 'Sales Order', 'Delivery Note', 'Sales Invoice'];
7const PURCHASE_DOCTYPES = ['Purchase Order', 'Purchase Receipt', 'Purchase Invoice'];
8
Nabin Haita3dd72a2014-05-28 12:49:20 +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) {
15 if ((frm.doctype != "Purchase Order" && frm.doc.customer)
Nabin Hait34c551d2019-07-03 10:34:31 +053016 || (frm.doc.party_name && in_list(['Quotation', 'Opportunity'], frm.doc.doctype))) {
17
18 let party_type = "Customer";
marinatione27b9962020-07-03 22:03:25 +053019 if (frm.doc.quotation_to && frm.doc.quotation_to === "Lead") {
Nabin Hait34c551d2019-07-03 10:34:31 +053020 party_type = "Lead";
21 }
22
Anand Doshi78eeacb2014-04-23 19:15:15 +053023 args = {
Nabin Hait34c551d2019-07-03 10:34:31 +053024 party: frm.doc.customer || frm.doc.party_name,
25 party_type: party_type,
Rushabh Mehta24da7612014-01-29 15:26:04 +053026 price_list: frm.doc.selling_price_list
27 };
marinatione27b9962020-07-03 22:03:25 +053028 } else if (frm.doc.supplier) {
Anand Doshi78eeacb2014-04-23 19:15:15 +053029 args = {
Rushabh Mehtacc008cc2014-02-03 16:14:56 +053030 party: frm.doc.supplier,
31 party_type: "Supplier",
Shreya Shah3a9eec22018-02-16 13:05:21 +053032 bill_date: frm.doc.bill_date,
Rushabh Mehta24da7612014-01-29 15:26:04 +053033 price_list: frm.doc.buying_price_list
34 };
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053035 }
shreyas22d26a12016-02-01 15:32:32 +053036
Sagar Vorad0508292022-07-29 13:20:34 +053037 if (!args) {
38 if (in_list(SALES_DOCTYPES, frm.doc.doctype)) {
Deepesh Garg6e2c13f2019-12-10 15:55:05 +053039 args = {
40 party: frm.doc.customer || frm.doc.party_name,
41 party_type: 'Customer'
Sagar Vorad0508292022-07-29 13:20:34 +053042 };
Deepesh Garg6e2c13f2019-12-10 15:55:05 +053043 }
44
Sagar Vorad0508292022-07-29 13:20:34 +053045 if (in_list(PURCHASE_DOCTYPES, frm.doc.doctype)) {
Deepesh Garg6e2c13f2019-12-10 15:55:05 +053046 args = {
47 party: frm.doc.supplier,
48 party_type: 'Supplier'
Sagar Vorad0508292022-07-29 13:20:34 +053049 };
Deepesh Garg6e2c13f2019-12-10 15:55:05 +053050 }
51 }
52
Sagar Vorad0508292022-07-29 13:20:34 +053053 if (!args || !args.party) return;
54
55 args.posting_date = frm.doc.posting_date || frm.doc.transaction_date;
56 args.fetch_payment_terms_template = cint(!frm.doc.ignore_default_payment_terms_template);
57 }
58
59 if (in_list(SALES_DOCTYPES, frm.doc.doctype)) {
60 if (!args.company_address && frm.doc.company_address) {
61 args.company_address = frm.doc.company_address;
Anand Doshi9a4d1652015-10-12 16:23:51 +053062 }
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053063 }
Sagar Vorad0508292022-07-29 13:20:34 +053064
65 if (in_list(PURCHASE_DOCTYPES, frm.doc.doctype)) {
66 if (!args.company_address && frm.doc.billing_address) {
67 args.company_address = frm.doc.billing_address;
68 }
69
70 if (!args.shipping_address && frm.doc.shipping_address) {
71 args.shipping_address = frm.doc.shipping_address;
72 }
73 }
74
shreyas22d26a12016-02-01 15:32:32 +053075
marinatione27b9962020-07-03 22:03:25 +053076 if (frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
77 if (!erpnext.utils.validate_mandatory(frm, "Posting / Transaction Date",
Nabin Hait00818bf2015-10-23 16:10:56 +053078 args.posting_date, args.party_type=="Customer" ? "customer": "supplier")) return;
79 }
shreyas22d26a12016-02-01 15:32:32 +053080
marinatione27b9962020-07-03 22:03:25 +053081 if (!erpnext.utils.validate_mandatory(frm, "Company", frm.doc.company, args.party_type=="Customer" ? "customer": "supplier")) {
82 return;
83 }
84
Rushabh Mehtacc008cc2014-02-03 16:14:56 +053085 args.currency = frm.doc.currency;
86 args.company = frm.doc.company;
Nabin Hait4d7c4fc2014-06-18 16:40:27 +053087 args.doctype = frm.doc.doctype;
Rushabh Mehta793ba6b2014-02-14 15:47:51 +053088 frappe.call({
Rushabh Mehtab09d9da2014-01-02 11:47:23 +053089 method: method,
90 args: args,
91 callback: function(r) {
marinatione27b9962020-07-03 22:03:25 +053092 if (r.message) {
Zarrar7f8024c2018-08-01 17:45:05 +053093 frm.supplier_tds = r.message.supplier_tds;
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053094 frm.updating_party_details = true;
Rushabh Mehtadab11722017-07-17 15:31:17 +053095 frappe.run_serially([
96 () => frm.set_value(r.message),
97 () => {
98 frm.updating_party_details = false;
marinatione27b9962020-07-03 22:03:25 +053099 if (callback) callback();
Rushabh Mehtadab11722017-07-17 15:31:17 +0530100 frm.refresh();
101 erpnext.utils.add_item(frm);
102 }
103 ]);
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530104 }
105 }
106 });
107}
108
Rushabh Mehta50954372017-02-23 17:03:46 +0530109erpnext.utils.add_item = function(frm) {
marinatione27b9962020-07-03 22:03:25 +0530110 if (frm.is_new()) {
Rushabh Mehta50954372017-02-23 17:03:46 +0530111 var prev_route = frappe.get_prev_route();
marinatione27b9962020-07-03 22:03:25 +0530112 if (prev_route[1]==='Item' && !(frm.doc.items && frm.doc.items.length)) {
Rushabh Mehta50954372017-02-23 17:03:46 +0530113 // add row
Faris Ansariab74ca72017-05-30 12:54:42 +0530114 var item = frm.add_child('items');
Rushabh Mehta50954372017-02-23 17:03:46 +0530115 frm.refresh_field('items');
116
117 // set item
118 frappe.model.set_value(item.doctype, item.name, 'item_code', prev_route[2]);
119 }
120 }
121}
122
Nabin Hait62211172016-03-16 16:22:03 +0530123erpnext.utils.get_address_display = function(frm, address_field, display_field, is_your_company_address) {
marinatione27b9962020-07-03 22:03:25 +0530124 if (frm.updating_party_details) return;
shreyas22d26a12016-02-01 15:32:32 +0530125
marinatione27b9962020-07-03 22:03:25 +0530126 if (!address_field) {
127 if (frm.doctype != "Purchase Order" && frm.doc.customer) {
Rushabh Mehta49dd7be2014-01-28 17:43:10 +0530128 address_field = "customer_address";
marinatione27b9962020-07-03 22:03:25 +0530129 } else if (frm.doc.supplier) {
Rushabh Mehta49dd7be2014-01-28 17:43:10 +0530130 address_field = "supplier_address";
Nabin Hait9d1f0772014-02-19 17:43:24 +0530131 } else return;
Anand Doshi78eeacb2014-04-23 19:15:15 +0530132 }
shreyas22d26a12016-02-01 15:32:32 +0530133
marinatione27b9962020-07-03 22:03:25 +0530134 if (!display_field) display_field = "address_display";
135 if (frm.doc[address_field]) {
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530136 frappe.call({
KanchanChauhan1dc26b12017-06-13 15:26:35 +0530137 method: "frappe.contacts.doctype.address.address.get_address_display",
Nabin Hait9d1f0772014-02-19 17:43:24 +0530138 args: {"address_dict": frm.doc[address_field] },
Nabin Haitb87e9f22014-01-29 19:51:36 +0530139 callback: function(r) {
marinatione27b9962020-07-03 22:03:25 +0530140 if (r.message) {
Nabin Hait9d1f0772014-02-19 17:43:24 +0530141 frm.set_value(display_field, r.message)
Neil Trini Lasrado09f9c962015-08-26 10:41:31 +0530142 }
Nabin Haitb87e9f22014-01-29 19:51:36 +0530143 }
144 })
Nabin Hait62211172016-03-16 16:22:03 +0530145 } else {
mbauskar8a2e6f42017-04-14 17:50:32 +0530146 frm.set_value(display_field, '');
Nabin Haitb87e9f22014-01-29 19:51:36 +0530147 }
Anand Doshi2f957f22016-04-08 17:36:10 +0530148};
Rushabh Mehta5d0e8de2016-04-11 17:34:25 +0530149
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500150erpnext.utils.set_taxes_from_address = function(frm, triggered_from_field, billing_address_field, shipping_address_field) {
marinatione27b9962020-07-03 22:03:25 +0530151 if (frm.updating_party_details) return;
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500152
marinatione27b9962020-07-03 22:03:25 +0530153 if (frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
154 if (!erpnext.utils.validate_mandatory(frm, "Lead / Customer / Supplier",
Nabin Hait34c551d2019-07-03 10:34:31 +0530155 frm.doc.customer || frm.doc.supplier || frm.doc.lead || frm.doc.party_name, triggered_from_field)) {
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500156 return;
157 }
158
marinatione27b9962020-07-03 22:03:25 +0530159 if (!erpnext.utils.validate_mandatory(frm, "Posting / Transaction Date",
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500160 frm.doc.posting_date || frm.doc.transaction_date, triggered_from_field)) {
161 return;
162 }
163 } else {
164 return;
165 }
166
167 frappe.call({
168 method: "erpnext.accounts.party.get_address_tax_category",
169 args: {
170 "tax_category": frm.doc.tax_category,
171 "billing_address": frm.doc[billing_address_field],
172 "shipping_address": frm.doc[shipping_address_field]
173 },
174 callback: function(r) {
marinatione27b9962020-07-03 22:03:25 +0530175 if (!r.exc){
176 if (frm.doc.tax_category != r.message) {
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500177 frm.set_value("tax_category", r.message);
178 } else {
179 erpnext.utils.set_taxes(frm, triggered_from_field);
180 }
181 }
182 }
183 });
184};
185
Saif Ur Rehman67786682018-12-27 02:11:07 +0500186erpnext.utils.set_taxes = function(frm, triggered_from_field) {
marinatione27b9962020-07-03 22:03:25 +0530187 if (frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
188 if (!erpnext.utils.validate_mandatory(frm, "Company", frm.doc.company, triggered_from_field)) {
189 return;
190 }
191
192 if (!erpnext.utils.validate_mandatory(frm, "Lead / Customer / Supplier",
deepeshgarg007d5fcab52019-07-15 12:44:11 +0530193 frm.doc.customer || frm.doc.supplier || frm.doc.lead || frm.doc.party_name, triggered_from_field)) {
Faris Ansariab74ca72017-05-30 12:54:42 +0530194 return;
195 }
Anand Doshi2f957f22016-04-08 17:36:10 +0530196
marinatione27b9962020-07-03 22:03:25 +0530197 if (!erpnext.utils.validate_mandatory(frm, "Posting / Transaction Date",
Saif Ur Rehman67786682018-12-27 02:11:07 +0500198 frm.doc.posting_date || frm.doc.transaction_date, triggered_from_field)) {
Anand Doshi2f957f22016-04-08 17:36:10 +0530199 return;
200 }
201 } else {
202 return;
203 }
204
205 var party_type, party;
206 if (frm.doc.lead) {
207 party_type = 'Lead';
208 party = frm.doc.lead;
209 } else if (frm.doc.customer) {
210 party_type = 'Customer';
211 party = frm.doc.customer;
212 } else if (frm.doc.supplier) {
213 party_type = 'Supplier';
214 party = frm.doc.supplier;
Nabin Hait34c551d2019-07-03 10:34:31 +0530215 } else if (frm.doc.quotation_to){
216 party_type = frm.doc.quotation_to;
217 party = frm.doc.party_name;
Anand Doshi2f957f22016-04-08 17:36:10 +0530218 }
219
Rohit Waghchaure4f3b7da2020-09-15 14:47:36 +0530220 if (!frm.doc.company) {
Deepesh Garg0aff6d82020-09-19 18:05:58 +0530221 frappe.throw(__("Kindly select the company first"));
Rohit Waghchaure4f3b7da2020-09-15 14:47:36 +0530222 }
223
Anand Doshi2f957f22016-04-08 17:36:10 +0530224 frappe.call({
225 method: "erpnext.accounts.party.set_taxes",
226 args: {
227 "party": party,
228 "party_type": party_type,
229 "posting_date": frm.doc.posting_date || frm.doc.transaction_date,
230 "company": frm.doc.company,
Saif Ur Rehman13a6c0a2019-01-06 18:14:18 +0500231 "customer_group": frm.doc.customer_group,
232 "supplier_group": frm.doc.supplier_group,
Saif Ur Rehman67786682018-12-27 02:11:07 +0500233 "tax_category": frm.doc.tax_category,
Anand Doshi2f957f22016-04-08 17:36:10 +0530234 "billing_address": ((frm.doc.customer || frm.doc.lead) ? (frm.doc.customer_address) : (frm.doc.supplier_address)),
235 "shipping_address": frm.doc.shipping_address_name
236 },
237 callback: function(r) {
marinatione27b9962020-07-03 22:03:25 +0530238 if (r.message){
Anand Doshi2f957f22016-04-08 17:36:10 +0530239 frm.set_value("taxes_and_charges", r.message)
240 }
241 }
242 });
Saif Ur Rehman67786682018-12-27 02:11:07 +0500243};
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530244
barredterra23f0bb42022-10-19 12:26:56 +0200245erpnext.utils.get_contact_details = function (frm) {
marinatione27b9962020-07-03 22:03:25 +0530246 if (frm.updating_party_details) return;
Anand Doshi78eeacb2014-04-23 19:15:15 +0530247
marinatione27b9962020-07-03 22:03:25 +0530248 if (frm.doc["contact_person"]) {
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530249 frappe.call({
KanchanChauhan1dc26b12017-06-13 15:26:35 +0530250 method: "frappe.contacts.doctype.contact.contact.get_contact_details",
barredterra23f0bb42022-10-19 12:26:56 +0200251 args: { contact: frm.doc.contact_person },
252 callback: function (r) {
253 if (r.message) frm.set_value(r.message);
254 },
255 });
256 } else {
257 frm.set_value({
258 contact_person: "",
259 contact_display: "",
260 contact_email: "",
261 contact_mobile: "",
262 contact_phone: "",
263 contact_designation: "",
264 contact_department: "",
265 });
Nabin Haitb87e9f22014-01-29 19:51:36 +0530266 }
barredterra23f0bb42022-10-19 12:26:56 +0200267};
Nabin Hait00818bf2015-10-23 16:10:56 +0530268
269erpnext.utils.validate_mandatory = function(frm, label, value, trigger_on) {
marinatione27b9962020-07-03 22:03:25 +0530270 if (!value) {
Nabin Hait00818bf2015-10-23 16:10:56 +0530271 frm.doc[trigger_on] = "";
272 refresh_field(trigger_on);
marinatione27b9962020-07-03 22:03:25 +0530273 frappe.throw({message:__("Please enter {0} first", [label]), title:__("Mandatory")});
Nabin Hait00818bf2015-10-23 16:10:56 +0530274 return false;
275 }
276 return true;
shreyas22d26a12016-02-01 15:32:32 +0530277}
278
Noah Jacobb4b62882021-06-23 09:54:12 +0530279erpnext.utils.get_shipping_address = function(frm, callback) {
Maxwell Moraisa2c1d922018-08-27 03:35:41 -0300280 if (frm.doc.company) {
Deepesh Gargf84f8d52021-06-24 17:29:55 +0530281 if ((frm.doc.inter_company_order_reference || frm.doc.internal_invoice_reference ||
Deepesh Gargb4be2922021-01-28 13:09:56 +0530282 frm.doc.internal_order_reference)) {
283 if (callback) {
284 return callback();
285 }
286 }
rohitwaghchaure5ecc26b2018-06-04 11:00:24 +0530287 frappe.call({
Abhishek Balam89419c92020-10-14 20:09:05 +0530288 method: "erpnext.accounts.custom.address.get_shipping_address",
rohitwaghchaure5ecc26b2018-06-04 11:00:24 +0530289 args: {
290 company: frm.doc.company,
291 address: frm.doc.shipping_address
292 },
Deepesh Gargfd467e62021-08-30 17:53:59 +0530293 callback: function(r) {
294 if (r.message) {
rohitwaghchaure5ecc26b2018-06-04 11:00:24 +0530295 frm.set_value("shipping_address", r.message[0]) //Address title or name
296 frm.set_value("shipping_address_display", r.message[1]) //Address to be displayed on the page
297 }
Rohit Waghchaureb2e7a1f2016-04-11 12:10:20 +0530298
marinatione27b9962020-07-03 22:03:25 +0530299 if (callback){
rohitwaghchaure5ecc26b2018-06-04 11:00:24 +0530300 return callback();
301 }
Rohit Waghchaureb2e7a1f2016-04-11 12:10:20 +0530302 }
rohitwaghchaure5ecc26b2018-06-04 11:00:24 +0530303 });
304 } else {
305 frappe.msgprint(__("Select company first"));
306 }
Deepesh Garg0aff6d82020-09-19 18:05:58 +0530307}