);
}
+/**
+ * Merge 2 cases.
+ *
+ * @param array $params
+ *
+ * @throws API_Exception
+ * @return array
+ */
+function civicrm_api3_case_merge($params) {
+ $clients1 = CRM_Case_BAO_Case::getCaseClients($params['case_id_1']);
+ $clients2 = CRM_Case_BAO_Case::getCaseClients($params['case_id_2']);
+ CRM_Case_BAO_Case::mergeCases($clients1[0], $params['case_id_1'], $clients2[0], $params['case_id_2']);
+ return civicrm_api3_create_success();
+}
+
+/**
+ * Adjust Metadata for merge action.
+ *
+ * @param array $params
+ * Array of parameters determined by getfields.
+ */
+function _civicrm_api3_case_merge_spec(&$params) {
+ $params['case_id_1'] = array(
+ 'title' => 'Case ID 1',
+ 'description' => 'Id of main case',
+ 'type' => CRM_Utils_Type::T_INT,
+ 'api.required' => 1,
+ );
+ $params['case_id_2'] = array(
+ 'title' => 'Case ID 2',
+ 'description' => 'Id of second case',
+ 'type' => CRM_Utils_Type::T_INT,
+ 'api.required' => 1,
+ );
+}
+
/**
* Declare deprecated api functions.
*
$this->assertEquals('Follow up', $result['values'][1]['activity_type_id.name']);
}
+
+ /**
+ * Test the case merge function.
+ *
+ * 2 cases should be mergeable into 1
+ *
+ * @throws \Exception
+ */
+ public function testCaseMerge() {
+ $contact1 = $this->individualCreate(array(), 1);
+ $case1 = $this->callAPISuccess('Case', 'create', array(
+ 'contact_id' => $contact1,
+ 'subject' => "Test case 1",
+ 'case_type_id' => $this->caseTypeId,
+ ));
+ $case2 = $this->callAPISuccess('Case', 'create', array(
+ 'contact_id' => $contact1,
+ 'subject' => "Test case 2",
+ 'case_type_id' => $this->caseTypeId,
+ ));
+ $result = $this->callAPISuccess('Case', 'getcount', array('contact_id' => $contact1));
+ $this->assertEquals(2, $result);
+
+ $this->callAPISuccess('Case', 'merge', array('case_id_1' => $case1['id'], 'case_id_2' => $case2['id']));
+
+ $result = $this->callAPISuccess('Case', 'getsingle', array('id' => $case2['id']));
+ $this->assertEquals(1, $result['is_deleted']);
+ }
+
}