[perpetual accounting] gl entry: sync stock and account balance

This commit is contained in:
Nabin Hait 2013-08-06 15:57:25 +05:30
parent 939b1523e9
commit d47419483e

View File

@ -17,28 +17,22 @@
from __future__ import unicode_literals
import webnotes
from webnotes.utils import cint, flt, cstr
from webnotes import msgprint, _
import webnotes.defaults
from controllers.accounts_controller import AccountsController
class StockController(AccountsController):
def get_gl_entries_for_stock(self, against_stock_account, amount=None,
stock_in_hand_account=None, cost_center=None, warehouse_list=None):
if not cost_center:
cost_center = self.get_company_default("stock_adjustment_cost_center")
acc_diff = {}
if warehouse_list:
from accounts.utils import get_stock_and_account_difference
acc_diff = get_stock_and_account_difference(warehouse_list)
elif amount and stock_in_hand_account:
acc_diff = {stock_in_hand_account: amount}
gl_entries = []
for account, amount in acc_diff.items():
gl_entries += [
def get_gl_entries_for_stock(self, against_stock_account, amount, warehouse=None,
stock_in_hand_account=None, cost_center=None):
if not stock_in_hand_account and warehouse:
stock_in_hand_account = webnotes.conn.get_value("Warehouse", warehouse, "account")
if amount:
gl_entries = [
# stock in hand account
self.get_gl_dict({
"account": account,
"account": stock_in_hand_account,
"against": against_stock_account,
"debit": amount,
"remarks": self.doc.remarks or "Accounting Entry for Stock",
@ -47,16 +41,38 @@ class StockController(AccountsController):
# account against stock in hand
self.get_gl_dict({
"account": against_stock_account,
"against": account,
"against": stock_in_hand_account,
"credit": amount,
"cost_center": cost_center or None,
"remarks": self.doc.remarks or "Accounting Entry for Stock",
}, self.doc.docstatus == 2),
]
return gl_entries
return gl_entries
def sync_stock_account_balance(self, warehouse_list, cost_center=None, posting_date=None):
from accounts.utils import get_stock_and_account_difference
acc_diff = get_stock_and_account_difference(warehouse_list)
if not cost_center:
cost_center = self.get_company_default("cost_center")
gl_entries = []
for account, diff in acc_diff.items():
if diff:
stock_adjustment_account = self.get_company_default("stock_adjustment_account")
gl_entries += self.get_gl_entries_for_stock(stock_adjustment_account, diff,
stock_in_hand_account=account, cost_center=cost_center)
if gl_entries:
from accounts.general_ledger import make_gl_entries
if posting_date:
for entries in gl_entries:
entries["posting_date"] = posting_date
make_gl_entries(gl_entries)
def get_sl_entries(self, d, args):
sl_dict = {
"item_code": d.item_code,
@ -84,6 +100,17 @@ class StockController(AccountsController):
if sl_entries:
from webnotes.model.code import get_obj
get_obj('Stock Ledger').update_stock(sl_entries, is_amended)
def validate_warehouse_with_company(self, warehouse_list):
warehouse_list = list(set(filter(lambda x: x not in ["", None], warehouse_list)))
valid_warehouses = webnotes.conn.sql_list("""select name from `tabWarehouse`
where company=%s""", self.doc.company)
invalid_warehouses = filter(lambda x: x not in valid_warehouses, warehouse_list)
if invalid_warehouses:
print invalid_warehouses, valid_warehouses, warehouse_list
msgprint(_("Following warehouses not belong to the company") + ": " +
self.doc.company + "\n" + "\n".join(invalid_warehouses), raise_exception=1)
def get_stock_ledger_entries(self, item_list=None, warehouse_list=None):
if not (item_list and warehouse_list):