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