diff --git a/erpnext/hr/doctype/employee_advance/employee_advance.js b/erpnext/hr/doctype/employee_advance/employee_advance.js index 389660387b7..c5d044a187b 100644 --- a/erpnext/hr/doctype/employee_advance/employee_advance.js +++ b/erpnext/hr/doctype/employee_advance/employee_advance.js @@ -23,6 +23,14 @@ frappe.ui.form.on('Employee Advance', { } }; }); + + frm.set_query('salary_component', function(doc) { + return { + filters: { + "type": "Deduction" + } + }; + }); }, refresh: function(frm) { @@ -47,19 +55,33 @@ frappe.ui.form.on('Employee Advance', { } if (frm.doc.docstatus === 1 - && (flt(frm.doc.claimed_amount) + flt(frm.doc.return_amount) < flt(frm.doc.paid_amount)) - && frappe.model.can_create("Journal Entry")) { + && (flt(frm.doc.claimed_amount) < flt(frm.doc.paid_amount) && flt(frm.doc.paid_amount) != flt(frm.doc.return_amount))) { - frm.add_custom_button(__("Return"), function() { - frm.trigger('make_return_entry'); - }, __('Create')); + if (frm.doc.repay_unclaimed_amount_from_salary == 0 && frappe.model.can_create("Journal Entry")){ + frm.add_custom_button(__("Return"), function() { + frm.trigger('make_return_entry'); + }, __('Create')); + }else if (frm.doc.repay_unclaimed_amount_from_salary == 1 && frappe.model.can_create("Additional Salary")){ + frm.add_custom_button(__("Deduction from salary"), function() { + frm.events.make_deduction_via_additional_salary(frm) + }, __('Create')); + } } }, + make_deduction_via_additional_salary: function(frm){ + frappe.call({ + method: "erpnext.hr.doctype.employee_advance.employee_advance.create_return_through_additional_salary", + args: { + doc: frm.doc + } + }); + }, + 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) { - method = "erpnext.hr.doctype.employee_advance.employee_advance.make_bank_entry" + method = "erpnext.hr.doctype.employee_advance.employee_advance.make_bank_entry"; } return frappe.call({ method: method, diff --git a/erpnext/hr/doctype/employee_advance/employee_advance.json b/erpnext/hr/doctype/employee_advance/employee_advance.json index d233a2bb936..7f599a74c71 100644 --- a/erpnext/hr/doctype/employee_advance/employee_advance.json +++ b/erpnext/hr/doctype/employee_advance/employee_advance.json @@ -10,9 +10,12 @@ "naming_series", "employee", "employee_name", + "department", "column_break_4", "posting_date", - "department", + "repay_unclaimed_amount_from_salary", + "payroll_date", + "salary_component", "section_break_8", "purpose", "column_break_11", @@ -169,11 +172,30 @@ "label": "Returned Amount", "options": "Company:company:default_currency", "read_only": 1 + }, + { + "default": "0", + "fieldname": "repay_unclaimed_amount_from_salary", + "fieldtype": "Check", + "label": "Repay unclaimed amount from salary" + }, + { + "depends_on": "eval:doc.repay_unclaimed_amount_from_salary == 1", + "fieldname": "payroll_date", + "fieldtype": "Date", + "label": "Payroll date" + }, + { + "depends_on": "eval:doc.repay_unclaimed_amount_from_salary == 1", + "fieldname": "salary_component", + "fieldtype": "Link", + "label": "Salary Component", + "options": "Salary Component" } ], "is_submittable": 1, "links": [], - "modified": "2019-12-15 19:04:07.044505", + "modified": "2020-01-03 13:02:32.094099", "modified_by": "Administrator", "module": "HR", "name": "Employee Advance", @@ -210,4 +232,4 @@ "sort_field": "modified", "sort_order": "DESC", "track_changes": 1 -} +} \ No newline at end of file diff --git a/erpnext/hr/doctype/employee_advance/employee_advance.py b/erpnext/hr/doctype/employee_advance/employee_advance.py index f10e3b6ce26..feedccca12d 100644 --- a/erpnext/hr/doctype/employee_advance/employee_advance.py +++ b/erpnext/hr/doctype/employee_advance/employee_advance.py @@ -133,8 +133,24 @@ def make_bank_entry(dt, dn): return je.as_dict() @frappe.whitelist() -def make_return_entry(employee, company, employee_advance_name, - return_amount, advance_account, mode_of_payment=None): +def create_return_through_additional_salary(doc): + import json + doc = frappe._dict(json.loads(doc)) + additional_salary = frappe.new_doc('Additional Salary') + additional_salary.employee = doc.employee + additional_salary.salary_component = doc.salary_component + additional_salary.amount = doc.paid_amount - doc.claimed_amount + additional_salary.payroll_date = doc.payroll_date + additional_salary.company = doc.company + + additional_salary.submit() + + frappe.db.set_value("Employee Advance", doc.name, "return_amount", additional_salary.amount) + + return additional_salary.name + +@frappe.whitelist() +def make_return_entry(employee_name, company, employee_advance_name, return_amount, mode_of_payment, advance_account): return_account = get_default_bank_cash_account(company, account_type='Cash', mode_of_payment = mode_of_payment) je = frappe.new_doc('Journal Entry') je.posting_date = nowdate()