CRM-15003 - Allow autocomplete to select closed cases
authorColeman Watts <coleman@civicrm.org>
Thu, 17 Jul 2014 12:09:56 +0000 (13:09 +0100)
committerColeman Watts <coleman@civicrm.org>
Thu, 17 Jul 2014 12:10:07 +0000 (13:10 +0100)
CRM/Case/BAO/Case.php
CRM/Case/Page/AJAX.php
css/civicrm.css
js/Common.js
templates/CRM/Activity/Form/Task/FileOnCase.tpl
templates/CRM/Case/Form/Activity/LinkCases.tpl
templates/CRM/Case/Form/ActivityToCase.tpl

index 74233ba5ed664e6377c0cd144466234427d293fd..0ca273ae2fec9439be96cc5d1961f9c326f005dd 100644 (file)
@@ -2038,9 +2038,9 @@ SELECT civicrm_contact.id as casemanager_id,
    *
    * @return array of case and related data keyed on case id
    */
-  static function getUnclosedCases($params = array(), $excludeCaseIds = array(), $excludeDeleted = TRUE) {
+  static function getUnclosedCases($params = array(), $excludeCaseIds = array(), $excludeDeleted = TRUE, $includeClosed = FALSE) {
     //params from ajax call.
-    $where = array('( ca.end_date is null )');
+    $where = array($includeClosed ? '(1)' : '(ca.end_date is null)');
     if ($caseType = CRM_Utils_Array::value('case_type', $params)) {
       $where[] = "( civicrm_case_type.title LIKE '%$caseType%' )";
     }
@@ -2079,15 +2079,18 @@ SELECT civicrm_contact.id as casemanager_id,
             ca.id,
             ca.subject as case_subject,
             civicrm_case_type.title as case_type,
-            ca.start_date as start_date
+            ca.start_date as start_date,
+            ca.end_date as end_date,
+            ca.status_id
       FROM  civicrm_case ca INNER JOIN civicrm_case_contact cc ON ca.id=cc.case_id
  INNER JOIN  civicrm_contact c ON cc.contact_id=c.id
  INNER JOIN  civicrm_case_type ON ca.case_type_id = civicrm_case_type.id
      WHERE  {$whereClause}
-  ORDER BY  c.sort_name
+  ORDER BY  c.sort_name, ca.end_date
             {$limitClause}
 ";
     $dao = CRM_Core_DAO::executeQuery($query);
+    $statuses = CRM_Case_PseudoConstant::caseStatus();
     $unclosedCases = array();
     while ($dao->fetch()) {
       if ($doFilterCases && !array_key_exists($dao->id, $filterCases)) {
@@ -2098,7 +2101,9 @@ SELECT civicrm_contact.id as casemanager_id,
         'case_type' => $dao->case_type,
         'contact_id' => $dao->contact_id,
         'start_date' => $dao->start_date,
+        'end_date' => $dao->end_date,
         'case_subject' => $dao->case_subject,
+        'case_status' => $statuses[$dao->status_id],
       );
     }
     $dao->free();
index 7b466e7f09168b49a413ae93ca974307fa705255..c5033fdd46772cb8b58f9eb28dcbfd8612a30db7 100644 (file)
@@ -50,12 +50,14 @@ class CRM_Case_Page_AJAX {
     if (!empty($_GET['excludeCaseIds'])) {
       $excludeCaseIds = explode(',', CRM_Utils_Type::escape($_GET['excludeCaseIds'], 'String'));
     }
-    $unclosedCases = CRM_Case_BAO_Case::getUnclosedCases($params, $excludeCaseIds);
+    $unclosedCases = CRM_Case_BAO_Case::getUnclosedCases($params, $excludeCaseIds, TRUE, TRUE);
     $results = array();
     foreach ($unclosedCases as $caseId => $details) {
       $results[] = array(
         'id' => $caseId,
-        'text' => $details['sort_name'] . ' (' . $details['case_type'] . ': ' . $details['case_subject'] . ')',
+        'label' => $details['sort_name'] . ' - ' . $details['case_type'] . ($details['end_date'] ? ' (' . ts('closed') . ')' : ''),
+        'label_class' => $details['end_date'] ? 'strikethrough' : '',
+        'description' => array($details['case_subject'] . ' (' . $details['case_status'] . ')'),
         'extra' => $details,
       );
     }
index bdb6defb4d359b6326f821da6c6ef7428a57d6db..ccad1be529cfb40227a73c9bab59bd054b993d0e 100644 (file)
@@ -4714,7 +4714,8 @@ span.crm-status-icon {
   background-position: -101px -222px;background-image: url("../i/icons/jquery-ui-3E3E3E.gif");
 }
 
-.crm-container .survey-completed {
+.crm-container .survey-completed,
+.crm-container .strikethrough {
   text-decoration: line-through;
 }
 
index 028875f9f224645b4690b26a11fe2eaf69e46e09..da542f2a14a0fe94242829b817c7eeb86063bd1f 100644 (file)
@@ -348,7 +348,7 @@ CRM.strings = CRM.strings || {};
           }
         },
         minimumInputLength: 1,
-        formatResult: formatSelect2Result,
+        formatResult: CRM.utils.formatSelect2Result,
         formatSelection: function(row) {
           return row.label;
         },
@@ -441,7 +441,7 @@ CRM.strings = CRM.strings || {};
     });
   };
 
