/**
  * 
  * @return CRM_Mainactivity_DebriefingConfig
  */
 public static function singleton()
 {
     if (!self::$singleton) {
         self::$singleton = new CRM_Mainactivity_DebriefingConfig();
     }
     return self::$singleton;
 }
 public static function createDebriefingActivities($new_status_id, $old_status_id, $case_type_id, $id)
 {
     if ($new_status_id == $old_status_id) {
         return;
         //case status is not changed
     }
     $config = CRM_Mainactivity_DebriefingConfig::singleton();
     if (!$config->isValidCaseType($case_type_id)) {
         return;
     }
     /*
      * issue 2857 if new status = expertDebriefingStatus then create debriefing activity for expert
      */
     if (method_exists('CRM_Casestatus_Execution', 'createDebriefingActivity')) {
         if ($new_status_id == $config->getDebriefingExpertStatusId()) {
             $expertDebriefingCaseTypes = $config->getDebriefingExpertActivityTypes();
             if (array_key_exists($case_type_id, $expertDebriefingCaseTypes)) {
                 CRM_Casestatus_Execution::createDebriefingActivity($id, $case_type_id);
             }
         }
     }
     if ($new_status_id != $config->getCaseStatusDebriefing('value', $case_type_id)) {
         return;
     }
     $date = new DateTime();
     foreach ($config->getDebriefingActivityDefinition($case_type_id) as $act) {
         $role_contact_id = false;
         try {
             $relParams = array('case_id' => $id, 'relationship_type_id' => $act['relationship_type_id'], 'is_active' => 1, 'return' => 'contact_id_b');
             $role_contact_id = civicrm_api3('Relationship', 'getvalue', $relParams);
         } catch (Exception $e) {
             //do nothing
         }
         $act_params = array();
         $act_params['activity_type_id'] = $act['activity_type_id'];
         $act_params['case_id'] = $id;
         // only create debriefing activity if no activity of the type on the case
         $activityCount = civicrm_api3("CaseActivity", "Getcount", $act_params);
         if ($activityCount == 0) {
             $act_params['status_id'] = 1;
             //scheduled
             $act_params['activity_date_time'] = $date->format('YmdHis');
             if ($role_contact_id) {
                 $act_params['assignee_contact_id'] = $role_contact_id;
             }
             civicrm_api3('Activity', 'create', $act_params);
         }
     }
 }
 public function getSummaryAndFollowUpByCaseId($case_id)
 {
     $default = array('follow_up' => '', 'summary' => '');
     $case = civicrm_api3('Case', 'getsingle', array('id' => $case_id));
     $case_type_id = $case['case_type_id'];
     $config = CRM_Mainactivity_DebriefingConfig::singleton();
     if (!$config->isValidCaseType($case_type_id)) {
         return $default;
     }
     $case_type_name = $config->getCaseTypeNameByCaseTypeId($case_type_id);
     $case_definition = $config->debriefingActivityDefinition();
     $defintion = $config->getDebriefingActivityDefinition($case_type_id);
     if (!isset($case_definition[$case_type_name])) {
         return false;
     }
     foreach ($case_definition[$case_type_name] as $key => $act) {
         if (!$act['is_debriefing_cc'] || !$act['summary_field_name'] || !$act['follow_up_field_name']) {
             continue;
         }
         $activity_type_id = $defintion[$key]['activity_type_id'];
         $cg = $this->getCustomGroupByName($act['custom_group_name']);
         $follow_up = $this->getCustomFieldByName($cg['id'], $act['follow_up_field_name']);
         $summary = $this->getCustomFieldByName($cg['id'], $act['summary_field_name']);
         $sql = "SELECT cg.{$follow_up['column_name']} as follow_up, cg.{$summary['column_name']} as summary\n              FROM `{$cg['table_name']}` cg\n              INNER JOIN civicrm_activity a ON cg.entity_id = a.id\n              INNER JOIN civicrm_case_activity ca on ca.activity_id = a.id\n              WHERE a.is_deleted = 0 and a.is_current_revision = 1 and a.activity_type_id = %1 and ca.case_id = %2 ORDER BY a.activity_date_time ASC";
         $params[1] = array($activity_type_id, 'Integer');
         $params[2] = array($case_id, 'Integer');
         $dao = CRM_Core_DAO::executeQuery($sql, $params);
         while ($dao->fetch()) {
             $default['follow_up'] .= $dao->follow_up . "\r\n\r\n";
             $default['summary'] .= $dao->summary . "\r\n\r\n";
         }
     }
     $default['follow_up'] = trim($default['follow_up']);
     $default['summary'] = trim($default['summary']);
     return $default;
 }