blob: a8d3888ba0fc95269e2589dcf6cb29484d2442c6 [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) {
Rushabh Mehta49dd7be2014-01-28 17:43:10 +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 }
10 if(!args) {
Nabin Hait34c551d2019-07-03 10:34:31 +053011 if((frm.doctype != "Purchase Order" && frm.doc.customer)
12 || (frm.doc.party_name && in_list(['Quotation', 'Opportunity'], frm.doc.doctype))) {
13
14 let party_type = "Customer";
15 if(frm.doc.quotation_to && frm.doc.quotation_to === "Lead") {
16 party_type = "Lead";
17 }
18
Anand Doshi78eeacb2014-04-23 19:15:15 +053019 args = {
Nabin Hait34c551d2019-07-03 10:34:31 +053020 party: frm.doc.customer || frm.doc.party_name,
21 party_type: party_type,
Rushabh Mehta24da7612014-01-29 15:26:04 +053022 price_list: frm.doc.selling_price_list
23 };
Anand Doshi78eeacb2014-04-23 19:15:15 +053024 } else if(frm.doc.supplier) {
25 args = {
Rushabh Mehtacc008cc2014-02-03 16:14:56 +053026 party: frm.doc.supplier,
27 party_type: "Supplier",
Shreya Shah3a9eec22018-02-16 13:05:21 +053028 bill_date: frm.doc.bill_date,
Rushabh Mehta24da7612014-01-29 15:26:04 +053029 price_list: frm.doc.buying_price_list
30 };
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053031 }
shreyas22d26a12016-02-01 15:32:32 +053032
Anand Doshi9a4d1652015-10-12 16:23:51 +053033 if (args) {
Nabin Hait83e68bb2015-10-26 17:40:31 +053034 args.posting_date = frm.doc.posting_date || frm.doc.transaction_date;
Anand Doshi9a4d1652015-10-12 16:23:51 +053035 }
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053036 }
Nabin Haited643d52018-09-05 17:18:59 +053037 if(!args || !args.party) return;
shreyas22d26a12016-02-01 15:32:32 +053038
Nabin Hait00818bf2015-10-23 16:10:56 +053039 if(frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
shreyas22d26a12016-02-01 15:32:32 +053040 if(!erpnext.utils.validate_mandatory(frm, "Posting/Transaction Date",
Nabin Hait00818bf2015-10-23 16:10:56 +053041 args.posting_date, args.party_type=="Customer" ? "customer": "supplier")) return;
42 }
shreyas22d26a12016-02-01 15:32:32 +053043
Rushabh Mehtacc008cc2014-02-03 16:14:56 +053044 args.currency = frm.doc.currency;
45 args.company = frm.doc.company;
Nabin Hait4d7c4fc2014-06-18 16:40:27 +053046 args.doctype = frm.doc.doctype;
Rushabh Mehta793ba6b2014-02-14 15:47:51 +053047 frappe.call({
Rushabh Mehtab09d9da2014-01-02 11:47:23 +053048 method: method,
49 args: args,
50 callback: function(r) {
51 if(r.message) {
Zarrar7f8024c2018-08-01 17:45:05 +053052 frm.supplier_tds = r.message.supplier_tds;
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053053 frm.updating_party_details = true;
Rushabh Mehtadab11722017-07-17 15:31:17 +053054 frappe.run_serially([
55 () => frm.set_value(r.message),
56 () => {
57 frm.updating_party_details = false;
58 if(callback) callback();
59 frm.refresh();
60 erpnext.utils.add_item(frm);
61 }
62 ]);
Rushabh Mehtab09d9da2014-01-02 11:47:23 +053063 }
64 }
65 });
66}
67
Rushabh Mehta50954372017-02-23 17:03:46 +053068erpnext.utils.add_item = function(frm) {
69 if(frm.is_new()) {
70 var prev_route = frappe.get_prev_route();
71 if(prev_route[1]==='Item' && !(frm.doc.items && frm.doc.items.length)) {
72 // add row
Faris Ansariab74ca72017-05-30 12:54:42 +053073 var item = frm.add_child('items');
Rushabh Mehta50954372017-02-23 17:03:46 +053074 frm.refresh_field('items');
75
76 // set item
77 frappe.model.set_value(item.doctype, item.name, 'item_code', prev_route[2]);
78 }
79 }
80}
81
Nabin Hait62211172016-03-16 16:22:03 +053082erpnext.utils.get_address_display = function(frm, address_field, display_field, is_your_company_address) {
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053083 if(frm.updating_party_details) return;
shreyas22d26a12016-02-01 15:32:32 +053084
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053085 if(!address_field) {
Saurabh2e65aad2015-10-28 11:40:14 +053086 if(frm.doctype != "Purchase Order" && frm.doc.customer) {
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053087 address_field = "customer_address";
Nabin Hait9d1f0772014-02-19 17:43:24 +053088 } else if(frm.doc.supplier) {
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053089 address_field = "supplier_address";
Nabin Hait9d1f0772014-02-19 17:43:24 +053090 } else return;
Anand Doshi78eeacb2014-04-23 19:15:15 +053091 }
shreyas22d26a12016-02-01 15:32:32 +053092
Nabin Hait9d1f0772014-02-19 17:43:24 +053093 if(!display_field) display_field = "address_display";
Nabin Haitb87e9f22014-01-29 19:51:36 +053094 if(frm.doc[address_field]) {
Rushabh Mehta793ba6b2014-02-14 15:47:51 +053095 frappe.call({
KanchanChauhan1dc26b12017-06-13 15:26:35 +053096 method: "frappe.contacts.doctype.address.address.get_address_display",
Nabin Hait9d1f0772014-02-19 17:43:24 +053097 args: {"address_dict": frm.doc[address_field] },
Nabin Haitb87e9f22014-01-29 19:51:36 +053098 callback: function(r) {
Nabin Hait62211172016-03-16 16:22:03 +053099 if(r.message) {
Nabin Hait9d1f0772014-02-19 17:43:24 +0530100 frm.set_value(display_field, r.message)
Neil Trini Lasrado09f9c962015-08-26 10:41:31 +0530101 }
Nabin Haitb87e9f22014-01-29 19:51:36 +0530102 }
103 })
Nabin Hait62211172016-03-16 16:22:03 +0530104 } else {
mbauskar8a2e6f42017-04-14 17:50:32 +0530105 frm.set_value(display_field, '');
Nabin Haitb87e9f22014-01-29 19:51:36 +0530106 }
Anand Doshi2f957f22016-04-08 17:36:10 +0530107};
Rushabh Mehta5d0e8de2016-04-11 17:34:25 +0530108
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500109erpnext.utils.set_taxes_from_address = function(frm, triggered_from_field, billing_address_field, shipping_address_field) {
110 if(frm.updating_party_details) return;
111
112 if(frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
113 if(!erpnext.utils.validate_mandatory(frm, "Lead/Customer/Supplier",
Nabin Hait34c551d2019-07-03 10:34:31 +0530114 frm.doc.customer || frm.doc.supplier || frm.doc.lead || frm.doc.party_name, triggered_from_field)) {
Saif Ur Rehmanfd531a62018-12-29 01:49:11 +0500115 return;
116 }
117
118 if(!erpnext.utils.validate_mandatory(frm, "Posting/Transaction Date",
119 frm.doc.posting_date || frm.doc.transaction_date, triggered_from_field)) {
120 return;
121 }
122 } else {
123 return;
124 }
125
126 frappe.call({
127 method: "erpnext.accounts.party.get_address_tax_category",
128 args: {
129 "tax_category": frm.doc.tax_category,
130 "billing_address": frm.doc[billing_address_field],
131 "shipping_address": frm.doc[shipping_address_field]
132 },
133 callback: function(r) {
134 if(!r.exc){
135 if(frm.doc.tax_category != r.message) {
136 frm.set_value("tax_category", r.message);
137 } else {
138 erpnext.utils.set_taxes(frm, triggered_from_field);
139 }
140 }
141 }
142 });
143};
144
Saif Ur Rehman67786682018-12-27 02:11:07 +0500145erpnext.utils.set_taxes = function(frm, triggered_from_field) {
146 if(frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
Anand Doshi2f957f22016-04-08 17:36:10 +0530147 if(!erpnext.utils.validate_mandatory(frm, "Lead/Customer/Supplier",
deepeshgarg007d5fcab52019-07-15 12:44:11 +0530148 frm.doc.customer || frm.doc.supplier || frm.doc.lead || frm.doc.party_name, triggered_from_field)) {
Faris Ansariab74ca72017-05-30 12:54:42 +0530149 return;
150 }
Anand Doshi2f957f22016-04-08 17:36:10 +0530151
152 if(!erpnext.utils.validate_mandatory(frm, "Posting/Transaction Date",
Saif Ur Rehman67786682018-12-27 02:11:07 +0500153 frm.doc.posting_date || frm.doc.transaction_date, triggered_from_field)) {
Anand Doshi2f957f22016-04-08 17:36:10 +0530154 return;
155 }
156 } else {
157 return;
158 }
159
160 var party_type, party;
161 if (frm.doc.lead) {
162 party_type = 'Lead';
163 party = frm.doc.lead;
164 } else if (frm.doc.customer) {
165 party_type = 'Customer';
166 party = frm.doc.customer;
167 } else if (frm.doc.supplier) {
168 party_type = 'Supplier';
169 party = frm.doc.supplier;
Nabin Hait34c551d2019-07-03 10:34:31 +0530170 } else if (frm.doc.quotation_to){
171 party_type = frm.doc.quotation_to;
172 party = frm.doc.party_name;
Anand Doshi2f957f22016-04-08 17:36:10 +0530173 }
174
175 frappe.call({
176 method: "erpnext.accounts.party.set_taxes",
177 args: {
178 "party": party,
179 "party_type": party_type,
180 "posting_date": frm.doc.posting_date || frm.doc.transaction_date,
181 "company": frm.doc.company,
Saif Ur Rehman13a6c0a2019-01-06 18:14:18 +0500182 "customer_group": frm.doc.customer_group,
183 "supplier_group": frm.doc.supplier_group,
Saif Ur Rehman67786682018-12-27 02:11:07 +0500184 "tax_category": frm.doc.tax_category,
Anand Doshi2f957f22016-04-08 17:36:10 +0530185 "billing_address": ((frm.doc.customer || frm.doc.lead) ? (frm.doc.customer_address) : (frm.doc.supplier_address)),
186 "shipping_address": frm.doc.shipping_address_name
187 },
188 callback: function(r) {
189 if(r.message){
190 frm.set_value("taxes_and_charges", r.message)
191 }
192 }
193 });
Saif Ur Rehman67786682018-12-27 02:11:07 +0500194};
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530195
196erpnext.utils.get_contact_details = function(frm) {
Rushabh Mehta49dd7be2014-01-28 17:43:10 +0530197 if(frm.updating_party_details) return;
Anand Doshi78eeacb2014-04-23 19:15:15 +0530198
Nabin Hait9d1f0772014-02-19 17:43:24 +0530199 if(frm.doc["contact_person"]) {
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530200 frappe.call({
KanchanChauhan1dc26b12017-06-13 15:26:35 +0530201 method: "frappe.contacts.doctype.contact.contact.get_contact_details",
Nabin Haitb87e9f22014-01-29 19:51:36 +0530202 args: {contact: frm.doc.contact_person },
203 callback: function(r) {
204 if(r.message)
205 frm.set_value(r.message);
206 }
207 })
208 }
Anand Doshi78eeacb2014-04-23 19:15:15 +0530209}
Nabin Hait00818bf2015-10-23 16:10:56 +0530210
211erpnext.utils.validate_mandatory = function(frm, label, value, trigger_on) {
212 if(!value) {
213 frm.doc[trigger_on] = "";
214 refresh_field(trigger_on);
215 frappe.msgprint(__("Please enter {0} first", [label]));
216 return false;
217 }
218 return true;
shreyas22d26a12016-02-01 15:32:32 +0530219}
220
Rohit Waghchaureb2e7a1f2016-04-11 12:10:20 +0530221erpnext.utils.get_shipping_address = function(frm, callback){
Maxwell Moraisa2c1d922018-08-27 03:35:41 -0300222 if (frm.doc.company) {
rohitwaghchaure5ecc26b2018-06-04 11:00:24 +0530223 frappe.call({
224 method: "frappe.contacts.doctype.address.address.get_shipping_address",
225 args: {
226 company: frm.doc.company,
227 address: frm.doc.shipping_address
228 },
229 callback: function(r){
230 if(r.message){
231 frm.set_value("shipping_address", r.message[0]) //Address title or name
232 frm.set_value("shipping_address_display", r.message[1]) //Address to be displayed on the page
233 }
Rohit Waghchaureb2e7a1f2016-04-11 12:10:20 +0530234
rohitwaghchaure5ecc26b2018-06-04 11:00:24 +0530235 if(callback){
236 return callback();
237 }
Rohit Waghchaureb2e7a1f2016-04-11 12:10:20 +0530238 }
rohitwaghchaure5ecc26b2018-06-04 11:00:24 +0530239 });
240 } else {
241 frappe.msgprint(__("Select company first"));
242 }
Maxwell Moraisa2c1d922018-08-27 03:35:41 -0300243}