Skip to content

Commit

Permalink
CRM-20105 - Add merge function to case api
Browse files Browse the repository at this point in the history
  • Loading branch information
colemanw committed Apr 19, 2017
1 parent 8572e6d commit a6bc721
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 0 deletions.
3 changes: 3 additions & 0 deletions CRM/Core/Permission.php
Original file line number Diff line number Diff line change
Expand Up @@ -1019,6 +1019,9 @@ public static function getEntityActionPermissions() {
'restore' => array(
'administer CiviCase',
),
'merge' => array(
'administer CiviCase',
),
'default' => array(
// At minimum the user needs one of the following. Finer-grained access is controlled by CRM_Case_BAO_Case::addSelectWhereClause
array('access my cases and activities', 'access all cases and activities'),
Expand Down
36 changes: 36 additions & 0 deletions api/v3/Case.php
Original file line number Diff line number Diff line change
Expand Up @@ -398,6 +398,42 @@ function _civicrm_api3_case_addtimeline_spec(&$params) {
);
}

/**
* 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.
*
Expand Down
29 changes: 29 additions & 0 deletions tests/phpunit/api/v3/CaseTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -704,4 +704,33 @@ public function testCaseAddtimeline() {
$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']);
}

}

0 comments on commit a6bc721

Please sign in to comment.