From ec1cb79e5f36b5aebc5ebfd75bede2e440b9e390 Mon Sep 17 00:00:00 2001 From: Shreya Shah Date: Mon, 18 Dec 2017 18:06:01 +0530 Subject: [PATCH] Fetch employee advance in expense claim on adding it manually (#12069) * added trigger on manually adding an advance * improvised the query * codacy fix * updated --- .../hr/doctype/expense_claim/expense_claim.js | 43 ++++++++++++++++++- .../hr/doctype/expense_claim/expense_claim.py | 17 +++++--- 2 files changed, 54 insertions(+), 6 deletions(-) diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.js b/erpnext/hr/doctype/expense_claim/expense_claim.js index c6333db7cf..65d1065fc6 100644 --- a/erpnext/hr/doctype/expense_claim/expense_claim.js +++ b/erpnext/hr/doctype/expense_claim/expense_claim.js @@ -168,6 +168,16 @@ frappe.ui.form.on("Expense Claim", { frm.trigger("set_query_for_payable_account"); frm.add_fetch("company", "cost_center", "cost_center"); frm.add_fetch("company", "default_payable_account", "payable_account"); + frm.set_query("employee_advance", "advances", function(doc) { + return { + filters: [ + ['docstatus', '=', 1], + ['employee', '=', doc.employee], + ['paid_amount', '>', 0], + ['paid_amount', '>', 'claimed_amount'] + ] + }; + }); }, refresh: function(frm) { @@ -294,10 +304,41 @@ frappe.ui.form.on("Expense Claim Detail", { } }); +frappe.ui.form.on("Expense Claim Advance", { + employee_advance: function(frm, cdt, cdn) { + var child = locals[cdt][cdn]; + if(!frm.doc.employee){ + frappe.msgprint('Select an employee to get the employee advance.'); + frm.doc.advances = []; + refresh_field("advances"); + } + else { + return frappe.call({ + method: "erpnext.hr.doctype.expense_claim.expense_claim.get_advances", + args: { + employee: frm.doc.employee, + advance_id: child.employee_advance + }, + callback: function(r, rt) { + if(r.message) { + child.employee_advance = r.message[0].name; + child.posting_date = r.message[0].posting_date; + child.advance_account = r.message[0].advance_account; + 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); + refresh_field("advances"); + } + } + }); + } + } +}); + cur_frm.fields_dict['task'].get_query = function(doc) { return { filters:{ 'project': doc.project } }; -}; +}; \ No newline at end of file diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.py b/erpnext/hr/doctype/expense_claim/expense_claim.py index d27675ccd7..9462211c09 100644 --- a/erpnext/hr/doctype/expense_claim/expense_claim.py +++ b/erpnext/hr/doctype/expense_claim/expense_claim.py @@ -310,9 +310,16 @@ def get_expense_claim_account(expense_claim_type, company): } @frappe.whitelist() -def get_advances(employee): +def get_advances(employee, advance_id=None): + if not advance_id: + condition = 'docstatus=1 and employee="{0}" and paid_amount > 0 and paid_amount > claimed_amount'.format(frappe.db.escape(employee)) + else: + condition = 'name="{0}"'.format(frappe.db.escape(advance_id)) + return frappe.db.sql(""" - select name, posting_date, paid_amount, claimed_amount, advance_account - from `tabEmployee Advance` - where docstatus=1 and employee=%s and paid_amount > 0 and paid_amount > claimed_amount - """, employee, as_dict=1) \ No newline at end of file + select + name, posting_date, paid_amount, claimed_amount, advance_account + from + `tabEmployee Advance` + where {0} + """.format(condition), as_dict=1) \ No newline at end of file