mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-13 02:01:21 +00:00
Merge pull request #53694 from frappe/mergify/bp/version-16-hotfix/pr-53649
This commit is contained in:
@@ -267,8 +267,8 @@ class StatusUpdater(Document):
|
|||||||
self.global_amount_allowance = None
|
self.global_amount_allowance = None
|
||||||
|
|
||||||
for args in self.status_updater:
|
for args in self.status_updater:
|
||||||
if "target_ref_field" not in args:
|
if "target_ref_field" not in args or args.get("validate_qty") is False:
|
||||||
# if target_ref_field is not specified, the programmer does not want to validate qty / amount
|
# if target_ref_field is not specified or validate_qty is explicitly set to False, skip validation
|
||||||
continue
|
continue
|
||||||
|
|
||||||
items_to_validate = []
|
items_to_validate = []
|
||||||
|
|||||||
@@ -186,6 +186,7 @@ class PurchaseReceipt(BuyingController):
|
|||||||
"target_ref_field": "stock_qty",
|
"target_ref_field": "stock_qty",
|
||||||
"source_field": "stock_qty",
|
"source_field": "stock_qty",
|
||||||
"percent_join_field": "material_request",
|
"percent_join_field": "material_request",
|
||||||
|
"validate_qty": False,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"source_dt": "Purchase Receipt Item",
|
"source_dt": "Purchase Receipt Item",
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ from erpnext.controllers.accounts_controller import InvalidQtyError
|
|||||||
from erpnext.controllers.buying_controller import QtyMismatchError
|
from erpnext.controllers.buying_controller import QtyMismatchError
|
||||||
from erpnext.stock import get_warehouse_account_map
|
from erpnext.stock import get_warehouse_account_map
|
||||||
from erpnext.stock.doctype.item.test_item import create_item, make_item
|
from erpnext.stock.doctype.item.test_item import create_item, make_item
|
||||||
|
from erpnext.stock.doctype.material_request.material_request import make_purchase_order
|
||||||
from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_purchase_invoice
|
from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_purchase_invoice
|
||||||
from erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle import (
|
from erpnext.stock.doctype.serial_and_batch_bundle.serial_and_batch_bundle import (
|
||||||
SerialNoDuplicateError,
|
SerialNoDuplicateError,
|
||||||
@@ -33,6 +34,40 @@ class TestPurchaseReceipt(ERPNextTestSuite):
|
|||||||
frappe.local.future_sle = {}
|
frappe.local.future_sle = {}
|
||||||
self.load_test_records("Purchase Receipt")
|
self.load_test_records("Purchase Receipt")
|
||||||
|
|
||||||
|
def test_purchase_receipt_skips_validation(self):
|
||||||
|
"""
|
||||||
|
Test that validation is skipped when over delivery receipt allowance is reduced after PO submission
|
||||||
|
and PR can be submitted with higher qty than MR.
|
||||||
|
"""
|
||||||
|
item = create_item("Test item for validation")
|
||||||
|
mr = frappe.new_doc("Material Request")
|
||||||
|
mr.material_request_type = "Purchase"
|
||||||
|
mr.company = "_Test Company"
|
||||||
|
mr.price_list = "_Test Price List"
|
||||||
|
mr.append(
|
||||||
|
"items",
|
||||||
|
{
|
||||||
|
"item_code": item.name,
|
||||||
|
"item_name": item.item_name,
|
||||||
|
"item_group": item.item_group,
|
||||||
|
"schedule_date": add_days(today(), 1),
|
||||||
|
"qty": 100,
|
||||||
|
"uom": item.stock_uom,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
mr.insert()
|
||||||
|
mr.submit()
|
||||||
|
frappe.db.set_value("Item", item.name, "over_delivery_receipt_allowance", 200)
|
||||||
|
po = make_purchase_order(mr.name)
|
||||||
|
po.supplier = "_Test Supplier"
|
||||||
|
po.items[0].qty = 300
|
||||||
|
po.save()
|
||||||
|
po.submit()
|
||||||
|
frappe.db.set_value("Item", item.name, "over_delivery_receipt_allowance", 20)
|
||||||
|
pr = make_purchase_receipt(qty=300, item_code=item.name, do_not_save=True)
|
||||||
|
pr.save()
|
||||||
|
pr.submit()
|
||||||
|
|
||||||
def test_purchase_receipt_qty(self):
|
def test_purchase_receipt_qty(self):
|
||||||
pr = make_purchase_receipt(qty=0, rejected_qty=0, do_not_save=True)
|
pr = make_purchase_receipt(qty=0, rejected_qty=0, do_not_save=True)
|
||||||
with self.assertRaises(InvalidQtyError):
|
with self.assertRaises(InvalidQtyError):
|
||||||
|
|||||||
Reference in New Issue
Block a user