From 74b15fae91a220e2b1ab6f29f6e86001743eac0d Mon Sep 17 00:00:00 2001 From: Camilo Rodriguez Date: Thu, 30 Nov 2017 05:37:17 +0000 Subject: [PATCH] CRM-21498: Implement Option to Change Status of Linked Cases --- CRM/Case/BAO/Case.php | 5 ++- CRM/Case/Form/Activity/ChangeCaseStatus.php | 20 ++++++++++-- .../Case/Form/Activity/ChangeCaseStatus.tpl | 32 +++++++++++++++++-- 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/CRM/Case/BAO/Case.php b/CRM/Case/BAO/Case.php index 89c77bd94f..e6eeedd37f 100644 --- a/CRM/Case/BAO/Case.php +++ b/CRM/Case/BAO/Case.php @@ -2000,7 +2000,8 @@ SELECT civicrm_contact.id as casemanager_id, SELECT relCase.id as id, civicrm_case_type.title as case_type, client.display_name as client_name, - client.id as client_id + client.id as client_id, + relCase.status_id FROM civicrm_case relCase INNER JOIN civicrm_case_contact relCaseContact ON ( relCase.id = relCaseContact.case_id ) INNER JOIN civicrm_contact client ON ( client.id = relCaseContact.contact_id ) @@ -2010,6 +2011,7 @@ SELECT civicrm_contact.id as casemanager_id, $dao = CRM_Core_DAO::executeQuery($query); $contactViewUrl = CRM_Utils_System::url("civicrm/contact/view", "reset=1&cid="); $hasViewContact = CRM_Core_Permission::giveMeAllACLs(); + $statuses = CRM_Case_BAO_Case::buildOptions('status_id'); while ($dao->fetch()) { $caseView = NULL; @@ -2027,6 +2029,7 @@ SELECT civicrm_contact.id as casemanager_id, 'case_id' => $dao->id, 'case_type' => $dao->case_type, 'client_name' => $clientView, + 'case_status' => $statuses[$dao->status_id], 'links' => $caseView, ); } diff --git a/CRM/Case/Form/Activity/ChangeCaseStatus.php b/CRM/Case/Form/Activity/ChangeCaseStatus.php index 9cf971ea7c..b23b7183bb 100644 --- a/CRM/Case/Form/Activity/ChangeCaseStatus.php +++ b/CRM/Case/Form/Activity/ChangeCaseStatus.php @@ -45,6 +45,12 @@ class CRM_Case_Form_Activity_ChangeCaseStatus { if (!isset($form->_caseId)) { CRM_Core_Error::fatal(ts('Case Id not found.')); } + + $form->addElement('checkbox', 'updateLinkedCases', NULL, NULL, array('class' => 'select-row')); + + $caseID = CRM_Utils_Array::first($form->_caseId); + $cases = CRM_Case_BAO_Case::getRelatedCases($caseID); + $form->assign('linkedCases', $cases); } /** @@ -136,23 +142,33 @@ class CRM_Case_Form_Activity_ChangeCaseStatus { /** * Process the form submission. * - * * @param CRM_Core_Form $form * @param array $params */ public static function beginPostProcess(&$form, &$params) { $params['id'] = CRM_Utils_Array::value('case_id', $params); + + if ($params['updateLinkedCases'] === '1') { + $caseID = CRM_Utils_Array::first($form->_caseId); + $cases = CRM_Case_BAO_Case::getRelatedCases($caseID); + + foreach ($cases as $currentCase) { + if ($currentCase['status_id'] != $params['case_status_id']) { + $form->_caseId[] = $currentCase['case_id']; + } + } + } } /** * Process the form submission. * - * * @param CRM_Core_Form $form * @param array $params * @param CRM_Activity_BAO_Activity $activity */ public static function endPostProcess(&$form, &$params, $activity) { + $groupingValues = CRM_Core_OptionGroup::values('case_status', FALSE, TRUE, FALSE, NULL, 'value'); // Set case end_date if we're closing the case. Clear end_date if we're (re)opening it. diff --git a/templates/CRM/Case/Form/Activity/ChangeCaseStatus.tpl b/templates/CRM/Case/Form/Activity/ChangeCaseStatus.tpl index 8f1ad08a19..5070b1d57c 100644 --- a/templates/CRM/Case/Form/Activity/ChangeCaseStatus.tpl +++ b/templates/CRM/Case/Form/Activity/ChangeCaseStatus.tpl @@ -24,14 +24,40 @@ +--------------------------------------------------------------------+ *} {* Template for "Change Case Status" activities. *} -
+
{$form.case_status_id.label} - {$form.case_status_id.html} + {$form.case_status_id.html} + {if sizeof($linkedCases) > 0} + + {ts}Update Linked Cases Status?{/ts} + {$form.updateLinkedCases.html} + + + + + + + + + + + {foreach from=$linkedCases item="linkedCase"} + + + + + + + {/foreach} +
IDCase ClientCase TypeStatus
{$linkedCase.case_id}{$linkedCase.client_name}{$linkedCase.case_type}{$linkedCase.case_status}
+ + + {/if} {if $groupTree} {include file="CRM/Custom/Form/CustomData.tpl" noPostCustomButton=1} {/if} -
+
-- 2.25.1