mirror of
https://github.com/frappe/erpnext.git
synced 2026-04-17 05:45:11 +00:00
fix: last SLE not updated in the file
(cherry picked from commit38ed425ee2) (cherry picked from commit60a1da0a1b)
This commit is contained in:
committed by
Mergify
parent
1134e25bb6
commit
96446ed78d
@@ -518,9 +518,23 @@ class TestWorkOrder(ERPNextTestSuite):
|
|||||||
do_not_save=True,
|
do_not_save=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
operation_name = "_Test Custom Operation"
|
||||||
|
workstation_name = "_Test Custom Workstation"
|
||||||
|
|
||||||
|
if not frappe.db.exists("Workstation", workstation_name):
|
||||||
|
doc = frappe.new_doc("Workstation")
|
||||||
|
doc.workstation_name = workstation_name
|
||||||
|
doc.save()
|
||||||
|
|
||||||
|
if not frappe.db.exists("Operation", operation_name):
|
||||||
|
doc = frappe.new_doc("Operation")
|
||||||
|
doc.name = operation_name
|
||||||
|
doc.workstation = workstation_name
|
||||||
|
doc.save()
|
||||||
|
|
||||||
operation = {
|
operation = {
|
||||||
"operation": "_Test Operation 1",
|
"operation": operation_name,
|
||||||
"workstation": "_Test Workstation 1",
|
"workstation": workstation_name,
|
||||||
"description": "Test Data",
|
"description": "Test Data",
|
||||||
"operating_cost": 100,
|
"operating_cost": 100,
|
||||||
"time_in_mins": 40,
|
"time_in_mins": 40,
|
||||||
|
|||||||
@@ -267,17 +267,11 @@ def update_args_in_repost_item_valuation(
|
|||||||
items_to_be_repost,
|
items_to_be_repost,
|
||||||
repost_affected_transaction,
|
repost_affected_transaction,
|
||||||
item_wh_wise_last_posted_sle=None,
|
item_wh_wise_last_posted_sle=None,
|
||||||
only_affected_transaction=False,
|
|
||||||
):
|
):
|
||||||
file_name = ""
|
file_name = ""
|
||||||
has_file = False
|
|
||||||
|
|
||||||
if not item_wh_wise_last_posted_sle:
|
if not item_wh_wise_last_posted_sle:
|
||||||
item_wh_wise_last_posted_sle = {}
|
item_wh_wise_last_posted_sle = {}
|
||||||
|
|
||||||
if doc.reposting_data_file:
|
|
||||||
has_file = True
|
|
||||||
|
|
||||||
if doc.reposting_data_file:
|
if doc.reposting_data_file:
|
||||||
file_name = get_reposting_file_name(doc.doctype, doc.name)
|
file_name = get_reposting_file_name(doc.doctype, doc.name)
|
||||||
# frappe.delete_doc("File", file_name, ignore_permissions=True, delete_permanently=True)
|
# frappe.delete_doc("File", file_name, ignore_permissions=True, delete_permanently=True)
|
||||||
@@ -292,15 +286,14 @@ def update_args_in_repost_item_valuation(
|
|||||||
file_name,
|
file_name,
|
||||||
)
|
)
|
||||||
|
|
||||||
if not only_affected_transaction or not has_file:
|
doc.db_set(
|
||||||
doc.db_set(
|
{
|
||||||
{
|
"current_index": index,
|
||||||
"current_index": index,
|
"items_to_be_repost": frappe.as_json(items_to_be_repost),
|
||||||
"items_to_be_repost": frappe.as_json(items_to_be_repost),
|
"total_reposting_count": len(items_to_be_repost),
|
||||||
"total_reposting_count": len(items_to_be_repost),
|
"reposting_data_file": doc.reposting_data_file,
|
||||||
"reposting_data_file": doc.reposting_data_file,
|
}
|
||||||
}
|
)
|
||||||
)
|
|
||||||
|
|
||||||
if not frappe.in_test:
|
if not frappe.in_test:
|
||||||
frappe.db.commit()
|
frappe.db.commit()
|
||||||
@@ -584,13 +577,9 @@ class update_entries_after:
|
|||||||
self.update_bin()
|
self.update_bin()
|
||||||
else:
|
else:
|
||||||
self.item_wh_wise_last_posted_sle = self.get_item_wh_wise_last_posted_sle()
|
self.item_wh_wise_last_posted_sle = self.get_item_wh_wise_last_posted_sle()
|
||||||
_item_wh_sle = self.sort_sles(self.item_wh_wise_last_posted_sle.values())
|
item_wh_sles = self.sort_sles(self.item_wh_wise_last_posted_sle.values())
|
||||||
|
self.initialize_reposting()
|
||||||
while _item_wh_sle:
|
self.repost_stock_ledgers(item_wh_sles)
|
||||||
self.initialize_reposting()
|
|
||||||
sle_dict = _item_wh_sle.pop(0)
|
|
||||||
self.repost_stock_ledgers(sle_dict)
|
|
||||||
|
|
||||||
self.update_bin()
|
self.update_bin()
|
||||||
self.reset_vouchers_and_idx()
|
self.reset_vouchers_and_idx()
|
||||||
self.update_data_in_repost()
|
self.update_data_in_repost()
|
||||||
@@ -625,8 +614,19 @@ class update_entries_after:
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
def repost_stock_ledgers(self, sle_dict=None):
|
def _get_future_entries_to_repost(self, item_wh_sles):
|
||||||
self._sles = self.get_future_entries_to_repost(sle_dict)
|
sles = []
|
||||||
|
|
||||||
|
for sle in item_wh_sles:
|
||||||
|
if (sle.item_code, sle.warehouse) not in self.distinct_dependant_item_wh:
|
||||||
|
self.distinct_dependant_item_wh.add((sle.item_code, sle.warehouse))
|
||||||
|
|
||||||
|
sles.extend(self.get_future_entries_to_repost(sle))
|
||||||
|
|
||||||
|
return self.sort_sles(sles)
|
||||||
|
|
||||||
|
def repost_stock_ledgers(self, item_wh_sles=None):
|
||||||
|
self._sles = self._get_future_entries_to_repost(item_wh_sles)
|
||||||
|
|
||||||
if not isinstance(self._sles, deque):
|
if not isinstance(self._sles, deque):
|
||||||
self._sles = deque(self._sles)
|
self._sles = deque(self._sles)
|
||||||
@@ -634,10 +634,13 @@ class update_entries_after:
|
|||||||
i = 0
|
i = 0
|
||||||
while self._sles:
|
while self._sles:
|
||||||
sle = self._sles.popleft()
|
sle = self._sles.popleft()
|
||||||
i += 1
|
if (sle.item_code, sle.warehouse) not in self.distinct_dependant_item_wh:
|
||||||
|
self.distinct_dependant_item_wh.add((sle.item_code, sle.warehouse))
|
||||||
|
|
||||||
if sle.name in self.distinct_sles:
|
if sle.name in self.distinct_sles:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
i += 1
|
||||||
item_wh_key = (sle.item_code, sle.warehouse)
|
item_wh_key = (sle.item_code, sle.warehouse)
|
||||||
if item_wh_key not in self.prev_sle_dict:
|
if item_wh_key not in self.prev_sle_dict:
|
||||||
self.prev_sle_dict[item_wh_key] = get_previous_sle_of_current_voucher(sle)
|
self.prev_sle_dict[item_wh_key] = get_previous_sle_of_current_voucher(sle)
|
||||||
@@ -651,7 +654,7 @@ class update_entries_after:
|
|||||||
self.include_dependant_sle_in_reposting(sle)
|
self.include_dependant_sle_in_reposting(sle)
|
||||||
self.update_item_wh_wise_last_posted_sle(sle)
|
self.update_item_wh_wise_last_posted_sle(sle)
|
||||||
|
|
||||||
if i % 1000 == 0:
|
if i % 2000 == 0:
|
||||||
self.update_data_in_repost(len(self._sles), i)
|
self.update_data_in_repost(len(self._sles), i)
|
||||||
|
|
||||||
def sort_sles(self, sles):
|
def sort_sles(self, sles):
|
||||||
@@ -733,7 +736,6 @@ class update_entries_after:
|
|||||||
self.items_to_be_repost,
|
self.items_to_be_repost,
|
||||||
self.repost_affected_transaction,
|
self.repost_affected_transaction,
|
||||||
self.item_wh_wise_last_posted_sle,
|
self.item_wh_wise_last_posted_sle,
|
||||||
only_affected_transaction=True,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if not frappe.in_test:
|
if not frappe.in_test:
|
||||||
@@ -990,6 +992,9 @@ class update_entries_after:
|
|||||||
):
|
):
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if not cint(erpnext.is_perpetual_inventory_enabled(sle.company)):
|
||||||
|
return
|
||||||
|
|
||||||
if self.args.item_code != sle.item_code or self.args.warehouse != sle.warehouse:
|
if self.args.item_code != sle.item_code or self.args.warehouse != sle.warehouse:
|
||||||
self.repost_affected_transaction.add((sle.voucher_type, sle.voucher_no))
|
self.repost_affected_transaction.add((sle.voucher_type, sle.voucher_no))
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user