test: Purchase Receipt Received Qty

This commit is contained in:
marination 2021-11-15 17:49:14 +05:30
parent afe1c45f7f
commit 05ec7cce82
2 changed files with 23 additions and 4 deletions

View File

@ -3,7 +3,7 @@
import frappe
from frappe import _, msgprint
from frappe import _, msgprint, ValidationError
from frappe.contacts.doctype.address.address import get_address_display
from frappe.utils import cint, cstr, flt, getdate
@ -16,6 +16,7 @@ from erpnext.controllers.subcontracting import Subcontracting
from erpnext.stock.get_item_details import get_conversion_factor
from erpnext.stock.utils import get_incoming_rate
class QtyMismatchError(ValidationError): pass
class BuyingController(StockController, Subcontracting):
@ -367,7 +368,8 @@ class BuyingController(StockController, Subcontracting):
# Check Received Qty = Accepted Qty + Rejected Qty
val = flt(d.qty) + flt(d.rejected_qty)
if (flt(val, d.precision("received_qty")) != flt(d.received_qty, d.precision("received_qty"))):
frappe.throw(_("Accepted + Rejected Qty must be equal to Received quantity for Item {0}").format(d.item_code))
message = _("Row #{0}: Received Qty must be equal to Accepted + Rejected Qty for Item {1}").format(d.idx, d.item_code)
frappe.throw(msg=message, title=_("Mismatch"), exc=QtyMismatchError)
def validate_negative_quantity(self, item_row, field_list):
if self.is_return:

View File

@ -15,6 +15,7 @@ from erpnext.stock.doctype.purchase_receipt.purchase_receipt import make_purchas
from erpnext.stock.doctype.serial_no.serial_no import SerialNoDuplicateError, get_serial_nos
from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
from erpnext.stock.stock_ledger import SerialNoExistsInFutureTransaction
from erpnext.controllers.buying_controller import QtyMismatchError
from erpnext.tests.utils import ERPNextTestCase
@ -22,6 +23,22 @@ class TestPurchaseReceipt(ERPNextTestCase):
def setUp(self):
frappe.db.set_value("Buying Settings", None, "allow_multiple_items", 1)
def test_purchase_receipt_received_qty(self):
"""
1. Test if received qty is validated against accepted + rejected
2. Test if received qty is auto set on save
"""
pr = make_purchase_receipt(qty=1, rejected_qty=1, received_qty=3,
item_code="_Test Item Home Desktop 200", do_not_save=True)
self.assertRaises(QtyMismatchError, pr.save)
pr.items[0].received_qty = 0
pr.save()
self.assertEqual(pr.items[0].received_qty, 2)
# teardown
pr.delete()
def test_reverse_purchase_receipt_sle(self):
pr = make_purchase_receipt(qty=0.5, item_code="_Test Item Home Desktop 200")
@ -1225,8 +1242,8 @@ def make_purchase_receipt(**args):
pr.return_against = args.return_against
pr.apply_putaway_rule = args.apply_putaway_rule
qty = args.qty or 5
received_qty = args.received_qty or qty
rejected_qty = args.rejected_qty or flt(received_qty) - flt(qty)
rejected_qty = args.rejected_qty or 0
received_qty = args.received_qty or flt(rejected_qty) + flt(qty)
item_code = args.item or args.item_code or "_Test Item"
uom = args.uom or frappe.db.get_value("Item", item_code, "stock_uom") or "_Test UOM"