Skip to content

Commit 8408e81

Browse files
rohitwaghchauremergify[bot]
authored andcommitted
fix: last SLE not updated in the file
(cherry picked from commit 38ed425) # Conflicts: # erpnext/manufacturing/doctype/work_order/test_work_order.py
1 parent a56d698 commit 8408e81

2 files changed

Lines changed: 70 additions & 27 deletions

File tree

erpnext/manufacturing/doctype/work_order/test_work_order.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,45 @@ def test_job_card(self):
509509

510510
def test_work_order_material_transferred_qty_with_process_loss(self):
511511
stock_entries = []
512+
<<<<<<< HEAD
512513
bom = frappe.get_doc("BOM", {"docstatus": 1, "with_operations": 1, "company": "_Test Company"})
514+
=======
515+
item_code = make_item("_Test Item For Process Loss", {"is_stock_item": 1}).name
516+
rm_item_code = make_item("Test Item For Process Loss RM", {"is_stock_item": 1}).name
517+
518+
bom = make_bom(
519+
item=item_code,
520+
raw_materials=[rm_item_code],
521+
with_operations=1,
522+
do_not_save=True,
523+
)
524+
525+
operation_name = "_Test Custom Operation"
526+
workstation_name = "_Test Custom Workstation"
527+
528+
if not frappe.db.exists("Workstation", workstation_name):
529+
doc = frappe.new_doc("Workstation")
530+
doc.workstation_name = workstation_name
531+
doc.save()
532+
533+
if not frappe.db.exists("Operation", operation_name):
534+
doc = frappe.new_doc("Operation")
535+
doc.name = operation_name
536+
doc.workstation = workstation_name
537+
doc.save()
538+
539+
operation = {
540+
"operation": operation_name,
541+
"workstation": workstation_name,
542+
"description": "Test Data",
543+
"operating_cost": 100,
544+
"time_in_mins": 40,
545+
}
546+
547+
bom.append("operations", operation)
548+
bom.save()
549+
bom.submit()
550+
>>>>>>> 38ed425ee2 (fix: last SLE not updated in the file)
513551

514552
work_order = make_wo_order_test_record(
515553
item=bom.item,

erpnext/stock/stock_ledger.py

Lines changed: 32 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -263,17 +263,11 @@ def update_args_in_repost_item_valuation(
263263
items_to_be_repost,
264264
repost_affected_transaction,
265265
item_wh_wise_last_posted_sle=None,
266-
only_affected_transaction=False,
267266
):
268267
file_name = ""
269-
has_file = False
270-
271268
if not item_wh_wise_last_posted_sle:
272269
item_wh_wise_last_posted_sle = {}
273270

274-
if doc.reposting_data_file:
275-
has_file = True
276-
277271
if doc.reposting_data_file:
278272
file_name = get_reposting_file_name(doc.doctype, doc.name)
279273
# frappe.delete_doc("File", file_name, ignore_permissions=True, delete_permanently=True)
@@ -288,15 +282,14 @@ def update_args_in_repost_item_valuation(
288282
file_name,
289283
)
290284

291-
if not only_affected_transaction or not has_file:
292-
doc.db_set(
293-
{
294-
"current_index": index,
295-
"items_to_be_repost": frappe.as_json(items_to_be_repost),
296-
"total_reposting_count": len(items_to_be_repost),
297-
"reposting_data_file": doc.reposting_data_file,
298-
}
299-
)
285+
doc.db_set(
286+
{
287+
"current_index": index,
288+
"items_to_be_repost": frappe.as_json(items_to_be_repost),
289+
"total_reposting_count": len(items_to_be_repost),
290+
"reposting_data_file": doc.reposting_data_file,
291+
}
292+
)
300293

301294
if not frappe.flags.in_test:
302295
frappe.db.commit()
@@ -577,13 +570,9 @@ def build(self):
577570
self.update_bin()
578571
else:
579572
self.item_wh_wise_last_posted_sle = self.get_item_wh_wise_last_posted_sle()
580-
_item_wh_sle = self.sort_sles(self.item_wh_wise_last_posted_sle.values())
581-
582-
while _item_wh_sle:
583-
self.initialize_reposting()
584-
sle_dict = _item_wh_sle.pop(0)
585-
self.repost_stock_ledgers(sle_dict)
586-
573+
item_wh_sles = self.sort_sles(self.item_wh_wise_last_posted_sle.values())
574+
self.initialize_reposting()
575+
self.repost_stock_ledgers(item_wh_sles)
587576
self.update_bin()
588577
self.reset_vouchers_and_idx()
589578
self.update_data_in_repost()
@@ -618,19 +607,33 @@ def get_item_wh_wise_last_posted_sle(self):
618607
)
619608
}
620609

621-
def repost_stock_ledgers(self, sle_dict=None):
622-
self._sles = self.get_future_entries_to_repost(sle_dict)
610+
def _get_future_entries_to_repost(self, item_wh_sles):
611+
sles = []
612+
613+
for sle in item_wh_sles:
614+
if (sle.item_code, sle.warehouse) not in self.distinct_dependant_item_wh:
615+
self.distinct_dependant_item_wh.add((sle.item_code, sle.warehouse))
616+
617+
sles.extend(self.get_future_entries_to_repost(sle))
618+
619+
return self.sort_sles(sles)
620+
621+
def repost_stock_ledgers(self, item_wh_sles=None):
622+
self._sles = self._get_future_entries_to_repost(item_wh_sles)
623623

624624
if not isinstance(self._sles, deque):
625625
self._sles = deque(self._sles)
626626

627627
i = 0
628628
while self._sles:
629629
sle = self._sles.popleft()
630-
i += 1
630+
if (sle.item_code, sle.warehouse) not in self.distinct_dependant_item_wh:
631+
self.distinct_dependant_item_wh.add((sle.item_code, sle.warehouse))
632+
631633
if sle.name in self.distinct_sles:
632634
continue
633635

636+
i += 1
634637
item_wh_key = (sle.item_code, sle.warehouse)
635638
if item_wh_key not in self.prev_sle_dict:
636639
self.prev_sle_dict[item_wh_key] = get_previous_sle_of_current_voucher(sle)
@@ -644,7 +647,7 @@ def repost_stock_ledgers(self, sle_dict=None):
644647
self.include_dependant_sle_in_reposting(sle)
645648
self.update_item_wh_wise_last_posted_sle(sle)
646649

647-
if i % 1000 == 0:
650+
if i % 2000 == 0:
648651
self.update_data_in_repost(len(self._sles), i)
649652

650653
def sort_sles(self, sles):
@@ -726,7 +729,6 @@ def update_data_in_repost(self, total_sles=None, index=None):
726729
self.items_to_be_repost,
727730
self.repost_affected_transaction,
728731
self.item_wh_wise_last_posted_sle,
729-
only_affected_transaction=True,
730732
)
731733

732734
if not frappe.flags.in_test:
@@ -982,6 +984,9 @@ def process_sle(self, sle):
982984
):
983985
return
984986

987+
if not cint(erpnext.is_perpetual_inventory_enabled(sle.company)):
988+
return
989+
985990
if self.args.item_code != sle.item_code or self.args.warehouse != sle.warehouse:
986991
self.repost_affected_transaction.add((sle.voucher_type, sle.voucher_no))
987992

0 commit comments

Comments
 (0)