feat: Accrural Entry for Gratuity beafore Payment
This commit is contained in:
parent
78fdd5d9b4
commit
b88af3a3f7
@ -1182,7 +1182,7 @@ def set_party_account(dt, dn, doc, party_type):
|
|||||||
elif dt == "Expense Claim":
|
elif dt == "Expense Claim":
|
||||||
party_account = doc.payable_account
|
party_account = doc.payable_account
|
||||||
elif dt == "Gratuity":
|
elif dt == "Gratuity":
|
||||||
party_account = doc.expense_account
|
party_account = doc.payable_account
|
||||||
else:
|
else:
|
||||||
party_account = get_party_account(party_type, doc.get(party_type.lower()), doc.company)
|
party_account = get_party_account(party_type, doc.get(party_type.lower()), doc.company)
|
||||||
return party_account
|
return party_account
|
||||||
|
@ -19,6 +19,16 @@ frappe.ui.form.on('Gratuity', {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
frm.set_query("payable_account", function() {
|
||||||
|
return {
|
||||||
|
filters: {
|
||||||
|
"root_type": "Liability",
|
||||||
|
"is_group": 0,
|
||||||
|
"company": frm.doc.company
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
},
|
},
|
||||||
refresh: function(frm){
|
refresh: function(frm){
|
||||||
if(frm.doc.docstatus === 1 && frm.doc.pay_via_salary_slip === 0 && frm.doc.status === "Unpaid") {
|
if(frm.doc.docstatus === 1 && frm.doc.pay_via_salary_slip === 0 && frm.doc.status === "Unpaid") {
|
||||||
|
@ -19,8 +19,10 @@
|
|||||||
"pay_via_salary_slip",
|
"pay_via_salary_slip",
|
||||||
"payroll_date",
|
"payroll_date",
|
||||||
"salary_component",
|
"salary_component",
|
||||||
|
"payable_account",
|
||||||
"expense_account",
|
"expense_account",
|
||||||
"mode_of_payment",
|
"mode_of_payment",
|
||||||
|
"cost_center",
|
||||||
"column_break_15",
|
"column_break_15",
|
||||||
"current_work_experience",
|
"current_work_experience",
|
||||||
"amount",
|
"amount",
|
||||||
@ -173,12 +175,28 @@
|
|||||||
"fieldtype": "Currency",
|
"fieldtype": "Currency",
|
||||||
"label": "Paid Amount",
|
"label": "Paid Amount",
|
||||||
"read_only": 1
|
"read_only": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"depends_on": "eval: doc.pay_via_salary_slip == 0",
|
||||||
|
"fieldname": "payable_account",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"label": "Payable Account",
|
||||||
|
"mandatory_depends_on": "eval: doc.pay_via_salary_slip == 0",
|
||||||
|
"options": "Account"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"depends_on": "eval: doc.pay_via_salary_slip == 0",
|
||||||
|
"fieldname": "cost_center",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"label": "Cost Center",
|
||||||
|
"mandatory_depends_on": "eval: doc.pay_via_salary_slip == 0",
|
||||||
|
"options": "Cost Center"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"index_web_pages_for_search": 1,
|
"index_web_pages_for_search": 1,
|
||||||
"is_submittable": 1,
|
"is_submittable": 1,
|
||||||
"links": [],
|
"links": [],
|
||||||
"modified": "2020-10-27 14:04:41.886934",
|
"modified": "2020-11-02 18:21:11.971488",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Payroll",
|
"module": "Payroll",
|
||||||
"name": "Gratuity",
|
"name": "Gratuity",
|
||||||
|
@ -7,9 +7,11 @@ import frappe
|
|||||||
from frappe import _, bold
|
from frappe import _, bold
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from frappe.utils import flt, get_datetime, get_link_to_form
|
from frappe.utils import flt, get_datetime, get_link_to_form
|
||||||
|
from erpnext.accounts.general_ledger import make_gl_entries
|
||||||
|
from erpnext.controllers.accounts_controller import AccountsController
|
||||||
from math import floor
|
from math import floor
|
||||||
|
|
||||||
class Gratuity(Document):
|
class Gratuity(AccountsController):
|
||||||
def validate(self):
|
def validate(self):
|
||||||
data = calculate_work_experience_and_amount(self.employee, self.gratuity_rule)
|
data = calculate_work_experience_and_amount(self.employee, self.gratuity_rule)
|
||||||
self.current_work_experience = data["current_work_experience"]
|
self.current_work_experience = data["current_work_experience"]
|
||||||
@ -18,7 +20,51 @@ class Gratuity(Document):
|
|||||||
self.status = "Unpaid"
|
self.status = "Unpaid"
|
||||||
|
|
||||||
def on_submit(self):
|
def on_submit(self):
|
||||||
|
if self.pay_via_salary_slip:
|
||||||
self.create_additional_salary()
|
self.create_additional_salary()
|
||||||
|
else:
|
||||||
|
self.create_gl_entries()
|
||||||
|
|
||||||
|
def on_cancel(self):
|
||||||
|
self.ignore_linked_doctypes = ['GL Entry']
|
||||||
|
self.create_gl_entries(cancel=True)
|
||||||
|
|
||||||
|
def create_gl_entries(self, cancel=False):
|
||||||
|
gl_entries = self.get_gl_entries()
|
||||||
|
make_gl_entries(gl_entries, cancel)
|
||||||
|
|
||||||
|
def get_gl_entries(self):
|
||||||
|
gl_entry = []
|
||||||
|
# payable entry
|
||||||
|
if self.amount:
|
||||||
|
gl_entry.append(
|
||||||
|
self.get_gl_dict({
|
||||||
|
"account": self.payable_account,
|
||||||
|
"credit": self.amount,
|
||||||
|
"credit_in_account_currency": self.amount,
|
||||||
|
"against": self.expense_account,
|
||||||
|
"party_type": "Employee",
|
||||||
|
"party": self.employee,
|
||||||
|
"against_voucher_type": self.doctype,
|
||||||
|
"against_voucher": self.name,
|
||||||
|
"cost_center": self.cost_center
|
||||||
|
}, item=self)
|
||||||
|
)
|
||||||
|
|
||||||
|
# expense entries
|
||||||
|
gl_entry.append(
|
||||||
|
self.get_gl_dict({
|
||||||
|
"account": self.expense_account,
|
||||||
|
"debit": self.amount,
|
||||||
|
"debit_in_account_currency": self.amount,
|
||||||
|
"against": self.employee,
|
||||||
|
"cost_center": self.cost_center
|
||||||
|
}, item=self)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
frappe.throw(_("Total Amount can not be zero"))
|
||||||
|
|
||||||
|
return gl_entry
|
||||||
|
|
||||||
def create_additional_salary(self):
|
def create_additional_salary(self):
|
||||||
if self.pay_via_salary_slip:
|
if self.pay_via_salary_slip:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user