blob: 607aa4124d3c201c7cef3c086d546e432a1b1bb1 [file] [log] [blame]
Anand Doshi885e0742015-03-03 14:55:30 +05301// Copyright (c) 2015, Frappe 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
Nabin Hait613d0812015-02-23 11:58:15 +05305cur_frm.cscript.tax_table = "Sales Taxes and Charges";
Rushabh Mehta009378e2015-05-06 22:59:00 +05306{% include 'accounts/doctype/sales_taxes_and_charges_template/sales_taxes_and_charges_template.js' %}
Nabin Hait613d0812015-02-23 11:58:15 +05307
Rushabh Mehta793ba6b2014-02-14 15:47:51 +05308frappe.provide("erpnext.selling");
Nabin Haitb4a3dfa2015-01-22 17:13:13 +05309frappe.require("assets/erpnext/js/controllers/transaction.js");
Rushabh Mehtab09d9da2014-01-02 11:47:23 +053010
Rushabh Mehtae10cf022014-09-12 13:09:41 +053011cur_frm.email_field = "contact_email";
12
Anand Doshi3543f302013-05-24 19:25:01 +053013erpnext.selling.SellingController = erpnext.TransactionController.extend({
Anand Doshi9b496142013-07-11 19:13:58 +053014 onload: function() {
15 this._super();
Anand Doshi9b496142013-07-11 19:13:58 +053016 this.setup_queries();
17 },
Anand Doshibd67e872014-04-11 16:51:27 +053018
Anand Doshi9b496142013-07-11 19:13:58 +053019 setup_queries: function() {
Anand Doshi99100a42013-07-04 17:13:53 +053020 var me = this;
Anand Doshibd67e872014-04-11 16:51:27 +053021
Anand Doshif3096132013-05-21 19:35:06 +053022 this.frm.add_fetch("sales_partner", "commission_rate", "commission_rate");
Anand Doshibd67e872014-04-11 16:51:27 +053023
24 $.each([["customer_address", "customer_filter"],
Anand Doshid5d39ac2013-07-29 13:28:37 +053025 ["shipping_address_name", "customer_filter"],
Anand Doshibd67e872014-04-11 16:51:27 +053026 ["contact_person", "customer_filter"],
27 ["customer", "customer"],
28 ["lead", "lead"]],
Anand Doshid5d39ac2013-07-29 13:28:37 +053029 function(i, opts) {
Anand Doshibd67e872014-04-11 16:51:27 +053030 if(me.frm.fields_dict[opts[0]])
Anand Doshid5d39ac2013-07-29 13:28:37 +053031 me.frm.set_query(opts[0], erpnext.queries[opts[1]]);
32 });
Anand Doshibd67e872014-04-11 16:51:27 +053033
Akhilesh Darjee4f721562014-01-29 16:31:38 +053034 if(this.frm.fields_dict.taxes_and_charges) {
35 this.frm.set_query("taxes_and_charges", function() {
Saurabhf52dc072013-07-10 13:07:49 +053036 return {
37 filters: [
Rushabh Mehtaab1ed012015-05-08 11:08:48 +053038 ['Sales Taxes and Charges Template', 'company', '=', me.frm.doc.company],
39 ['Sales Taxes and Charges Template', 'docstatus', '!=', 2]
Saurabhf52dc072013-07-10 13:07:49 +053040 ]
41 }
Anand Doshi99100a42013-07-04 17:13:53 +053042 });
43 }
Anand Doshi99100a42013-07-04 17:13:53 +053044
Rushabh Mehta4a404e92013-08-09 18:11:35 +053045 if(this.frm.fields_dict.selling_price_list) {
46 this.frm.set_query("selling_price_list", function() {
Nabin Haitdc15b4f2014-01-20 16:48:49 +053047 return { filters: { selling: 1 } };
Anand Doshi720a01a2013-07-26 11:32:02 +053048 });
Anand Doshi720a01a2013-07-26 11:32:02 +053049 }
Anand Doshibd67e872014-04-11 16:51:27 +053050
Nabin Haitdd38a262014-12-26 13:15:21 +053051 if(!this.frm.fields_dict["items"]) {
Anand Doshi99100a42013-07-04 17:13:53 +053052 return;
53 }
Anand Doshibd67e872014-04-11 16:51:27 +053054
Nabin Haitdd38a262014-12-26 13:15:21 +053055 if(this.frm.fields_dict["items"].grid.get_field('item_code')) {
56 this.frm.set_query("item_code", "items", function() {
Anand Doshi9b496142013-07-11 19:13:58 +053057 return {
Umair Sayyed72534de2016-04-15 12:52:12 +053058 query: "erpnext.controllers.queries.item_query"
Anand Doshi9b496142013-07-11 19:13:58 +053059 }
Anand Doshi99100a42013-07-04 17:13:53 +053060 });
61 }
Anand Doshibd67e872014-04-11 16:51:27 +053062
Nabin Haitdd38a262014-12-26 13:15:21 +053063 if(this.frm.fields_dict["items"].grid.get_field('batch_no')) {
64 this.frm.set_query("batch_no", "items", function(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +053065 var item = frappe.get_doc(cdt, cdn);
Anand Doshi99100a42013-07-04 17:13:53 +053066 if(!item.item_code) {
Pratik Vyasb52618c2014-04-14 16:25:30 +053067 frappe.throw(__("Please enter Item Code to get batch no"));
Anand Doshi99100a42013-07-04 17:13:53 +053068 } else {
Nabin Haitd1fd1e22013-10-18 12:29:11 +053069 filters = {
70 'item_code': item.item_code,
Neil Trini Lasradoebb60f52015-07-08 14:36:09 +053071 'posting_date': me.frm.doc.posting_date || nowdate(),
Nabin Haitd1fd1e22013-10-18 12:29:11 +053072 }
73 if(item.warehouse) filters["warehouse"] = item.warehouse
Anand Doshibd67e872014-04-11 16:51:27 +053074
Nabin Haitd1fd1e22013-10-18 12:29:11 +053075 return {
Akhilesh Darjee4f721562014-01-29 16:31:38 +053076 query : "erpnext.controllers.queries.get_batch_no",
Nabin Haitd1fd1e22013-10-18 12:29:11 +053077 filters: filters
Anand Doshi99100a42013-07-04 17:13:53 +053078 }
79 }
80 });
81 }
Anand Doshi1dde46a2013-05-15 21:15:57 +053082 },
Anand Doshibd67e872014-04-11 16:51:27 +053083
Anand Doshic4a54fe2013-08-01 18:19:51 +053084 refresh: function() {
85 this._super();
Anand Doshibd67e872014-04-11 16:51:27 +053086 this.frm.toggle_display("customer_name",
Akhilesh Darjee5ce1b8b2013-12-09 16:29:04 +053087 (this.frm.doc.customer_name && this.frm.doc.customer_name!==this.frm.doc.customer));
Nabin Haite7d15362014-12-25 16:01:55 +053088 if(this.frm.fields_dict.packed_items) {
89 var packing_list_exists = (this.frm.doc.packed_items || []).length;
Anand Doshic4a54fe2013-08-01 18:19:51 +053090 this.frm.toggle_display("packing_list", packing_list_exists ? true : false);
91 }
Nabin Hait2029ea92015-04-16 17:55:35 +053092 this.toggle_editable_price_list_rate();
Rushabh Mehta8aded132013-07-04 12:50:52 +053093 },
Anand Doshibd67e872014-04-11 16:51:27 +053094
Anand Doshi3543f302013-05-24 19:25:01 +053095 customer: function() {
Nabin Haita3dd72a2014-05-28 12:49:20 +053096 var me = this;
97 erpnext.utils.get_party_details(this.frm, null, null, function(){me.apply_pricing_rule()});
Anand Doshi3543f302013-05-24 19:25:01 +053098 },
Anand Doshibd67e872014-04-11 16:51:27 +053099
Nabin Haita279d782013-07-15 13:04:33 +0530100 customer_address: function() {
Rushabh Mehtab09d9da2014-01-02 11:47:23 +0530101 erpnext.utils.get_address_display(this.frm, "customer_address");
Nabin Haita279d782013-07-15 13:04:33 +0530102 },
Anand Doshibd67e872014-04-11 16:51:27 +0530103
Nabin Hait9d1f0772014-02-19 17:43:24 +0530104 shipping_address_name: function() {
105 erpnext.utils.get_address_display(this.frm, "shipping_address_name", "shipping_address");
106 },
Anand Doshibd67e872014-04-11 16:51:27 +0530107
Nabin Haita3dd72a2014-05-28 12:49:20 +0530108 sales_partner: function() {
109 this.apply_pricing_rule();
110 },
111
112 campaign: function() {
113 this.apply_pricing_rule();
114 },
115
Rushabh Mehta4a404e92013-08-09 18:11:35 +0530116 selling_price_list: function() {
Anand Doshidffec8f2014-07-01 17:45:15 +0530117 this.apply_price_list();
Anand Doshif3096132013-05-21 19:35:06 +0530118 },
Anand Doshibd67e872014-04-11 16:51:27 +0530119
Nabin Haita7f757a2014-02-10 17:54:04 +0530120 price_list_rate: function(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530121 var item = frappe.get_doc(cdt, cdn);
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530122 frappe.model.round_floats_in(item, ["price_list_rate", "discount_percentage"]);
Anand Doshibd67e872014-04-11 16:51:27 +0530123
mbauskara52472c2016-03-05 15:10:25 +0530124 // check if child doctype is Sales Order Item/Qutation Item and calculate the rate
125 if(in_list(["Quotation Item", "Sales Order Item", "Delivery Note Item", "Sales Invoice Item"]), cdt)
126 this.calculate_revised_margin_and_rate(item, doc,cdt, cdn);
127 else
128 item.rate = flt(item.price_list_rate * (1 - item.discount_percentage / 100.0),
129 precision("rate", item));
130
Anand Doshif3096132013-05-21 19:35:06 +0530131 this.calculate_taxes_and_totals();
132 },
Anand Doshibd67e872014-04-11 16:51:27 +0530133
Nabin Haita7f757a2014-02-10 17:54:04 +0530134 discount_percentage: function(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530135 var item = frappe.get_doc(cdt, cdn);
Nabin Haita7f757a2014-02-10 17:54:04 +0530136 if(!item.price_list_rate) {
137 item.discount_percentage = 0.0;
Anand Doshi923d41d2013-05-28 17:23:36 +0530138 } else {
Nabin Haita7f757a2014-02-10 17:54:04 +0530139 this.price_list_rate(doc, cdt, cdn);
Anand Doshi923d41d2013-05-28 17:23:36 +0530140 }
Saurabh5ada14b2016-02-26 18:02:55 +0530141 this.set_gross_profit(item);
Anand Doshif3096132013-05-21 19:35:06 +0530142 },
Anand Doshibd67e872014-04-11 16:51:27 +0530143
Anand Doshif3096132013-05-21 19:35:06 +0530144 commission_rate: function() {
145 this.calculate_commission();
146 refresh_field("total_commission");
147 },
Anand Doshibd67e872014-04-11 16:51:27 +0530148
Anand Doshif3096132013-05-21 19:35:06 +0530149 total_commission: function() {
Nabin Hait5690be12015-02-12 16:09:11 +0530150 if(this.frm.doc.base_net_total) {
151 frappe.model.round_floats_in(this.frm.doc, ["base_net_total", "total_commission"]);
Anand Doshibd67e872014-04-11 16:51:27 +0530152
Nabin Hait5690be12015-02-12 16:09:11 +0530153 if(this.frm.doc.base_net_total < this.frm.doc.total_commission) {
Pratik Vyasb52618c2014-04-14 16:25:30 +0530154 var msg = (__("[Error]") + " " +
155 __(frappe.meta.get_label(this.frm.doc.doctype, "total_commission",
Anand Doshibd67e872014-04-11 16:51:27 +0530156 this.frm.doc.name)) + " > " +
Nabin Hait5690be12015-02-12 16:09:11 +0530157 __(frappe.meta.get_label(this.frm.doc.doctype, "base_net_total", this.frm.doc.name)));
Anand Doshif3096132013-05-21 19:35:06 +0530158 msgprint(msg);
159 throw msg;
160 }
Anand Doshibd67e872014-04-11 16:51:27 +0530161
162 this.frm.set_value("commission_rate",
Nabin Hait5690be12015-02-12 16:09:11 +0530163 flt(this.frm.doc.total_commission * 100.0 / this.frm.doc.base_net_total));
Anand Doshif3096132013-05-21 19:35:06 +0530164 }
165 },
Anand Doshibd67e872014-04-11 16:51:27 +0530166
Anand Doshif3096132013-05-21 19:35:06 +0530167 allocated_percentage: function(doc, cdt, cdn) {
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530168 var sales_person = frappe.get_doc(cdt, cdn);
Anand Doshibd67e872014-04-11 16:51:27 +0530169
Anand Doshif3096132013-05-21 19:35:06 +0530170 if(sales_person.allocated_percentage) {
171 sales_person.allocated_percentage = flt(sales_person.allocated_percentage,
172 precision("allocated_percentage", sales_person));
Nabin Hait5690be12015-02-12 16:09:11 +0530173 sales_person.allocated_amount = flt(this.frm.doc.base_net_total *
Anand Doshibd67e872014-04-11 16:51:27 +0530174 sales_person.allocated_percentage / 100.0,
Anand Doshif3096132013-05-21 19:35:06 +0530175 precision("allocated_amount", sales_person));
176
177 refresh_field(["allocated_percentage", "allocated_amount"], sales_person.name,
178 sales_person.parentfield);
179 }
180 },
Anand Doshibd67e872014-04-11 16:51:27 +0530181
Anand Doshifc777182013-05-27 19:29:07 +0530182 warehouse: function(doc, cdt, cdn) {
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530183 var me = this;
Rushabh Mehta66d52b52014-03-27 14:17:33 +0530184 var item = frappe.get_doc(cdt, cdn);
Saurabhd3135532016-02-25 18:59:20 +0530185
Anand Doshi1dc95ed2013-07-23 13:36:38 +0530186 if(item.item_code && item.warehouse) {
Anand Doshi1fac2a92013-07-29 19:30:39 +0530187 return this.frm.call({
Saurabhd3135532016-02-25 18:59:20 +0530188 method: "erpnext.stock.get_item_details.get_bin_details",
Anand Doshifc777182013-05-27 19:29:07 +0530189 child: item,
190 args: {
191 item_code: item.item_code,
Anand Doshi1dc95ed2013-07-23 13:36:38 +0530192 warehouse: item.warehouse,
Anand Doshifc777182013-05-27 19:29:07 +0530193 },
Saurabhd3135532016-02-25 18:59:20 +0530194 callback:function(r){
195 if (inList(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
196 me.batch_no(doc, cdt, cdn);
197 }
198 }
Anand Doshifc777182013-05-27 19:29:07 +0530199 });
200 }
201 },
Anand Doshibd67e872014-04-11 16:51:27 +0530202
Anand Doshi33fe8672013-08-02 12:39:10 +0530203 toggle_editable_price_list_rate: function() {
Nabin Haitdd38a262014-12-26 13:15:21 +0530204 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 +0530205 var editable_price_list_rate = cint(frappe.defaults.get_default("editable_price_list_rate"));
Anand Doshibd67e872014-04-11 16:51:27 +0530206
Anand Doshi33fe8672013-08-02 12:39:10 +0530207 if(df && editable_price_list_rate) {
208 df.read_only = 0;
209 }
210 },
Anand Doshibd67e872014-04-11 16:51:27 +0530211
Anand Doshif3096132013-05-21 19:35:06 +0530212 calculate_commission: function() {
Anand Doshi923d41d2013-05-28 17:23:36 +0530213 if(this.frm.fields_dict.commission_rate) {
214 if(this.frm.doc.commission_rate > 100) {
Pratik Vyasb52618c2014-04-14 16:25:30 +0530215 var msg = __(frappe.meta.get_label(this.frm.doc.doctype, "commission_rate", this.frm.doc.name)) +
216 " " + __("cannot be greater than 100");
Anand Doshi923d41d2013-05-28 17:23:36 +0530217 msgprint(msg);
218 throw msg;
219 }
Anand Doshibd67e872014-04-11 16:51:27 +0530220
Nabin Hait5690be12015-02-12 16:09:11 +0530221 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 +0530222 precision("total_commission"));
223 }
Anand Doshif3096132013-05-21 19:35:06 +0530224 },
Anand Doshibd67e872014-04-11 16:51:27 +0530225
Anand Doshif3096132013-05-21 19:35:06 +0530226 calculate_contribution: function() {
Anand Doshi2168e392013-05-23 19:25:08 +0530227 var me = this;
Rushabh Mehtaaa355af2014-03-26 18:24:30 +0530228 $.each(this.frm.doc.doctype.sales_team || [], function(i, sales_person) {
Rushabh Mehta793ba6b2014-02-14 15:47:51 +0530229 frappe.model.round_floats_in(sales_person);
Anand Doshif3096132013-05-21 19:35:06 +0530230 if(sales_person.allocated_percentage) {
231 sales_person.allocated_amount = flt(
Nabin Hait5690be12015-02-12 16:09:11 +0530232 me.frm.doc.base_net_total * sales_person.allocated_percentage / 100.0,
Anand Doshif3096132013-05-21 19:35:06 +0530233 precision("allocated_amount", sales_person));
234 }
235 });
236 },
Anand Doshibd67e872014-04-11 16:51:27 +0530237
Anand Doshicefccb92013-07-15 18:28:14 +0530238 shipping_rule: function() {
239 var me = this;
240 if(this.frm.doc.shipping_rule) {
Anand Doshi1fac2a92013-07-29 19:30:39 +0530241 return this.frm.call({
Anand Doshicefccb92013-07-15 18:28:14 +0530242 doc: this.frm.doc,
243 method: "apply_shipping_rule",
244 callback: function(r) {
245 if(!r.exc) {
246 me.calculate_taxes_and_totals();
247 }
248 }
249 })
250 }
251 },
Anand Doshibd67e872014-04-11 16:51:27 +0530252
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530253 batch_no: function(doc, cdt, cdn) {
254 var me = this;
255 var item = frappe.get_doc(cdt, cdn);
Nabin Hait2ed71ba2015-03-20 15:06:30 +0530256
Sambhaji Kolatea4fa96c2015-03-30 16:04:55 +0530257 if(item.warehouse && item.item_code && item.batch_no) {
Sambhaji Kolatefeff40a2015-03-11 11:50:28 +0530258 return this.frm.call({
259 method: "erpnext.stock.get_item_details.get_batch_qty",
260 child: item,
261 args: {
262 "batch_no": item.batch_no,
263 "warehouse": item.warehouse,
264 "item_code": item.item_code
265 },
266 "fieldname": "actual_batch_qty"
267 });
268 }
Sambhaji Kolate98dbccd2015-03-10 15:04:28 +0530269 },
270
Anand Doshi2168e392013-05-23 19:25:08 +0530271 set_dynamic_labels: function() {
Anand Doshi61a2f682013-06-21 17:55:31 +0530272 this._super();
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530273 this.set_product_bundle_help(this.frm.doc);
Nabin Hait0b157552014-06-24 17:02:45 +0530274 },
275
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530276 set_product_bundle_help: function(doc) {
Nabin Hait0b157552014-06-24 17:02:45 +0530277 if(!cur_frm.fields_dict.packing_list) return;
Nabin Haite7d15362014-12-25 16:01:55 +0530278 if ((doc.packed_items || []).length) {
Nabin Hait0b157552014-06-24 17:02:45 +0530279 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(true);
280
281 if (inList(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
282 help_msg = "<div class='alert alert-warning'>" +
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530283 __("For 'Product Bundle' 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 'Product Bundle' 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 +0530284 "</div>";
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530285 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = help_msg;
Nabin Hait0b157552014-06-24 17:02:45 +0530286 }
287 } else {
288 $(cur_frm.fields_dict.packing_list.row.wrapper).toggle(false);
289 if (inList(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530290 frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = '';
Nabin Hait0b157552014-06-24 17:02:45 +0530291 }
292 }
Neil Trini Lasradoed8cecb2015-07-07 13:59:23 +0530293 refresh_field('product_bundle_help');
Saurabheba7aa42015-12-16 09:57:59 +0530294 },
Anand Doshi01de9452016-01-26 16:22:50 +0530295
Saurabheba7aa42015-12-16 09:57:59 +0530296 make_payment_request: function() {
Saurabheba7aa42015-12-16 09:57:59 +0530297 frappe.call({
298 method:"erpnext.accounts.doctype.payment_request.payment_request.make_payment_request",
299 args: {
300 "dt": cur_frm.doc.doctype,
301 "dn": cur_frm.doc.name,
Saurabhb109ee92015-12-16 20:48:40 +0530302 "recipient_id": cur_frm.doc.contact_email
Saurabheba7aa42015-12-16 09:57:59 +0530303 },
304 callback: function(r) {
Saurabhcb98d9e2015-12-17 09:48:44 +0530305 if(!r.exc){
Saurabh3ba22672015-12-21 18:24:49 +0530306 var doc = frappe.model.sync(r.message);
Saurabh3ba22672015-12-21 18:24:49 +0530307 frappe.set_route("Form", r.message.doctype, r.message.name);
Saurabhcb98d9e2015-12-17 09:48:44 +0530308 }
Saurabheba7aa42015-12-16 09:57:59 +0530309 }
310 })
mbauskar1e9c1642016-01-18 16:21:25 +0530311 },
mbauskar1e428ae2016-01-19 19:52:22 +0530312
313 rate: function(doc, cdt, cdn){
314 // if user changes the rate then set margin Rate or amount to 0
315 item = locals[cdt][cdn];
mbauskara52472c2016-03-05 15:10:25 +0530316 item.margin_type = "";
317 item.margin_rate_or_amount = 0.0;
mbauskar1e428ae2016-01-19 19:52:22 +0530318 cur_frm.refresh_fields();
319 },
320
mbauskara52472c2016-03-05 15:10:25 +0530321 margin_rate_or_amount: function(doc, cdt, cdn) {
mbauskar1e9c1642016-01-18 16:21:25 +0530322 // calculated the revised total margin and rate on margin rate changes
323 item = locals[cdt][cdn];
mbauskar1e428ae2016-01-19 19:52:22 +0530324 this.calculate_revised_margin_and_rate(item)
mbauskara52472c2016-03-05 15:10:25 +0530325 this.calculate_taxes_and_totals();
mbauskar1e9c1642016-01-18 16:21:25 +0530326 cur_frm.refresh_fields();
327 },
mbauskar1e428ae2016-01-19 19:52:22 +0530328
mbauskara52472c2016-03-05 15:10:25 +0530329 margin_type: function(doc, cdt, cdn){
mbauskar1e9c1642016-01-18 16:21:25 +0530330 // calculate the revised total margin and rate on margin type changes
331 item = locals[cdt][cdn];
mbauskar1e428ae2016-01-19 19:52:22 +0530332 this.calculate_revised_margin_and_rate(item, doc,cdt, cdn)
mbauskara52472c2016-03-05 15:10:25 +0530333 this.calculate_taxes_and_totals();
mbauskar1e428ae2016-01-19 19:52:22 +0530334 cur_frm.refresh_fields();
335 },
336
337 calculate_revised_margin_and_rate: function(item){
mbauskara52472c2016-03-05 15:10:25 +0530338 if(in_list(["Percentage", "Amount"], item.margin_type)){
339 if(item.margin_type == "Percentage")
340 item.total_margin = item.price_list_rate + item.price_list_rate * ( item.margin_rate_or_amount / 100);
mbauskar1e428ae2016-01-19 19:52:22 +0530341 else
mbauskara52472c2016-03-05 15:10:25 +0530342 item.total_margin = item.price_list_rate + item.margin_rate_or_amount;
mbauskar1e428ae2016-01-19 19:52:22 +0530343 item.rate = flt(item.total_margin * (1 - item.discount_percentage / 100.0),
344 precision("rate", item));
mbauskar1e428ae2016-01-19 19:52:22 +0530345 }
346 else{
347 item.rate_or_amount = 0.0;
348 item.total_margin = 0.0;
349 item.rate = flt(item.price_list_rate * (1 - item.discount_percentage / 100.0),
350 precision("rate", item));
351 }
Nabin Haitcfc6bb12012-07-11 13:14:52 +0530352 }
Nabin Hait0b157552014-06-24 17:02:45 +0530353});
Anand Doshi43f087c2014-08-26 14:25:53 +0530354
Neil Trini Lasrado6e343e22016-03-09 17:02:59 +0530355frappe.ui.form.on(cur_frm.doctype,"project", function(frm) {
Nabin Hait10b155a2014-10-23 13:18:59 +0530356 if(in_list(["Delivery Note", "Sales Invoice"], frm.doc.doctype)) {
357 frappe.call({
358 method:'erpnext.projects.doctype.project.project.get_cost_center_name' ,
Neil Trini Lasrado6e343e22016-03-09 17:02:59 +0530359 args: { project: frm.doc.project },
Nabin Hait10b155a2014-10-23 13:18:59 +0530360 callback: function(r, rt) {
361 if(!r.exc) {
Nabin Haitdd38a262014-12-26 13:15:21 +0530362 $.each(frm.doc["items"] || [], function(i, row) {
Neil Trini Lasrado6fc28212014-10-28 14:36:26 +0530363 frappe.model.set_value(row.doctype, row.name, "cost_center", r.message);
364 msgprint(__("Cost Center For Item with Item Code '"+row.item_name+"' has been Changed to "+ r.message));
Nabin Hait10b155a2014-10-23 13:18:59 +0530365 })
366 }
Anand Doshi43f087c2014-08-26 14:25:53 +0530367 }
Nabin Hait10b155a2014-10-23 13:18:59 +0530368 })
369 }
Anand Doshi43f087c2014-08-26 14:25:53 +0530370})