mirror of
https://github.com/frappe/erpnext.git
synced 2026-09-19 03:17:55 +00:00
Revert "feat: update item button addition for quotation (backport #50976) (#5…"
This reverts commit e2a1a7a36d.
This commit is contained in:
@@ -123,13 +123,6 @@ erpnext.selling.QuotationController = class QuotationController extends erpnext.
|
||||
frappe.datetime.get_diff(doc.valid_till, frappe.datetime.get_today()) >= 0)
|
||||
) {
|
||||
this.frm.add_custom_button(__("Sales Order"), () => this.make_sales_order(), __("Create"));
|
||||
this.frm.add_custom_button(__("Update Items"), () => {
|
||||
erpnext.utils.update_child_items({
|
||||
frm: this.frm,
|
||||
child_docname: "items",
|
||||
cannot_add_row: false,
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
if (doc.status !== "Ordered" && this.frm.has_perm("write")) {
|
||||
|
||||
@@ -614,7 +614,6 @@ def handle_mandatory_error(e, customer, lead_name):
|
||||
frappe.throw(message, title=_("Mandatory Missing"))
|
||||
|
||||
|
||||
@frappe.whitelist()
|
||||
def get_ordered_items(quotation: str):
|
||||
return frappe._dict(
|
||||
frappe.get_all(
|
||||
|
||||
@@ -1,114 +1,17 @@
|
||||
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||
# License: GNU General Public License v3. See license.txt
|
||||
|
||||
import json
|
||||
|
||||
import frappe
|
||||
from frappe.tests.utils import FrappeTestCase, change_settings
|
||||
from frappe.utils import add_days, add_months, flt, getdate, nowdate
|
||||
|
||||
from erpnext.controllers.accounts_controller import InvalidQtyError, update_child_qty_rate
|
||||
from erpnext.selling.doctype.quotation.quotation import make_sales_order
|
||||
from erpnext.controllers.accounts_controller import InvalidQtyError
|
||||
from erpnext.setup.utils import get_exchange_rate
|
||||
|
||||
test_dependencies = ["Product Bundle"]
|
||||
|
||||
|
||||
class TestQuotation(FrappeTestCase):
|
||||
def test_update_child_quotation_add_item(self):
|
||||
from erpnext.stock.doctype.item.test_item import make_item
|
||||
|
||||
item_1 = make_item("_Test Item")
|
||||
item_2 = make_item("_Test Item 1")
|
||||
|
||||
item_list = [
|
||||
{"item_code": item_1.item_code, "warehouse": "", "qty": 10, "rate": 300},
|
||||
{"item_code": item_2.item_code, "warehouse": "", "qty": 5, "rate": 400},
|
||||
]
|
||||
|
||||
qo = make_quotation(item_list=item_list)
|
||||
first_item = qo.get("items")[0]
|
||||
second_item = qo.get("items")[1]
|
||||
trans_item = json.dumps(
|
||||
[
|
||||
{
|
||||
"item_code": first_item.item_code,
|
||||
"rate": first_item.rate,
|
||||
"qty": 11,
|
||||
"docname": first_item.name,
|
||||
},
|
||||
{
|
||||
"item_code": second_item.item_code,
|
||||
"rate": second_item.rate,
|
||||
"qty": second_item.qty,
|
||||
"docname": second_item.name,
|
||||
},
|
||||
{"item_code": "_Test Item 2", "rate": 100, "qty": 7},
|
||||
]
|
||||
)
|
||||
|
||||
update_child_qty_rate("Quotation", trans_item, qo.name)
|
||||
qo.reload()
|
||||
self.assertEqual(qo.get("items")[0].qty, 11)
|
||||
self.assertEqual(qo.get("items")[-1].rate, 100)
|
||||
|
||||
def test_update_child_disallow_rate_change(self):
|
||||
qo = make_quotation(qty=4)
|
||||
trans_item = json.dumps(
|
||||
[
|
||||
{
|
||||
"item_code": qo.items[0].item_code,
|
||||
"rate": 5000,
|
||||
"qty": qo.items[0].qty,
|
||||
"docname": qo.items[0].name,
|
||||
}
|
||||
]
|
||||
)
|
||||
self.assertRaises(frappe.ValidationError, update_child_qty_rate, "Quotation", trans_item, qo.name)
|
||||
|
||||
def test_update_child_removing_item(self):
|
||||
qo = make_quotation(qty=10)
|
||||
sales_order = make_sales_order(qo.name)
|
||||
sales_order.delivery_date = nowdate()
|
||||
|
||||
trans_item = json.dumps(
|
||||
[
|
||||
{
|
||||
"item_code": qo.items[0].item_code,
|
||||
"rate": qo.items[0].rate,
|
||||
"qty": qo.items[0].qty,
|
||||
"docname": qo.items[0].name,
|
||||
},
|
||||
{"item_code": "_Test Item 2", "rate": 100, "qty": 7},
|
||||
]
|
||||
)
|
||||
|
||||
update_child_qty_rate("Quotation", trans_item, qo.name)
|
||||
sales_order.submit()
|
||||
qo.reload()
|
||||
self.assertEqual(qo.status, "Partially Ordered")
|
||||
|
||||
trans_item = json.dumps([{"item_code": "_Test Item 2", "rate": 100, "qty": 7}])
|
||||
|
||||
# check if items having a sales order can be removed
|
||||
self.assertRaises(frappe.ValidationError, update_child_qty_rate, "Quotation", trans_item, qo.name)
|
||||
|
||||
trans_item = json.dumps(
|
||||
[
|
||||
{
|
||||
"item_code": qo.items[0].item_code,
|
||||
"rate": qo.items[0].rate,
|
||||
"qty": qo.items[0].qty,
|
||||
"docname": qo.items[0].name,
|
||||
}
|
||||
]
|
||||
)
|
||||
|
||||
# remove item with no sales order
|
||||
update_child_qty_rate("Quotation", trans_item, qo.name)
|
||||
qo.reload()
|
||||
self.assertEqual(len(qo.get("items")), 1)
|
||||
|
||||
def test_quotation_qty(self):
|
||||
qo = make_quotation(qty=0, do_not_save=True)
|
||||
with self.assertRaises(InvalidQtyError):
|
||||
|
||||
Reference in New Issue
Block a user