worked on CRM-12012, added missing feature of copying relationships/case roles when...
authorKurund Jalmi <kurund@civicrm.org>
Sat, 16 Mar 2013 13:37:04 +0000 (19:07 +0530)
committerKurund Jalmi <kurund@civicrm.org>
Sat, 16 Mar 2013 19:31:30 +0000 (01:01 +0530)
CRM/Case/BAO/Case.php
CRM/Case/Page/AJAX.php

index 22929e467638d1f087bf78558a101cce7106146e..f5b83975091bcfa7548b2386dad98ff03baceae7 100644 (file)
@@ -3061,6 +3061,46 @@ WHERE id IN (' . implode(',', $copiedActivityIds) . ')';
         break;
     }
     return $sql;
+ }
+
+ /**
+  * Function to add/copy relationships, when new client is added for a case
+  *
+  * @param int $caseId case id
+  * @param int $contactId contact id / new client id
+  *
+  * @return void
+  */
+  static function addCaseRelationships($caseId, $contactId) {
+    // get the case role / relationships for the case
+    $caseRelationships = new CRM_Contact_DAO_Relationship();
+    $caseRelationships->case_id = $caseId;
+    $caseRelationships->find();
+    $relationshipTypes = array();
+
+    // make sure we don't add duplicate relationships of same relationship type.
+    while ($caseRelationships->fetch() && !in_array($caseRelationships->relationship_type_id, $relationshipTypes)) {
+      $values = array();
+      CRM_Core_DAO::storeValues($caseRelationships, $values);
+
+      // add relationship for new client.
+      $newRelationship = new CRM_Contact_DAO_Relationship();
+      $newRelationship->copyValues($values);
+      $newRelationship->id = NULL;
+      $newRelationship->case_id = $caseId;
+      $newRelationship->contact_id_a = $contactId;
+      $newRelationship->end_date = CRM_Utils_Date::isoToMysql($caseRelationships->end_date);
+      $newRelationship->start_date = CRM_Utils_Date::isoToMysql($caseRelationships->start_date);
+
+      // another check to avoid duplicate relationship, in cases where client is removed and re-added again.
+      if (!$newRelationship->find(TRUE)) {
+        $newRelationship->save();
+      }
+      $newRelationship->free();
+
+      // store relationship type of newly created relationship
+      $relationshipTypes[] = $caseRelationships->relationship_type_id;
+    }
   }
 }
 
index 9739f1f461d5b423d2b7a3e80982c8addeaca9bc..00c70611cd8ea9a77e28aabaf17f83d738d71a4f 100644 (file)
@@ -157,6 +157,9 @@ class CRM_Case_Page_AJAX {
 
     CRM_Case_BAO_Case::addCaseToContact($params);
 
+    // add case relationships
+    CRM_Case_BAO_Case::addCaseRelationships($caseId, $contactId);
+
     $session = CRM_Core_Session::singleton();
 
     $activityParams = array();