Merge pull request #49792 from frappe/mergify/bp/version-15-hotfix/pr-49791

refactor: convert item warehouse based reposting (backport #49791)
This commit is contained in:
rohitwaghchaure
2025-09-30 16:31:57 +05:30
committed by GitHub
2 changed files with 20 additions and 8 deletions

View File

@@ -84,7 +84,7 @@ def get_reposting_entries():
def get_stock_ledgers(vouchers):
return frappe.get_all(
"Stock Ledger Entry",
fields=["item_code", "warehouse", "posting_date"],
fields=["item_code", "warehouse", "posting_date", "posting_time", "posting_datetime"],
filters={"voucher_no": ("in", vouchers)},
)

View File

@@ -4,10 +4,11 @@
import frappe
from frappe import _
from frappe.utils import get_link_to_form, parse_json
from frappe.utils import get_datetime, get_link_to_form, parse_json
import erpnext
from erpnext.accounts.utils import get_currency_precision, get_stock_accounts
from erpnext.stock.doctype.stock_reposting_settings.stock_reposting_settings import get_stock_ledgers
from erpnext.stock.doctype.warehouse.warehouse import get_warehouses_based_on_account
@@ -141,18 +142,29 @@ def create_reposting_entries(rows, company):
rows = parse_json(rows)
entries = []
for row in rows:
row = frappe._dict(row)
item_wh = frappe._dict()
vouchers = [row.get("voucher_no") for row in rows]
sles = get_stock_ledgers(vouchers)
for sle in sles:
key = (sle.item_code, sle.warehouse)
if key not in item_wh:
item_wh[key] = sle
elif get_datetime(item_wh.get(key).posting_datetime) > get_datetime(sle.posting_datetime):
item_wh[key] = sle
for key, sle in item_wh.items():
item_code, warehouse = key
try:
doc = frappe.get_doc(
{
"doctype": "Repost Item Valuation",
"based_on": "Transaction",
"based_on": "Item and Warehouse",
"status": "Queued",
"voucher_type": row.voucher_type,
"voucher_no": row.voucher_no,
"posting_date": row.posting_date,
"item_code": item_code,
"warehouse": warehouse,
"posting_date": sle.posting_date,
"posting_time": sle.posting_time,
"company": company,
"allow_nagative_stock": 1,
}