blob: 065326744c2e166a196501e63c072a9480bfacbf [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
Nabin Haita3dd72a2014-05-28 12:49:20 +05306erpnext.utils.get_party_details = function(frm, method, args, callback) {
marinatione27b9962020-07-03 22:03:25 +05307 if (!method) {
Rushabh Mehtacc008cc2014-02-03 16:14:56 +05308 method = "erpnext.accounts.party.get_party_details";
Rushabh Mehta49dd7be2014-01-28 17:43:10 +05309 }
Deepesh Garg6e2c13f2019-12-10 15:55:05 +053010
11 if (args) {
12 if (in_list(['Sales Invoice', 'Sales Order', 'Delivery Note'], frm.doc.doctype)) {
13 if (frm.doc.company_address && (!args.company_address)) {
14 args.company_address = frm.doc.company_address;
15 }
16 }
17
18 if (in_list(['Purchase Invoice', 'Purchase Order', 'Purchase Receipt'], frm.doc.doctype)) {
19 if (frm.doc.shipping_address && (!args.shipping_address)) {
20 args.shipping_address = frm.doc.shipping_address;
21 }
22 }
23 }
24
marinatione27b9962020-07-03 22:03:25 +053025 if (!args) {
26 if ((frm.doctype != "Purchase Order" && frm.doc.customer)
Nabin Hait34c551d2019-07-03 10:34:31 +053027 || (frm.doc.party_name && in_list(['Quotation', 'Opportunity'], frm.doc.doctype))) {
28
29 let party_type = "Customer";
marinatione27b9962020-07-03 22:03:25 +053030 if (frm.doc.quotation_to && frm.doc.quotation_to === "Lead") {
Nabin Hait34c551d2019-07-03 10:34:31 +053031 party_type = "Lead";
32 }
33
Anand Doshi78eeacb2014-04-23 19:15:15 +053034 args = {
Nabin Hait34c551d2019-07-03 10:34:31 +053035 party: frm.doc.customer || frm.doc.party_name,
36 party_type: party_type,
Rushabh Mehta24da7612014-01-29 15:26:04 +053037 price_list: frm.doc.selling_price_list
38 };
marinatione27b9962020-07-03 22:03:25 +053039 } else if (frm.doc.supplier) {
Anand Doshi78eeacb2014-04-23 19:15:15 +053040 args = {
Rushabh Mehtacc008cc2014-02-03 16:14:56 +053041 party: frm.doc.supplier,
42 party_type: "Supplier",
Shreya Shah3a9eec22018-02-16 13:05:21 +053043 bill_date: frm.doc.bill_date,
Rushabh Mehta24da7612014-01-29 15:26:04 +053044 price_list: frm.doc.buying_price_list
45 };
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053046 }
shreyas22d26a12016-02-01 15:32:32 +053047
Deepesh Garg6e2c13f2019-12-10 15:55:05 +053048 if (in_list(['Sales Invoice', 'Sales Order', 'Delivery Note'], frm.doc.doctype)) {
49 if (!args) {
50 args = {
51 party: frm.doc.customer || frm.doc.party_name,
52 party_type: 'Customer'
53 }
54 }
55 if (frm.doc.company_address && (!args.company_address)) {
56 args.company_address = frm.doc.company_address;
57 }
58
59 if (frm.doc.shipping_address_name &&(!args.shipping_address_name)) {
60 args.shipping_address_name = frm.doc.shipping_address_name;
61 }
62 }
63
64 if (in_list(['Purchase Invoice', 'Purchase Order', 'Purchase Receipt'], frm.doc.doctype)) {
65 if (!args) {
66 args = {
67 party: frm.doc.supplier,
68 party_type: 'Supplier'
69 }
70 }
71
72 if (frm.doc.shipping_address && (!args.shipping_address)) {
73 args.shipping_address = frm.doc.shipping_address;
74 }
75 }
76
Anand Doshi9a4d1652015-10-12 16:23:51 +053077 if (args) {
Nabin Hait83e68bb2015-10-26 17:40:31 +053078 args.posting_date = frm.doc.posting_date || frm.doc.transaction_date;
Anand Doshi9a4d1652015-10-12 16:23:51 +053079 }
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053080 }
marinatione27b9962020-07-03 22:03:25 +053081 if (!args || !args.party) return;
shreyas22d26a12016-02-01 15:32:32 +053082
marinatione27b9962020-07-03 22:03:25 +053083 if (frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
84 if (!erpnext.utils.validate_mandatory(frm, "Posting / Transaction Date",
Nabin Hait00818bf2015-10-23 16:10:56 +053085 args.posting_date, args.party_type=="Customer" ? "customer": "supplier")) return;
86 }
shreyas22d26a12016-02-01 15:32:32 +053087
marinatione27b9962020-07-03 22:03:25 +053088 if (!erpnext.utils.validate_mandatory(frm, "Company", frm.doc.company, args.party_type=="Customer" ? "customer": "supplier")) {
89 return;
90 }
91
Rushabh Mehtacc008cc2014-02-03 16:14:56 +053092 args.currency = frm.doc.currency;
93 args.company = frm.doc.company;
Nabin Hait4d7c4fc2014-06-18 16:40:27 +053094 args.doctype = frm.doc.doctype;
Rushabh Mehta793ba6b2014-02-14 15:47:51 +053095 frappe.call({
Rushabh Mehtab09d9da2014-01-02 11:47:23 +053096 method: method,
97 args: args,
98 callback: function(r) {
marinatione27b9962020-07-03 22:03:25 +053099 if (r.message) {
Zarrar7f8024c2018-08-01 17:45:05 +0530100 frm.supplier_tds = r.message.supplier_tds;
Rushabh Mehta49dd7be2014-01-28 17:43:10 +0530101 frm.updating_party_details = true;
Rushabh Mehtadab11722017-07-17 15:31:17 +0530102 frappe.run_serially([
103 () => frm.set_value(r.message),
104 () => {
105 frm.updating_party_details = false;
marinatione27b9962020-07-03 22:03:25 +0530106 if (callback) callback();
Rushabh Mehtadab11722017-07-17 15:31:17 +0530107 frm.refresh();
108 erpnext.utils.add_item(frm);
109 }
110 ]);
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530111 }
112 }
113 });
114}
115
Rushabh Mehta50954372017-02-23 17:03:46 +0530116erpnext.utils.add_item = function(frm) {
marinatione27b9962020-07-03 22:03:25 +0530117 if (frm.is_new()) {
Rushabh Mehta50954372017-02-23 17:03:46 +0530118 var prev_route = frappe.get_prev_route();
marinatione27b9962020-07-03 22:03:25 +0530119 if (prev_route[1]==='Item' && !(frm.doc.items && frm.doc.items.length)) {
Rushabh Mehta50954372017-02-23 17:03:46 +0530120 // add row
Faris Ansariab74ca72017-05-30 12:54:42 +0530121 var item = frm.add_child('items');
Rushabh Mehta50954372017-02-23 17:03:46 +0530122 frm.refresh_field('items');
123
124 // set item
125 frappe.model.set_value(item.doctype, item.name, 'item_code', prev_route[2]);
126 }
127 }
128}
129
Nabin Hait62211172016-03-16 16:22:03 +0530130erpnext.utils.get_address_display = function(frm, address_field, display_field, is_your_company_address) {
marinatione27b9962020-07-03 22:03:25 +0530131 if (frm.updating_party_details) return;
shreyas22d26a12016-02-01 15:32:32 +0530132
marinatione27b9962020-07-03 22:03:25 +0530133 if (!address_field) {
134 if (frm.doctype != "Purchase Order" && frm.doc.customer) {
Rushabh Mehta49dd7be2014-01-28 17:43:10 +0530135 address_field = "customer_address";
marinatione27b9962020-07-03 22:03:25 +0530136 } else if (frm.doc.supplier) {
Rushabh Mehta49dd7be2014-01-28 17:43:10 +0530137 address_field = "supplier_address";
Nabin Hait9d1f0772014-02-19 17:43:24 +0530138 } else return;
Anand Doshi78eeacb2014-04-23 19:15:15 +0530139 }
shreyas22d26a12016-02-01 15:32:32 +0530140
marinatione27b9962020-07-03 22:03:25 +0530141 if (!display_field) display_field = "address_display";
142 if (frm.doc[address_field]) {
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530143 frappe.call({
KanchanChauhan1dc26b12017-06-13 15:26:35 +0530144 method: "frappe.contacts.doctype.address.address.get_address_display",
Nabin Hait9d1f0772014-02-19 17:43:24 +0530145 args: {"address_dict": frm.doc[address_field] },
Nabin Haitb87e9f22014-01-29 19:51:36 +0530146 callback: function(r) {
marinatione27b9962020-07-03 22:03:25 +0530147 if (r.message) {
Nabin Hait9d1f0772014-02-19 17:43:24 +0530148 frm.set_value(display_field, r.message)
Neil Trini Lasrado09f9c962015-08-26 10:41:31 +0530149 }
Nabin Haitb87e9f22014-01-29 19:51:36 +0530150 }
151 })
Nabin Hait62211172016-03-16 16:22:03 +0530152 } else {
mbauskar8a2e6f42017-04-14 17:50:32 +0530153 frm.set_value(display_field, '');
Nabin Haitb87e9f22014-01-29 19:51:36 +0530154 }
Anand Doshi2f957f22016-04-08 17:36:10 +0530155};
Rushabh Mehta5d0e8de2016-04-11 17:34:25 +0530156
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500157erpnext.utils.set_taxes_from_address = function(frm, triggered_from_field, billing_address_field, shipping_address_field) {
marinatione27b9962020-07-03 22:03:25 +0530158 if (frm.updating_party_details) return;
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500159
marinatione27b9962020-07-03 22:03:25 +0530160 if (frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
161 if (!erpnext.utils.validate_mandatory(frm, "Lead / Customer / Supplier",
Nabin Hait34c551d2019-07-03 10:34:31 +0530162 frm.doc.customer || frm.doc.supplier || frm.doc.lead || frm.doc.party_name, triggered_from_field)) {
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500163 return;
164 }
165
marinatione27b9962020-07-03 22:03:25 +0530166 if (!erpnext.utils.validate_mandatory(frm, "Posting / Transaction Date",
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500167 frm.doc.posting_date || frm.doc.transaction_date, triggered_from_field)) {
168 return;
169 }
170 } else {
171 return;
172 }
173
174 frappe.call({
175 method: "erpnext.accounts.party.get_address_tax_category",
176 args: {
177 "tax_category": frm.doc.tax_category,
178 "billing_address": frm.doc[billing_address_field],
179 "shipping_address": frm.doc[shipping_address_field]
180 },
181 callback: function(r) {
marinatione27b9962020-07-03 22:03:25 +0530182 if (!r.exc){
183 if (frm.doc.tax_category != r.message) {
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500184 frm.set_value("tax_category", r.message);
185 } else {
186 erpnext.utils.set_taxes(frm, triggered_from_field);
187 }
188 }
189 }
190 });
191};
192
Saif Ur Rehman67786682018-12-27 02:11:07 +0500193erpnext.utils.set_taxes = function(frm, triggered_from_field) {
marinatione27b9962020-07-03 22:03:25 +0530194 if (frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
195 if (!erpnext.utils.validate_mandatory(frm, "Company", frm.doc.company, triggered_from_field)) {
196 return;
197 }
198
199 if (!erpnext.utils.validate_mandatory(frm, "Lead / Customer / Supplier",
deepeshgarg007d5fcab52019-07-15 12:44:11 +0530200 frm.doc.customer || frm.doc.supplier || frm.doc.lead || frm.doc.party_name, triggered_from_field)) {
Faris Ansariab74ca72017-05-30 12:54:42 +0530201 return;
202 }
Anand Doshi2f957f22016-04-08 17:36:10 +0530203
marinatione27b9962020-07-03 22:03:25 +0530204 if (!erpnext.utils.validate_mandatory(frm, "Posting / Transaction Date",
Saif Ur Rehman67786682018-12-27 02:11:07 +0500205 frm.doc.posting_date || frm.doc.transaction_date, triggered_from_field)) {
Anand Doshi2f957f22016-04-08 17:36:10 +0530206 return;
207 }
208 } else {
209 return;
210 }
211
212 var party_type, party;
213 if (frm.doc.lead) {
214 party_type = 'Lead';
215 party = frm.doc.lead;
216 } else if (frm.doc.customer) {
217 party_type = 'Customer';
218 party = frm.doc.customer;
219 } else if (frm.doc.supplier) {
220 party_type = 'Supplier';
221 party = frm.doc.supplier;
Nabin Hait34c551d2019-07-03 10:34:31 +0530222 } else if (frm.doc.quotation_to){
223 party_type = frm.doc.quotation_to;
224 party = frm.doc.party_name;
Anand Doshi2f957f22016-04-08 17:36:10 +0530225 }
226
227 frappe.call({
228 method: "erpnext.accounts.party.set_taxes",
229 args: {
230 "party": party,
231 "party_type": party_type,
232 "posting_date": frm.doc.posting_date || frm.doc.transaction_date,
233 "company": frm.doc.company,
Saif Ur Rehman13a6c0a2019-01-06 18:14:18 +0500234 "customer_group": frm.doc.customer_group,
235 "supplier_group": frm.doc.supplier_group,
Saif Ur Rehman67786682018-12-27 02:11:07 +0500236 "tax_category": frm.doc.tax_category,
Anand Doshi2f957f22016-04-08 17:36:10 +0530237 "billing_address": ((frm.doc.customer || frm.doc.lead) ? (frm.doc.customer_address) : (frm.doc.supplier_address)),
238 "shipping_address": frm.doc.shipping_address_name
239 },
240 callback: function(r) {
marinatione27b9962020-07-03 22:03:25 +0530241 if (r.message){
Anand Doshi2f957f22016-04-08 17:36:10 +0530242 frm.set_value("taxes_and_charges", r.message)
243 }
244 }
245 });
Saif Ur Rehman67786682018-12-27 02:11:07 +0500246};
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530247
248erpnext.utils.get_contact_details = function(frm) {
marinatione27b9962020-07-03 22:03:25 +0530249 if (frm.updating_party_details) return;
Anand Doshi78eeacb2014-04-23 19:15:15 +0530250
marinatione27b9962020-07-03 22:03:25 +0530251 if (frm.doc["contact_person"]) {
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530252 frappe.call({
KanchanChauhan1dc26b12017-06-13 15:26:35 +0530253 method: "frappe.contacts.doctype.contact.contact.get_contact_details",
Nabin Haitb87e9f22014-01-29 19:51:36 +0530254 args: {contact: frm.doc.contact_person },
255 callback: function(r) {
marinatione27b9962020-07-03 22:03:25 +0530256 if (r.message)
Nabin Haitb87e9f22014-01-29 19:51:36 +0530257 frm.set_value(r.message);
258 }
259 })
260 }
Anand Doshi78eeacb2014-04-23 19:15:15 +0530261}
Nabin Hait00818bf2015-10-23 16:10:56 +0530262
263erpnext.utils.validate_mandatory = function(frm, label, value, trigger_on) {
marinatione27b9962020-07-03 22:03:25 +0530264 if (!value) {
Nabin Hait00818bf2015-10-23 16:10:56 +0530265 frm.doc[trigger_on] = "";
266 refresh_field(trigger_on);
marinatione27b9962020-07-03 22:03:25 +0530267 frappe.throw({message:__("Please enter {0} first", [label]), title:__("Mandatory")});
Nabin Hait00818bf2015-10-23 16:10:56 +0530268 return false;
269 }
270 return true;
shreyas22d26a12016-02-01 15:32:32 +0530271}
272
Rohit Waghchaureb2e7a1f2016-04-11 12:10:20 +0530273erpnext.utils.get_shipping_address = function(frm, callback){
Maxwell Moraisa2c1d922018-08-27 03:35:41 -0300274 if (frm.doc.company) {
rohitwaghchaure5ecc26b2018-06-04 11:00:24 +0530275 frappe.call({
276 method: "frappe.contacts.doctype.address.address.get_shipping_address",
277 args: {
278 company: frm.doc.company,
279 address: frm.doc.shipping_address
280 },
281 callback: function(r){
marinatione27b9962020-07-03 22:03:25 +0530282 if (r.message){
rohitwaghchaure5ecc26b2018-06-04 11:00:24 +0530283 frm.set_value("shipping_address", r.message[0]) //Address title or name
284 frm.set_value("shipping_address_display", r.message[1]) //Address to be displayed on the page
285 }
Rohit Waghchaureb2e7a1f2016-04-11 12:10:20 +0530286
marinatione27b9962020-07-03 22:03:25 +0530287 if (callback){
rohitwaghchaure5ecc26b2018-06-04 11:00:24 +0530288 return callback();
289 }
Rohit Waghchaureb2e7a1f2016-04-11 12:10:20 +0530290 }
rohitwaghchaure5ecc26b2018-06-04 11:00:24 +0530291 });
292 } else {
293 frappe.msgprint(__("Select company first"));
294 }
Maxwell Moraisa2c1d922018-08-27 03:35:41 -0300295}