blob: d0f27bcedff388ddedb10893c3925f6b17280fbf [file] [log] [blame]
Nabin Haitce245122015-02-22 20:14:49 +05301// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
2// License: GNU General Public License v3. See license.txt
3
Rushabh Mehtaf56d73c2013-10-10 16:35:09 +05304// get tax rate
5cur_frm.cscript.account_head = function(doc, cdt, cdn) {
6 var d = locals[cdt][cdn];
7 if(!d.charge_type && d.account_head){
8 msgprint("Please select Charge Type first");
Rushabh Mehta793ba6b2014-02-14 15:47:51 +05309 frappe.model.set_value(cdt, cdn, "account_head", "");
Rushabh Mehtaf56d73c2013-10-10 16:35:09 +053010 } else if(d.account_head && d.charge_type!=="Actual") {
Rushabh Mehta793ba6b2014-02-14 15:47:51 +053011 frappe.call({
Rushabh Mehtaf56d73c2013-10-10 16:35:09 +053012 type:"GET",
Nabin Haitce245122015-02-22 20:14:49 +053013 method: "erpnext.controllers.accounts_controller.get_tax_rate",
Rushabh Mehtaf56d73c2013-10-10 16:35:09 +053014 args: {"account_head":d.account_head},
15 callback: function(r) {
Rushabh Mehta793ba6b2014-02-14 15:47:51 +053016 frappe.model.set_value(cdt, cdn, "rate", r.message || 0);
Rushabh Mehtaf56d73c2013-10-10 16:35:09 +053017 }
18 })
19 }
20}
Nabin Haitce245122015-02-22 20:14:49 +053021
Nabin Hait613d0812015-02-23 11:58:15 +053022cur_frm.cscript.validate_taxes_and_charges = function(cdt, cdn) {
Nabin Haitce245122015-02-22 20:14:49 +053023 var d = locals[cdt][cdn];
Nabin Hait613d0812015-02-23 11:58:15 +053024 var msg = "";
Nabin Haitce245122015-02-22 20:14:49 +053025 if(!d.charge_type && (d.row_id || d.rate || d.tax_amount)) {
Nabin Hait613d0812015-02-23 11:58:15 +053026 msg = __("Please select Charge Type first");
Nabin Hait2b019ed2015-02-22 23:03:07 +053027 d.row_id = "";
28 d.rate = d.tax_amount = 0.0;
Nabin Haitce245122015-02-22 20:14:49 +053029 } else if((d.charge_type == 'Actual' || d.charge_type == 'On Net Total') && d.row_id) {
Nabin Hait613d0812015-02-23 11:58:15 +053030 msg = __("Can refer row only if the charge type is 'On Previous Row Amount' or 'Previous Row Total'");
Nabin Haitce245122015-02-22 20:14:49 +053031 d.row_id = "";
32 } else if((d.charge_type == 'On Previous Row Amount' || d.charge_type == 'On Previous Row Total') && d.row_id) {
33 if (d.idx == 1) {
Nabin Hait613d0812015-02-23 11:58:15 +053034 msg = __("Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for first row");
Nabin Haitce245122015-02-22 20:14:49 +053035 d.charge_type = '';
Nabin Hait613d0812015-02-23 11:58:15 +053036 } else if (!d.row_id) {
37 msg = __("Please specify a valid Row ID for row {0} in table {1}", [d.idx, __(d.doctype)]);
38 d.row_id = "";
39 } else if(d.row_id && d.row_id >= d.idx) {
40 msg = __("Cannot refer row number greater than or equal to current row number for this Charge type");
Nabin Haitce245122015-02-22 20:14:49 +053041 d.row_id = "";
42 }
43 }
Nabin Hait613d0812015-02-23 11:58:15 +053044 if(msg) {
45 validated = false;
46 refresh_field("taxes");
47 frappe.throw(msg);
48 }
49
50}
51
52cur_frm.cscript.validate_inclusive_tax = function(tax) {
53 var actual_type_error = function() {
54 var msg = __("Actual type tax cannot be included in Item rate in row {0}", [tax.idx])
55 frappe.throw(msg);
56 };
57
58 var on_previous_row_error = function(row_range) {
59 var msg = __("For row {0} in {1}. To include {2} in Item rate, rows {3} must also be included",
60 [tax.idx, __(tax.doctype), tax.charge_type, row_range])
61 frappe.throw(msg);
62 };
63
64 if(cint(tax.included_in_print_rate)) {
65 if(tax.charge_type == "Actual") {
66 // inclusive tax cannot be of type Actual
67 actual_type_error();
68 } else if(tax.charge_type == "On Previous Row Amount" &&
69 !cint(this.frm.doc["taxes"][tax.row_id - 1].included_in_print_rate)) {
70 // referred row should also be an inclusive tax
71 on_previous_row_error(tax.row_id);
72 } else if(tax.charge_type == "On Previous Row Total") {
73 var taxes_not_included = $.map(this.frm.doc["taxes"].slice(0, tax.row_id),
74 function(t) { return cint(t.included_in_print_rate) ? null : t; });
75 if(taxes_not_included.length > 0) {
76 // all rows above this tax should be inclusive
77 on_previous_row_error(tax.row_id == 1 ? "1" : "1 - " + tax.row_id);
78 }
79 }
80 }
Nabin Haitce245122015-02-22 20:14:49 +053081}
82
83frappe.ui.form.on(cur_frm.cscript.tax_table, "row_id", function(frm, cdt, cdn) {
Nabin Hait613d0812015-02-23 11:58:15 +053084 cur_frm.cscript.validate_taxes_and_charges(cdt, cdn);
Nabin Hait2b019ed2015-02-22 23:03:07 +053085});
Nabin Haitce245122015-02-22 20:14:49 +053086
87frappe.ui.form.on(cur_frm.cscript.tax_table, "rate", function(frm, cdt, cdn) {
Nabin Hait613d0812015-02-23 11:58:15 +053088 cur_frm.cscript.validate_taxes_and_charges(cdt, cdn);
Nabin Hait2b019ed2015-02-22 23:03:07 +053089});
Nabin Haitce245122015-02-22 20:14:49 +053090
91frappe.ui.form.on(cur_frm.cscript.tax_table, "tax_amount", function(frm, cdt, cdn) {
Nabin Hait613d0812015-02-23 11:58:15 +053092 cur_frm.cscript.validate_taxes_and_charges(cdt, cdn);
Nabin Hait2b019ed2015-02-22 23:03:07 +053093});
Nabin Haitce245122015-02-22 20:14:49 +053094
95frappe.ui.form.on(cur_frm.cscript.tax_table, "charge_type", function(frm, cdt, cdn) {
Nabin Hait613d0812015-02-23 11:58:15 +053096 cur_frm.cscript.validate_taxes_and_charges(cdt, cdn);
Nabin Hait2b019ed2015-02-22 23:03:07 +053097});
Nabin Haitce245122015-02-22 20:14:49 +053098
Nabin Hait613d0812015-02-23 11:58:15 +053099frappe.ui.form.on(cur_frm.cscript.tax_table, "included_in_print_rate", function(frm, cdt, cdn) {
100 var tax = frappe.get_doc(cdt, cdn);
101 try {
102 cur_frm.cscript.validate_taxes_and_charges(cdt, cdn);
103 cur_frm.cscript.validate_inclusive_tax(tax);
104 } catch(e) {
105 tax.included_in_print_rate = 0;
106 refresh_field("included_in_print_rate", tax.name, tax.parentfield);
107 throw e;
108 }
109});
Nabin Haitce245122015-02-22 20:14:49 +0530110
111cur_frm.set_query("account_head", "taxes", function(doc) {
112 if(cur_frm.cscript.tax_table == "Sales Taxes and Charges") {
113 var account_type = ["Tax", "Chargeable", "Expense Account"];
114 } else {
115 var account_type = ["Tax", "Chargeable", "Income Account"];
116 }
117
118 return {
119 query: "erpnext.controllers.queries.tax_account_query",
120 filters: {
121 "account_type": account_type,
122 "company": doc.company
123 }
124 }
125});
126
127cur_frm.set_query("cost_center", "taxes", function(doc) {
128 return {
129 filters: {
130 'company': doc.company,
131 'group_or_ledger': "Ledger"
132 }
133 }
Nabin Hait2b019ed2015-02-22 23:03:07 +0530134});
Nabin Haitce245122015-02-22 20:14:49 +0530135
136// For customizing print
Nabin Haitf0bc9b62015-02-23 01:40:01 +0530137cur_frm.pformat.total = function(doc) { return ''; }
Nabin Haitce245122015-02-22 20:14:49 +0530138cur_frm.pformat.discount_amount = function(doc) { return ''; }
139cur_frm.pformat.grand_total = function(doc) { return ''; }
140cur_frm.pformat.rounded_total = function(doc) { return ''; }
141cur_frm.pformat.in_words = function(doc) { return ''; }
142
143cur_frm.pformat.taxes= function(doc){
144 //function to make row of table
Nabin Haitde9c8a92015-02-23 01:06:00 +0530145 var make_row = function(title, val, bold, is_negative) {
Nabin Haitce245122015-02-22 20:14:49 +0530146 var bstart = '<b>'; var bend = '</b>';
147 return '<tr><td style="width:50%;">' + (bold?bstart:'') + title + (bold?bend:'') + '</td>'
Nabin Haitde9c8a92015-02-23 01:06:00 +0530148 + '<td style="width:50%;text-align:right;">' + (is_negative ? '- ' : '')
149 + format_currency(val, doc.currency) + '</td></tr>';
Nabin Haitce245122015-02-22 20:14:49 +0530150 }
151
Nabin Haitce245122015-02-22 20:14:49 +0530152 function print_hide(fieldname) {
153 var doc_field = frappe.meta.get_docfield(doc.doctype, fieldname, doc.name);
154 return doc_field.print_hide;
155 }
156
157 out ='';
158 if (!doc.print_without_amount) {
159 var cl = doc.taxes || [];
160
161 // outer table
162 var out='<div><table class="noborder" style="width:100%"><tr><td style="width: 60%"></td><td>';
163
164 // main table
165
166 out +='<table class="noborder" style="width:100%">';
167
Nabin Haitf0bc9b62015-02-23 01:40:01 +0530168 if(!print_hide('total')) {
169 out += make_row('Total', doc.total, 1);
Nabin Haitce245122015-02-22 20:14:49 +0530170 }
171
Nabin Haitde9c8a92015-02-23 01:06:00 +0530172 // Discount Amount on net total
173 if(!print_hide('discount_amount') && doc.apply_discount_on == "Net Total" && doc.discount_amount)
174 out += make_row('Discount Amount', doc.discount_amount, 0, 1);
175
Nabin Haitce245122015-02-22 20:14:49 +0530176 // add rows
177 if(cl.length){
178 for(var i=0;i<cl.length;i++) {
Nabin Hait755ff602015-02-23 01:12:09 +0530179 if(cl[i].tax_amount!=0 && !cl[i].included_in_print_rate)
180 out += make_row(cl[i].description, cl[i].tax_amount, 0);
Nabin Haitce245122015-02-22 20:14:49 +0530181 }
182 }
183
Nabin Haitde9c8a92015-02-23 01:06:00 +0530184 // Discount Amount on grand total
185 if(!print_hide('discount_amount') && doc.apply_discount_on == "Grand Total" && doc.discount_amount)
186 out += make_row('Discount Amount', doc.discount_amount, 0, 1);
Nabin Haitce245122015-02-22 20:14:49 +0530187
188 // grand total
189 if(!print_hide('grand_total'))
190 out += make_row('Grand Total', doc.grand_total, 1);
191
192 if(!print_hide('rounded_total'))
193 out += make_row('Rounded Total', doc.rounded_total, 1);
194
195 if(doc.in_words && !print_hide('in_words')) {
196 out +='</table></td></tr>';
197 out += '<tr><td colspan = "2">';
198 out += '<table><tr><td style="width:25%;"><b>In Words</b></td>';
199 out += '<td style="width:50%;">' + doc.in_words + '</td></tr>';
200 }
201 out += '</table></td></tr></table></div>';
202 }
203 return out;
204}