From d510d79db2209d3246a735c9165f3e56cdef3cb0 Mon Sep 17 00:00:00 2001 From: "B. Endres" Date: Fri, 24 Feb 2023 16:15:50 +0100 Subject: [PATCH] [#13] ignore relationships with contacts in trash --- CRM/Householdmerge/Logic/Scanner.php | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/CRM/Householdmerge/Logic/Scanner.php b/CRM/Householdmerge/Logic/Scanner.php index 87b2b71..adf37dd 100644 --- a/CRM/Householdmerge/Logic/Scanner.php +++ b/CRM/Householdmerge/Logic/Scanner.php @@ -140,16 +140,22 @@ protected function findCandidates($count) { // try joining valid, active household relationships... $RELATIONSHIP_JOIN = " - LEFT JOIN civicrm_relationship relation_ab ON contact_id = relation_ab.contact_id_a AND relation_ab.relationship_type_id IN ($relationship_id_list) AND (relation_ab.end_date IS NULL OR relation_ab.end_date > NOW()) AND relation_ab.is_active = 1 - LEFT JOIN civicrm_contact relation_ab_contact ON relation_ab_contact.id = relation_ab.contact_id_b - LEFT JOIN civicrm_relationship relation_ba ON contact_id = relation_ba.contact_id_b AND relation_ba.relationship_type_id IN ($relationship_id_list) AND (relation_ba.end_date IS NULL OR relation_ba.end_date > NOW()) AND relation_ba.is_active = 1 - LEFT JOIN civicrm_contact relation_ba_contact ON relation_ba_contact.id = relation_ba.contact_id_a + LEFT JOIN civicrm_relationship relation_ab ON contact_id = relation_ab.contact_id_a + AND relation_ab.relationship_type_id IN ($relationship_id_list) + AND (relation_ab.end_date IS NULL OR relation_ab.end_date > NOW()) + AND relation_ab.is_active = 1 + AND (relation_ab.contact_id_a IN (SELECT id FROM civicrm_contact WHERE is_deleted = 0)) + LEFT JOIN civicrm_relationship relation_ba ON contact_id = relation_ba.contact_id_b + AND relation_ba.relationship_type_id IN ($relationship_id_list) + AND (relation_ba.end_date IS NULL OR relation_ba.end_date > NOW()) + AND relation_ba.is_active = 1 + AND (relation_ba.contact_id_a IN (SELECT id FROM civicrm_contact WHERE is_deleted = 0)) "; // ...and then make sure there are none $RELATIONSHIP_CONDITION = " - AND (relation_ab_contact.is_deleted IS NULL OR relation_ab_contact.is_deleted = 0) -- NO RELATIONSHIP WITH DELETED CONTACT A EXISTS - AND (relation_ba_contact.is_deleted IS NULL OR relation_ba_contact.is_deleted = 0) -- NO RELATIONSHIP WITH DELETED CONTACT B EXISTS"; + AND relation_ab.id IS NULL AND relation_ba.id IS NULL -- NO ACTIVE HH RELATIONSHIP EXISTS + "; } $candidates = [];