Skip to content

Commit

Permalink
fix: make adjustment entry using stock reconciliation (#37995)
Browse files Browse the repository at this point in the history
fix: do adjustment entry using stock reconciliation
  • Loading branch information
rohitwaghchaure authored Nov 9, 2023
1 parent 860b67e commit a8216b9
Show file tree
Hide file tree
Showing 3 changed files with 56 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"warehouse",
"posting_date",
"posting_time",
"is_adjustment_entry",
"column_break_6",
"voucher_type",
"voucher_no",
Expand Down Expand Up @@ -333,6 +334,12 @@
"fieldname": "has_serial_no",
"fieldtype": "Check",
"label": "Has Serial No"
},
{
"default": "0",
"fieldname": "is_adjustment_entry",
"fieldtype": "Check",
"label": "Is Adjustment Entry"
}
],
"hide_toolbar": 1,
Expand All @@ -341,7 +348,7 @@
"in_create": 1,
"index_web_pages_for_search": 1,
"links": [],
"modified": "2023-04-03 16:33:16.270722",
"modified": "2023-10-23 18:07:42.063615",
"modified_by": "Administrator",
"module": "Stock",
"name": "Stock Ledger Entry",
Expand Down
20 changes: 20 additions & 0 deletions erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py
Original file line number Diff line number Diff line change
Expand Up @@ -442,6 +442,11 @@ def update_stock_ledger(self):

sl_entries = []
for row in self.items:

if not row.qty and not row.valuation_rate and not row.current_qty:
self.make_adjustment_entry(row, sl_entries)
continue

item = frappe.get_cached_value(
"Item", row.item_code, ["has_serial_no", "has_batch_no"], as_dict=1
)
Expand Down Expand Up @@ -492,6 +497,21 @@ def update_stock_ledger(self):
)
self.make_sl_entries(sl_entries, allow_negative_stock=allow_negative_stock)

def make_adjustment_entry(self, row, sl_entries):
from erpnext.stock.stock_ledger import get_stock_value_difference

difference_amount = get_stock_value_difference(
row.item_code, row.warehouse, self.posting_date, self.posting_time
)

if not difference_amount:
return

args = self.get_sle_for_items(row)
args.update({"stock_value_difference": -1 * difference_amount, "is_adjustment_entry": 1})

sl_entries.append(args)

def get_sle_for_serialized_items(self, row, sl_entries):
if row.current_serial_and_batch_bundle:
args = self.get_sle_for_items(row)
Expand Down
30 changes: 28 additions & 2 deletions erpnext/stock/stock_ledger.py
Original file line number Diff line number Diff line change
Expand Up @@ -759,9 +759,11 @@ def process_sle(self, sle):
sle.valuation_rate = self.wh_data.valuation_rate
sle.stock_value = self.wh_data.stock_value
sle.stock_queue = json.dumps(self.wh_data.stock_queue)
sle.stock_value_difference = stock_value_difference
sle.doctype = "Stock Ledger Entry"

if not sle.is_adjustment_entry or not self.args.get("sle_id"):
sle.stock_value_difference = stock_value_difference

sle.doctype = "Stock Ledger Entry"
frappe.get_doc(sle).db_update()

if not self.args.get("sle_id"):
Expand Down Expand Up @@ -1939,3 +1941,27 @@ def is_internal_transfer(sle):

if data.is_internal_supplier and data.represents_company == data.company:
return True


def get_stock_value_difference(item_code, warehouse, posting_date, posting_time, voucher_no=None):
table = frappe.qb.DocType("Stock Ledger Entry")

query = (
frappe.qb.from_(table)
.select(Sum(table.stock_value_difference).as_("value"))
.where(
(table.is_cancelled == 0)
& (table.item_code == item_code)
& (table.warehouse == warehouse)
& (
(table.posting_date < posting_date)
| ((table.posting_date == posting_date) & (table.posting_time <= posting_time))
)
)
)

if voucher_no:
query = query.where(table.voucher_no != voucher_no)

difference_amount = query.run()
return flt(difference_amount[0][0]) if difference_amount else 0

0 comments on commit a8216b9

Please sign in to comment.