Skip to content

Commit

Permalink
CRM-20793: Add filter - activity date and status on search criteria o…
Browse files Browse the repository at this point in the history
…f activity listing
  • Loading branch information
monishdeb committed Jun 30, 2017
1 parent d5ce186 commit 9e4b2e3
Show file tree
Hide file tree
Showing 7 changed files with 229 additions and 15 deletions.
16 changes: 15 additions & 1 deletion CRM/Activity/BAO/Activity.php
Original file line number Diff line number Diff line change
Expand Up @@ -1234,7 +1234,21 @@ public static function deprecatedGetActivitySQLClause($input) {
"civicrm_activity.is_test= 0",
);

if ($input['context'] != 'activity') {
if (isset($input['activity_date_relative']) ||
(!empty($input['activity_date_low']) || !empty($input['activity_date_high']))
) {
list($from, $to) = CRM_Utils_Date::getFromTo(
CRM_Utils_Array::value('activity_date_relative', $input, 0),
CRM_Utils_Array::value('activity_date_low', $input),
CRM_Utils_Array::value('activity_date_high', $input)
);
$commonClauses[] = sprintf('civicrm_activity.activity_date_time BETWEEN "%s" AND "%s" ', $from, $to);
}

if (!empty($input['activity_status_id'])) {
$commonClauses[] = sprintf("civicrm_activity.status_id IN (%s)", $input['activity_status_id']);
}
elseif ($input['context'] != 'activity') {
$commonClauses[] = "civicrm_activity.status_id = 1";
}

Expand Down
10 changes: 10 additions & 0 deletions CRM/Activity/Form/ActivityFilter.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,16 @@ public function buildQuickForm() {

$this->add('select', 'activity_type_filter_id', ts('Include'), array('' => ts('- all activity type(s) -')) + $activityOptions);
$this->add('select', 'activity_type_exclude_filter_id', ts('Exclude'), array('' => ts('- select activity type -')) + $activityOptions);
CRM_Core_Form_Date::buildDateRange(
$this, 'activity_date', 1,
'_low', '_high', ts('From:'),
FALSE, array(), 'searchDate',
FALSE, array('class' => 'crm-select2 medium')
);
$this->addSelect('status_id',
array('entity' => 'activity', 'multiple' => 'multiple', 'option_url' => NULL, 'placeholder' => ts('- any -'))
);

$this->assign('suppressForm', TRUE);
}

Expand Down
4 changes: 4 additions & 0 deletions CRM/Activity/Page/AJAX.php
Original file line number Diff line number Diff line change
Expand Up @@ -403,6 +403,10 @@ public static function getContactActivity() {
'context' => 'String',
'activity_type_id' => 'Integer',
'activity_type_exclude_id' => 'Integer',
'activity_status_id' => 'String',
'activity_date_relative' => 'String',
'activity_date_low' => 'String',
'activity_date_high' => 'String',
);

$params = CRM_Core_Page_AJAX::defaultSortAndPagerParams();
Expand Down
23 changes: 19 additions & 4 deletions CRM/Core/Form/Date.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,14 @@ public static function buildAllowedDateFormats(&$form) {
* Additional value pairs to add.
* @param string $dateFormat
* @param bool|string $displayTime
* @param array $attributes
*/
public static function buildDateRange(
&$form, $fieldName, $count = 1,
$from = '_from', $to = '_to', $fromLabel = 'From:',
$required = FALSE, $operators = array(),
$dateFormat = 'searchDate', $displayTime = FALSE
$dateFormat = 'searchDate', $displayTime = FALSE,
$attributes = array('class' => 'crm-select2')
) {
$selector
= CRM_Core_Form_Date::returnDateRangeSelector(
Expand All @@ -98,7 +100,8 @@ public static function buildDateRange(
CRM_Core_Form_Date::addDateRangeToForm(
$form, $fieldName, $selector,
$from, $to, $fromLabel,
$required, $dateFormat, $displayTime
$required, $dateFormat, $displayTime,
$attributes
);
}

Expand Down Expand Up @@ -165,14 +168,26 @@ public static function returnDateRangeSelector(
* @param bool $required
* @param string $dateFormat
* @param bool $displayTime
* @param array $attributes
*/
public static function addDateRangeToForm(&$form, $fieldName, $selector, $from = '_from', $to = '_to', $fromLabel = 'From:', $required = FALSE, $dateFormat = 'searchDate', $displayTime = FALSE) {
public static function addDateRangeToForm(
&$form,
$fieldName,
$selector,
$from = '_from',
$to = '_to',
$fromLabel = 'From:',
$required = FALSE,
$dateFormat = 'searchDate',
$displayTime = FALSE,
$attributes
) {
$form->add('select',
"{$fieldName}_relative",
ts('Relative Date Range'),
$selector,
$required,
array('class' => 'crm-select2')
$attributes
);

$form->addDateRange($fieldName, $from, $to, $fromLabel, $dateFormat, FALSE, $displayTime);
Expand Down
31 changes: 21 additions & 10 deletions templates/CRM/Activity/Selector/Selector.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -26,17 +26,23 @@
<div class="crm-activity-selector-{$context}">
<div class="crm-accordion-wrapper crm-search_filters-accordion">
<div class="crm-accordion-header">
{ts}Filter by Activity Type{/ts}</a>
{ts}Filter by Activity{/ts}</a>
</div><!-- /.crm-accordion-header -->
<div class="crm-accordion-body">
<div class="no-border form-layout-compressed activity-search-options">
<div class="crm-contact-form-block-activity_type_filter_id crm-inline-edit-field">
{$form.activity_type_filter_id.label} {$form.activity_type_filter_id.html|crmAddClass:big}
</div>
<div class="crm-contact-form-block-activity_type_exclude_filter_id crm-inline-edit-field">
{$form.activity_type_exclude_filter_id.label} {$form.activity_type_exclude_filter_id.html|crmAddClass:big}
</div>
</div>
<table class="no-border form-layout-compressed activity-search-options">
<tr>
<td class="crm-contact-form-block-activity_type_filter_id crm-inline-edit-field">
{$form.activity_type_filter_id.label}<br /> {$form.activity_type_filter_id.html|crmAddClass:medium}
</td>
<td class="crm-contact-form-block-activity_type_exclude_filter_id crm-inline-edit-field">
{$form.activity_type_exclude_filter_id.label}<br /> {$form.activity_type_exclude_filter_id.html|crmAddClass:medium}
</td>
{include file="CRM/Core/DateRange.tpl" fieldName="activity_date" from='_low' to='_high' label='Date'}
<td class="crm-contact-form-block-activity_status_filter_id crm-inline-edit-field">
{ts}Status{/ts}: {$form.status_id.html|crmAddClass:medium}
</td>
</tr>
</table>
</div><!-- /.crm-accordion-body -->
</div><!-- /.crm-accordion-wrapper -->
<table class="contact-activity-selector-{$context} crm-ajax-table">
Expand All @@ -62,8 +68,13 @@
"ajax": {
"url": {/literal}'{crmURL p="civicrm/ajax/contactactivity" h=0 q="snippet=4&context=$context&cid=$contactId"}'{literal},
"data": function (d) {
var status_id = $('.crm-activity-selector-' + context + ' select#status_id').val() || [];
d.activity_type_id = $('.crm-activity-selector-' + context + ' select#activity_type_filter_id').val(),
d.activity_type_exclude_id = $('.crm-activity-selector-' + context + ' select#activity_type_exclude_filter_id').val()
d.activity_type_exclude_id = $('.crm-activity-selector-' + context + ' select#activity_type_exclude_filter_id').val(),
d.activity_date_relative = $('select#activity_date_relative').val(),
d.activity_date_low = $('#activity_date_low').val(),
d.activity_date_high = $('#activity_date_high').val(),
d.activity_status_id = status_id.join(',')
}
}
});
Expand Down
3 changes: 3 additions & 0 deletions templates/CRM/Core/DateRange.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@
{*this is included inside a table row*}
{assign var=relativeName value=$fieldName|cat:"_relative"}
<td colspan=2>
{if $label}
{ts}{$label}{/ts}
{/if}
{$form.$relativeName.html}<br />
<span class="crm-absolute-date-range">
<span class="crm-absolute-date-from">
Expand Down
157 changes: 157 additions & 0 deletions tests/phpunit/CRM/Activity/BAO/ActivityTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -731,6 +731,163 @@ public function testGetActivitiesforContactSummaryWithActivities() {
}
}

/**
* CRM-20793 : Test getActivities by using activity date and status filter
*/
public function testbyActivityDateAndStatus() {
$op = new PHPUnit_Extensions_Database_Operation_Insert();
$op->execute($this->_dbconn,
$this->createFlatXMLDataSet(
dirname(__FILE__) . '/activities_for_dashboard_count.xml'
)
);

// activity IDs catagorised by date
$lastWeekActivities = array(1, 2, 3);
$todayActivities = array(4, 5, 6, 7);
$lastMonthActivities = array(8, 9, 10, 11);
$lastYearActivties = array(12, 13, 14, 15, 16);

// date values later used to set activity date value
$lastWeekDate = date('YmdHis', strtotime('1 week ago'));
$today = date('YmdHis');
$lastMonthDate= date('YmdHis', strtotime('1 month ago'));
$lastYearDate = date('YmdHis', strtotime('1 year ago'));
for ($i = 1; $i <= 16; $i++) {
if (in_array($i, $lastWeekActivities)) {
$date = $lastWeekDate;
}
elseif (in_array($i, $lastMonthActivities)) {
$date = $lastMonthDate;
}
elseif (in_array($i, $lastYearActivties)) {
$date = $lastYearDate;
}
elseif (in_array($i, $todayActivities)) {
$date = $today;
}
$this->callAPISuccess('Activity', 'create', array(
'id' => $i,
'activity_date_time' => $date,
));
}

// parameters for different test cases, check each array key for the specific test-case
$testCases = array(
'todays-activity' => array(
'params' => array(
'contact_id' => 1,
'admin' => TRUE,
'caseId' => NULL,
'context' => 'activity',
'activity_date_relative' => 'this.day',
'activity_type_id' => NULL,
'offset' => 0,
'rowCount' => 0,
'sort' => NULL,
),
),
'todays-activity-filtered-by-range' => array(
'params' => array(
'contact_id' => 1,
'admin' => TRUE,
'caseId' => NULL,
'context' => 'activity',
'activity_date_low' => date('Y/m/d', strtotime('yesterday')),
'activity_date_high' => date('Y/m/d'),
'activity_type_id' => NULL,
'offset' => 0,
'rowCount' => 0,
'sort' => NULL,
),
),
'last-week-activity' => array(
'params' => array(
'contact_id' => 1,
'admin' => TRUE,
'caseId' => NULL,
'context' => 'activity',
'activity_date_relative' => 'previous.week',
'activity_type_id' => NULL,
'offset' => 0,
'rowCount' => 0,
'sort' => NULL,
),
),
'last-month-activity' => array(
'params' => array(
'contact_id' => 1,
'admin' => TRUE,
'caseId' => NULL,
'context' => 'activity',
'activity_date_relative' => 'previous.month',
'activity_type_id' => NULL,
'offset' => 0,
'rowCount' => 0,
'sort' => NULL,
),
),
'last-year-activity' => array(
'params' => array(
'contact_id' => 1,
'admin' => TRUE,
'caseId' => NULL,
'context' => 'activity',
'activity_date_relative' => 'previous.year',
'activity_type_id' => NULL,
'offset' => 0,
'rowCount' => 0,
'sort' => NULL,
),
),
'activity-of-all-statuses' => array(
'params' => array(
'contact_id' => 1,
'admin' => TRUE,
'caseId' => NULL,
'context' => 'activity',
'activity_status_id' => '1,2',
'activity_type_id' => NULL,
'offset' => 0,
'rowCount' => 0,
'sort' => NULL,
),
),
);

foreach ($testCases as $caseName => $testCase) {
$activitiesDep = CRM_Activity_BAO_Activity::deprecatedGetActivities($testCase['params']);
$activityCount = CRM_Activity_BAO_Activity::deprecatedGetActivitiesCount($testCase['params']);
asort($activitiesDep);
$activityIDs = array_keys($activitiesDep);

if ($caseName == 'todays-activity' || $caseName == 'todays-activity-filtered-by-range') {
$this->assertEquals(count($todayActivities), $activityCount);
$this->assertEquals(count($todayActivities), count($activitiesDep));
$this->checkArrayEquals($todayActivities, $activityIDs);
}
elseif ($caseName == 'last-week-activity') {
$this->assertEquals(count($lastWeekActivities), $activityCount);
$this->assertEquals(count($lastWeekActivities), count($activitiesDep));
$this->checkArrayEquals($lastWeekActivities, $activityIDs);
}
elseif ($caseName == 'last-month-activity') {
$this->assertEquals(count($lastMonthActivities), $activityCount);
$this->assertEquals(count($lastMonthActivities), count($activitiesDep));
$this->checkArrayEquals($lastMonthActivities, $activityIDs);
}
elseif ($caseName == 'last-year-activity') {
$this->assertEquals(count($lastYearActivties), $activityCount);
$this->assertEquals(count($lastYearActivties), count($activitiesDep));
$this->checkArrayEquals($lastYearActivties, $activityIDs);
}
elseif ($caseName == 'activity-of-all-statuses') {
$this->assertEquals(16, $activityCount);
$this->assertEquals(16, count($activitiesDep));
}
}
}

/**
* CRM-20308: Test from email address when a 'copy of Activity' event occur
*/
Expand Down

0 comments on commit 9e4b2e3

Please sign in to comment.