-  function formatSelect2Result(row) {
+  CRM.utils.formatSelect2Result = function (row) {
     var markup = '<div class="crm-select2-row">';
     if (row.image !== undefined) {
       markup += '<div class="crm-select2-image"><img src="' + row.image + '"/></div>';
@@ -449,14 +449,14 @@ CRM.strings = CRM.strings || {};
     else if (row.icon_class) {
       markup += '<div class="crm-select2-icon"><div class="crm-icon ' + row.icon_class + '-icon"></div></div>';
     }
-    markup += '<div><div class="crm-select2-row-label">' + row.label + '</div>';
+    markup += '<div><div class="crm-select2-row-label '+(row.label_class || '')+'">' + row.label + '</div>';
     markup += '<div class="crm-select2-row-description">';
     $.each(row.description || [], function(k, text) {
       markup += '<p>' + text + '</p>';
     });
     markup += '</div></div></div>';
     return markup;
-  }
+  };
 
   function formatSelect2CreateLinks($el) {
     var
index 14a415d4da13ed83f857402b20af1f9090faff2f..6049c453bc3440b2476540bdd4ae97465ed9f08a 100644 (file)
@@ -50,6 +50,10 @@ CRM.$(function($) {
   $('input[name=unclosed_case_id]', $form).crmSelect2({
     placeholder: {/literal}'{ts escape="js"}- select case -{/ts}'{literal},
     minimumInputLength: 1,
+    formatResult: CRM.utils.formatSelect2Result,
+    formatSelection: function(row) {
+      return row.label;
+    },
     ajax: {
       url: {/literal}"{crmURL p='civicrm/case/ajax/unclosed' h=0}"{literal},
       data: function(term) {
index b98ebfd2d7dd7548ee4d5138a2e81ce11ce3734a..3e1b00f392ecb86657bb20f6072d1a9843ab1016 100644 (file)
     $('input[name=link_to_case_id]', $form).crmSelect2({
       placeholder: {/literal}'{ts escape="js"}- select case -{/ts}'{literal},
       minimumInputLength: 1,
+      formatResult: CRM.utils.formatSelect2Result,
+      formatSelection: function(row) {
+        return row.label;
+      },
       ajax: {
         url: {/literal}"{crmURL p='civicrm/case/ajax/unclosed' h=0}"{literal},
         data: function(term) {
index c54400fa547897d6da27a4785300430c6ce5757b..1f5a9da24bff5d63da4788ef34cfa471f64e1e5a 100644 (file)
       $('input[name=file_on_case_unclosed_case_id]', '#fileOnCaseDialog').crmSelect2({
         placeholder: {/literal}'{ts escape="js"}- select case -{/ts}'{literal},
         minimumInputLength: 1,
+        formatResult: CRM.utils.formatSelect2Result,
+        formatSelection: function(row) {
+          return row.label;
+        },
         ajax: {
           url: {/literal}"{crmURL p='civicrm/case/ajax/unclosed' h=0}"{literal},
           data: function(term) {