blob: 880a46c12e826ddc001df37555369618a977cb93 [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) {
Saurabhc306b212015-10-19 16:32:24 +053011 if(frm.doctype != "Purchase Order" && frm.doc.customer) {
Anand Doshi78eeacb2014-04-23 19:15:15 +053012 args = {
Rushabh Mehtacc008cc2014-02-03 16:14:56 +053013 party: frm.doc.customer,
14 party_type: "Customer",
Rushabh Mehta24da7612014-01-29 15:26:04 +053015 price_list: frm.doc.selling_price_list
16 };
Anand Doshi78eeacb2014-04-23 19:15:15 +053017 } else if(frm.doc.supplier) {
18 args = {
Rushabh Mehtacc008cc2014-02-03 16:14:56 +053019 party: frm.doc.supplier,
20 party_type: "Supplier",
Rushabh Mehta24da7612014-01-29 15:26:04 +053021 price_list: frm.doc.buying_price_list
22 };
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053023 }
shreyas22d26a12016-02-01 15:32:32 +053024
Anand Doshi9a4d1652015-10-12 16:23:51 +053025 if (args) {
Nabin Hait83e68bb2015-10-26 17:40:31 +053026 args.posting_date = frm.doc.posting_date || frm.doc.transaction_date;
Anand Doshi9a4d1652015-10-12 16:23:51 +053027 }
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053028 }
Anand Doshi78eeacb2014-04-23 19:15:15 +053029 if(!args) return;
shreyas22d26a12016-02-01 15:32:32 +053030
Nabin Hait00818bf2015-10-23 16:10:56 +053031 if(frappe.meta.get_docfield(frm.doc.doctype, "taxes")) {
shreyas22d26a12016-02-01 15:32:32 +053032 if(!erpnext.utils.validate_mandatory(frm, "Posting/Transaction Date",
Nabin Hait00818bf2015-10-23 16:10:56 +053033 args.posting_date, args.party_type=="Customer" ? "customer": "supplier")) return;
34 }
shreyas22d26a12016-02-01 15:32:32 +053035
Rushabh Mehtacc008cc2014-02-03 16:14:56 +053036 args.currency = frm.doc.currency;
37 args.company = frm.doc.company;
Nabin Hait4d7c4fc2014-06-18 16:40:27 +053038 args.doctype = frm.doc.doctype;
Rushabh Mehta793ba6b2014-02-14 15:47:51 +053039 frappe.call({
Rushabh Mehtab09d9da2014-01-02 11:47:23 +053040 method: method,
41 args: args,
42 callback: function(r) {
43 if(r.message) {
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053044 frm.updating_party_details = true;
Rushabh Mehtab09d9da2014-01-02 11:47:23 +053045 frm.set_value(r.message);
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053046 frm.updating_party_details = false;
Nabin Haitc1367d92014-05-30 11:43:00 +053047 if(callback) callback();
Nabin Hait7bae70a2016-07-28 17:19:35 +053048 frm.refresh();
Rushabh Mehta50954372017-02-23 17:03:46 +053049 erpnext.utils.add_item(frm);
Rushabh Mehtab09d9da2014-01-02 11:47:23 +053050 }
51 }
52 });
53}
54
Rushabh Mehta50954372017-02-23 17:03:46 +053055erpnext.utils.add_item = function(frm) {
56 if(frm.is_new()) {
57 var prev_route = frappe.get_prev_route();
58 if(prev_route[1]==='Item' && !(frm.doc.items && frm.doc.items.length)) {
59 // add row
60 item = frm.add_child('items');
61 frm.refresh_field('items');
62
63 // set item
64 frappe.model.set_value(item.doctype, item.name, 'item_code', prev_route[2]);
65 }
66 }
67}
68
Nabin Hait62211172016-03-16 16:22:03 +053069erpnext.utils.get_address_display = function(frm, address_field, display_field, is_your_company_address) {
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053070 if(frm.updating_party_details) return;
shreyas22d26a12016-02-01 15:32:32 +053071
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053072 if(!address_field) {
Saurabh2e65aad2015-10-28 11:40:14 +053073 if(frm.doctype != "Purchase Order" && frm.doc.customer) {
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053074 address_field = "customer_address";
Nabin Hait9d1f0772014-02-19 17:43:24 +053075 } else if(frm.doc.supplier) {
Rushabh Mehta49dd7be2014-01-28 17:43:10 +053076 address_field = "supplier_address";
Nabin Hait9d1f0772014-02-19 17:43:24 +053077 } else return;
Anand Doshi78eeacb2014-04-23 19:15:15 +053078 }
shreyas22d26a12016-02-01 15:32:32 +053079
Nabin Hait9d1f0772014-02-19 17:43:24 +053080 if(!display_field) display_field = "address_display";
Nabin Haitb87e9f22014-01-29 19:51:36 +053081 if(frm.doc[address_field]) {
Rushabh Mehta793ba6b2014-02-14 15:47:51 +053082 frappe.call({
Nabin Haitb87e9f22014-01-29 19:51:36 +053083 method: "erpnext.utilities.doctype.address.address.get_address_display",
Nabin Hait9d1f0772014-02-19 17:43:24 +053084 args: {"address_dict": frm.doc[address_field] },
Nabin Haitb87e9f22014-01-29 19:51:36 +053085 callback: function(r) {
Nabin Hait62211172016-03-16 16:22:03 +053086 if(r.message) {
Nabin Hait9d1f0772014-02-19 17:43:24 +053087 frm.set_value(display_field, r.message)
Neil Trini Lasrado09f9c962015-08-26 10:41:31 +053088 }
Anand Doshi2f957f22016-04-08 17:36:10 +053089 erpnext.utils.set_taxes(frm, address_field, display_field, is_your_company_address);
Nabin Haitb87e9f22014-01-29 19:51:36 +053090 }
91 })
Nabin Hait62211172016-03-16 16:22:03 +053092 } else {
93 frm.set_value(display_field, null);
Nabin Haitb87e9f22014-01-29 19:51:36 +053094 }
Anand Doshi2f957f22016-04-08 17:36:10 +053095};
Rushabh Mehta5d0e8de2016-04-11 17:34:25 +053096
Anand Doshi2f957f22016-04-08 17:36:10 +053097erpnext.utils.set_taxes = function(frm, address_field, display_field, is_your_company_address) {
98 if(frappe.meta.get_docfield(frm.doc.doctype, "taxes") && !is_your_company_address) {
99 if(!erpnext.utils.validate_mandatory(frm, "Lead/Customer/Supplier",
100 frm.doc.customer || frm.doc.supplier || frm.doc.lead, address_field)) {
101 return;
102 }
103
104 if(!erpnext.utils.validate_mandatory(frm, "Posting/Transaction Date",
105 frm.doc.posting_date || frm.doc.transaction_date, address_field)) {
106 return;
107 }
108 } else {
109 return;
110 }
111
112 var party_type, party;
113 if (frm.doc.lead) {
114 party_type = 'Lead';
115 party = frm.doc.lead;
116 } else if (frm.doc.customer) {
117 party_type = 'Customer';
118 party = frm.doc.customer;
119 } else if (frm.doc.supplier) {
120 party_type = 'Supplier';
121 party = frm.doc.supplier;
122 }
123
124 frappe.call({
125 method: "erpnext.accounts.party.set_taxes",
126 args: {
127 "party": party,
128 "party_type": party_type,
129 "posting_date": frm.doc.posting_date || frm.doc.transaction_date,
130 "company": frm.doc.company,
131 "billing_address": ((frm.doc.customer || frm.doc.lead) ? (frm.doc.customer_address) : (frm.doc.supplier_address)),
132 "shipping_address": frm.doc.shipping_address_name
133 },
134 callback: function(r) {
135 if(r.message){
136 frm.set_value("taxes_and_charges", r.message)
137 }
138 }
139 });
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530140}
141
142erpnext.utils.get_contact_details = function(frm) {
Rushabh Mehta49dd7be2014-01-28 17:43:10 +0530143 if(frm.updating_party_details) return;
Anand Doshi78eeacb2014-04-23 19:15:15 +0530144
Nabin Hait9d1f0772014-02-19 17:43:24 +0530145 if(frm.doc["contact_person"]) {
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530146 frappe.call({
Nabin Haitb87e9f22014-01-29 19:51:36 +0530147 method: "erpnext.utilities.doctype.contact.contact.get_contact_details",
148 args: {contact: frm.doc.contact_person },
149 callback: function(r) {
150 if(r.message)
151 frm.set_value(r.message);
152 }
153 })
154 }
Anand Doshi78eeacb2014-04-23 19:15:15 +0530155}
Nabin Hait00818bf2015-10-23 16:10:56 +0530156
157erpnext.utils.validate_mandatory = function(frm, label, value, trigger_on) {
158 if(!value) {
159 frm.doc[trigger_on] = "";
160 refresh_field(trigger_on);
161 frappe.msgprint(__("Please enter {0} first", [label]));
162 return false;
163 }
164 return true;
shreyas22d26a12016-02-01 15:32:32 +0530165}
166
Rohit Waghchaureb2e7a1f2016-04-11 12:10:20 +0530167erpnext.utils.get_shipping_address = function(frm, callback){
Saurabh14d646f2016-03-07 20:50:21 +0530168 frappe.call({
169 method: "erpnext.utilities.doctype.address.address.get_shipping_address",
170 args: {company: frm.doc.company},
171 callback: function(r){
172 if(r.message){
173 frm.set_value("shipping_address", r.message[0]) //Address title or name
174 frm.set_value("shipping_address_display", r.message[1]) //Address to be displayed on the page
shreyas22d26a12016-02-01 15:32:32 +0530175 }
Rohit Waghchaureb2e7a1f2016-04-11 12:10:20 +0530176
177 if(callback){
178 return callback();
179 }
Saurabh14d646f2016-03-07 20:50:21 +0530180 }
181 });
Rushabh Mehta8bbca6f2016-04-12 19:16:33 +0530182}