mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-29 09:54:47 +00:00
test: test cases for item wise inventory account
This commit is contained in:
@@ -155,7 +155,7 @@ class StockController(AccountsController):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_item_wise_inventory_account_map(self, company):
|
def get_item_wise_inventory_account_map(self):
|
||||||
inventory_account_map = frappe._dict()
|
inventory_account_map = frappe._dict()
|
||||||
for table in ["items", "packed_items", "supplied_items"]:
|
for table in ["items", "packed_items", "supplied_items"]:
|
||||||
if not self.get(table):
|
if not self.get(table):
|
||||||
@@ -190,8 +190,7 @@ class StockController(AccountsController):
|
|||||||
).format(bold(item_code))
|
).format(bold(item_code))
|
||||||
)
|
)
|
||||||
|
|
||||||
if account_dict:
|
return account_dict
|
||||||
return account_dict
|
|
||||||
|
|
||||||
if not warehouse_field:
|
if not warehouse_field:
|
||||||
warehouse_field = "warehouse"
|
warehouse_field = "warehouse"
|
||||||
@@ -207,7 +206,7 @@ class StockController(AccountsController):
|
|||||||
|
|
||||||
def get_inventory_account_map(self):
|
def get_inventory_account_map(self):
|
||||||
if self.use_item_inventory_account:
|
if self.use_item_inventory_account:
|
||||||
return self.get_item_wise_inventory_account_map(self.company)
|
return self.get_item_wise_inventory_account_map()
|
||||||
|
|
||||||
return get_warehouse_account_map(self.company)
|
return get_warehouse_account_map(self.company)
|
||||||
|
|
||||||
@@ -718,11 +717,11 @@ class StockController(AccountsController):
|
|||||||
item_row, inventory_account_map, warehouse_field="target_warehouse"
|
item_row, inventory_account_map, warehouse_field="target_warehouse"
|
||||||
)
|
)
|
||||||
|
|
||||||
warehouse_asset_account = _inv_dict["account"]
|
warehouse_asset_account = _inv_dict.get("account") if _inv_dict else None
|
||||||
elif self.get("is_internal_supplier"):
|
elif self.get("is_internal_supplier"):
|
||||||
_inv_dict = self.get_inventory_account_dict(item_row, inventory_account_map)
|
_inv_dict = self.get_inventory_account_dict(item_row, inventory_account_map)
|
||||||
|
|
||||||
warehouse_asset_account = _inv_dict["account"]
|
warehouse_asset_account = _inv_dict.get("account") if _inv_dict else None
|
||||||
|
|
||||||
expense_account = frappe.get_cached_value("Company", self.company, "default_expense_account")
|
expense_account = frappe.get_cached_value("Company", self.company, "default_expense_account")
|
||||||
if not expense_account:
|
if not expense_account:
|
||||||
@@ -2095,7 +2094,7 @@ def get_item_wise_inventory_account_map(rows, company):
|
|||||||
inventory_map = frappe._dict()
|
inventory_map = frappe._dict()
|
||||||
|
|
||||||
for row in rows:
|
for row in rows:
|
||||||
item_code = row.rm_item_code if hasattr(row, "rm_item_code") else row.item_code
|
item_code = row.rm_item_code if hasattr(row, "rm_item_code") and row.rm_item_code else row.item_code
|
||||||
if not item_code:
|
if not item_code:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from collections import defaultdict
|
|||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
from frappe.tests import IntegrationTestCase
|
from frappe.tests import IntegrationTestCase
|
||||||
from frappe.utils import cint
|
from frappe.utils import add_days, cint, today
|
||||||
|
|
||||||
from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom
|
from erpnext.manufacturing.doctype.production_plan.test_production_plan import make_bom
|
||||||
from erpnext.manufacturing.doctype.work_order.test_work_order import make_wo_order_test_record
|
from erpnext.manufacturing.doctype.work_order.test_work_order import make_wo_order_test_record
|
||||||
@@ -167,6 +167,98 @@ class TestItemWiseInventoryAccount(IntegrationTestCase):
|
|||||||
|
|
||||||
self.assertEqual(sle_value, gl_value, f"GL Entry not created for {item_code} correctly")
|
self.assertEqual(sle_value, gl_value, f"GL Entry not created for {item_code} correctly")
|
||||||
|
|
||||||
|
def test_item_account_for_backdated_purchase_receipt(self):
|
||||||
|
items = {
|
||||||
|
"Bottle Item A": {"is_stock_item": 1},
|
||||||
|
}
|
||||||
|
|
||||||
|
for item_name, item_data in items.items():
|
||||||
|
item = make_item(
|
||||||
|
item_name,
|
||||||
|
properties=item_data,
|
||||||
|
)
|
||||||
|
|
||||||
|
account = self.add_inventory_account(item)
|
||||||
|
items[item_name]["account"] = account
|
||||||
|
|
||||||
|
make_purchase_receipt(
|
||||||
|
item_code="Bottle Item A",
|
||||||
|
qty=5,
|
||||||
|
rate=100,
|
||||||
|
warehouse=self.default_warehouse,
|
||||||
|
company=self.company,
|
||||||
|
)
|
||||||
|
|
||||||
|
dn = create_delivery_note(
|
||||||
|
item_code="Bottle Item A",
|
||||||
|
qty=5,
|
||||||
|
rate=200,
|
||||||
|
warehouse=self.default_warehouse,
|
||||||
|
company=self.company,
|
||||||
|
cost_center=frappe.db.get_value("Company", self.company, "cost_center"),
|
||||||
|
expense_account=frappe.db.get_value("Company", self.company, "default_expense_account"),
|
||||||
|
)
|
||||||
|
|
||||||
|
for row in items:
|
||||||
|
item_code = row
|
||||||
|
account = items[item_code]["account"]
|
||||||
|
|
||||||
|
sle_value = frappe.db.get_value(
|
||||||
|
"Stock Ledger Entry",
|
||||||
|
{"voucher_type": "Delivery Note", "voucher_no": dn.name, "item_code": item_code},
|
||||||
|
"stock_value_difference",
|
||||||
|
)
|
||||||
|
|
||||||
|
gl_value = (
|
||||||
|
frappe.db.get_value(
|
||||||
|
"GL Entry",
|
||||||
|
{
|
||||||
|
"voucher_type": "Delivery Note",
|
||||||
|
"voucher_no": dn.name,
|
||||||
|
"account": account,
|
||||||
|
},
|
||||||
|
"credit",
|
||||||
|
)
|
||||||
|
* -1
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(sle_value, gl_value, f"GL Entry not created for {item_code} correctly")
|
||||||
|
|
||||||
|
make_purchase_receipt(
|
||||||
|
item_code="Bottle Item A",
|
||||||
|
posting_date=add_days(today(), -1),
|
||||||
|
qty=5,
|
||||||
|
rate=200,
|
||||||
|
warehouse=self.default_warehouse,
|
||||||
|
company=self.company,
|
||||||
|
)
|
||||||
|
|
||||||
|
for row in items:
|
||||||
|
item_code = row
|
||||||
|
account = items[item_code]["account"]
|
||||||
|
|
||||||
|
sle_value = frappe.db.get_value(
|
||||||
|
"Stock Ledger Entry",
|
||||||
|
{"voucher_type": "Delivery Note", "voucher_no": dn.name, "item_code": item_code},
|
||||||
|
"stock_value_difference",
|
||||||
|
)
|
||||||
|
|
||||||
|
gl_value = (
|
||||||
|
frappe.db.get_value(
|
||||||
|
"GL Entry",
|
||||||
|
{
|
||||||
|
"voucher_type": "Delivery Note",
|
||||||
|
"voucher_no": dn.name,
|
||||||
|
"account": account,
|
||||||
|
},
|
||||||
|
"credit",
|
||||||
|
)
|
||||||
|
* -1
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEqual(sle_value, gl_value, f"GL Entry not created for {item_code} correctly")
|
||||||
|
self.assertEqual(sle_value, 1000.0 * -1, f"GL Entry not created for {item_code} correctly")
|
||||||
|
|
||||||
def test_item_group_account_for_purchase_receipt_entry(self):
|
def test_item_group_account_for_purchase_receipt_entry(self):
|
||||||
items = {
|
items = {
|
||||||
"Stock Item C": {"is_stock_item": 1, "item_group": "Test Item Group C"},
|
"Stock Item C": {"is_stock_item": 1, "item_group": "Test Item Group C"},
|
||||||
|
|||||||
@@ -616,6 +616,7 @@ class SubcontractingReceipt(SubcontractingController):
|
|||||||
supplied_items_details.setdefault(item.reference_name, []).append(
|
supplied_items_details.setdefault(item.reference_name, []).append(
|
||||||
frappe._dict(
|
frappe._dict(
|
||||||
{
|
{
|
||||||
|
"item_code": item.rm_item_code,
|
||||||
"amount": item.amount,
|
"amount": item.amount,
|
||||||
"expense_account": item.expense_account,
|
"expense_account": item.expense_account,
|
||||||
"cost_center": item.cost_center,
|
"cost_center": item.cost_center,
|
||||||
|
|||||||
Reference in New Issue
Block a user