From 0fd841b07dfbb958a1c4ae8349131b3325b15dc4 Mon Sep 17 00:00:00 2001 From: Jitendra Purohit Date: Wed, 28 Feb 2018 16:15:51 +0530 Subject: [PATCH] CRM-21815 - re-opening a civicase - Case Coordinator (and other roles) are not reinstated --- CRM/Case/BAO/Case.php | 9 +++++++-- CRM/Case/Form/Activity/ChangeCaseStatus.php | 2 +- tests/phpunit/api/v3/CaseTest.php | 8 ++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/CRM/Case/BAO/Case.php b/CRM/Case/BAO/Case.php index 91bebdf123..b00318abba 100644 --- a/CRM/Case/BAO/Case.php +++ b/CRM/Case/BAO/Case.php @@ -840,12 +840,13 @@ SELECT case_status.label AS case_status, status_id, civicrm_case_type.title AS c * @param int $caseID * Case id. * @param int $relationshipID + * @param bool $activeOnly * * @return array * case role / relationships * */ - public static function getCaseRoles($contactID, $caseID, $relationshipID = NULL) { + public static function getCaseRoles($contactID, $caseID, $relationshipID = NULL, $activeOnly = TRUE) { $query = ' SELECT rel.id as civicrm_relationship_id, con.sort_name as sort_name, @@ -861,7 +862,11 @@ SELECT case_status.label AS case_status, status_id, civicrm_case_type.title AS c LEFT JOIN civicrm_phone ON (civicrm_phone.contact_id = con.id AND civicrm_phone.is_primary = 1) LEFT JOIN civicrm_email ON (civicrm_email.contact_id = con.id AND civicrm_email.is_primary = 1) WHERE (rel.contact_id_a = %1 OR rel.contact_id_b = %1) AND rel.case_id = %2 - AND rel.is_active = 1 AND con.is_deleted = 0 AND (rel.end_date IS NULL OR rel.end_date > NOW())'; + AND con.is_deleted = 0'; + + if ($activeOnly) { + $query .= ' AND rel.is_active = 1 AND (rel.end_date IS NULL OR rel.end_date > NOW())'; + } $params = array( 1 => array($contactID, 'Positive'), diff --git a/CRM/Case/Form/Activity/ChangeCaseStatus.php b/CRM/Case/Form/Activity/ChangeCaseStatus.php index bb0d603f50..6358c29931 100644 --- a/CRM/Case/Form/Activity/ChangeCaseStatus.php +++ b/CRM/Case/Form/Activity/ChangeCaseStatus.php @@ -194,7 +194,7 @@ class CRM_Case_Form_Activity_ChangeCaseStatus { // Reopen case-specific relationships (roles) foreach ($params['target_contact_id'] as $cid) { - $rels = CRM_Case_BAO_Case::getCaseRoles($cid, $params['case_id']); + $rels = CRM_Case_BAO_Case::getCaseRoles($cid, $params['case_id'], NULL, FALSE); // FIXME: Is there an existing function? $query = 'UPDATE civicrm_relationship SET end_date=NULL WHERE id=%1'; foreach ($rels as $relId => $relData) { diff --git a/tests/phpunit/api/v3/CaseTest.php b/tests/phpunit/api/v3/CaseTest.php index 65c0154e95..60dd310696 100644 --- a/tests/phpunit/api/v3/CaseTest.php +++ b/tests/phpunit/api/v3/CaseTest.php @@ -185,6 +185,14 @@ class api_v3_CaseTest extends CiviCaseTestCase { foreach ($relationships['values'] as $key => $values) { $this->assertEquals($values['end_date'], date('Y-m-d')); } + + //Verify there are no active relationships. + $activeCaseRelationships = CRM_Case_BAO_Case::getCaseRoles($result['values'][$id]['client_id'][1], $id); + $this->assertEquals(count($activeCaseRelationships), 0, "Checking for empty array"); + + //Check if getCaseRoles() is able to return inactive relationships. + $caseRelationships = CRM_Case_BAO_Case::getCaseRoles($result['values'][$id]['client_id'][1], $id, NULL, FALSE); + $this->assertEquals(count($caseRelationships), 1); } /** -- 2.25.1