/** * * @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; }