Exemplo n.º 1
0
 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();
             }
         }
     }
 }
Exemplo n.º 2
0
 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']);
 }