mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-13 14:41:53 +00:00
fix(selling): preserve explicit UOM during item selection
(cherry picked from commit e8c890a844)
# Conflicts:
# erpnext/utilities/transaction_base.py
This commit is contained in:
@@ -72,7 +72,7 @@ class TestReactivity(ERPNextTestSuite):
|
|||||||
item.barcode = "OLD-BARCODE"
|
item.barcode = "OLD-BARCODE"
|
||||||
item.pricing_rules = "OLD-PRICING-RULE"
|
item.pricing_rules = "OLD-PRICING-RULE"
|
||||||
item.item_code = new_item.name
|
item.item_code = new_item.name
|
||||||
sales_order.process_item_selection(item.idx)
|
sales_order.process_item_selection(item.idx, reset_item_details=True)
|
||||||
|
|
||||||
self.assertEqual(item.uom, "Kg")
|
self.assertEqual(item.uom, "Kg")
|
||||||
self.assertEqual(item.stock_uom, "Kg")
|
self.assertEqual(item.stock_uom, "Kg")
|
||||||
@@ -82,3 +82,25 @@ class TestReactivity(ERPNextTestSuite):
|
|||||||
self.assertIsNone(item.barcode)
|
self.assertIsNone(item.barcode)
|
||||||
self.assertFalse(item.pricing_rules)
|
self.assertFalse(item.pricing_rules)
|
||||||
self.assertEqual((item.qty, item.warehouse, item.delivery_date), row_state)
|
self.assertEqual((item.qty, item.warehouse, item.delivery_date), row_state)
|
||||||
|
|
||||||
|
def test_programmatic_item_selection_preserves_explicit_uom(self):
|
||||||
|
from erpnext.accounts.doctype.sales_invoice.test_sales_invoice import create_sales_invoice
|
||||||
|
from erpnext.stock.doctype.item.test_item import make_item
|
||||||
|
|
||||||
|
item = make_item(
|
||||||
|
properties={
|
||||||
|
"is_stock_item": 0,
|
||||||
|
"stock_uom": "Kg",
|
||||||
|
"sales_uom": "Nos",
|
||||||
|
"weight_per_unit": 2,
|
||||||
|
"weight_uom": "Kg",
|
||||||
|
},
|
||||||
|
uoms=[{"uom": "Nos", "conversion_factor": 10}],
|
||||||
|
)
|
||||||
|
sales_invoice = create_sales_invoice(item_code=item.name, uom="Kg", do_not_save=True)
|
||||||
|
|
||||||
|
sales_invoice.process_item_selection(sales_invoice.items[0].idx)
|
||||||
|
|
||||||
|
self.assertEqual(sales_invoice.items[0].uom, "Kg")
|
||||||
|
self.assertEqual(sales_invoice.items[0].conversion_factor, 1)
|
||||||
|
self.assertEqual(sales_invoice.items[0].stock_qty, sales_invoice.items[0].qty)
|
||||||
|
|||||||
@@ -761,6 +761,7 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe
|
|||||||
method: "process_item_selection",
|
method: "process_item_selection",
|
||||||
args: {
|
args: {
|
||||||
item_idx: item.idx,
|
item_idx: item.idx,
|
||||||
|
reset_item_details: true,
|
||||||
},
|
},
|
||||||
callback: function (r) {
|
callback: function (r) {
|
||||||
if (!r.exc) {
|
if (!r.exc) {
|
||||||
|
|||||||
@@ -350,23 +350,28 @@ class TransactionBase(StatusUpdater):
|
|||||||
)
|
)
|
||||||
|
|
||||||
@frappe.whitelist()
|
@frappe.whitelist()
|
||||||
|
<<<<<<< HEAD
|
||||||
def process_item_selection(self, item_idx):
|
def process_item_selection(self, item_idx):
|
||||||
|
=======
|
||||||
|
def process_item_selection(self, item_idx: int, reset_item_details: bool = False):
|
||||||
|
>>>>>>> e8c890a844 (fix(selling): preserve explicit UOM during item selection)
|
||||||
# Server side 'item' doc. Update this to reflect in UI
|
# Server side 'item' doc. Update this to reflect in UI
|
||||||
item_obj = self.get("items", {"idx": item_idx})[0]
|
item_obj = self.get("items", {"idx": item_idx})[0]
|
||||||
|
|
||||||
if not item_obj.item_code:
|
if not item_obj.item_code:
|
||||||
return
|
return
|
||||||
|
|
||||||
# Do not carry item-specific values from the previously selected item.
|
if cint(reset_item_details):
|
||||||
for fieldname in (
|
# Do not carry item-specific values from the previously selected item.
|
||||||
"weight_per_unit",
|
for fieldname in (
|
||||||
"weight_uom",
|
"weight_per_unit",
|
||||||
"uom",
|
"weight_uom",
|
||||||
"conversion_factor",
|
"uom",
|
||||||
"barcode",
|
"conversion_factor",
|
||||||
"pricing_rules",
|
"barcode",
|
||||||
):
|
"pricing_rules",
|
||||||
item_obj.set(fieldname, None)
|
):
|
||||||
|
item_obj.set(fieldname, None)
|
||||||
|
|
||||||
# 'item_details' has latest item related values
|
# 'item_details' has latest item related values
|
||||||
item_details = self.fetch_item_details(item_obj)
|
item_details = self.fetch_item_details(item_obj)
|
||||||
|
|||||||
Reference in New Issue
Block a user