[perpetual accounting] gl entry: sync stock and account balance
This commit is contained in:
parent
939b1523e9
commit
d47419483e
@ -17,28 +17,22 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import webnotes
|
import webnotes
|
||||||
from webnotes.utils import cint, flt, cstr
|
from webnotes.utils import cint, flt, cstr
|
||||||
|
from webnotes import msgprint, _
|
||||||
import webnotes.defaults
|
import webnotes.defaults
|
||||||
|
|
||||||
from controllers.accounts_controller import AccountsController
|
from controllers.accounts_controller import AccountsController
|
||||||
|
|
||||||
class StockController(AccountsController):
|
class StockController(AccountsController):
|
||||||
def get_gl_entries_for_stock(self, against_stock_account, amount=None,
|
def get_gl_entries_for_stock(self, against_stock_account, amount, warehouse=None,
|
||||||
stock_in_hand_account=None, cost_center=None, warehouse_list=None):
|
stock_in_hand_account=None, cost_center=None):
|
||||||
if not cost_center:
|
if not stock_in_hand_account and warehouse:
|
||||||
cost_center = self.get_company_default("stock_adjustment_cost_center")
|
stock_in_hand_account = webnotes.conn.get_value("Warehouse", warehouse, "account")
|
||||||
|
|
||||||
acc_diff = {}
|
if amount:
|
||||||
if warehouse_list:
|
gl_entries = [
|
||||||
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 += [
|
|
||||||
# stock in hand account
|
# stock in hand account
|
||||||
self.get_gl_dict({
|
self.get_gl_dict({
|
||||||
"account": account,
|
"account": stock_in_hand_account,
|
||||||
"against": against_stock_account,
|
"against": against_stock_account,
|
||||||
"debit": amount,
|
"debit": amount,
|
||||||
"remarks": self.doc.remarks or "Accounting Entry for Stock",
|
"remarks": self.doc.remarks or "Accounting Entry for Stock",
|
||||||
@ -47,7 +41,7 @@ class StockController(AccountsController):
|
|||||||
# account against stock in hand
|
# account against stock in hand
|
||||||
self.get_gl_dict({
|
self.get_gl_dict({
|
||||||
"account": against_stock_account,
|
"account": against_stock_account,
|
||||||
"against": account,
|
"against": stock_in_hand_account,
|
||||||
"credit": amount,
|
"credit": amount,
|
||||||
"cost_center": cost_center or None,
|
"cost_center": cost_center or None,
|
||||||
"remarks": self.doc.remarks or "Accounting Entry for Stock",
|
"remarks": self.doc.remarks or "Accounting Entry for Stock",
|
||||||
@ -56,6 +50,28 @@ class StockController(AccountsController):
|
|||||||
|
|
||||||
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):
|
def get_sl_entries(self, d, args):
|
||||||
sl_dict = {
|
sl_dict = {
|
||||||
@ -85,6 +101,17 @@ class StockController(AccountsController):
|
|||||||
from webnotes.model.code import get_obj
|
from webnotes.model.code import get_obj
|
||||||
get_obj('Stock Ledger').update_stock(sl_entries, is_amended)
|
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):
|
def get_stock_ledger_entries(self, item_list=None, warehouse_list=None):
|
||||||
if not (item_list and warehouse_list):
|
if not (item_list and warehouse_list):
|
||||||
item_list, warehouse_list = self.get_distinct_item_warehouse()
|
item_list, warehouse_list = self.get_distinct_item_warehouse()
|
||||||
|
Loading…
Reference in New Issue
Block a user