fix(stock): remove empty delivery stops after mapping (#58896)

Co-authored-by: Mihir Kandoi <kandoimihir@gmail.com>
(cherry picked from commit 4b23cee2ea)
This commit is contained in:
pandiyan
2026-09-09 12:54:10 +05:30
parent a4a2e5e36c
commit ca33019fdf
2 changed files with 33 additions and 1 deletions

View File

@@ -54,6 +54,11 @@ class DeliveryTrip(Document):
self.update_status()
self.update_delivery_notes(delete=True)
def after_mapping(self, source_doc):
for stop in self.delivery_stops[:]:
if not any(stop.get(df.fieldname) for df in stop.meta.fields):
self.remove(stop)
def validate(self):
if self._action == "submit" and not self.driver:
frappe.throw(_("A driver must be set to submit."))
@@ -80,7 +85,7 @@ class DeliveryTrip(Document):
def validate_stop_addresses(self):
for stop in self.delivery_stops:
if not stop.customer_address:
if stop.address and not stop.customer_address:
stop.customer_address = get_address_display(frappe.get_doc("Address", stop.address).as_dict())
def validate_delivery_note_not_draft(self):

View File

@@ -6,6 +6,7 @@ import frappe
from frappe.utils import add_days, flt, now_datetime, nowdate
import erpnext
from erpnext.stock.doctype.delivery_note.delivery_note import make_delivery_trip
from erpnext.stock.doctype.delivery_trip.delivery_trip import (
get_contact_and_address,
notify_customers,
@@ -108,6 +109,32 @@ class TestDeliveryTrip(ERPNextTestSuite):
self.delivery_trip.save()
self.assertEqual(self.delivery_trip.status, "Completed")
def map_delivery_note_onto_trip(self, existing_stop):
from erpnext.stock.doctype.delivery_note.test_delivery_note import create_delivery_note
delivery_note = create_delivery_note()
trip = frappe.new_doc("Delivery Trip")
trip.append("delivery_stops", existing_stop)
return delivery_note, make_delivery_trip(delivery_note.name, trip)
def test_mapping_drops_placeholder_stop(self):
delivery_note, trip = self.map_delivery_note_onto_trip({})
self.assertEqual(len(trip.delivery_stops), 1)
self.assertEqual(trip.delivery_stops[0].delivery_note, delivery_note.name)
def test_mapping_keeps_partially_filled_stop(self):
_, trip = self.map_delivery_note_onto_trip({"customer": "_Test Customer"})
self.assertEqual(len(trip.delivery_stops), 2)
self.assertIsNone(trip.delivery_stops[0].delivery_note)
def test_stop_without_address_throws_mandatory_error(self):
self.delivery_trip.append("delivery_stops", {"customer": "_Test Customer"})
self.assertRaises(frappe.MandatoryError, self.delivery_trip.save)
def create_address(driver):
if not frappe.db.exists("Address", {"address_title": "_Test Address for Driver"}):