mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-04 05:58:27 +00:00
Merge pull request #51075 from frappe/mergify/bp/version-15/pr-51072
fix(accounts): handle drop ship in company linked address validation (backport #51034) (backport #51072)
This commit is contained in:
@@ -312,13 +312,30 @@ class AccountsController(TransactionBase):
|
|||||||
|
|
||||||
def validate_company_linked_addresses(self):
|
def validate_company_linked_addresses(self):
|
||||||
address_fields = []
|
address_fields = []
|
||||||
if self.doctype in ("Quotation", "Sales Order", "Delivery Note", "Sales Invoice"):
|
sales_doctypes = ("Quotation", "Sales Order", "Delivery Note", "Sales Invoice")
|
||||||
|
purchase_doctypes = ("Purchase Order", "Purchase Receipt", "Purchase Invoice", "Supplier Quotation")
|
||||||
|
|
||||||
|
if self.doctype in sales_doctypes:
|
||||||
address_fields = ["dispatch_address_name", "company_address"]
|
address_fields = ["dispatch_address_name", "company_address"]
|
||||||
elif self.doctype in ("Purchase Order", "Purchase Receipt", "Purchase Invoice", "Supplier Quotation"):
|
elif self.doctype in purchase_doctypes:
|
||||||
address_fields = ["billing_address", "shipping_address"]
|
address_fields = ["billing_address", "shipping_address"]
|
||||||
|
|
||||||
|
if not address_fields:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Determine if drop ship applies
|
||||||
|
is_drop_ship = self.doctype in {
|
||||||
|
"Purchase Order",
|
||||||
|
"Sales Order",
|
||||||
|
"Sales Invoice",
|
||||||
|
} and self.is_drop_ship(self.items)
|
||||||
|
|
||||||
for field in address_fields:
|
for field in address_fields:
|
||||||
address = self.get(field)
|
address = self.get(field)
|
||||||
|
|
||||||
|
if (field in ["dispatch_address_name", "shipping_address"]) and is_drop_ship:
|
||||||
|
continue
|
||||||
|
|
||||||
if address and not frappe.db.exists(
|
if address and not frappe.db.exists(
|
||||||
"Dynamic Link",
|
"Dynamic Link",
|
||||||
{
|
{
|
||||||
@@ -329,11 +346,15 @@ class AccountsController(TransactionBase):
|
|||||||
},
|
},
|
||||||
):
|
):
|
||||||
frappe.throw(
|
frappe.throw(
|
||||||
_("{0} does not belong to the {1}.").format(
|
_("{0} does not belong to the Company {1}.").format(
|
||||||
_(self.meta.get_label(field)), bold(self.company)
|
_(self.meta.get_label(field)), bold(self.company)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def is_drop_ship(items):
|
||||||
|
return any(item.delivered_by_supplier for item in items)
|
||||||
|
|
||||||
def set_default_letter_head(self):
|
def set_default_letter_head(self):
|
||||||
if hasattr(self, "letter_head") and not self.letter_head:
|
if hasattr(self, "letter_head") and not self.letter_head:
|
||||||
self.letter_head = frappe.db.get_value("Company", self.company, "default_letter_head")
|
self.letter_head = frappe.db.get_value("Company", self.company, "default_letter_head")
|
||||||
|
|||||||
@@ -2434,6 +2434,7 @@ class TestAccountsController(FrappeTestCase):
|
|||||||
|
|
||||||
def test_company_linked_address(self):
|
def test_company_linked_address(self):
|
||||||
from erpnext.crm.doctype.prospect.test_prospect import make_address
|
from erpnext.crm.doctype.prospect.test_prospect import make_address
|
||||||
|
from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order
|
||||||
|
|
||||||
company_address = make_address(
|
company_address = make_address(
|
||||||
address_title="Company", address_type="Shipping", address_line1="100", city="Mumbai"
|
address_title="Company", address_type="Shipping", address_line1="100", city="Mumbai"
|
||||||
@@ -2462,3 +2463,16 @@ class TestAccountsController(FrappeTestCase):
|
|||||||
po.billing_address = company_address.name
|
po.billing_address = company_address.name
|
||||||
po.reload()
|
po.reload()
|
||||||
po.save()
|
po.save()
|
||||||
|
|
||||||
|
si = make_sales_order(do_not_save=1, do_not_submit=1)
|
||||||
|
si.dispatch_address_name = supplier_billing.name
|
||||||
|
self.assertRaises(frappe.ValidationError, si.save)
|
||||||
|
si.items[0].delivered_by_supplier = 1
|
||||||
|
si.items[0].supplier = "_Test Supplier"
|
||||||
|
si.save()
|
||||||
|
|
||||||
|
po = create_purchase_order(do_not_save=True)
|
||||||
|
po.shipping_address = customer_shipping.name
|
||||||
|
self.assertRaises(frappe.ValidationError, po.save)
|
||||||
|
po.items[0].delivered_by_supplier = 1
|
||||||
|
po.save()
|
||||||
|
|||||||
Reference in New Issue
Block a user