mirror of
https://github.com/frappe/erpnext.git
synced 2026-04-12 19:35:09 +00:00
fix: last SLE not updated in the file
(cherry picked from commit 38ed425ee2)
# Conflicts:
# erpnext/manufacturing/doctype/work_order/test_work_order.py
This commit is contained in:
committed by
Mergify
parent
a56d6984d1
commit
8408e81335
@@ -509,7 +509,45 @@ class TestWorkOrder(FrappeTestCase):
|
||||
|
||||
def test_work_order_material_transferred_qty_with_process_loss(self):
|
||||
stock_entries = []
|
||||
<<<<<<< HEAD
|
||||
bom = frappe.get_doc("BOM", {"docstatus": 1, "with_operations": 1, "company": "_Test Company"})
|
||||
=======
|
||||
item_code = make_item("_Test Item For Process Loss", {"is_stock_item": 1}).name
|
||||
rm_item_code = make_item("Test Item For Process Loss RM", {"is_stock_item": 1}).name
|
||||
|
||||
bom = make_bom(
|
||||
item=item_code,
|
||||
raw_materials=[rm_item_code],
|
||||
with_operations=1,
|
||||
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_name,
|
||||
"workstation": workstation_name,
|
||||
"description": "Test Data",
|
||||
"operating_cost": 100,
|
||||
"time_in_mins": 40,
|
||||
}
|
||||
|
||||
bom.append("operations", operation)
|
||||
bom.save()
|
||||
bom.submit()
|
||||
>>>>>>> 38ed425ee2 (fix: last SLE not updated in the file)
|
||||
|
||||
work_order = make_wo_order_test_record(
|
||||
item=bom.item,
|
||||
|
||||
@@ -263,17 +263,11 @@ def update_args_in_repost_item_valuation(
|
||||
items_to_be_repost,
|
||||
repost_affected_transaction,
|
||||
item_wh_wise_last_posted_sle=None,
|
||||
only_affected_transaction=False,
|
||||
):
|
||||
file_name = ""
|
||||
has_file = False
|
||||
|
||||
if not 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:
|
||||
file_name = get_reposting_file_name(doc.doctype, doc.name)
|
||||
# frappe.delete_doc("File", file_name, ignore_permissions=True, delete_permanently=True)
|
||||
@@ -288,15 +282,14 @@ def update_args_in_repost_item_valuation(
|
||||
file_name,
|
||||
)
|
||||
|
||||
if not only_affected_transaction or not has_file:
|
||||
doc.db_set(
|
||||
{
|
||||
"current_index": index,
|
||||
"items_to_be_repost": frappe.as_json(items_to_be_repost),
|
||||
"total_reposting_count": len(items_to_be_repost),
|
||||
"reposting_data_file": doc.reposting_data_file,
|
||||
}
|
||||
)
|
||||
doc.db_set(
|
||||
{
|
||||
"current_index": index,
|
||||
"items_to_be_repost": frappe.as_json(items_to_be_repost),
|
||||
"total_reposting_count": len(items_to_be_repost),
|
||||
"reposting_data_file": doc.reposting_data_file,
|
||||
}
|
||||
)
|
||||
|
||||
if not frappe.flags.in_test:
|
||||
frappe.db.commit()
|
||||
@@ -577,13 +570,9 @@ class update_entries_after:
|
||||
self.update_bin()
|
||||
else:
|
||||
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())
|
||||
|
||||
while _item_wh_sle:
|
||||
self.initialize_reposting()
|
||||
sle_dict = _item_wh_sle.pop(0)
|
||||
self.repost_stock_ledgers(sle_dict)
|
||||
|
||||
item_wh_sles = self.sort_sles(self.item_wh_wise_last_posted_sle.values())
|
||||
self.initialize_reposting()
|
||||
self.repost_stock_ledgers(item_wh_sles)
|
||||
self.update_bin()
|
||||
self.reset_vouchers_and_idx()
|
||||
self.update_data_in_repost()
|
||||
@@ -618,8 +607,19 @@ class update_entries_after:
|
||||
)
|
||||
}
|
||||
|
||||
def repost_stock_ledgers(self, sle_dict=None):
|
||||
self._sles = self.get_future_entries_to_repost(sle_dict)
|
||||
def _get_future_entries_to_repost(self, item_wh_sles):
|
||||
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):
|
||||
self._sles = deque(self._sles)
|
||||
@@ -627,10 +627,13 @@ class update_entries_after:
|
||||
i = 0
|
||||
while self._sles:
|
||||
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:
|
||||
continue
|
||||
|
||||
i += 1
|
||||
item_wh_key = (sle.item_code, sle.warehouse)
|
||||
if item_wh_key not in self.prev_sle_dict:
|
||||
self.prev_sle_dict[item_wh_key] = get_previous_sle_of_current_voucher(sle)
|
||||
@@ -644,7 +647,7 @@ class update_entries_after:
|
||||
self.include_dependant_sle_in_reposting(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)
|
||||
|
||||
def sort_sles(self, sles):
|
||||
@@ -726,7 +729,6 @@ class update_entries_after:
|
||||
self.items_to_be_repost,
|
||||
self.repost_affected_transaction,
|
||||
self.item_wh_wise_last_posted_sle,
|
||||
only_affected_transaction=True,
|
||||
)
|
||||
|
||||
if not frappe.flags.in_test:
|
||||
@@ -982,6 +984,9 @@ class update_entries_after:
|
||||
):
|
||||
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:
|
||||
self.repost_affected_transaction.add((sle.voucher_type, sle.voucher_no))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user