accounts utils file instead of utils directory
diff --git a/accounts/utils.py b/accounts/utils.py
new file mode 100644
index 0000000..8ad1899
--- /dev/null
+++ b/accounts/utils.py
@@ -0,0 +1,99 @@
+# ERPNext - web based ERP (http://erpnext.com)
+# Copyright (C) 2012 Web Notes Technologies Pvt Ltd
+# 
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+from __future__ import unicode_literals
+
+import webnotes
+from webnotes.utils import nowdate
+
+class FiscalYearError(webnotes.ValidationError): pass
+
+def get_fiscal_year(date, verbose=1):
+	from webnotes.utils import formatdate
+	# if year start date is 2012-04-01, year end date should be 2013-03-31 (hence subdate)
+	fy = webnotes.conn.sql("""select name, year_start_date, 
+		subdate(adddate(year_start_date, interval 1 year), interval 1 day) 
+			as year_end_date
+		from `tabFiscal Year`
+		where %s >= year_start_date and %s < adddate(year_start_date, interval 1 year)
+		order by year_start_date desc""", (date, date))
+	
+	if not fy:
+		error_msg = """%s not in any Fiscal Year""" % formatdate(date)
+		if verbose: webnotes.msgprint(error_msg)
+		raise FiscalYearError, error_msg
+	
+	return fy[0]
+
+@webnotes.whitelist()
+def get_balance_on(account=None, date=None):
+	if not account and webnotes.form_dict.get("account"):
+		account = webnotes.form_dict.get("account")
+		date = webnotes.form_dict.get("date")
+	
+	cond = []
+	if date:
+		cond.append("posting_date <= '%s'" % date)
+	else:
+		# get balance of all entries that exist
+		date = nowdate()
+		
+	try:
+		year_start_date = get_fiscal_year(date, verbose=0)[1]
+	except FiscalYearError, e:
+		from webnotes.utils import getdate
+		if getdate(date) > getdate(nowdate()):
+			# if fiscal year not found and the date is greater than today
+			# get fiscal year for today's date and its corresponding year start date
+			year_start_date = get_fiscal_year(nowdate(), verbose=1)[1]
+		else:
+			# this indicates that it is a date older than any existing fiscal year.
+			# hence, assuming balance as 0.0
+			return 0.0
+		
+	acc = webnotes.conn.get_value('Account', account, \
+		['lft', 'rgt', 'debit_or_credit', 'is_pl_account', 'group_or_ledger'], as_dict=1)
+	
+	# for pl accounts, get balance within a fiscal year
+	if acc.is_pl_account == 'Yes':
+		cond.append("posting_date >= '%s' and voucher_type != 'Period Closing Voucher'" \
+			% year_start_date)
+	
+	# different filter for group and ledger - improved performance
+	if acc.group_or_ledger=="Group":
+		cond.append("""exists (
+			select * from `tabAccount` ac where ac.name = gle.account
+			and ac.lft >= %s and ac.rgt <= %s
+		)""" % (acc.lft, acc.rgt))
+	else:
+		cond.append("""gle.account = "%s" """ % (account, ))
+	
+	# join conditional conditions
+	cond = " and ".join(cond)
+	if cond:
+		cond += " and "
+	
+	bal = webnotes.conn.sql("""
+		SELECT sum(ifnull(debit, 0)) - sum(ifnull(credit, 0)) 
+		FROM `tabGL Entry` gle
+		WHERE %s ifnull(is_cancelled, 'No') = 'No' """ % (cond, ))[0][0]
+
+	# if credit account, it should calculate credit - debit
+	if bal and acc.debit_or_credit == 'Credit':
+		bal = -bal
+
+	# if bal is None, return 0
+	return bal or 0
\ No newline at end of file