test: added test cases
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
index 28ed8b7..140eaaf 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -528,32 +528,6 @@
self.update_advance_tax_references()
self.process_common_party_accounting()
- self.adjust_incoming_rate_of_purchase_receipt()
-
- def adjust_incoming_rate_of_purchase_receipt(self):
- if (
- not frappe.db.get_single_value(
- "Buying Settings", "adjust_incoming_rate_based_on_purchase_invoice_rate"
- )
- and self.is_subcontracted
- ):
- return
-
- purchase_receipts = []
- for item in self.items:
- if item.purchase_receipt and item.purchase_receipt not in purchase_receipts:
- purchase_receipts.append(item.purchase_receipt)
-
- for purchase_receipt in purchase_receipts:
- doc = frappe.get_doc("Purchase Receipt", purchase_receipt)
- doc.docstatus = 2
- doc.update_stock_ledger(allow_negative_stock=True, via_landed_cost_voucher=True)
- doc.make_gl_entries_on_cancel()
-
- doc.docstatus = 1
- doc.update_stock_ledger(allow_negative_stock=True, via_landed_cost_voucher=True)
- doc.make_gl_entries()
- doc.repost_future_sle_and_gle()
def make_gl_entries(self, gl_entries=None, from_repost=False):
if not gl_entries:
@@ -1449,7 +1423,6 @@
"Tax Withheld Vouchers",
)
self.update_advance_tax_references(cancel=1)
- self.adjust_incoming_rate_of_purchase_receipt()
def update_project(self):
project_list = []
diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
index f901257..d20eddf 100644
--- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
+++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py
@@ -1523,6 +1523,94 @@
company.enable_provisional_accounting_for_non_stock_items = 0
company.save()
+ def test_adjust_incoming_rate(self):
+ frappe.db.set_single_value("Buying Settings", "maintain_same_rate", 0)
+
+ frappe.db.set_single_value(
+ "Buying Settings", "adjust_incoming_rate_based_on_purchase_invoice_rate", 1
+ )
+
+ # Increase the cost of the item
+
+ pr = make_purchase_receipt(qty=1, rate=100)
+
+ 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, 100)
+
+ pi = create_purchase_invoice_from_receipt(pr.name)
+ for row in pi.items:
+ 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},
+ "stock_value_difference",
+ )
+ self.assertEqual(stock_value_difference, 150)
+
+ # Reduce the cost of the item
+
+ pr = make_purchase_receipt(qty=1, rate=100)
+
+ 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, 100)
+
+ pi = create_purchase_invoice_from_receipt(pr.name)
+ for row in pi.items:
+ row.rate = 50
+
+ pi.save()
+ pi.submit()
+
+ 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, 50)
+
+ frappe.db.set_single_value(
+ "Buying Settings", "adjust_incoming_rate_based_on_purchase_invoice_rate", 0
+ )
+
+ # Don't adjust incoming rate
+
+ pr = make_purchase_receipt(qty=1, rate=100)
+
+ 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, 100)
+
+ pi = create_purchase_invoice_from_receipt(pr.name)
+ for row in pi.items:
+ row.rate = 50
+
+ pi.save()
+ pi.submit()
+
+ 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, 100)
+
+ frappe.db.set_single_value("Buying Settings", "maintain_same_rate", 1)
+
def test_item_less_defaults(self):
pi = frappe.new_doc("Purchase Invoice")
diff --git a/erpnext/buying/doctype/buying_settings/buying_settings.py b/erpnext/buying/doctype/buying_settings/buying_settings.py
index be1ebde..d14ffc9 100644
--- a/erpnext/buying/doctype/buying_settings/buying_settings.py
+++ b/erpnext/buying/doctype/buying_settings/buying_settings.py
@@ -21,3 +21,10 @@
self.get("supp_master_name") == "Naming Series",
hide_name_field=False,
)
+
+ def before_save(self):
+ self.check_maintain_same_rate()
+
+ def check_maintain_same_rate(self):
+ if self.maintain_same_rate:
+ self.adjust_incoming_rate_based_on_purchase_invoice_rate = 0