fix: Ignore PO on So cancel
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 14ad422..37b8f9d 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -823,7 +823,7 @@
 		for item in self.items:
 			so_items.append(item.name)
 
-		linked_po = frappe.get_all(
+		linked_po = list(set(frappe.get_all(
 			'Purchase Order Item',
 			filters = {
 				'sales_order': self.name,
@@ -831,7 +831,7 @@
 				'docstatus': ['<', 2]
 			},
 			pluck='parent'
-		)
+		)))
 
 		if linked_po:
 			frappe.db.set_value(
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index f692690..d46c46f 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -78,6 +78,8 @@
 		});
 
 		erpnext.queries.setup_warehouse_query(frm);
+
+		frm.ignore_doctypes_on_cancel_all = ['Purchase Order'];
 	},
 
 	delivery_date: function(frm) {