Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: process leave encashment via payment entry #2775

Merged
Show file tree
Hide file tree
Changes from 15 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion hrms/hooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@
"monthly": ["hrms.controllers.employee_reminders.send_reminders_in_advance_monthly"],
}

advance_payment_payable_doctypes = ["Gratuity", "Employee Advance"]
advance_payment_payable_doctypes = ["Leave Encashment", "Gratuity", "Employee Advance"]

invoice_doctypes = ["Expense Claim"]

Expand All @@ -253,6 +253,7 @@
"Expense Claim Detail",
"Expense Taxes and Charges",
"Payroll Entry",
"Leave Encashment",
]

bank_reconciliation_doctypes = ["Expense Claim"]
Expand Down
51 changes: 51 additions & 0 deletions hrms/hr/doctype/leave_encashment/leave_encashment.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
// Copyright (c) 2018, Frappe Technologies Pvt. Ltd. and contributors
// For license information, please see license.txt

frappe.provide("erpnext.accounts.dimensions");

frappe.ui.form.on("Leave Encashment", {
onload: function (frm) {
// Ignore cancellation of doctype on cancel all.
frm.ignore_doctypes_on_cancel_all = ["Leave Ledger Entry"];
erpnext.accounts.dimensions.setup_dimension_filters(frm, frm.doctype);
},
setup: function (frm) {
frm.set_query("leave_type", function () {
Expand All @@ -21,13 +24,45 @@ frappe.ui.form.on("Leave Encashment", {
},
};
});

frm.set_query("payable_account", function () {
if (!frm.doc.employee) {
frappe.msgprint(__("Please select employee first"));
}
let company_currency = erpnext.get_currency(frm.doc.company);
let currencies = [company_currency];
if (frm.doc.currency && frm.doc.currency != company_currency) {
currencies.push(frm.doc.currency);
}

return {
filters: {
company: frm.doc.company,
account_currency: ["in", currencies],
},
};
});
},
refresh: function (frm) {
cur_frm.set_intro("");
if (frm.doc.__islocal && !frappe.user_roles.includes("Employee")) {
frm.set_intro(__("Fill the form and save it"));
}

if (
frm.doc.docstatus === 1 &&
frm.doc.pay_via_payment_entry == 1 &&
frm.doc.status !== "Paid"
) {
frm.add_custom_button(
__("Payment"),
function () {
frm.events.make_payment_entry(frm);
},
__("Create"),
);
}

hrms.leave_utils.add_view_ledger_button(frm);
},
employee: function (frm) {
Expand All @@ -38,6 +73,9 @@ frappe.ui.form.on("Leave Encashment", {
]);
}
},
company: function (frm) {
erpnext.accounts.dimensions.update_dimension(frm, frm.doctype);
},
leave_type: function (frm) {
frm.trigger("get_leave_details_for_encashment");
},
Expand Down Expand Up @@ -73,4 +111,17 @@ frappe.ui.form.on("Leave Encashment", {
},
});
},
make_payment_entry: function (frm) {
return frappe.call({
method: "hrms.overrides.employee_payment_entry.get_payment_entry_for_employee",
args: {
dt: frm.doc.doctype,
dn: frm.doc.name,
},
callback: function (r) {
var doclist = frappe.model.sync(r.message);
frappe.set_route("Form", doclist[0].doctype, doclist[0].name);
},
});
},
});
119 changes: 114 additions & 5 deletions hrms/hr/doctype/leave_encashment/leave_encashment.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,25 @@
"column_break_cevy",
"actual_encashable_days",
"encashment_days",
"encashment_amount",
"accounting_section",
"pay_via_payment_entry",
"expense_account",
"payable_account",
"column_break_vdnb",
"posting_date",
"currency",
"paid_amount",
"accounting_dimensions_section",
"cost_center",
"dimension_col_break",
"payroll",
"encashment_date",
"column_break_14",
"additional_salary",
"section_break_svbb",
"amended_from",
"column_break_14",
"currency",
"encashment_amount"
"status"
],
"fields": [
{
Expand Down Expand Up @@ -97,6 +109,8 @@
"read_only": 1
},
{
"default": "1",
"depends_on": "eval:doc.pay_via_payment_entry==0;",
"fieldname": "payroll",
"fieldtype": "Section Break",
"label": "Payroll"
Expand Down Expand Up @@ -163,11 +177,89 @@
{
"fieldname": "column_break_cevy",
"fieldtype": "Column Break"
},
{
"depends_on": "pay_via_payment_entry",
"fieldname": "payable_account",
"fieldtype": "Link",
"label": "Payable Account",
"mandatory_depends_on": "pay_via_payment_entry",
"options": "Account"
},
{
"fieldname": "section_break_svbb",
"fieldtype": "Section Break",
"label": "More Info"
},
{
"default": "0",
"description": "Process leave encashment via a separate Payment Entry instead of Salary Slip",
"fieldname": "pay_via_payment_entry",
"fieldtype": "Check",
"label": "Pay Via Payment Entry"
},
{
"fieldname": "accounting_section",
"fieldtype": "Section Break",
"label": "Accounting"
},
{
"fieldname": "column_break_vdnb",
"fieldtype": "Column Break"
},
{
"default": "0.0",
"depends_on": "pay_via_payment_entry",
"description": "Amount paid against this encashment",
"fieldname": "paid_amount",
"fieldtype": "Currency",
"label": "Paid Amount",
"no_copy": 1,
"read_only": 1
},
{
"fieldname": "status",
"fieldtype": "Select",
"label": "Status",
"options": "Draft\nUnpaid\nPaid\nSubmitted\nCancelled",
"read_only": 1
},
{
"default": "Today",
"depends_on": "pay_via_payment_entry",
"fieldname": "posting_date",
"fieldtype": "Date",
"label": "Posting Date"
},
{
"depends_on": "pay_via_payment_entry",
"fieldname": "expense_account",
"fieldtype": "Link",
"label": "Expense Account",
"mandatory_depends_on": "pay_via_payment_entry",
"options": "Account"
},
{
"depends_on": "pay_via_payment_entry",
"fieldname": "accounting_dimensions_section",
"fieldtype": "Section Break",
"label": "Accounting Dimensions"
},
{
"fieldname": "cost_center",
"fieldtype": "Link",
"label": "Cost Center",
"mandatory_depends_on": "pay_via_payment_entry",
"options": "Cost Center"
},
{
"fieldname": "dimension_col_break",
"fieldtype": "Column Break"
}
],
"is_submittable": 1,
"links": [],
"modified": "2024-03-27 13:10:01.094420",
"modified": "2025-02-18 12:04:03.460640",
"modified_by": "Administrator",
"module": "HR",
"name": "Leave Encashment",
Expand Down Expand Up @@ -235,7 +327,24 @@
"search_fields": "employee,employee_name",
"sort_field": "creation",
"sort_order": "DESC",
"states": [],
"states": [
{
"color": "Red",
"title": "Draft"
},
{
"color": "Green",
"title": "Paid"
},
{
"color": "Orange",
"title": "Unpaid"
},
{
"color": "Red",
"title": "Cancelled"
}
],
"title_field": "employee_name",
"track_changes": 1
}
Loading
Loading