blob: 13796c6a2eb8d649dc03d75237c7c120d2afc63a [file] [log] [blame]
Rushabh Mehtaad45e312013-11-20 12:59:58 +05301// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
Rushabh Mehtae67d1fb2013-08-05 14:59:54 +05302// License: GNU General Public License v3. See license.txt
Rushabh Mehta3966f1d2012-02-23 12:35:32 +05303
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +05304
Rushabh Mehta793ba6b2014-02-14 15:47:51 +05305frappe.provide("erpnext.selling");
Nabin Haitb4a3dfa2015-01-22 17:13:13 +05306frappe.require("assets/erpnext/js/controllers/transaction.js");
Rushabh Mehtab09d9da2014-01-02 11:47:23 +05307
Nabin Haitb4a3dfa2015-01-22 17:13:13 +05308{% include "public/js/controllers/accounts.js" %};
Anand Doshi1dde46a2013-05-15 21:15:57 +05309
Rushabh Mehtae10cf022014-09-12 13:09:41 +053010cur_frm.email_field = "contact_email";
11
Anand Doshi3543f302013-05-24 19:25:01 +053012erpnext.selling.SellingController = erpnext.TransactionController.extend({
Anand Doshi9b496142013-07-11 19:13:58 +053013 onload: function() {
14 this._super();
Anand Doshi9b496142013-07-11 19:13:58 +053015 this.setup_queries();
Anand Doshi33fe8672013-08-02 12:39:10 +053016 this.toggle_editable_price_list_rate();
Anand Doshi9b496142013-07-11 19:13:58 +053017 },
Anand Doshibd67e872014-04-11 16:51:27 +053018
Rushabh Mehtab6843f22014-06-04 13:10:41 +053019 onload_post_render: function() {
Nabin Haitdd38a262014-12-26 13:15:21 +053020 cur_frm.get_field("items").grid.set_multiple_add("item_code", "qty");
Rushabh Mehtab6843f22014-06-04 13:10:41 +053021 },
22
Anand Doshi9b496142013-07-11 19:13:58 +053023 setup_queries: function() {
Anand Doshi99100a42013-07-04 17:13:53 +053024 var me = this;
Anand Doshibd67e872014-04-11 16:51:27 +053025
Anand Doshif3096132013-05-21 19:35:06 +053026 this.frm.add_fetch("sales_partner", "commission_rate", "commission_rate");
Anand Doshibd67e872014-04-11 16:51:27 +053027
28 $.each([["customer_address", "customer_filter"],
Anand Doshid5d39ac2013-07-29 13:28:37 +053029 ["shipping_address_name", "customer_filter"],
Anand Doshibd67e872014-04-11 16:51:27 +053030 ["contact_person", "customer_filter"],
31 ["customer", "customer"],
32 ["lead", "lead"]],
Anand Doshid5d39ac2013-07-29 13:28:37 +053033 function(i, opts) {
Anand Doshibd67e872014-04-11 16:51:27 +053034 if(me.frm.fields_dict[opts[0]])
Anand Doshid5d39ac2013-07-29 13:28:37 +053035 me.frm.set_query(opts[0], erpnext.queries[opts[1]]);
36 });
Anand Doshibd67e872014-04-11 16:51:27 +053037
Akhilesh Darjee4f721562014-01-29 16:31:38 +053038 if(this.frm.fields_dict.taxes_and_charges) {
39 this.frm.set_query("taxes_and_charges", function() {
Saurabhf52dc072013-07-10 13:07:49 +053040 return {
41 filters: [
42 ['Sales Taxes and Charges Master', 'company', '=', me.frm.doc.company],
Saurabhf52dc072013-07-10 13:07:49 +053043 ['Sales Taxes and Charges Master', 'docstatus', '!=', 2]
44 ]
45 }
Anand Doshi99100a42013-07-04 17:13:53 +053046 });
47 }
Anand Doshi99100a42013-07-04 17:13:53 +053048
Rushabh Mehta4a404e92013-08-09 18:11:35 +053049 if(this.frm.fields_dict.selling_price_list) {
50 this.frm.set_query("selling_price_list", function() {
Nabin Haitdc15b4f2014-01-20 16:48:49 +053051 return { filters: { selling: 1 } };
Anand Doshi720a01a2013-07-26 11:32:02 +053052 });
Anand Doshi720a01a2013-07-26 11:32:02 +053053 }
Anand Doshibd67e872014-04-11 16:51:27 +053054
Nabin Haitdd38a262014-12-26 13:15:21 +053055 if(!this.frm.fields_dict["items"]) {
Anand Doshi99100a42013-07-04 17:13:53 +053056 return;
57 }
Anand Doshibd67e872014-04-11 16:51:27 +053058
Nabin Haitdd38a262014-12-26 13:15:21 +053059 if(this.frm.fields_dict["items"].grid.get_field('item_code')) {
60 this.frm.set_query("item_code", "items", function() {
Anand Doshi9b496142013-07-11 19:13:58 +053061 return {
Rushabh Mehta6de403f2013-12-13 14:10:14 +053062 query: "erpnext.controllers.queries.item_query",
Anand Doshi9b496142013-07-11 19:13:58 +053063 filters: (me.frm.doc.order_type === "Maintenance" ?
64 {'is_service_item': 'Yes'}:
65 {'is_sales_item': 'Yes' })
66 }
Anand Doshi99100a42013-07-04 17:13:53 +053067 });
68 }
Anand Doshibd67e872014-04-11 16:51:27 +053069
Nabin Haitdd38a262014-12-26 13:15:21 +053070 if(this.frm.fields_dict["items"].grid.get_field('batch_no')) {
71 this.frm.set_query("batch_no", "items", function(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +053072 var item = frappe.get_doc(cdt, cdn);
Anand Doshi99100a42013-07-04 17:13:53 +053073 if(!item.item_code) {
Pratik Vyasb52618c2014-04-14 16:25:30 +053074 frappe.throw(__("Please enter Item Code to get batch no"));
Anand Doshi99100a42013-07-04 17:13:53 +053075 } else {
Nabin Haitd1fd1e22013-10-18 12:29:11 +053076 filters = {
77 'item_code': item.item_code,
78 'posting_date': me.frm.doc.posting_date,
79 }
80 if(item.warehouse) filters["warehouse"] = item.warehouse
Anand Doshibd67e872014-04-11 16:51:27 +053081
Nabin Haitd1fd1e22013-10-18 12:29:11 +053082 return {
Akhilesh Darjee4f721562014-01-29 16:31:38 +053083 query : "erpnext.controllers.queries.get_batch_no",
Nabin Haitd1fd1e22013-10-18 12:29:11 +053084 filters: filters
Anand Doshi99100a42013-07-04 17:13:53 +053085 }
86 }
87 });
88 }
Anand Doshibd67e872014-04-11 16:51:27 +053089
Anand Doshied698922013-07-23 15:16:50 +053090 if(this.frm.fields_dict.sales_team && this.frm.fields_dict.sales_team.grid.get_field("sales_person")) {
Anand Doshid5d39ac2013-07-29 13:28:37 +053091 this.frm.set_query("sales_person", "sales_team", erpnext.queries.not_a_group_filter);
Anand Doshied698922013-07-23 15:16:50 +053092 }
Anand Doshi1dde46a2013-05-15 21:15:57 +053093 },
Anand Doshibd67e872014-04-11 16:51:27 +053094
Anand Doshic4a54fe2013-08-01 18:19:51 +053095 refresh: function() {
96 this._super();
Anand Doshibd67e872014-04-11 16:51:27 +053097 this.frm.toggle_display("customer_name",
Akhilesh Darjee5ce1b8b2013-12-09 16:29:04 +053098 (this.frm.doc.customer_name && this.frm.doc.customer_name!==this.frm.doc.customer));
Nabin Haite7d15362014-12-25 16:01:55 +053099 if(this.frm.fields_dict.packed_items) {
100 var packing_list_exists = (this.frm.doc.packed_items || []).length;
Anand Doshic4a54fe2013-08-01 18:19:51 +0530101 this.frm.toggle_display("packing_list", packing_list_exists ? true : false);
102 }
Rushabh Mehta8aded132013-07-04 12:50:52 +0530103 },
Anand Doshibd67e872014-04-11 16:51:27 +0530104
Anand Doshi3543f302013-05-24 19:25:01 +0530105 customer: function() {
Nabin Haita3dd72a2014-05-28 12:49:20 +0530106 var me = this;
107 erpnext.utils.get_party_details(this.frm, null, null, function(){me.apply_pricing_rule()});
Anand Doshi3543f302013-05-24 19:25:01 +0530108 },
Anand Doshibd67e872014-04-11 16:51:27 +0530109
Nabin Haita279d782013-07-15 13:04:33 +0530110 customer_address: function() {
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530111 erpnext.utils.get_address_display(this.frm, "customer_address");
Nabin Haita279d782013-07-15 13:04:33 +0530112 },
Anand Doshibd67e872014-04-11 16:51:27 +0530113
Nabin Hait9d1f0772014-02-19 17:43:24 +0530114 shipping_address_name: function() {
115 erpnext.utils.get_address_display(this.frm, "shipping_address_name", "shipping_address");
116 },
Anand Doshibd67e872014-04-11 16:51:27 +0530117
Nabin Haita279d782013-07-15 13:04:33 +0530118 contact_person: function() {
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530119 erpnext.utils.get_contact_details(this.frm);
Nabin Haita279d782013-07-15 13:04:33 +0530120 },
Anand Doshibd67e872014-04-11 16:51:27 +0530121
Nabin Haita3dd72a2014-05-28 12:49:20 +0530122 sales_partner: function() {
123 this.apply_pricing_rule();
124 },
125
126 campaign: function() {
127 this.apply_pricing_rule();
128 },
129
Anand Doshif3096132013-05-21 19:35:06 +0530130 barcode: function(doc, cdt, cdn) {
131 this.item_code(doc, cdt, cdn);
Anand Doshi1dde46a2013-05-15 21:15:57 +0530132 },
Anand Doshibd67e872014-04-11 16:51:27 +0530133
Rushabh Mehta4a404e92013-08-09 18:11:35 +0530134 selling_price_list: function() {
Anand Doshidffec8f2014-07-01 17:45:15 +0530135 this.apply_price_list();
Anand Doshif3096132013-05-21 19:35:06 +0530136 },
Anand Doshibd67e872014-04-11 16:51:27 +0530137
Nabin Haita7f757a2014-02-10 17:54:04 +0530138 price_list_rate: function(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530139 var item = frappe.get_doc(cdt, cdn);
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530140 frappe.model.round_floats_in(item, ["price_list_rate", "discount_percentage"]);
Anand Doshibd67e872014-04-11 16:51:27 +0530141
Nabin Hait7979f7e2014-02-10 18:26:49 +0530142 item.rate = flt(item.price_list_rate * (1 - item.discount_percentage / 100.0),
143 precision("rate", item));
Anand Doshibd67e872014-04-11 16:51:27 +0530144
Anand Doshif3096132013-05-21 19:35:06 +0530145 this.calculate_taxes_and_totals();
146 },
Anand Doshibd67e872014-04-11 16:51:27 +0530147
Nabin Haita7f757a2014-02-10 17:54:04 +0530148 discount_percentage: function(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530149 var item = frappe.get_doc(cdt, cdn);
Nabin Haita7f757a2014-02-10 17:54:04 +0530150 if(!item.price_list_rate) {
151 item.discount_percentage = 0.0;
Anand Doshi923d41d2013-05-28 17:23:36 +0530152 } else {
Nabin Haita7f757a2014-02-10 17:54:04 +0530153 this.price_list_rate(doc, cdt, cdn);
Anand Doshi923d41d2013-05-28 17:23:36 +0530154 }
Anand Doshif3096132013-05-21 19:35:06 +0530155 },
Anand Doshibd67e872014-04-11 16:51:27 +0530156
Akhilesh Darjee57738a02014-01-03 18:15:07 +0530157 discount_amount: function() {
Akhilesh Darjeed203aea2013-12-27 17:49:57 +0530158 this.calculate_taxes_and_totals();
Akhilesh Darjeed203aea2013-12-27 17:49:57 +0530159 },
Anand Doshibd67e872014-04-11 16:51:27 +0530160
Anand Doshif3096132013-05-21 19:35:06 +0530161 commission_rate: function() {
162 this.calculate_commission();
163 refresh_field("total_commission");
164 },
Anand Doshibd67e872014-04-11 16:51:27 +0530165
Anand Doshif3096132013-05-21 19:35:06 +0530166 total_commission: function() {
Nabin Hait5690be12015-02-12 16:09:11 +0530167 if(this.frm.doc.base_net_total) {
168 frappe.model.round_floats_in(this.frm.doc, ["base_net_total", "total_commission"]);
Anand Doshibd67e872014-04-11 16:51:27 +0530169
Nabin Hait5690be12015-02-12 16:09:11 +0530170 if(this.frm.doc.base_net_total < this.frm.doc.total_commission) {
Pratik Vyasb52618c2014-04-14 16:25:30 +0530171 var msg = (__("[Error]") + " " +
172 __(frappe.meta.get_label(this.frm.doc.doctype, "total_commission",
Anand Doshibd67e872014-04-11 16:51:27 +0530173 this.frm.doc.name)) + " > " +
Nabin Hait5690be12015-02-12 16:09:11 +0530174 __(frappe.meta.get_label(this.frm.doc.doctype, "base_net_total", this.frm.doc.name)));
Anand Doshif3096132013-05-21 19:35:06 +0530175 msgprint(msg);
176 throw msg;
177 }
Anand Doshibd67e872014-04-11 16:51:27 +0530178
179 this.frm.set_value("commission_rate",
Nabin Hait5690be12015-02-12 16:09:11 +0530180 flt(this.frm.doc.total_commission * 100.0 / this.frm.doc.base_net_total));
Anand Doshif3096132013-05-21 19:35:06 +0530181 }
182 },
Anand Doshibd67e872014-04-11 16:51:27 +0530183
Anand Doshif3096132013-05-21 19:35:06 +0530184 allocated_percentage: function(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530185 var sales_person = frappe.get_doc(cdt, cdn);
Anand Doshibd67e872014-04-11 16:51:27 +0530186
Anand Doshif3096132013-05-21 19:35:06 +0530187 if(sales_person.allocated_percentage) {
188 sales_person.allocated_percentage = flt(sales_person.allocated_percentage,
189 precision("allocated_percentage", sales_person));
Nabin Hait5690be12015-02-12 16:09:11 +0530190 sales_person.allocated_amount = flt(this.frm.doc.base_net_total *
Anand Doshibd67e872014-04-11 16:51:27 +0530191 sales_person.allocated_percentage / 100.0,
Anand Doshif3096132013-05-21 19:35:06 +0530192 precision("allocated_amount", sales_person));
193
194 refresh_field(["allocated_percentage", "allocated_amount"], sales_person.name,
195 sales_person.parentfield);
196 }
197 },
Anand Doshibd67e872014-04-11 16:51:27 +0530198
Anand Doshifc777182013-05-27 19:29:07 +0530199 warehouse: function(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530200 var item = frappe.get_doc(cdt, cdn);
Anand Doshi1dc95ed2013-07-23 13:36:38 +0530201 if(item.item_code && item.warehouse) {
Anand Doshi1fac2a92013-07-29 19:30:39 +0530202 return this.frm.call({
Nabin Hait0984f222014-05-30 19:10:12 +0530203 method: "erpnext.stock.get_item_details.get_available_qty",
Anand Doshifc777182013-05-27 19:29:07 +0530204 child: item,
205 args: {
206 item_code: item.item_code,
Anand Doshi1dc95ed2013-07-23 13:36:38 +0530207 warehouse: item.warehouse,
Anand Doshifc777182013-05-27 19:29:07 +0530208 },
209 });
210 }
211 },
Anand Doshibd67e872014-04-11 16:51:27 +0530212
Anand Doshi33fe8672013-08-02 12:39:10 +0530213 toggle_editable_price_list_rate: function() {
Nabin Haitdd38a262014-12-26 13:15:21 +0530214 var df = frappe.meta.get_docfield(this.frm.doc.doctype + " Item", "price_list_rate", this.frm.doc.name);
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530215 var editable_price_list_rate = cint(frappe.defaults.get_default("editable_price_list_rate"));
Anand Doshibd67e872014-04-11 16:51:27 +0530216
Anand Doshi33fe8672013-08-02 12:39:10 +0530217 if(df && editable_price_list_rate) {
218 df.read_only = 0;
219 }
220 },
Anand Doshibd67e872014-04-11 16:51:27 +0530221
Anand Doshi652bc072014-04-16 15:21:46 +0530222 calculate_outstanding_amount: function(update_paid_amount) {
Anand Doshibd67e872014-04-11 16:51:27 +0530223 // NOTE:
Akhilesh Darjee38e8f982013-09-05 12:59:33 +0530224 // paid_amount and write_off_amount is only for POS Invoice
Anand Doshi923d41d2013-05-28 17:23:36 +0530225 // total_advance is only for non POS Invoice
Anand Doshi29ea5d02013-07-05 17:23:14 +0530226 if(this.frm.doc.doctype == "Sales Invoice" && this.frm.doc.docstatus==0) {
Nabin Hait5690be12015-02-12 16:09:11 +0530227 frappe.model.round_floats_in(this.frm.doc, ["base_grand_total", "total_advance", "write_off_amount",
Nabin Hait54106802014-03-13 17:26:41 +0530228 "paid_amount"]);
Nabin Hait5690be12015-02-12 16:09:11 +0530229 var total_amount_to_pay = this.frm.doc.base_grand_total - this.frm.doc.write_off_amount
Nabin Hait54106802014-03-13 17:26:41 +0530230 - this.frm.doc.total_advance;
Nabin Hait0c9d4222014-03-25 19:35:41 +0530231 if(this.frm.doc.is_pos) {
Anand Doshi652bc072014-04-16 15:21:46 +0530232 if(!this.frm.doc.paid_amount || update_paid_amount===undefined || update_paid_amount) {
233 this.frm.doc.paid_amount = flt(total_amount_to_pay);
Anand Doshi50d7e8c2015-01-06 17:14:13 +0530234 this.frm.refresh_field("paid_amount");
Anand Doshi652bc072014-04-16 15:21:46 +0530235 }
Nabin Hait0c9d4222014-03-25 19:35:41 +0530236 } else {
237 this.frm.doc.paid_amount = 0
Anand Doshi50d7e8c2015-01-06 17:14:13 +0530238 this.frm.refresh_field("paid_amount");
Nabin Hait0c9d4222014-03-25 19:35:41 +0530239 }
Nabin Hait482ffac2014-03-13 16:32:43 +0530240
Anand Doshibd67e872014-04-11 16:51:27 +0530241 this.frm.set_value("outstanding_amount", flt(total_amount_to_pay
Nabin Hait54106802014-03-13 17:26:41 +0530242 - this.frm.doc.paid_amount, precision("outstanding_amount")));
Anand Doshifc777182013-05-27 19:29:07 +0530243 }
244 },
Anand Doshibd67e872014-04-11 16:51:27 +0530245
Anand Doshif3096132013-05-21 19:35:06 +0530246 calculate_commission: function() {
Anand Doshi923d41d2013-05-28 17:23:36 +0530247 if(this.frm.fields_dict.commission_rate) {
248 if(this.frm.doc.commission_rate > 100) {
Pratik Vyasb52618c2014-04-14 16:25:30 +0530249 var msg = __(frappe.meta.get_label(this.frm.doc.doctype, "commission_rate", this.frm.doc.name)) +
250 " " + __("cannot be greater than 100");
Anand Doshi923d41d2013-05-28 17:23:36 +0530251 msgprint(msg);
252 throw msg;
253 }
Anand Doshibd67e872014-04-11 16:51:27 +0530254
Nabin Hait5690be12015-02-12 16:09:11 +0530255 this.frm.doc.total_commission = flt(this.frm.doc.base_net_total * this.frm.doc.commission_rate / 100.0,
Anand Doshi923d41d2013-05-28 17:23:36 +0530256 precision("total_commission"));
257 }
Anand Doshif3096132013-05-21 19:35:06 +0530258 },
Anand Doshibd67e872014-04-11 16:51:27 +0530259
Anand Doshif3096132013-05-21 19:35:06 +0530260 calculate_contribution: function() {
Anand Doshi2168e392013-05-23 19:25:08 +0530261 var me = this;
Rushabh Mehtaaa355af2014-03-26 18:24:30 +0530262 $.each(this.frm.doc.doctype.sales_team || [], function(i, sales_person) {
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530263 frappe.model.round_floats_in(sales_person);
Anand Doshif3096132013-05-21 19:35:06 +0530264 if(sales_person.allocated_percentage) {
265 sales_person.allocated_amount = flt(
Nabin Hait5690be12015-02-12 16:09:11 +0530266 me.frm.doc.base_net_total * sales_person.allocated_percentage / 100.0,
Anand Doshif3096132013-05-21 19:35:06 +0530267 precision("allocated_amount", sales_person));
268 }
269 });
270 },
Anand Doshibd67e872014-04-11 16:51:27 +0530271
Anand Doshicefccb92013-07-15 18:28:14 +0530272 shipping_rule: function() {
273 var me = this;
274 if(this.frm.doc.shipping_rule) {
Anand Doshi1fac2a92013-07-29 19:30:39 +0530275 return this.frm.call({
Anand Doshicefccb92013-07-15 18:28:14 +0530276 doc: this.frm.doc,
277 method: "apply_shipping_rule",
278 callback: function(r) {
279 if(!r.exc) {
280 me.calculate_taxes_and_totals();
281 }
282 }
283 })
284 }
285 },
Anand Doshibd67e872014-04-11 16:51:27 +0530286
Anand Doshi2168e392013-05-23 19:25:08 +0530287 set_dynamic_labels: function() {
Anand Doshi61a2f682013-06-21 17:55:31 +0530288 this._super();
Nabin Hait0b157552014-06-24 17:02:45 +0530289 this.set_sales_bom_help(this.frm.doc);
290 },
291
292 set_sales_bom_help: function(doc) {
293 if(!cur_frm.fields_dict.packing_list) return;
Nabin Haite7d15362014-12-25 16:01:55 +0530294 if ((doc.packed_items || []).length) {
Nabin Hait0b157552014-06-24 17:02:45 +0530295 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(true);
296
297 if (inList(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
298 help_msg = "<div class='alert alert-warning'>" +
Nabin Hait60c48fe2014-06-24 17:34:52 +0530299 __("For 'Sales BOM' items, Warehouse, Serial No and Batch No will be considered from the 'Packing List' table. If Warehouse and Batch No are same for all packing items for any 'Sales BOM' item, those values can be entered in the main Item table, values will be copied to 'Packing List' table.")+
Nabin Hait0b157552014-06-24 17:02:45 +0530300 "</div>";
301 frappe.meta.get_docfield(doc.doctype, 'sales_bom_help', doc.name).options = help_msg;
302 }
303 } else {
304 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(false);
305 if (inList(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
306 frappe.meta.get_docfield(doc.doctype, 'sales_bom_help', doc.name).options = '';
307 }
308 }
309 refresh_field('sales_bom_help');
Anand Doshi2168e392013-05-23 19:25:08 +0530310 },
Anand Doshibd67e872014-04-11 16:51:27 +0530311
Anand Doshi2168e392013-05-23 19:25:08 +0530312 change_form_labels: function(company_currency) {
313 var me = this;
314 var field_label_map = {};
Anand Doshibd67e872014-04-11 16:51:27 +0530315
Anand Doshi2168e392013-05-23 19:25:08 +0530316 var setup_field_label_map = function(fields_list, currency) {
317 $.each(fields_list, function(i, fname) {
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530318 var docfield = frappe.meta.docfield_map[me.frm.doc.doctype][fname];
Anand Doshi2168e392013-05-23 19:25:08 +0530319 if(docfield) {
Pratik Vyasb52618c2014-04-14 16:25:30 +0530320 var label = __(docfield.label || "").replace(/\([^\)]*\)/g, "");
Anand Doshi2168e392013-05-23 19:25:08 +0530321 field_label_map[fname] = label.trim() + " (" + currency + ")";
322 }
323 });
324 };
Nabin Hait5690be12015-02-12 16:09:11 +0530325 setup_field_label_map(["base_net_total", "base_total_taxes_and_charges", "base_discount_amount", "base_grand_total",
326 "base_rounded_total", "base_in_words",
Anand Doshi2168e392013-05-23 19:25:08 +0530327 "outstanding_amount", "total_advance", "paid_amount", "write_off_amount"],
328 company_currency);
Anand Doshibd67e872014-04-11 16:51:27 +0530329
Nabin Hait5690be12015-02-12 16:09:11 +0530330 setup_field_label_map(["net_total", "total_taxes_and_charges", "discount_amount", "grand_total",
331 "rounded_total", "in_words"], this.frm.doc.currency);
Anand Doshibd67e872014-04-11 16:51:27 +0530332
333 cur_frm.set_df_property("conversion_rate", "description", "1 " + this.frm.doc.currency
Rushabh Mehtaef584552013-11-02 14:47:11 +0530334 + " = [?] " + company_currency)
Anand Doshibd67e872014-04-11 16:51:27 +0530335
Anand Doshi2168e392013-05-23 19:25:08 +0530336 if(this.frm.doc.price_list_currency && this.frm.doc.price_list_currency!=company_currency) {
Anand Doshibd67e872014-04-11 16:51:27 +0530337 cur_frm.set_df_property("plc_conversion_rate", "description", "1 " + this.frm.doc.price_list_currency
Rushabh Mehtaef584552013-11-02 14:47:11 +0530338 + " = [?] " + company_currency)
Anand Doshi2168e392013-05-23 19:25:08 +0530339 }
Anand Doshibd67e872014-04-11 16:51:27 +0530340
Anand Doshi2168e392013-05-23 19:25:08 +0530341 // toggle fields
Nabin Hait5690be12015-02-12 16:09:11 +0530342 this.frm.toggle_display(["conversion_rate", "base_net_total", "base_total_taxes_and_charges",
343 "base_grand_total", "base_rounded_total", "base_in_words", "base_discount_amount"],
Anand Doshi2168e392013-05-23 19:25:08 +0530344 this.frm.doc.currency != company_currency);
Anand Doshibd67e872014-04-11 16:51:27 +0530345
346 this.frm.toggle_display(["plc_conversion_rate", "price_list_currency"],
Anand Doshi2168e392013-05-23 19:25:08 +0530347 this.frm.doc.price_list_currency != company_currency);
Anand Doshibd67e872014-04-11 16:51:27 +0530348
Anand Doshi2168e392013-05-23 19:25:08 +0530349 // set labels
350 $.each(field_label_map, function(fname, label) {
351 me.frm.fields_dict[fname].set_label(label);
352 });
353 },
Anand Doshibd67e872014-04-11 16:51:27 +0530354
Anand Doshi2168e392013-05-23 19:25:08 +0530355 change_grid_labels: function(company_currency) {
356 var me = this;
357 var field_label_map = {};
Anand Doshibd67e872014-04-11 16:51:27 +0530358
Anand Doshi2168e392013-05-23 19:25:08 +0530359 var setup_field_label_map = function(fields_list, currency, parentfield) {
360 var grid_doctype = me.frm.fields_dict[parentfield].grid.doctype;
361 $.each(fields_list, function(i, fname) {
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530362 var docfield = frappe.meta.docfield_map[grid_doctype][fname];
Anand Doshi2168e392013-05-23 19:25:08 +0530363 if(docfield) {
Pratik Vyasb52618c2014-04-14 16:25:30 +0530364 var label = __(docfield.label || "").replace(/\([^\)]*\)/g, "");
Anand Doshibd67e872014-04-11 16:51:27 +0530365 field_label_map[grid_doctype + "-" + fname] =
Anand Doshi2168e392013-05-23 19:25:08 +0530366 label.trim() + " (" + currency + ")";
367 }
368 });
369 }
Anand Doshibd67e872014-04-11 16:51:27 +0530370
Nabin Hait1eb56012014-02-10 19:20:15 +0530371 setup_field_label_map(["base_rate", "base_price_list_rate", "base_amount"],
Nabin Haitdd38a262014-12-26 13:15:21 +0530372 company_currency, "items");
Anand Doshibd67e872014-04-11 16:51:27 +0530373
Nabin Hait1eb56012014-02-10 19:20:15 +0530374 setup_field_label_map(["rate", "price_list_rate", "amount"],
Nabin Haitdd38a262014-12-26 13:15:21 +0530375 this.frm.doc.currency, "items");
Anand Doshibd67e872014-04-11 16:51:27 +0530376
Nabin Haite7d15362014-12-25 16:01:55 +0530377 setup_field_label_map(["tax_amount", "total"], company_currency, "taxes");
Anand Doshibd67e872014-04-11 16:51:27 +0530378
Nabin Haite7d15362014-12-25 16:01:55 +0530379 if(this.frm.fields_dict["advances"]) {
Anand Doshi2168e392013-05-23 19:25:08 +0530380 setup_field_label_map(["advance_amount", "allocated_amount"], company_currency,
Nabin Haite7d15362014-12-25 16:01:55 +0530381 "advances");
Anand Doshi2168e392013-05-23 19:25:08 +0530382 }
Anand Doshibd67e872014-04-11 16:51:27 +0530383
Anand Doshi2168e392013-05-23 19:25:08 +0530384 // toggle columns
Nabin Haitdd38a262014-12-26 13:15:21 +0530385 var item_grid = this.frm.fields_dict["items"].grid;
Anand Doshibd67e872014-04-11 16:51:27 +0530386 var show = (this.frm.doc.currency != company_currency) ||
Nabin Haite7d15362014-12-25 16:01:55 +0530387 ((cur_frm.doc.taxes || []).filter(
Rushabh Mehtaaa355af2014-03-26 18:24:30 +0530388 function(d) { return d.included_in_print_rate===1}).length);
Anand Doshibd67e872014-04-11 16:51:27 +0530389
Nabin Hait1eb56012014-02-10 19:20:15 +0530390 $.each(["base_rate", "base_price_list_rate", "base_amount"], function(i, fname) {
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530391 if(frappe.meta.get_docfield(item_grid.doctype, fname))
Anand Doshi2168e392013-05-23 19:25:08 +0530392 item_grid.set_column_disp(fname, show);
393 });
Anand Doshibd67e872014-04-11 16:51:27 +0530394
Anand Doshi2168e392013-05-23 19:25:08 +0530395 // set labels
396 var $wrapper = $(this.frm.wrapper);
397 $.each(field_label_map, function(fname, label) {
Anand Doshi5013dcb2013-08-05 12:16:04 +0530398 fname = fname.split("-");
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530399 var df = frappe.meta.get_docfield(fname[0], fname[1], me.frm.doc.name);
Anand Doshi5013dcb2013-08-05 12:16:04 +0530400 if(df) df.label = label;
Anand Doshi2168e392013-05-23 19:25:08 +0530401 });
Nabin Haitcfc6bb12012-07-11 13:14:52 +0530402 }
Nabin Hait0b157552014-06-24 17:02:45 +0530403});
Anand Doshi43f087c2014-08-26 14:25:53 +0530404
405frappe.ui.form.on(cur_frm.doctype,"project_name", function(frm) {
Nabin Hait10b155a2014-10-23 13:18:59 +0530406 if(in_list(["Delivery Note", "Sales Invoice"], frm.doc.doctype)) {
407 frappe.call({
408 method:'erpnext.projects.doctype.project.project.get_cost_center_name' ,
409 args: { project_name: frm.doc.project_name },
410 callback: function(r, rt) {
411 if(!r.exc) {
Nabin Haitdd38a262014-12-26 13:15:21 +0530412 $.each(frm.doc["items"] || [], function(i, row) {
Neil Trini Lasrado6fc28212014-10-28 14:36:26 +0530413 frappe.model.set_value(row.doctype, row.name, "cost_center", r.message);
414 msgprint(__("Cost Center For Item with Item Code '"+row.item_name+"' has been Changed to "+ r.message));
Nabin Hait10b155a2014-10-23 13:18:59 +0530415 })
416 }
Anand Doshi43f087c2014-08-26 14:25:53 +0530417 }
Nabin Hait10b155a2014-10-23 13:18:59 +0530418 })
419 }
Anand Doshi43f087c2014-08-26 14:25:53 +0530420})
Nabin Haitce245122015-02-22 20:14:49 +0530421
422frappe.ui.form.on("Sales Taxes and Charges", "rate", function(frm, cdt, cdn) {
423 cur_frm.cscript.calculate_taxes_and_totals();
424})