forked from frappe/erpnext
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: distribution of additional costs in mfg stock entry (frappe#27629)
* refactor: remove unnecessary list comprehensions * fix: correct cost distribution logic While apportioning costs same condition should be present on both sides so total value is representative of all items to be apportioned. Here while calculating incoming_items_cost only FG items are considered, but while apportioning all items with to_warehouse are considered. Solution: only apportion additional cost on FG items * test: test cost distribution * fix: patch for additional cost fix(patch): consider PCV while patching - consider Period closing voucher while patching - recomute rates for SLE of affected stock entries consider only FG/scrap item SLEs for recomputation of rates * fix: remove client side logic for addn cost All of this is done in python code hence removed client side code.
- Loading branch information
Showing
5 changed files
with
145 additions
and
64 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
76 changes: 76 additions & 0 deletions
76
erpnext/patches/v13_0/fix_additional_cost_in_mfg_stock_entry.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
from typing import List, NewType | ||
|
||
import frappe | ||
|
||
StockEntryCode = NewType("StockEntryCode", str) | ||
|
||
|
||
def execute(): | ||
stock_entry_codes = find_broken_stock_entries() | ||
|
||
for stock_entry_code in stock_entry_codes: | ||
patched_stock_entry = patch_additional_cost(stock_entry_code) | ||
create_repost_item_valuation(patched_stock_entry) | ||
|
||
|
||
def find_broken_stock_entries() -> List[StockEntryCode]: | ||
period_closing_date = frappe.db.get_value( | ||
"Period Closing Voucher", {"docstatus": 1}, "posting_date", order_by="posting_date desc" | ||
) | ||
|
||
stock_entries_to_patch = frappe.db.sql( | ||
""" | ||
select se.name, sum(sed.additional_cost) as item_additional_cost, se.total_additional_costs | ||
from `tabStock Entry` se | ||
join `tabStock Entry Detail` sed | ||
on sed.parent = se.name | ||
where | ||
se.docstatus = 1 and | ||
se.posting_date > %s | ||
group by | ||
sed.parent | ||
having | ||
item_additional_cost != se.total_additional_costs | ||
""", | ||
period_closing_date, | ||
as_dict=True, | ||
) | ||
|
||
return [d.name for d in stock_entries_to_patch] | ||
|
||
|
||
def patch_additional_cost(code: StockEntryCode): | ||
stock_entry = frappe.get_doc("Stock Entry", code) | ||
stock_entry.distribute_additional_costs() | ||
stock_entry.update_valuation_rate() | ||
stock_entry.set_total_incoming_outgoing_value() | ||
stock_entry.set_total_amount() | ||
stock_entry.db_update() | ||
for item in stock_entry.items: | ||
item.db_update() | ||
return stock_entry | ||
|
||
|
||
def create_repost_item_valuation(stock_entry): | ||
from erpnext.controllers.stock_controller import create_repost_item_valuation_entry | ||
|
||
# turn on recalculate flag so reposting corrects the incoming/outgoing rates. | ||
frappe.db.set_value( | ||
"Stock Ledger Entry", | ||
{"voucher_no": stock_entry.name, "actual_qty": (">", 0)}, | ||
"recalculate_rate", | ||
1, | ||
update_modified=False, | ||
) | ||
|
||
create_repost_item_valuation_entry( | ||
args=frappe._dict( | ||
{ | ||
"posting_date": stock_entry.posting_date, | ||
"posting_time": stock_entry.posting_time, | ||
"voucher_type": stock_entry.doctype, | ||
"voucher_no": stock_entry.name, | ||
"company": stock_entry.company, | ||
} | ||
) | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters