From 3fecbb98c513a5b77e09b310fc158d77830b14c4 Mon Sep 17 00:00:00 2001 From: tundebabzy Date: Thu, 1 Mar 2018 06:20:45 +0100 Subject: [PATCH] Make Expense Claim from Employee Advance #13053 (#13074) * allow to make expense claim from employee advance * make expense claim only if claimed amount < paid_amount * expense claim made from employee advance is paid --- .../employee_advance/employee_advance.js | 31 +++++++++++++++++++ .../hr/doctype/expense_claim/expense_claim.py | 28 ++++++++++++++++- 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/erpnext/hr/doctype/employee_advance/employee_advance.js b/erpnext/hr/doctype/employee_advance/employee_advance.js index 3f57939c24e..b6dd7eeb3f7 100644 --- a/erpnext/hr/doctype/employee_advance/employee_advance.js +++ b/erpnext/hr/doctype/employee_advance/employee_advance.js @@ -32,6 +32,19 @@ frappe.ui.form.on('Employee Advance', { frm.add_custom_button(__('Payment'), function() { frm.events.make_payment_entry(frm); }, __("Make")); } + else if ( + frm.doc.docstatus === 1 + && flt(frm.doc.claimed_amount) < flt(frm.doc.paid_amount) + && frappe.model.can_create("Expense Claim") + ) { + frm.add_custom_button( + __("Expense Claim"), + function() { + frm.events.make_expense_claim(frm); + }, + __("Make") + ); + } }, make_payment_entry: function(frm) { @@ -51,4 +64,22 @@ frappe.ui.form.on('Employee Advance', { } }); }, + + make_expense_claim: function(frm) { + return frappe.call({ + method: "erpnext.hr.doctype.expense_claim.expense_claim.get_expense_claim", + args: { + "employee_name": frm.doc.employee, + "company": frm.doc.company, + "employee_advance_name": frm.doc.name, + "posting_date": frm.doc.posting_date, + "paid_amount": frm.doc.paid_amount, + "claimed_amount": frm.doc.claimed_amount + }, + callback: function(r) { + const doclist = frappe.model.sync(r.message); + frappe.set_route("Form", doclist[0].doctype, doclist[0].name); + } + }); + } }); diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.py b/erpnext/hr/doctype/expense_claim/expense_claim.py index 1c87475a105..f6b5cc3fb22 100644 --- a/erpnext/hr/doctype/expense_claim/expense_claim.py +++ b/erpnext/hr/doctype/expense_claim/expense_claim.py @@ -297,4 +297,30 @@ def get_advances(employee, advance_id=None): from `tabEmployee Advance` where {0} - """.format(condition), as_dict=1) \ No newline at end of file + """.format(condition), as_dict=1) + + +@frappe.whitelist() +def get_expense_claim( + employee_name, company, employee_advance_name, posting_date, paid_amount, claimed_amount): + default_payable_account = frappe.db.get_value("Company", company, "default_payable_account") + default_cost_center = frappe.db.get_value('Company', company, 'cost_center') + + expense_claim = frappe.new_doc('Expense Claim') + expense_claim.company = company + expense_claim.employee = employee_name + expense_claim.payable_account = default_payable_account + expense_claim.cost_center = default_cost_center + expense_claim.is_paid = 1 if flt(paid_amount) else 0 + expense_claim.append( + 'advances', + { + 'employee_advance': employee_advance_name, + 'posting_date': posting_date, + 'advance_paid': flt(paid_amount), + 'unclaimed_amount': flt(paid_amount) - flt(claimed_amount), + 'allocated_amount': flt(paid_amount) - flt(claimed_amount) + } + ) + + return expense_claim