feat: add grand total field
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.js b/erpnext/hr/doctype/expense_claim/expense_claim.js
index 6425b95..4a61963 100644
--- a/erpnext/hr/doctype/expense_claim/expense_claim.js
+++ b/erpnext/hr/doctype/expense_claim/expense_claim.js
@@ -112,9 +112,6 @@
doc.total_claimed_amount += d.amount;
doc.total_sanctioned_amount += d.sanctioned_amount;
});
-
- refresh_field("total_claimed_amount");
- refresh_field('total_sanctioned_amount');
};
cur_frm.cscript.calculate_total_amount = function(doc,cdt,cdn){
@@ -157,14 +154,14 @@
}
};
});
- // frm.set_query("taxes", "account_head", function(doc) {
- // return {
- // filters: [
- // ['docstatus', '=', 1],
- // ['company', '=', doc.company]
- // ]
- // };
- // });
+ frm.set_query("account_head", "taxes", function(doc) {
+ return {
+ filters: [
+ ['company', '=', doc.company],
+ ['account_type', 'in', ["Tax", "Chargeable", "Income Account", "Expenses Included In Valuation"]]
+ ]
+ };
+ });
},
onload: function(frm) {
@@ -205,6 +202,12 @@
}
},
+ calculate_grand_total: function(frm) {
+ var grand_total = flt(frm.doc.total_sanctioned_amount) + flt(frm.doc.total_taxes_and_charges) - flt(frm.doc.total_advance_amount);
+ frm.set_value("grand_total", grand_total);
+ frm.refresh_fields();
+ },
+
make_payment_entry: function(frm) {
var method = "erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry";
if(frm.doc.__onload && frm.doc.__onload.make_payment_via_journal_entry) {
@@ -319,6 +322,7 @@
var doc = frm.doc;
cur_frm.cscript.calculate_total(doc,cdt,cdn);
frm.trigger("get_taxes");
+ frm.trigger("calculate_grand_total");
}
});
@@ -345,6 +349,7 @@
child.advance_paid = r.message[0].paid_amount;
child.unclaimed_amount = flt(r.message[0].paid_amount) - flt(r.message[0].claimed_amount);
child.allocated_amount = flt(r.message[0].paid_amount) - flt(r.message[0].claimed_amount);
+ frm.trigger('calculate_grand_total');
refresh_field("advances");
}
}
@@ -370,27 +375,30 @@
}
},
- calculate_total: function(frm, cdt, cdn) {
+ calculate_total_tax: function(frm, cdt, cdn) {
var child = locals[cdt][cdn];
child.total = flt(frm.doc.total_sanctioned_amount) + flt(child.tax_amount);
+ frm.trigger("calculate_tax_amount", cdt, cdn);
+ },
- refresh_field("taxes");
+ calculate_tax_amount: function(frm) {
+ frm.doc.total_taxes_and_charges = 0;
+ (frm.doc.taxes || []).forEach(function(d) {
+ frm.doc.total_taxes_and_charges += d.tax_amount;
+ });
+ frm.trigger("calculate_grand_total")
},
rate: function(frm, cdt, cdn) {
var child = locals[cdt][cdn];
if(!child.amount) {
child.tax_amount = flt(frm.doc.total_sanctioned_amount) * (flt(child.rate)/100);
- refresh_field("taxes");
}
- frm.trigger("calculate_total", cdt, cdn)
+ frm.trigger("calculate_total_tax", cdt, cdn)
},
tax_amount: function(frm, cdt, cdn) {
- var child = locals[cdt][cdn];
- child.rate = flt(child.tax_amount/frm.doc.total_sanctioned_amount) * 100;
- frm.trigger("calculate_total", cdt, cdn)
- refresh_field("taxes");
+ frm.trigger("calculate_total_tax", cdt, cdn)
}
});
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.json b/erpnext/hr/doctype/expense_claim/expense_claim.json
index 409bdc8..7b0d494 100644
--- a/erpnext/hr/doctype/expense_claim/expense_claim.json
+++ b/erpnext/hr/doctype/expense_claim/expense_claim.json
@@ -19,10 +19,13 @@
"sb1",
"taxes",
"transactions_section",
- "total_tax_amount",
- "total_amount_reimbursed",
"total_sanctioned_amount",
"total_claimed_amount",
+ "total_advance_amount",
+ "column_break_17",
+ "total_amount_reimbursed",
+ "total_taxes_and_charges",
+ "grand_total",
"section_break_16",
"posting_date",
"vehicle_log",
@@ -44,8 +47,7 @@
"status",
"amended_from",
"advance_payments",
- "advances",
- "total_advance_amount"
+ "advances"
],
"fields": [
{
@@ -122,7 +124,6 @@
{
"fieldname": "total_sanctioned_amount",
"fieldtype": "Currency",
- "in_list_view": 1,
"label": "Total Sanctioned Amount",
"no_copy": 1,
"oldfieldname": "total_sanctioned_amount",
@@ -337,9 +338,21 @@
"label": "Transactions"
},
{
- "fieldname": "total_tax_amount",
+ "fieldname": "grand_total",
"fieldtype": "Currency",
- "label": "Total Tax Amount",
+ "in_list_view": 1,
+ "label": "Grand Total",
+ "options": "Company:company:default_currency",
+ "read_only": 1
+ },
+ {
+ "fieldname": "column_break_17",
+ "fieldtype": "Column Break"
+ },
+ {
+ "fieldname": "total_taxes_and_charges",
+ "fieldtype": "Currency",
+ "label": "Total Taxes and Charges",
"options": "Company:company:default_currency",
"read_only": 1
}
@@ -347,7 +360,7 @@
"icon": "fa fa-money",
"idx": 1,
"is_submittable": 1,
- "modified": "2019-06-12 12:32:13.775009",
+ "modified": "2019-06-12 15:35:09.092603",
"modified_by": "Administrator",
"module": "HR",
"name": "Expense Claim",
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.py b/erpnext/hr/doctype/expense_claim/expense_claim.py
index 07e7119..7f660a4 100644
--- a/erpnext/hr/doctype/expense_claim/expense_claim.py
+++ b/erpnext/hr/doctype/expense_claim/expense_claim.py
@@ -104,15 +104,13 @@
gl_entry = []
self.validate_account_details()
- payable_amount = flt(self.net_total) - flt(self.total_advance_amount)
-
# payable entry
- if payable_amount:
+ if self.grand_total:
gl_entry.append(
self.get_gl_dict({
"account": self.payable_account,
- "credit": payable_amount,
- "credit_in_account_currency": payable_amount,
+ "credit": self.grand_total,
+ "credit_in_account_currency": self.grand_total,
"against": ",".join([d.default_account for d in self.expenses]),
"party_type": "Employee",
"party": self.employee,
@@ -146,15 +144,16 @@
"against_voucher": self.name
})
)
+ self.add_tax_gl_entries(gl_entry)
- if self.is_paid and payable_amount:
+ if self.is_paid and self.grand_total:
# payment entry
payment_account = get_bank_cash_account(self.mode_of_payment, self.company).get("account")
gl_entry.append(
self.get_gl_dict({
"account": payment_account,
- "credit": payable_amount,
- "credit_in_account_currency": payable_amount,
+ "credit": self.grand_total,
+ "credit_in_account_currency": self.grand_total,
"against": self.employee
})
)
@@ -165,15 +164,13 @@
"party_type": "Employee",
"party": self.employee,
"against": payment_account,
- "debit": payable_amount,
- "debit_in_account_currency": payable_amount,
+ "debit": self.grand_total,
+ "debit_in_account_currency": self.grand_total,
"against_voucher": self.name,
"against_voucher_type": self.doctype,
})
)
- self.add_tax_gl_entries(gl_entry)
-
return gl_entry
def add_tax_gl_entries(self, gl_entries):
@@ -184,11 +181,12 @@
self.get_gl_dict({
"account": tax.account_head,
"debit": tax.tax_amount,
+ "debit_in_account_currency": tax.tax_amount,
"against": self.employee,
"cost_center": self.cost_center,
"against_voucher_type": self.doctype,
"against_voucher": self.name
- }, account_currency)
+ })
)
def validate_account_details(self):
@@ -213,13 +211,15 @@
self.total_sanctioned_amount += flt(d.sanctioned_amount)
def calculate_taxes(self):
+ self.total_taxes_and_charges = 0
for tax in self.taxes:
if tax.rate:
tax.tax_amount = flt(self.total_sanctioned_amount) * flt(tax.rate/100)
- if tax.tax_amount:
- tax.rate = flt(tax.tax_amount)/flt(self.total_sanctioned_amount) * 100
+
tax.total = flt(tax.tax_amount) + flt(self.total_sanctioned_amount)
- self.net_total += tax.total
+ self.total_taxes_and_charges += flt(tax.tax_amount)
+
+ self.grand_total = flt(self.total_sanctioned_amount) + flt(self.total_taxes_and_charges) - flt(self.total_advance_amount)
def update_task(self):
task = frappe.get_doc("Task", self.task)