diff --git a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py index c4fbea4a3f8..aba43a6049b 100644 --- a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py +++ b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.py @@ -50,6 +50,7 @@ class PeriodClosingVoucher(AccountsController): gl_entries = [] net_pl_balance = 0 pl_accounts = self.get_pl_balances() + for acc in pl_accounts: if flt(acc.balance_in_company_currency): gl_entries.append(self.get_gl_dict({ @@ -66,7 +67,7 @@ class PeriodClosingVoucher(AccountsController): })) net_pl_balance += flt(acc.balance_in_company_currency) - + if net_pl_balance: gl_entries.append(self.get_gl_dict({ "account": self.closing_account_head, diff --git a/erpnext/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py b/erpnext/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py index 0b597462a9a..db4dad4367f 100644 --- a/erpnext/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py +++ b/erpnext/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py @@ -5,42 +5,74 @@ from __future__ import unicode_literals import unittest import frappe -from frappe.utils import flt +from frappe.utils import flt, today +from erpnext.accounts.utils import get_fiscal_year from erpnext.accounts.doctype.journal_entry.test_journal_entry import make_journal_entry class TestPeriodClosingVoucher(unittest.TestCase): def test_closing_entry(self): + year_start_date = get_fiscal_year(today())[1] + make_journal_entry("_Test Bank - _TC", "Sales - _TC", 400, "_Test Cost Center - _TC", submit=True) make_journal_entry("_Test Account Cost for Goods Sold - _TC", "_Test Bank - _TC", 600, "_Test Cost Center - _TC", submit=True) + random_expense_account = frappe.db.sql(""" + select t1.account, + sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0)) as balance, + sum(ifnull(t1.debit_in_account_currency,0))-sum(ifnull(t1.credit_in_account_currency,0)) \ + as balance_in_account_currency + from `tabGL Entry` t1, `tabAccount` t2 + where t1.account = t2.name and ifnull(t2.root_type, '') = 'Expense' + and t2.docstatus < 2 and t2.company = '_Test Company' + and t1.posting_date between %s and %s + group by t1.account + having sum(ifnull(t1.debit,0)) > sum(ifnull(t1.credit,0)) + limit 1""", (year_start_date, today()), as_dict=True) + profit_or_loss = frappe.db.sql("""select sum(ifnull(t1.debit,0))-sum(ifnull(t1.credit,0)) as balance from `tabGL Entry` t1, `tabAccount` t2 where t1.account = t2.name and ifnull(t2.report_type, '') = 'Profit and Loss' and t2.docstatus < 2 and t2.company = '_Test Company' - and t1.posting_date between '2013-01-01' and '2013-12-31'""") + and t1.posting_date between %s and %s""", (year_start_date, today())) profit_or_loss = flt(profit_or_loss[0][0]) if profit_or_loss else 0 pcv = self.make_period_closing_voucher() - gle_value = frappe.db.sql("""select ifnull(debit, 0) - ifnull(credit, 0) + # Check value for closing account + gle_amount_for_closing_account = frappe.db.sql("""select ifnull(debit, 0) - ifnull(credit, 0) from `tabGL Entry` where voucher_type='Period Closing Voucher' and voucher_no=%s and account = '_Test Account Reserves and Surplus - _TC'""", pcv.name) - gle_value = flt(gle_value[0][0]) if gle_value else 0 + gle_amount_for_closing_account = flt(gle_amount_for_closing_account[0][0]) \ + if gle_amount_for_closing_account else 0 - self.assertEqual(gle_value, profit_or_loss) + self.assertEqual(gle_amount_for_closing_account, profit_or_loss) + + if random_expense_account: + # Check posted value for teh above random_expense_account + gle_for_random_expense_account = frappe.db.sql(""" + select ifnull(debit, 0) - ifnull(credit, 0) as amount, + ifnull(debit_in_account_currency, 0) - ifnull(credit_in_account_currency, 0) + as amount_in_account_currency + from `tabGL Entry` + where voucher_type='Period Closing Voucher' and voucher_no=%s and account =%s""", + (pcv.name, random_expense_account[0].account), as_dict=True) + + self.assertEqual(gle_for_random_expense_account[0].amount, -1*random_expense_account[0].balance) + self.assertEqual(gle_for_random_expense_account[0].amount_in_account_currency, + -1*random_expense_account[0].balance_in_account_currency) def make_period_closing_voucher(self): pcv = frappe.get_doc({ "doctype": "Period Closing Voucher", "closing_account_head": "_Test Account Reserves and Surplus - _TC", "company": "_Test Company", - "fiscal_year": "_Test Fiscal Year 2013", - "posting_date": "2013-12-31", + "fiscal_year": get_fiscal_year(today())[0], + "posting_date": today(), "remarks": "test" }) pcv.insert()