test: Purchase Receipt Received Qty
This commit is contained in:
parent
afe1c45f7f
commit
05ec7cce82
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
|
|
||||||
import frappe
|
import frappe
|
||||||
from frappe import _, msgprint
|
from frappe import _, msgprint, ValidationError
|
||||||
from frappe.contacts.doctype.address.address import get_address_display
|
from frappe.contacts.doctype.address.address import get_address_display
|
||||||
from frappe.utils import cint, cstr, flt, getdate
|
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.get_item_details import get_conversion_factor
|
||||||
from erpnext.stock.utils import get_incoming_rate
|
from erpnext.stock.utils import get_incoming_rate
|
||||||
|
|
||||||
|
class QtyMismatchError(ValidationError): pass
|
||||||
|
|
||||||
class BuyingController(StockController, Subcontracting):
|
class BuyingController(StockController, Subcontracting):
|
||||||
|
|
||||||
@ -367,7 +368,8 @@ class BuyingController(StockController, Subcontracting):
|
|||||||
# Check Received Qty = Accepted Qty + Rejected Qty
|
# Check Received Qty = Accepted Qty + Rejected Qty
|
||||||
val = flt(d.qty) + flt(d.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"))):
|
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):
|
def validate_negative_quantity(self, item_row, field_list):
|
||||||
if self.is_return:
|
if self.is_return:
|
||||||
|
@ -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.serial_no.serial_no import SerialNoDuplicateError, get_serial_nos
|
||||||
from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
|
from erpnext.stock.doctype.warehouse.test_warehouse import create_warehouse
|
||||||
from erpnext.stock.stock_ledger import SerialNoExistsInFutureTransaction
|
from erpnext.stock.stock_ledger import SerialNoExistsInFutureTransaction
|
||||||
|
from erpnext.controllers.buying_controller import QtyMismatchError
|
||||||
from erpnext.tests.utils import ERPNextTestCase
|
from erpnext.tests.utils import ERPNextTestCase
|
||||||
|
|
||||||
|
|
||||||
@ -22,6 +23,22 @@ class TestPurchaseReceipt(ERPNextTestCase):
|
|||||||
def setUp(self):
|
def setUp(self):
|
||||||
frappe.db.set_value("Buying Settings", None, "allow_multiple_items", 1)
|
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):
|
def test_reverse_purchase_receipt_sle(self):
|
||||||
|
|
||||||
pr = make_purchase_receipt(qty=0.5, item_code="_Test Item Home Desktop 200")
|
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.return_against = args.return_against
|
||||||
pr.apply_putaway_rule = args.apply_putaway_rule
|
pr.apply_putaway_rule = args.apply_putaway_rule
|
||||||
qty = args.qty or 5
|
qty = args.qty or 5
|
||||||
received_qty = args.received_qty or qty
|
rejected_qty = args.rejected_qty or 0
|
||||||
rejected_qty = args.rejected_qty or flt(received_qty) - flt(qty)
|
received_qty = args.received_qty or flt(rejected_qty) + flt(qty)
|
||||||
|
|
||||||
item_code = args.item or args.item_code or "_Test Item"
|
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"
|
uom = args.uom or frappe.db.get_value("Item", item_code, "stock_uom") or "_Test UOM"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user