mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-25 21:05:19 +00:00
test: add tests for non stock item over billing against so/po
This commit is contained in:
@@ -2924,6 +2924,24 @@ class TestPurchaseInvoice(FrappeTestCase, StockTestMixin):
|
|||||||
# Test 4 - Since this PI is overbilled by 130% and only 120% is allowed, it will fail
|
# Test 4 - Since this PI is overbilled by 130% and only 120% is allowed, it will fail
|
||||||
self.assertRaises(frappe.ValidationError, pi.submit)
|
self.assertRaises(frappe.ValidationError, pi.submit)
|
||||||
|
|
||||||
|
@change_settings("Accounts Settings", {"over_billing_allowance": 0})
|
||||||
|
def test_non_stock_item_over_billing_against_po_is_blocked(self):
|
||||||
|
service_item = create_item(
|
||||||
|
"_Test Service Item Non Stock PI",
|
||||||
|
is_stock_item=0,
|
||||||
|
is_purchase_item=1,
|
||||||
|
).name
|
||||||
|
|
||||||
|
po = create_purchase_order(item_code=service_item, qty=5, rate=100, do_not_save=False)
|
||||||
|
po.submit()
|
||||||
|
|
||||||
|
pi = make_pi_from_po(po.name)
|
||||||
|
pi.items[0].qty = 10 # overbill by 100 %
|
||||||
|
pi.save()
|
||||||
|
|
||||||
|
with self.assertRaises(frappe.ValidationError):
|
||||||
|
pi.submit()
|
||||||
|
|
||||||
def test_discount_percentage_not_set_when_amount_is_manually_set(self):
|
def test_discount_percentage_not_set_when_amount_is_manually_set(self):
|
||||||
pi = make_purchase_invoice(do_not_save=True)
|
pi = make_purchase_invoice(do_not_save=True)
|
||||||
discount_amount = 7
|
discount_amount = 7
|
||||||
|
|||||||
@@ -3700,6 +3700,51 @@ class TestSalesInvoice(FrappeTestCase):
|
|||||||
self.assertTrue("cannot overbill" in str(err.exception).lower())
|
self.assertTrue("cannot overbill" in str(err.exception).lower())
|
||||||
dn.cancel()
|
dn.cancel()
|
||||||
|
|
||||||
|
@change_settings("Accounts Settings", {"over_billing_allowance": 0})
|
||||||
|
def test_non_stock_item_over_billing_against_so_is_blocked(self):
|
||||||
|
from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice as make_si_from_so
|
||||||
|
from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order
|
||||||
|
|
||||||
|
service_item = create_item(
|
||||||
|
"_Test Service Item Non Stock SI",
|
||||||
|
is_stock_item=0,
|
||||||
|
).name
|
||||||
|
|
||||||
|
so = make_sales_order(item_code=service_item, qty=5, rate=100)
|
||||||
|
so.submit()
|
||||||
|
|
||||||
|
si = make_si_from_so(so.name)
|
||||||
|
si.items[0].qty = 10 # overbill by 100 %
|
||||||
|
si.save()
|
||||||
|
|
||||||
|
with self.assertRaises(frappe.ValidationError):
|
||||||
|
si.submit()
|
||||||
|
|
||||||
|
@change_settings("Accounts Settings", {"over_billing_allowance": 0})
|
||||||
|
def test_non_stock_item_over_billing_against_so_from_quotation_is_blocked(self):
|
||||||
|
from erpnext.selling.doctype.quotation.quotation import make_sales_order as make_so_from_quotation
|
||||||
|
from erpnext.selling.doctype.quotation.test_quotation import make_quotation
|
||||||
|
from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice as make_si_from_so
|
||||||
|
|
||||||
|
service_item = create_item(
|
||||||
|
"_Test Service Item Non Stock SI Quot",
|
||||||
|
is_stock_item=0,
|
||||||
|
).name
|
||||||
|
|
||||||
|
quotation = make_quotation(item_code=service_item, qty=5, rate=100)
|
||||||
|
|
||||||
|
so = make_so_from_quotation(quotation.name)
|
||||||
|
so.delivery_date = frappe.utils.add_days(frappe.utils.today(), 7)
|
||||||
|
so.insert()
|
||||||
|
so.submit()
|
||||||
|
|
||||||
|
si = make_si_from_so(so.name)
|
||||||
|
si.items[0].qty = 10 # overbill by 100 %
|
||||||
|
si.save()
|
||||||
|
|
||||||
|
with self.assertRaises(frappe.ValidationError):
|
||||||
|
si.submit()
|
||||||
|
|
||||||
@change_settings(
|
@change_settings(
|
||||||
"Accounts Settings",
|
"Accounts Settings",
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user