Skip to content

Commit

Permalink
fix: slowness in reposting dependent vouchers. (#42282)
Browse files Browse the repository at this point in the history
(cherry picked from commit b17696a)
  • Loading branch information
rohitwaghchaure authored and mergify[bot] committed Jul 11, 2024
1 parent e07bdce commit 16dc4ff
Showing 1 changed file with 33 additions and 1 deletion.
34 changes: 33 additions & 1 deletion erpnext/stock/stock_ledger.py
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,8 @@ def repost_future_sle(
"posting_time": args[i].get("posting_time"),
"creation": args[i].get("creation"),
"distinct_item_warehouses": distinct_item_warehouses,
"items_to_be_repost": args,
"current_index": i,
},
allow_negative_stock=allow_negative_stock,
via_landed_cost_voucher=via_landed_cost_voucher,
Expand Down Expand Up @@ -685,11 +687,20 @@ def update_distinct_item_warehouses(self, dependant_sle):
self.distinct_item_warehouses[key] = val
self.new_items_found = True
else:
# Check if the dependent voucher is reposted
# If not, then do not add it to the list
if not self.is_dependent_voucher_reposted(dependant_sle):
return

existing_sle_posting_date = self.distinct_item_warehouses[key].get("sle", {}).get("posting_date")

dependent_voucher_detail_nos = self.get_dependent_voucher_detail_nos(key)

if getdate(dependant_sle.posting_date) < getdate(existing_sle_posting_date):
if dependent_voucher_detail_nos and dependant_sle.voucher_detail_no in set(
dependent_voucher_detail_nos
):
return

val.sle_changed = True
dependent_voucher_detail_nos.append(dependant_sle.voucher_detail_no)
val.dependent_voucher_detail_nos = dependent_voucher_detail_nos
Expand All @@ -703,6 +714,27 @@ def update_distinct_item_warehouses(self, dependant_sle):
val.dependent_voucher_detail_nos = dependent_voucher_detail_nos
self.distinct_item_warehouses[key] = val

def is_dependent_voucher_reposted(self, dependant_sle) -> bool:
# Return False if the dependent voucher is not reposted

if self.args.items_to_be_repost and self.args.current_index:
index = self.args.current_index
while index < len(self.args.items_to_be_repost):
if (
self.args.items_to_be_repost[index].get("item_code") == dependant_sle.item_code
and self.args.items_to_be_repost[index].get("warehouse") == dependant_sle.warehouse
):
if getdate(self.args.items_to_be_repost[index].get("posting_date")) > getdate(
dependant_sle.posting_date
):
self.args.items_to_be_repost[index]["posting_date"] = dependant_sle.posting_date

return False

index += 1

return True

def get_dependent_voucher_detail_nos(self, key):
if "dependent_voucher_detail_nos" not in self.distinct_item_warehouses[key]:
self.distinct_item_warehouses[key].dependent_voucher_detail_nos = []
Expand Down

0 comments on commit 16dc4ff

Please sign in to comment.