Skip to content

Commit 60a1da0

Browse files
rohitwaghchauremergify[bot]
authored andcommitted
fix: last SLE not updated in the file
(cherry picked from commit 38ed425)
1 parent f2b3ade commit 60a1da0

2 files changed

Lines changed: 48 additions & 29 deletions

File tree

erpnext/manufacturing/doctype/work_order/test_work_order.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -518,9 +518,23 @@ def test_work_order_material_transferred_qty_with_process_loss(self):
518518
do_not_save=True,
519519
)
520520

521+
operation_name = "_Test Custom Operation"
522+
workstation_name = "_Test Custom Workstation"
523+
524+
if not frappe.db.exists("Workstation", workstation_name):
525+
doc = frappe.new_doc("Workstation")
526+
doc.workstation_name = workstation_name
527+
doc.save()
528+
529+
if not frappe.db.exists("Operation", operation_name):
530+
doc = frappe.new_doc("Operation")
531+
doc.name = operation_name
532+
doc.workstation = workstation_name
533+
doc.save()
534+
521535
operation = {
522-
"operation": "_Test Operation 1",
523-
"workstation": "_Test Workstation 1",
536+
"operation": operation_name,
537+
"workstation": workstation_name,
524538
"description": "Test Data",
525539
"operating_cost": 100,
526540
"time_in_mins": 40,

erpnext/stock/stock_ledger.py

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -267,17 +267,11 @@ def update_args_in_repost_item_valuation(
267267
items_to_be_repost,
268268
repost_affected_transaction,
269269
item_wh_wise_last_posted_sle=None,
270-
only_affected_transaction=False,
271270
):
272271
file_name = ""
273-
has_file = False
274-
275272
if not item_wh_wise_last_posted_sle:
276273
item_wh_wise_last_posted_sle = {}
277274

278-
if doc.reposting_data_file:
279-
has_file = True
280-
281275
if doc.reposting_data_file:
282276
file_name = get_reposting_file_name(doc.doctype, doc.name)
283277
# frappe.delete_doc("File", file_name, ignore_permissions=True, delete_permanently=True)
@@ -292,15 +286,14 @@ def update_args_in_repost_item_valuation(
292286
file_name,
293287
)
294288

295-
if not only_affected_transaction or not has_file:
296-
doc.db_set(
297-
{
298-
"current_index": index,
299-
"items_to_be_repost": frappe.as_json(items_to_be_repost),
300-
"total_reposting_count": len(items_to_be_repost),
301-
"reposting_data_file": doc.reposting_data_file,
302-
}
303-
)
289+
doc.db_set(
290+
{
291+
"current_index": index,
292+
"items_to_be_repost": frappe.as_json(items_to_be_repost),
293+
"total_reposting_count": len(items_to_be_repost),
294+
"reposting_data_file": doc.reposting_data_file,
295+
}
296+
)
304297

305298
if not frappe.in_test:
306299
frappe.db.commit()
@@ -584,13 +577,9 @@ def build(self):
584577
self.update_bin()
585578
else:
586579
self.item_wh_wise_last_posted_sle = self.get_item_wh_wise_last_posted_sle()
587-
_item_wh_sle = self.sort_sles(self.item_wh_wise_last_posted_sle.values())
588-
589-
while _item_wh_sle:
590-
self.initialize_reposting()
591-
sle_dict = _item_wh_sle.pop(0)
592-
self.repost_stock_ledgers(sle_dict)
593-
580+
item_wh_sles = self.sort_sles(self.item_wh_wise_last_posted_sle.values())
581+
self.initialize_reposting()
582+
self.repost_stock_ledgers(item_wh_sles)
594583
self.update_bin()
595584
self.reset_vouchers_and_idx()
596585
self.update_data_in_repost()
@@ -625,19 +614,33 @@ def get_item_wh_wise_last_posted_sle(self):
625614
)
626615
}
627616

628-
def repost_stock_ledgers(self, sle_dict=None):
629-
self._sles = self.get_future_entries_to_repost(sle_dict)
617+
def _get_future_entries_to_repost(self, item_wh_sles):
618+
sles = []
619+
620+
for sle in item_wh_sles:
621+
if (sle.item_code, sle.warehouse) not in self.distinct_dependant_item_wh:
622+
self.distinct_dependant_item_wh.add((sle.item_code, sle.warehouse))
623+
624+
sles.extend(self.get_future_entries_to_repost(sle))
625+
626+
return self.sort_sles(sles)
627+
628+
def repost_stock_ledgers(self, item_wh_sles=None):
629+
self._sles = self._get_future_entries_to_repost(item_wh_sles)
630630

631631
if not isinstance(self._sles, deque):
632632
self._sles = deque(self._sles)
633633

634634
i = 0
635635
while self._sles:
636636
sle = self._sles.popleft()
637-
i += 1
637+
if (sle.item_code, sle.warehouse) not in self.distinct_dependant_item_wh:
638+
self.distinct_dependant_item_wh.add((sle.item_code, sle.warehouse))
639+
638640
if sle.name in self.distinct_sles:
639641
continue
640642

643+
i += 1
641644
item_wh_key = (sle.item_code, sle.warehouse)
642645
if item_wh_key not in self.prev_sle_dict:
643646
self.prev_sle_dict[item_wh_key] = get_previous_sle_of_current_voucher(sle)
@@ -651,7 +654,7 @@ def repost_stock_ledgers(self, sle_dict=None):
651654
self.include_dependant_sle_in_reposting(sle)
652655
self.update_item_wh_wise_last_posted_sle(sle)
653656

654-
if i % 1000 == 0:
657+
if i % 2000 == 0:
655658
self.update_data_in_repost(len(self._sles), i)
656659

657660
def sort_sles(self, sles):
@@ -733,7 +736,6 @@ def update_data_in_repost(self, total_sles=None, index=None):
733736
self.items_to_be_repost,
734737
self.repost_affected_transaction,
735738
self.item_wh_wise_last_posted_sle,
736-
only_affected_transaction=True,
737739
)
738740

739741
if not frappe.in_test:
@@ -990,6 +992,9 @@ def process_sle(self, sle):
990992
):
991993
return
992994

995+
if not cint(erpnext.is_perpetual_inventory_enabled(sle.company)):
996+
return
997+
993998
if self.args.item_code != sle.item_code or self.args.warehouse != sle.warehouse:
994999
self.repost_affected_transaction.add((sle.voucher_type, sle.voucher_no))
9951000

0 commit comments

Comments
 (0)