added changes from process payroll
This commit is contained in:
parent
d1defa5fc7
commit
b5dff03453
@ -474,6 +474,35 @@
|
|||||||
"set_only_once": 0,
|
"set_only_once": 0,
|
||||||
"unique": 0
|
"unique": 0
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"allow_bulk_edit": 0,
|
||||||
|
"allow_on_submit": 0,
|
||||||
|
"bold": 0,
|
||||||
|
"collapsible": 0,
|
||||||
|
"columns": 0,
|
||||||
|
"fieldname": "data_19",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"hidden": 0,
|
||||||
|
"ignore_user_permissions": 0,
|
||||||
|
"ignore_xss_filter": 0,
|
||||||
|
"in_filter": 0,
|
||||||
|
"in_global_search": 0,
|
||||||
|
"in_list_view": 0,
|
||||||
|
"in_standard_filter": 0,
|
||||||
|
"length": 0,
|
||||||
|
"no_copy": 0,
|
||||||
|
"permlevel": 0,
|
||||||
|
"precision": "",
|
||||||
|
"print_hide": 0,
|
||||||
|
"print_hide_if_no_value": 0,
|
||||||
|
"read_only": 0,
|
||||||
|
"remember_last_selected_value": 0,
|
||||||
|
"report_hide": 0,
|
||||||
|
"reqd": 0,
|
||||||
|
"search_index": 0,
|
||||||
|
"set_only_once": 0,
|
||||||
|
"unique": 0
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"allow_bulk_edit": 0,
|
"allow_bulk_edit": 0,
|
||||||
"allow_on_submit": 0,
|
"allow_on_submit": 0,
|
||||||
@ -788,7 +817,7 @@
|
|||||||
"issingle": 0,
|
"issingle": 0,
|
||||||
"istable": 0,
|
"istable": 0,
|
||||||
"max_attachments": 0,
|
"max_attachments": 0,
|
||||||
"modified": "2017-10-27 12:44:07.378315",
|
"modified": "2017-11-30 12:11:30.985647",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "HR",
|
"module": "HR",
|
||||||
"name": "Payroll Entry",
|
"name": "Payroll Entry",
|
||||||
|
@ -156,23 +156,28 @@ class PayrollEntry(Document):
|
|||||||
|
|
||||||
return create_submit_log(submitted_ss, not_submitted_ss, jv_name)
|
return create_submit_log(submitted_ss, not_submitted_ss, jv_name)
|
||||||
|
|
||||||
def get_total_salary_and_loan_amounts(self):
|
def get_loan_details(self):
|
||||||
"""
|
"""
|
||||||
Get total loan principal, loan interest and salary amount from submitted salary slip based on selected criteria
|
Get loan details from submitted salary slip based on selected criteria
|
||||||
"""
|
"""
|
||||||
cond = self.get_filter_condition()
|
cond = self.get_filter_condition()
|
||||||
totals = frappe.db.sql("""
|
return frappe.db.sql(""" select eld.employee_loan_account,
|
||||||
select sum(principal_amount) as total_principal_amount, sum(interest_amount) as total_interest_amount,
|
eld.interest_income_account, eld.principal_amount, eld.interest_amount, eld.total_payment
|
||||||
sum(total_loan_repayment) as total_loan_repayment, sum(rounded_total) as rounded_total from `tabSalary Slip` t1
|
from
|
||||||
|
`tabSalary Slip` t1, `tabSalary Slip Loan` eld
|
||||||
|
where
|
||||||
|
t1.docstatus = 1 and t1.name = eld.parent and start_date >= %s and end_date <= %s %s
|
||||||
|
""" % ('%s', '%s', cond), (self.start_date, self.end_date), as_dict=True) or []
|
||||||
|
|
||||||
|
def get_total_salary_amount(self):
|
||||||
|
"""
|
||||||
|
Get total salary amount from submitted salary slip based on selected criteria
|
||||||
|
"""
|
||||||
|
cond = self.get_filter_condition()
|
||||||
|
totals = frappe.db.sql(""" select sum(rounded_total) as rounded_total from `tabSalary Slip` t1
|
||||||
where t1.docstatus = 1 and start_date >= %s and end_date <= %s %s
|
where t1.docstatus = 1 and start_date >= %s and end_date <= %s %s
|
||||||
""" % ('%s', '%s', cond), (self.start_date, self.end_date), as_dict=True)
|
""" % ('%s', '%s', cond), (self.start_date, self.end_date), as_dict=True)
|
||||||
return totals[0]
|
return totals and totals[0] or None
|
||||||
|
|
||||||
def get_loan_accounts(self):
|
|
||||||
loan_accounts = frappe.get_all("Employee Loan", fields=["employee_loan_account", "interest_income_account"],
|
|
||||||
filters = {"company": self.company, "docstatus":1})
|
|
||||||
if loan_accounts:
|
|
||||||
return loan_accounts[0]
|
|
||||||
|
|
||||||
def get_salary_component_account(self, salary_component):
|
def get_salary_component_account(self, salary_component):
|
||||||
account = frappe.db.get_value("Salary Component Account",
|
account = frappe.db.get_value("Salary Component Account",
|
||||||
@ -223,8 +228,7 @@ class PayrollEntry(Document):
|
|||||||
earnings = self.get_salary_component_total(component_type = "earnings") or {}
|
earnings = self.get_salary_component_total(component_type = "earnings") or {}
|
||||||
deductions = self.get_salary_component_total(component_type = "deductions") or {}
|
deductions = self.get_salary_component_total(component_type = "deductions") or {}
|
||||||
default_payroll_payable_account = self.get_default_payroll_payable_account()
|
default_payroll_payable_account = self.get_default_payroll_payable_account()
|
||||||
loan_amounts = self.get_total_salary_and_loan_amounts()
|
loan_details = self.get_loan_details()
|
||||||
loan_accounts = self.get_loan_accounts()
|
|
||||||
jv_name = ""
|
jv_name = ""
|
||||||
precision = frappe.get_precision("Journal Entry Account", "debit_in_account_currency")
|
precision = frappe.get_precision("Journal Entry Account", "debit_in_account_currency")
|
||||||
|
|
||||||
@ -260,18 +264,18 @@ class PayrollEntry(Document):
|
|||||||
})
|
})
|
||||||
|
|
||||||
# Employee loan
|
# Employee loan
|
||||||
if loan_amounts.total_loan_repayment:
|
for data in loan_details:
|
||||||
accounts.append({
|
accounts.append({
|
||||||
"account": loan_accounts.employee_loan_account,
|
"account": data.employee_loan_account,
|
||||||
"credit_in_account_currency": loan_amounts.total_principal_amount
|
"credit_in_account_currency": data.principal_amount
|
||||||
})
|
})
|
||||||
accounts.append({
|
accounts.append({
|
||||||
"account": loan_accounts.interest_income_account,
|
"account": data.interest_income_account,
|
||||||
"credit_in_account_currency": loan_amounts.total_interest_amount,
|
"credit_in_account_currency": data.interest_amount,
|
||||||
"cost_center": self.cost_center,
|
"cost_center": self.cost_center,
|
||||||
"project": self.project
|
"project": self.project
|
||||||
})
|
})
|
||||||
payable_amount -= flt(loan_amounts.total_loan_repayment, precision)
|
payable_amount -= flt(data.total_payment, precision)
|
||||||
|
|
||||||
# Payable amount
|
# Payable amount
|
||||||
accounts.append({
|
accounts.append({
|
||||||
@ -293,11 +297,11 @@ class PayrollEntry(Document):
|
|||||||
|
|
||||||
def make_payment_entry(self):
|
def make_payment_entry(self):
|
||||||
self.check_permission('write')
|
self.check_permission('write')
|
||||||
total_salary_amount = self.get_total_salary_and_loan_amounts()
|
total_salary_amount = self.get_total_salary_amount()
|
||||||
default_payroll_payable_account = self.get_default_payroll_payable_account()
|
default_payroll_payable_account = self.get_default_payroll_payable_account()
|
||||||
precision = frappe.get_precision("Journal Entry Account", "debit_in_account_currency")
|
precision = frappe.get_precision("Journal Entry Account", "debit_in_account_currency")
|
||||||
|
|
||||||
if total_salary_amount.rounded_total:
|
if total_salary_amount and total_salary_amount.rounded_total:
|
||||||
journal_entry = frappe.new_doc('Journal Entry')
|
journal_entry = frappe.new_doc('Journal Entry')
|
||||||
journal_entry.voucher_type = 'Bank Entry'
|
journal_entry.voucher_type = 'Bank Entry'
|
||||||
journal_entry.user_remark = _('Payment of salary from {0} to {1}')\
|
journal_entry.user_remark = _('Payment of salary from {0} to {1}')\
|
||||||
@ -413,9 +417,11 @@ def get_month_details(year, month):
|
|||||||
else:
|
else:
|
||||||
frappe.throw(_("Fiscal Year {0} not found").format(year))
|
frappe.throw(_("Fiscal Year {0} not found").format(year))
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
def create_log(ss_list):
|
def create_log(ss_list):
|
||||||
if not ss_list or len(ss_list) < 1:
|
if not ss_list or len(ss_list) < 1:
|
||||||
frappe.throw(_("No employee for the above selected criteria OR salary slip already created"))
|
frappe.throw(_("No employee for the above selected criteria OR salary slip already created"))
|
||||||
|
return ss_list
|
||||||
|
|
||||||
def format_as_links(salary_slip):
|
def format_as_links(salary_slip):
|
||||||
return ['<a href="#Form/Salary Slip/{0}">{0}</a>'.format(salary_slip)]
|
return ['<a href="#Form/Salary Slip/{0}">{0}</a>'.format(salary_slip)]
|
||||||
|
@ -37,7 +37,7 @@ frappe.ui.form.on("Salary Slip", {
|
|||||||
|
|
||||||
set_end_date: function(frm){
|
set_end_date: function(frm){
|
||||||
frappe.call({
|
frappe.call({
|
||||||
method: 'erpnext.hr.doctype.process_payroll.process_payroll.get_end_date',
|
method: 'erpnext.hr.doctype.payroll_entry.payroll_entry.get_end_date',
|
||||||
args: {
|
args: {
|
||||||
frequency: frm.doc.payroll_frequency,
|
frequency: frm.doc.payroll_frequency,
|
||||||
start_date: frm.doc.start_date
|
start_date: frm.doc.start_date
|
||||||
|
@ -8,7 +8,7 @@ from frappe.utils import add_days, cint, cstr, flt, getdate, rounded, date_diff,
|
|||||||
from frappe.model.naming import make_autoname
|
from frappe.model.naming import make_autoname
|
||||||
|
|
||||||
from frappe import msgprint, _
|
from frappe import msgprint, _
|
||||||
from erpnext.hr.doctype.process_payroll.process_payroll import get_start_end_dates
|
from erpnext.hr.doctype.payroll_entry.payroll_entry import get_start_end_dates
|
||||||
from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee
|
from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee
|
||||||
from erpnext.utilities.transaction_base import TransactionBase
|
from erpnext.utilities.transaction_base import TransactionBase
|
||||||
from frappe.utils.background_jobs import enqueue
|
from frappe.utils.background_jobs import enqueue
|
||||||
|
@ -9,8 +9,8 @@ import calendar
|
|||||||
from erpnext.accounts.utils import get_fiscal_year
|
from erpnext.accounts.utils import get_fiscal_year
|
||||||
from frappe.utils import getdate, nowdate, add_days, add_months, flt
|
from frappe.utils import getdate, nowdate, add_days, add_months, flt
|
||||||
from erpnext.hr.doctype.salary_structure.salary_structure import make_salary_slip
|
from erpnext.hr.doctype.salary_structure.salary_structure import make_salary_slip
|
||||||
from erpnext.hr.doctype.process_payroll.test_process_payroll import get_salary_component_account
|
from erpnext.hr.doctype.payroll_entry.payroll_entry import get_salary_component_account
|
||||||
from erpnext.hr.doctype.process_payroll.process_payroll import get_month_details
|
from erpnext.hr.doctype.payroll_entry.payroll_entry import get_month_details
|
||||||
|
|
||||||
class TestSalarySlip(unittest.TestCase):
|
class TestSalarySlip(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user