Anand Doshi | 885e074 | 2015-03-03 14:55:30 +0530 | [diff] [blame] | 1 | // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors |
Rushabh Mehta | b09d9da | 2014-01-02 11:47:23 +0530 | [diff] [blame] | 2 | // License: GNU General Public License v3. See license.txt |
| 3 | |
Rushabh Mehta | 793ba6b | 2014-02-14 15:47:51 +0530 | [diff] [blame] | 4 | frappe.provide("erpnext.utils"); |
Rushabh Mehta | 8bbca6f | 2016-04-12 19:16:33 +0530 | [diff] [blame] | 5 | |
Nabin Hait | a3dd72a | 2014-05-28 12:49:20 +0530 | [diff] [blame] | 6 | erpnext.utils.get_party_details = function(frm, method, args, callback) { |
Rushabh Mehta | 49dd7be | 2014-01-28 17:43:10 +0530 | [diff] [blame] | 7 | if(!method) { |
Rushabh Mehta | cc008cc | 2014-02-03 16:14:56 +0530 | [diff] [blame] | 8 | method = "erpnext.accounts.party.get_party_details"; |
Rushabh Mehta | 49dd7be | 2014-01-28 17:43:10 +0530 | [diff] [blame] | 9 | } |
| 10 | if(!args) { |
Nabin Hait | 34c551d | 2019-07-03 10:34:31 +0530 | [diff] [blame] | 11 | 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 Doshi | 78eeacb | 2014-04-23 19:15:15 +0530 | [diff] [blame] | 19 | args = { |
Nabin Hait | 34c551d | 2019-07-03 10:34:31 +0530 | [diff] [blame] | 20 | party: frm.doc.customer || frm.doc.party_name, |
| 21 | party_type: party_type, |
Rushabh Mehta | 24da761 | 2014-01-29 15:26:04 +0530 | [diff] [blame] | 22 | price_list: frm.doc.selling_price_list |
| 23 | }; |
Anand Doshi | 78eeacb | 2014-04-23 19:15:15 +0530 | [diff] [blame] | 24 | } else if(frm.doc.supplier) { |
| 25 | args = { |
Rushabh Mehta | cc008cc | 2014-02-03 16:14:56 +0530 | [diff] [blame] | 26 | party: frm.doc.supplier, |
| 27 | party_type: "Supplier", |
Shreya Shah | 3a9eec2 | 2018-02-16 13:05:21 +0530 | [diff] [blame] | 28 | bill_date: frm.doc.bill_date, |
Rushabh Mehta | 24da761 | 2014-01-29 15:26:04 +0530 | [diff] [blame] | 29 | price_list: frm.doc.buying_price_list |
| 30 | }; |
Rushabh Mehta | 49dd7be | 2014-01-28 17:43:10 +0530 | [diff] [blame] | 31 | } |
shreyas | 22d26a1 | 2016-02-01 15:32:32 +0530 | [diff] [blame] | 32 | |
Anand Doshi | 9a4d165 | 2015-10-12 16:23:51 +0530 | [diff] [blame] | 33 | if (args) { |
Nabin Hait | 83e68bb | 2015-10-26 17:40:31 +0530 | [diff] [blame] | 34 | args.posting_date = frm.doc.posting_date || frm.doc.transaction_date; |
Anand Doshi | 9a4d165 | 2015-10-12 16:23:51 +0530 | [diff] [blame] | 35 | } |
Rushabh Mehta | 49dd7be | 2014-01-28 17:43:10 +0530 | [diff] [blame] | 36 | } |
Nabin Hait | ed643d5 | 2018-09-05 17:18:59 +0530 | [diff] [blame] | 37 | if(!args || !args.party) return; |
shreyas | 22d26a1 | 2016-02-01 15:32:32 +0530 | [diff] [blame] | 38 | |
Nabin Hait | 00818bf | 2015-10-23 16:10:56 +0530 | [diff] [blame] | 39 | if(frappe.meta.get_docfield(frm.doc.doctype, "taxes")) { |
shreyas | 22d26a1 | 2016-02-01 15:32:32 +0530 | [diff] [blame] | 40 | if(!erpnext.utils.validate_mandatory(frm, "Posting/Transaction Date", |
Nabin Hait | 00818bf | 2015-10-23 16:10:56 +0530 | [diff] [blame] | 41 | args.posting_date, args.party_type=="Customer" ? "customer": "supplier")) return; |
| 42 | } |
shreyas | 22d26a1 | 2016-02-01 15:32:32 +0530 | [diff] [blame] | 43 | |
Rushabh Mehta | cc008cc | 2014-02-03 16:14:56 +0530 | [diff] [blame] | 44 | args.currency = frm.doc.currency; |
| 45 | args.company = frm.doc.company; |
Nabin Hait | 4d7c4fc | 2014-06-18 16:40:27 +0530 | [diff] [blame] | 46 | args.doctype = frm.doc.doctype; |
Rushabh Mehta | 793ba6b | 2014-02-14 15:47:51 +0530 | [diff] [blame] | 47 | frappe.call({ |
Rushabh Mehta | b09d9da | 2014-01-02 11:47:23 +0530 | [diff] [blame] | 48 | method: method, |
| 49 | args: args, |
| 50 | callback: function(r) { |
| 51 | if(r.message) { |
Zarrar | 7f8024c | 2018-08-01 17:45:05 +0530 | [diff] [blame] | 52 | frm.supplier_tds = r.message.supplier_tds; |
Rushabh Mehta | 49dd7be | 2014-01-28 17:43:10 +0530 | [diff] [blame] | 53 | frm.updating_party_details = true; |
Rushabh Mehta | dab1172 | 2017-07-17 15:31:17 +0530 | [diff] [blame] | 54 | 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 Mehta | b09d9da | 2014-01-02 11:47:23 +0530 | [diff] [blame] | 63 | } |
| 64 | } |
| 65 | }); |
| 66 | } |
| 67 | |
Rushabh Mehta | 5095437 | 2017-02-23 17:03:46 +0530 | [diff] [blame] | 68 | erpnext.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 Ansari | ab74ca7 | 2017-05-30 12:54:42 +0530 | [diff] [blame] | 73 | var item = frm.add_child('items'); |
Rushabh Mehta | 5095437 | 2017-02-23 17:03:46 +0530 | [diff] [blame] | 74 | 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 Hait | 6221117 | 2016-03-16 16:22:03 +0530 | [diff] [blame] | 82 | erpnext.utils.get_address_display = function(frm, address_field, display_field, is_your_company_address) { |
Rushabh Mehta | 49dd7be | 2014-01-28 17:43:10 +0530 | [diff] [blame] | 83 | if(frm.updating_party_details) return; |
shreyas | 22d26a1 | 2016-02-01 15:32:32 +0530 | [diff] [blame] | 84 | |
Rushabh Mehta | 49dd7be | 2014-01-28 17:43:10 +0530 | [diff] [blame] | 85 | if(!address_field) { |
Saurabh | 2e65aad | 2015-10-28 11:40:14 +0530 | [diff] [blame] | 86 | if(frm.doctype != "Purchase Order" && frm.doc.customer) { |
Rushabh Mehta | 49dd7be | 2014-01-28 17:43:10 +0530 | [diff] [blame] | 87 | address_field = "customer_address"; |
Nabin Hait | 9d1f077 | 2014-02-19 17:43:24 +0530 | [diff] [blame] | 88 | } else if(frm.doc.supplier) { |
Rushabh Mehta | 49dd7be | 2014-01-28 17:43:10 +0530 | [diff] [blame] | 89 | address_field = "supplier_address"; |
Nabin Hait | 9d1f077 | 2014-02-19 17:43:24 +0530 | [diff] [blame] | 90 | } else return; |
Anand Doshi | 78eeacb | 2014-04-23 19:15:15 +0530 | [diff] [blame] | 91 | } |
shreyas | 22d26a1 | 2016-02-01 15:32:32 +0530 | [diff] [blame] | 92 | |
Nabin Hait | 9d1f077 | 2014-02-19 17:43:24 +0530 | [diff] [blame] | 93 | if(!display_field) display_field = "address_display"; |
Nabin Hait | b87e9f2 | 2014-01-29 19:51:36 +0530 | [diff] [blame] | 94 | if(frm.doc[address_field]) { |
Rushabh Mehta | 793ba6b | 2014-02-14 15:47:51 +0530 | [diff] [blame] | 95 | frappe.call({ |
KanchanChauhan | 1dc26b1 | 2017-06-13 15:26:35 +0530 | [diff] [blame] | 96 | method: "frappe.contacts.doctype.address.address.get_address_display", |
Nabin Hait | 9d1f077 | 2014-02-19 17:43:24 +0530 | [diff] [blame] | 97 | args: {"address_dict": frm.doc[address_field] }, |
Nabin Hait | b87e9f2 | 2014-01-29 19:51:36 +0530 | [diff] [blame] | 98 | callback: function(r) { |
Nabin Hait | 6221117 | 2016-03-16 16:22:03 +0530 | [diff] [blame] | 99 | if(r.message) { |
Nabin Hait | 9d1f077 | 2014-02-19 17:43:24 +0530 | [diff] [blame] | 100 | frm.set_value(display_field, r.message) |
Neil Trini Lasrado | 09f9c96 | 2015-08-26 10:41:31 +0530 | [diff] [blame] | 101 | } |
Nabin Hait | b87e9f2 | 2014-01-29 19:51:36 +0530 | [diff] [blame] | 102 | } |
| 103 | }) |
Nabin Hait | 6221117 | 2016-03-16 16:22:03 +0530 | [diff] [blame] | 104 | } else { |
mbauskar | 8a2e6f4 | 2017-04-14 17:50:32 +0530 | [diff] [blame] | 105 | frm.set_value(display_field, ''); |
Nabin Hait | b87e9f2 | 2014-01-29 19:51:36 +0530 | [diff] [blame] | 106 | } |
Anand Doshi | 2f957f2 | 2016-04-08 17:36:10 +0530 | [diff] [blame] | 107 | }; |
Rushabh Mehta | 5d0e8de | 2016-04-11 17:34:25 +0530 | [diff] [blame] | 108 | |
Saif Ur Rehman | fd531a6 | 2018-12-29 01:49:11 +0500 | [diff] [blame] | 109 | erpnext.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 Hait | 34c551d | 2019-07-03 10:34:31 +0530 | [diff] [blame] | 114 | frm.doc.customer || frm.doc.supplier || frm.doc.lead || frm.doc.party_name, triggered_from_field)) { |
Saif Ur Rehman | fd531a6 | 2018-12-29 01:49:11 +0500 | [diff] [blame] | 115 | 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 Rehman | 6778668 | 2018-12-27 02:11:07 +0500 | [diff] [blame] | 145 | erpnext.utils.set_taxes = function(frm, triggered_from_field) { |
| 146 | if(frappe.meta.get_docfield(frm.doc.doctype, "taxes")) { |
Anand Doshi | 2f957f2 | 2016-04-08 17:36:10 +0530 | [diff] [blame] | 147 | if(!erpnext.utils.validate_mandatory(frm, "Lead/Customer/Supplier", |
Saif Ur Rehman | 6778668 | 2018-12-27 02:11:07 +0500 | [diff] [blame] | 148 | frm.doc.customer || frm.doc.supplier || frm.doc.lead, triggered_from_field)) { |
Faris Ansari | ab74ca7 | 2017-05-30 12:54:42 +0530 | [diff] [blame] | 149 | return; |
| 150 | } |
Anand Doshi | 2f957f2 | 2016-04-08 17:36:10 +0530 | [diff] [blame] | 151 | |
| 152 | if(!erpnext.utils.validate_mandatory(frm, "Posting/Transaction Date", |
Saif Ur Rehman | 6778668 | 2018-12-27 02:11:07 +0500 | [diff] [blame] | 153 | frm.doc.posting_date || frm.doc.transaction_date, triggered_from_field)) { |
Anand Doshi | 2f957f2 | 2016-04-08 17:36:10 +0530 | [diff] [blame] | 154 | 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 Hait | 34c551d | 2019-07-03 10:34:31 +0530 | [diff] [blame] | 170 | } else if (frm.doc.quotation_to){ |
| 171 | party_type = frm.doc.quotation_to; |
| 172 | party = frm.doc.party_name; |
Anand Doshi | 2f957f2 | 2016-04-08 17:36:10 +0530 | [diff] [blame] | 173 | } |
| 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 Rehman | 13a6c0a | 2019-01-06 18:14:18 +0500 | [diff] [blame] | 182 | "customer_group": frm.doc.customer_group, |
| 183 | "supplier_group": frm.doc.supplier_group, |
Saif Ur Rehman | 6778668 | 2018-12-27 02:11:07 +0500 | [diff] [blame] | 184 | "tax_category": frm.doc.tax_category, |
Anand Doshi | 2f957f2 | 2016-04-08 17:36:10 +0530 | [diff] [blame] | 185 | "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 Rehman | 6778668 | 2018-12-27 02:11:07 +0500 | [diff] [blame] | 194 | }; |
Rushabh Mehta | b09d9da | 2014-01-02 11:47:23 +0530 | [diff] [blame] | 195 | |
| 196 | erpnext.utils.get_contact_details = function(frm) { |
Rushabh Mehta | 49dd7be | 2014-01-28 17:43:10 +0530 | [diff] [blame] | 197 | if(frm.updating_party_details) return; |
Anand Doshi | 78eeacb | 2014-04-23 19:15:15 +0530 | [diff] [blame] | 198 | |
Nabin Hait | 9d1f077 | 2014-02-19 17:43:24 +0530 | [diff] [blame] | 199 | if(frm.doc["contact_person"]) { |
Rushabh Mehta | 793ba6b | 2014-02-14 15:47:51 +0530 | [diff] [blame] | 200 | frappe.call({ |
KanchanChauhan | 1dc26b1 | 2017-06-13 15:26:35 +0530 | [diff] [blame] | 201 | method: "frappe.contacts.doctype.contact.contact.get_contact_details", |
Nabin Hait | b87e9f2 | 2014-01-29 19:51:36 +0530 | [diff] [blame] | 202 | args: {contact: frm.doc.contact_person }, |
| 203 | callback: function(r) { |
| 204 | if(r.message) |
| 205 | frm.set_value(r.message); |
| 206 | } |
| 207 | }) |
| 208 | } |
Anand Doshi | 78eeacb | 2014-04-23 19:15:15 +0530 | [diff] [blame] | 209 | } |
Nabin Hait | 00818bf | 2015-10-23 16:10:56 +0530 | [diff] [blame] | 210 | |
| 211 | erpnext.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; |
shreyas | 22d26a1 | 2016-02-01 15:32:32 +0530 | [diff] [blame] | 219 | } |
| 220 | |
Rohit Waghchaure | b2e7a1f | 2016-04-11 12:10:20 +0530 | [diff] [blame] | 221 | erpnext.utils.get_shipping_address = function(frm, callback){ |
Maxwell Morais | a2c1d92 | 2018-08-27 03:35:41 -0300 | [diff] [blame] | 222 | if (frm.doc.company) { |
rohitwaghchaure | 5ecc26b | 2018-06-04 11:00:24 +0530 | [diff] [blame] | 223 | 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 Waghchaure | b2e7a1f | 2016-04-11 12:10:20 +0530 | [diff] [blame] | 234 | |
rohitwaghchaure | 5ecc26b | 2018-06-04 11:00:24 +0530 | [diff] [blame] | 235 | if(callback){ |
| 236 | return callback(); |
| 237 | } |
Rohit Waghchaure | b2e7a1f | 2016-04-11 12:10:20 +0530 | [diff] [blame] | 238 | } |
rohitwaghchaure | 5ecc26b | 2018-06-04 11:00:24 +0530 | [diff] [blame] | 239 | }); |
| 240 | } else { |
| 241 | frappe.msgprint(__("Select company first")); |
| 242 | } |
Maxwell Morais | a2c1d92 | 2018-08-27 03:35:41 -0300 | [diff] [blame] | 243 | } |