parent
e7e29b7f10
commit
d7ff9dca1d
@ -4,7 +4,7 @@
|
||||
from __future__ import unicode_literals
|
||||
import frappe
|
||||
from dateutil.relativedelta import relativedelta
|
||||
from frappe.utils import cint, nowdate, add_days, getdate, fmt_money, add_to_date, DATE_FORMAT
|
||||
from frappe.utils import cint, flt, nowdate, add_days, getdate, fmt_money, add_to_date, DATE_FORMAT
|
||||
from frappe import _
|
||||
from erpnext.accounts.utils import get_fiscal_year
|
||||
|
||||
@ -260,85 +260,97 @@ class ProcessPayroll(Document):
|
||||
loan_amounts = self.get_total_salary_and_loan_amounts()
|
||||
loan_accounts = self.get_loan_accounts()
|
||||
jv_name = ""
|
||||
precision = frappe.get_precision("Journal Entry Account", "debit_in_account_currency")
|
||||
|
||||
if earnings or deductions:
|
||||
journal_entry = frappe.new_doc('Journal Entry')
|
||||
journal_entry.voucher_type = 'Journal Entry'
|
||||
journal_entry.user_remark = _('Accural Journal Entry for salaries from {0} to {1}').format(self.start_date,
|
||||
self.end_date)
|
||||
journal_entry.user_remark = _('Accural Journal Entry for salaries from {0} to {1}')\
|
||||
.format(self.start_date, self.end_date)
|
||||
journal_entry.company = self.company
|
||||
journal_entry.posting_date = nowdate()
|
||||
|
||||
account_amt_list = []
|
||||
adjustment_amt = 0
|
||||
for acc, amt in earnings.items():
|
||||
adjustment_amt = adjustment_amt+amt
|
||||
account_amt_list.append({
|
||||
accounts = []
|
||||
payable_amount = 0
|
||||
|
||||
# Earnings
|
||||
for acc, amount in earnings.items():
|
||||
payable_amount += flt(amount, precision)
|
||||
accounts.append({
|
||||
"account": acc,
|
||||
"debit_in_account_currency": amt,
|
||||
"debit_in_account_currency": flt(amount, precision),
|
||||
"cost_center": self.cost_center,
|
||||
"project": self.project
|
||||
})
|
||||
|
||||
# Deductions
|
||||
for acc, amt in deductions.items():
|
||||
adjustment_amt = adjustment_amt-amt
|
||||
account_amt_list.append({
|
||||
payable_amount -= flt(amount, precision)
|
||||
accounts.append({
|
||||
"account": acc,
|
||||
"credit_in_account_currency": amt,
|
||||
"credit_in_account_currency": flt(amount, precision),
|
||||
"cost_center": self.cost_center,
|
||||
"project": self.project
|
||||
})
|
||||
#employee loan
|
||||
|
||||
# Employee loan
|
||||
if loan_amounts.total_loan_repayment:
|
||||
account_amt_list.append({
|
||||
accounts.append({
|
||||
"account": loan_accounts.employee_loan_account,
|
||||
"credit_in_account_currency": loan_amounts.total_principal_amount
|
||||
})
|
||||
account_amt_list.append({
|
||||
accounts.append({
|
||||
"account": loan_accounts.interest_income_account,
|
||||
"credit_in_account_currency": loan_amounts.total_interest_amount,
|
||||
"cost_center": self.cost_center,
|
||||
"project": self.project
|
||||
})
|
||||
adjustment_amt = adjustment_amt-(loan_amounts.total_loan_repayment)
|
||||
payable_amount -= flt(loan_amounts.total_loan_repayment, precision)
|
||||
|
||||
account_amt_list.append({
|
||||
# Payable amount
|
||||
accounts.append({
|
||||
"account": default_payroll_payable_account,
|
||||
"credit_in_account_currency": adjustment_amt
|
||||
"credit_in_account_currency": flt(payable_amount, precision)
|
||||
})
|
||||
journal_entry.set("accounts", account_amt_list)
|
||||
|
||||
journal_entry.set("accounts", accounts)
|
||||
journal_entry.save()
|
||||
|
||||
try:
|
||||
journal_entry.submit()
|
||||
jv_name = journal_entry.name
|
||||
self.update_salary_slip_status(jv_name = jv_name)
|
||||
except Exception as e:
|
||||
frappe.msgprint(e)
|
||||
|
||||
return jv_name
|
||||
|
||||
def make_payment_entry(self):
|
||||
self.check_permission('write')
|
||||
total_salary_amount = self.get_total_salary_and_loan_amounts()
|
||||
default_payroll_payable_account = self.get_default_payroll_payable_account()
|
||||
precision = frappe.get_precision("Journal Entry Account", "debit_in_account_currency")
|
||||
|
||||
if total_salary_amount.rounded_total:
|
||||
journal_entry = frappe.new_doc('Journal Entry')
|
||||
journal_entry.voucher_type = 'Bank Entry'
|
||||
journal_entry.user_remark = _('Payment of salary from {0} to {1}').format(self.start_date,
|
||||
self.end_date)
|
||||
journal_entry.user_remark = _('Payment of salary from {0} to {1}')\
|
||||
.format(self.start_date, self.end_date)
|
||||
journal_entry.company = self.company
|
||||
journal_entry.posting_date = nowdate()
|
||||
|
||||
account_amt_list = []
|
||||
payment_amount = flt(total_salary_amount.rounded_total, precision)
|
||||
|
||||
account_amt_list.append({
|
||||
journal_entry.set("accounts", [
|
||||
{
|
||||
"account": self.payment_account,
|
||||
"credit_in_account_currency": total_salary_amount.rounded_total
|
||||
})
|
||||
account_amt_list.append({
|
||||
"credit_in_account_currency": payment_amount
|
||||
},
|
||||
{
|
||||
"account": default_payroll_payable_account,
|
||||
"debit_in_account_currency": total_salary_amount.rounded_total
|
||||
})
|
||||
journal_entry.set("accounts", account_amt_list)
|
||||
"debit_in_account_currency": payment_amount
|
||||
}
|
||||
])
|
||||
return journal_entry.as_dict()
|
||||
else:
|
||||
frappe.msgprint(
|
||||
|
@ -16,10 +16,13 @@ class TestProcessPayroll(unittest.TestCase):
|
||||
fiscal_year = "_Test Fiscal Year 2016"
|
||||
|
||||
for data in frappe.get_all('Salary Component', fields = ["name"]):
|
||||
if not frappe.db.get_value('Salary Component Account', {'parent': data.name, 'company': erpnext.get_default_company()}, 'name'):
|
||||
if not frappe.db.get_value('Salary Component Account',
|
||||
{'parent': data.name, 'company': erpnext.get_default_company()}, 'name'):
|
||||
get_salary_component_account(data.name)
|
||||
|
||||
payment_account = frappe.get_value('Account', {'account_type': 'Cash', 'company': erpnext.get_default_company(),'is_group':0}, "name")
|
||||
payment_account = frappe.get_value('Account',
|
||||
{'account_type': 'Cash', 'company': erpnext.get_default_company(),'is_group':0}, "name")
|
||||
|
||||
if not frappe.db.get_value("Salary Slip", {"start_date": "2016-11-01", "end_date": "2016-11-30"}):
|
||||
process_payroll = frappe.get_doc("Process Payroll", "Process Payroll")
|
||||
process_payroll.company = erpnext.get_default_company()
|
||||
|
Loading…
x
Reference in New Issue
Block a user