public function onChange(CRM_HRCaseUtils_Analyzer $analyzer, $objectRef) { if (isset($objectRef->activity_type_id)) { // Get activity type name & status of the activity being completed $activityTypeGroup = civicrm_api3('option_group', 'get', array('name' => 'activity_type')); $activityType = array('value' => $objectRef->activity_type_id, 'option_group_id' => $activityTypeGroup['id']); $activityTypeID = civicrm_api3('option_value', 'get', $activityType); $activityTypeID = $activityTypeID['values'][$activityTypeID['id']]['name']; $activityStatusGroup = civicrm_api3('option_group', 'get', array('name' => 'activity_status')); $activityStatus = array('value' => $objectRef->status_id, 'option_group_id' => $activityStatusGroup['id']); $activityStatusID = civicrm_api3('option_value', 'get', $activityStatus); $activityStatusID = $activityStatusID['values'][$activityStatusID['id']]['name']; // Schedule Interview Prospect activity if ($activityTypeID == 'Open Case' && $activityStatusID == 'Completed') { if ($analyzer->hasActivity($activityTypeID, $activityStatusID)) { $nextActivity = 'Interview Prospect'; // Get the activity ID for Interview Prospect $activityID = array('name' => $nextActivity, 'option_group_id' => $activityTypeGroup['id']); $activityTypeID = civicrm_api3('option_value', 'get', $activityID); $activityTypeID = $activityTypeID['values'][$activityTypeID['id']]['value']; $params = self::buildParams($activityTypeID, $nextActivity, $objectRef); } } elseif ($activityTypeID == 'Interview Prospect' && $activityStatusID == 'Completed') { if ($analyzer->hasActivity($activityTypeID, $activityStatusID)) { $nextActivity = 'Background Check'; // Get the activity ID for Background Check $activityID = array('name' => $nextActivity, 'option_group_id' => $activityTypeGroup['id']); $activityTypeID = civicrm_api3('option_value', 'get', $activityID); $activityTypeID = $activityTypeID['values'][$activityTypeID['id']]['value']; $params = self::buildParams($activityTypeID, $nextActivity, $objectRef); } } elseif ($activityTypeID == 'Background Check' && $activityStatusID == 'Completed') { return; } if (isset($params)) { $followupActivity = CRM_Activity_BAO_Activity::createFollowupActivity($objectRef->original_id, $params); if ($followupActivity) { $caseParams = array('activity_id' => $followupActivity->id, 'case_id' => $objectRef->case_id); CRM_Case_BAO_Case::processCaseActivity($caseParams); $analyzer->flush(); } } } }
public function testPipeline() { $contact = $this->callAPISuccess('contact', 'create', array('first_name' => 'JohnHR', 'contact_type' => 'Individual', 'last_name' => 'Smith', 'email' => '*****@*****.**')); // create case $newParams = array('case_type_id' => $this->casetype_id, 'creator_id' => $contact['id'], 'status_id' => 1, 'subject' => 'Case for HR Unit Test', 'contact_id' => $contact['id'], 'version' => 3, 'label' => 'test', 'name' => 'test'); // assign case to contact $caseBAO = CRM_Case_BAO_Case::create($newParams); $newParams['id'] = $caseBAO->id; $caseContact = new CRM_Case_DAO_CaseContact(); $caseContact->case_id = $caseBAO->id; $caseContact->contact_id = $contact['id']; $caseContact->find(TRUE); $caseContact->save(); // create activity $paramsActivity = array('source_contact_id' => $contact['id'], 'activity_type_id' => $this->opencase_activityId, 'subject' => 'Open Case', 'activity_date_time' => '2011-06-02 14:36:13', 'status_id' => 1, 'priority_id' => 2, 'duration' => 120, 'location' => 'Pensulvania', 'details' => 'A test activity', 'case_id' => $caseBAO->id, 'is_current_revision' => 1); $resultActivity = civicrm_api3('activity', 'create', $paramsActivity); $opencase_activityIds = $resultActivity['id']; $analyzer = new CRM_HRCaseUtils_Analyzer($caseBAO->id, $resultActivity['id']); $analyzer->case_id = $caseBAO->id; $caseStatus = $caseBAO->status_id; $activityStatus = $resultActivity['values'][$resultActivity['id']]['status_id']; $activityTypeId = $resultActivity['values'][$resultActivity['id']]['activity_type_id']; $this->assertEquals('1', $caseStatus); // Check case stauts id $activityCheck = $analyzer->getSingleActivity($activityTypeId); $this->assertEquals('1', $activityCheck[1]['status_id']); // Check activity stauts id $this->assertFalse($analyzer->hasActivity('Interview Prospect')); $this->assertFalse($analyzer->hasActivity('Background Check')); $paramsActivity = array('id' => $opencase_activityIds, 'source_contact_id' => $contact['id'], 'activity_type_id' => $this->opencase_activityId, 'subject' => 'Open Case', 'activity_date_time' => '2011-06-02 14:36:13', 'status_id' => 2, 'priority_id' => 2, 'duration' => 120, 'location' => 'Pensulvania', 'details' => 'A test activity', 'case_id' => $caseBAO->id, 'is_current_revision' => 1, 'original_id' => $opencase_activityIds); $resultActivity = civicrm_api3('activity', 'create', $paramsActivity); $paramsActivityGet = array('activity_type_id' => $this->activityIds['Interview Prospect'], 'version' => 3); $resultActivityGet = civicrm_api3('activity', 'get', $paramsActivityGet); $analyzer = new CRM_HRCaseUtils_Analyzer($caseBAO->id, $resultActivityGet['values'][$resultActivityGet['id']]['id']); $ActivityIP = $analyzer->getSingleActivity($this->activityIds['Interview Prospect']); $this->assertEquals('2', $resultActivity['values'][$resultActivity['id']]['status_id']); $this->assertEquals('1', $ActivityIP[1]['status_id']); $this->assertFalse($analyzer->hasActivity('Background Check')); // get second activity $params = array('activity_type_id' => $this->activityIds['Interview Prospect'], 'sequential' => 1, 'version' => 3); $result = civicrm_api3('activity', 'get', $params); $paramsActivity2 = array('id' => $result['id'], 'status_id' => 'Completed', 'version' => 3, 'case_id' => $caseBAO->id, 'activity_type_id' => $this->activityIds['Interview Prospect'], 'original_id' => $result['id']); $resultActivity2 = civicrm_api3('activity', 'create', $paramsActivity2); $paramsActivityGet1 = array('activity_type_id' => $this->activityIds['Background Check'], 'version' => 3); $resultActivityGet1 = civicrm_api3('activity', 'get', $paramsActivityGet1); $analyzer = new CRM_HRCaseUtils_Analyzer($caseBAO->id, $resultActivityGet1['values'][$resultActivityGet1['id']]['id']); $ActivityIP1 = $analyzer->getSingleActivity($this->activityIds['Background Check']); $this->assertEquals('2', $resultActivity2['values'][$resultActivity2['id']]['status_id']); $this->assertEquals('1', $ActivityIP1[1]['status_id']); // get second activity $params = array('activity_type_id' => $this->activityIds['Background Check'], 'sequential' => 1, 'version' => 3); $result = civicrm_api3('activity', 'get', $params); $paramsActivity3 = array('id' => $result['id'], 'status_id' => 'Completed', 'version' => 3, 'case_id' => $caseBAO->id, 'activity_type_id' => $this->activityIds['Background Check'], 'original_id' => $result['id']); $resultActivity3 = civicrm_api3('activity', 'create', $paramsActivity3); $this->assertEquals('2', $resultActivity3['values'][$resultActivity3['id']]['status_id']); }