diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py index 9b74092df35a..d6478328ca4a 100644 --- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py @@ -1940,11 +1940,7 @@ def test_inter_company_transaction(self): self.assertEqual(target_doc.company, "_Test Company 1") self.assertEqual(target_doc.supplier, "_Test Internal Supplier") - def test_sle_if_target_warehouse_exists_accidentally(self): - """ - Check if inward entry exists if Target Warehouse accidentally exists - but Customer is not an internal customer. - """ + def test_sle_for_target_warehouse(self): se = make_stock_entry( item_code="138-CMS Shoe", target="Finished Goods - _TC", @@ -1965,9 +1961,9 @@ def test_sle_if_target_warehouse_exists_accidentally(self): sles = frappe.get_all("Stock Ledger Entry", filters={"voucher_no": si.name}, fields=["name", "actual_qty"]) - # check if only one SLE for outward entry is created - self.assertEqual(len(sles), 1) - self.assertEqual(sles[0].actual_qty, -1) + # check if both SLEs are created + self.assertEqual(len(sles), 2) + self.assertEqual(sum(d.actual_qty for d in sles), 0.0) # tear down si.cancel() diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index 0158a1120f99..e779e4d6c169 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -424,7 +424,7 @@ def update_stock_ledger(self): or (cint(self.is_return) and self.docstatus==2)): sl_entries.append(self.get_sle_for_source_warehouse(d)) - if d.target_warehouse and self.get("is_internal_customer"): + if d.target_warehouse: sl_entries.append(self.get_sle_for_target_warehouse(d)) if d.warehouse and ((not cint(self.is_return) and self.docstatus==2) @@ -559,6 +559,12 @@ def validate_target_warehouse(self): frappe.throw(_("Row {0}: Delivery Warehouse ({1}) and Customer Warehouse ({2}) can not be same") .format(d.idx, warehouse, warehouse)) + if not self.get("is_internal_customer") and any(d.get("target_warehouse") for d in items): + msg = _("Target Warehouse set for some items but the customer is not an internal customer.") + msg += " " + _("This {} will be treated as material transfer.").format(_(self.doctype)) + frappe.msgprint(msg, title="Internal Transfer") + + def validate_items(self): # validate items to see if they have is_sales_item enabled from erpnext.controllers.buying_controller import validate_item_type diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index 5542cd00d4cb..f75b52cec8eb 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -185,7 +185,6 @@ def validate_warehouse(self): if not d['warehouse'] and frappe.db.get_value("Item", d['item_code'], "is_stock_item") == 1: frappe.throw(_("Warehouse required for stock Item {0}").format(d["item_code"])) - def update_current_stock(self): if self.get("_action") and self._action != "update_after_submit": for d in self.get('items'): diff --git a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json index b05090a237ef..a96c29925e5b 100644 --- a/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json +++ b/erpnext/stock/doctype/delivery_note_item/delivery_note_item.json @@ -468,7 +468,7 @@ "width": "100px" }, { - "depends_on": "eval:parent.is_internal_customer", + "depends_on": "eval:parent.is_internal_customer || doc.target_warehouse", "fieldname": "target_warehouse", "fieldtype": "Link", "hidden": 1, @@ -759,7 +759,7 @@ "index_web_pages_for_search": 1, "istable": 1, "links": [], - "modified": "2021-02-23 01:04:08.588104", + "modified": "2021-10-05 12:12:44.018872", "modified_by": "Administrator", "module": "Stock", "name": "Delivery Note Item", @@ -767,4 +767,4 @@ "permissions": [], "sort_field": "modified", "sort_order": "DESC" -} \ No newline at end of file +}