@@ -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