mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-07 15:25:19 +00:00
fix: incoming rate should be zero for rejected items (#44857)
(cherry picked from commit a515a399cf)
# Conflicts:
# erpnext/stock/doctype/purchase_receipt/purchase_receipt.py
This commit is contained in:
@@ -1746,6 +1746,52 @@ class TestPurchaseInvoice(FrappeTestCase, StockTestMixin):
|
||||
|
||||
frappe.db.set_single_value("Buying Settings", "maintain_same_rate", 1)
|
||||
|
||||
def test_adjust_incoming_rate_for_rejected_item(self):
|
||||
frappe.db.set_single_value("Buying Settings", "maintain_same_rate", 0)
|
||||
|
||||
frappe.db.set_single_value("Buying Settings", "set_landed_cost_based_on_purchase_invoice_rate", 1)
|
||||
|
||||
# Cost of Item is zero in Purchase Receipt
|
||||
pr = make_purchase_receipt(qty=1, rejected_qty=1, rate=0)
|
||||
|
||||
stock_value_difference = frappe.db.get_value(
|
||||
"Stock Ledger Entry",
|
||||
{"voucher_type": "Purchase Receipt", "voucher_no": pr.name},
|
||||
"stock_value_difference",
|
||||
)
|
||||
self.assertEqual(stock_value_difference, 0)
|
||||
|
||||
pi = create_purchase_invoice_from_receipt(pr.name)
|
||||
for row in pi.items:
|
||||
row.qty = 1
|
||||
row.rate = 150
|
||||
|
||||
pi.save()
|
||||
pi.submit()
|
||||
|
||||
stock_value_difference = frappe.db.get_value(
|
||||
"Stock Ledger Entry",
|
||||
{"voucher_type": "Purchase Receipt", "voucher_no": pr.name, "warehouse": pi.items[0].warehouse},
|
||||
"stock_value_difference",
|
||||
)
|
||||
self.assertEqual(stock_value_difference, 150)
|
||||
|
||||
stock_value_difference = frappe.db.get_value(
|
||||
"Stock Ledger Entry",
|
||||
{
|
||||
"voucher_type": "Purchase Receipt",
|
||||
"voucher_no": pr.name,
|
||||
"warehouse": pi.items[0].rejected_warehouse,
|
||||
},
|
||||
"stock_value_difference",
|
||||
)
|
||||
|
||||
self.assertFalse(stock_value_difference)
|
||||
|
||||
frappe.db.set_single_value("Buying Settings", "set_landed_cost_based_on_purchase_invoice_rate", 0)
|
||||
|
||||
frappe.db.set_single_value("Buying Settings", "maintain_same_rate", 1)
|
||||
|
||||
def test_item_less_defaults(self):
|
||||
pi = frappe.new_doc("Purchase Invoice")
|
||||
pi.supplier = "_Test Supplier"
|
||||
|
||||
@@ -750,6 +750,63 @@ class PurchaseReceipt(BuyingController):
|
||||
pr_doc = self if (pr == self.name) else frappe.get_doc("Purchase Receipt", pr)
|
||||
update_billing_percentage(pr_doc, update_modified=update_modified)
|
||||
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
def reserve_stock_for_sales_order(self):
|
||||
if (
|
||||
self.is_return
|
||||
or not frappe.db.get_single_value("Stock Settings", "enable_stock_reservation")
|
||||
or not frappe.db.get_single_value(
|
||||
"Stock Settings", "auto_reserve_stock_for_sales_order_on_purchase"
|
||||
)
|
||||
):
|
||||
return
|
||||
|
||||
self.reload() # reload to get the Serial and Batch Bundle Details
|
||||
|
||||
so_items_details_map = {}
|
||||
for item in self.items:
|
||||
if item.sales_order and item.sales_order_item:
|
||||
item_details = {
|
||||
"sales_order_item": item.sales_order_item,
|
||||
"item_code": item.item_code,
|
||||
"warehouse": item.warehouse,
|
||||
"qty_to_reserve": item.stock_qty,
|
||||
"from_voucher_no": item.parent,
|
||||
"from_voucher_detail_no": item.name,
|
||||
"serial_and_batch_bundle": item.serial_and_batch_bundle,
|
||||
}
|
||||
so_items_details_map.setdefault(item.sales_order, []).append(item_details)
|
||||
|
||||
if so_items_details_map:
|
||||
if get_datetime(f"{self.posting_date} {self.posting_time}") > get_datetime():
|
||||
return frappe.msgprint(
|
||||
_("Cannot create Stock Reservation Entries for future dated Purchase Receipts.")
|
||||
)
|
||||
|
||||
for so, items_details in so_items_details_map.items():
|
||||
so_doc = frappe.get_doc("Sales Order", so)
|
||||
so_doc.create_stock_reservation_entries(
|
||||
items_details=items_details,
|
||||
from_voucher_type="Purchase Receipt",
|
||||
notify=True,
|
||||
)
|
||||
|
||||
def enable_recalculate_rate_in_sles(self):
|
||||
rejected_warehouses = frappe.get_all(
|
||||
"Purchase Receipt Item", filters={"parent": self.name}, pluck="rejected_warehouse"
|
||||
)
|
||||
|
||||
sle_table = frappe.qb.DocType("Stock Ledger Entry")
|
||||
(
|
||||
frappe.qb.update(sle_table)
|
||||
.set(sle_table.recalculate_rate, 1)
|
||||
.where(sle_table.voucher_no == self.name)
|
||||
.where(sle_table.voucher_type == "Purchase Receipt")
|
||||
.where(sle_table.warehouse.notin(rejected_warehouses))
|
||||
).run()
|
||||
|
||||
>>>>>>> a515a399cf (fix: incoming rate should be zero for rejected items (#44857))
|
||||
|
||||
def get_stock_value_difference(voucher_no, voucher_detail_no, warehouse):
|
||||
return frappe.db.get_value(
|
||||
|
||||
Reference in New Issue
Block a user