This is a starter page to help document complex use of PluginCustomSearch and PluginList. It uses Smarty templates and JavaScript/jQuery to achieve date searches on Tracker data in related Trackers, and depends on Elasticsearch for the facet/aggregation generation and works in Tiki 18.x.
Initially a non-working dump of the (slightly simplified) files and pages:
Pages
The top level wiki page
Copy to clipboard ! Monthly Statistics
{DIV(class="monthly-stats")}
{CUSTOMSEARCH(tpl="themes/templates/monthly_statistics_search_form.tpl" searchfadediv="customsearch_0_results" recalllastsearch="0" searchonload="1" requireinput="0" forcesortmode="0" searchfadediv="customsearch_0_form" customsearchjs="1")}
{filter field=tracker_id content="3"}
{facet name="tracker_field_projectCompany" operator="or" count="200" order="_term_asc" min="0"}
{pagination max="300"}
{tablesorter server="n" sortable="y" sortList="[0,0]" tsortcolumns="type:n|type:digit|type:digit|type:digit|type:digit|type:digit|type:digit|type:digit" tsfilters="y" tstotals="type:none|type:col;formula:sum;filter:visible;label:Totals|type:col;formula:sum;filter:visible;label:Totals|type:col;formula:sum;filter:visible;label:Totals|type:col;formula:sum;filter:visible;label:Totals|type:col;formula:sum;filter:visible;label:Totals|type:col;formula:sum;filter:visible;label:Totals|type:col;formula:sum;filter:visible;label:Totals"}
{output template="themes/templates/monthly_statistics_list.tpl"}
{CUSTOMSEARCH}
{DIV}
monthly_statistics_search_form.tpl
Copy to clipboard {literal}
<div class="clearfix stats-search">
{* add dropdown for months and year from May 1st*}
<select id="daterange-presets" class="ignore">
<option value=""></option>
<option value="year">{tr}Financial Year To Date{/tr}</option>
<option value="1">{tr}January{/tr}</option>
<option value="2">{tr}February{/tr}</option>
<option value="3">{tr}March{/tr}</option>
<option value="4">{tr}April{/tr}</option>
<option value="5">{tr}May{/tr}</option>
<option value="6">{tr}June{/tr}</option>
<option value="7">{tr}July{/tr}</option>
<option value="8">{tr}August{/tr}</option>
<option value="9">{tr}September{/tr}</option>
<option value="10">{tr}October{/tr}</option>
<option value="11">{tr}November{/tr}</option>
<option value="12">{tr}December{/tr}</option>
</select>
{daterange _field="tracker_field_projectDate" id="date" _to="now" _from="first day of this month"}
{input type="Submit" value="Search" id="button" class="btn btn-default btn-sm"}
</div>
{/literal}
monthly_statistics_list.tpl
Copy to clipboard {* PluginCusrtomSearch send the request data in the AJAX call in a JSON encoded parameter called "adddata" *}
{$adddata = $smarty.request.adddata|json_decode:true}
{* a couple of handy debug blocks to see what's being send trom the server *}
<pre class="add-data" style="display: none">{$adddata|var_dump}</pre>
<pre class="facets" style="display: none">{$facets|var_dump}</pre>
{if isset($adddata.date.value)}
{* date range is sent as two unix timestamps "xxxxxx,yyyyyy" *}
{$projectDate = ','|explode:$smarty.request.adddata.date.value}
{$projectDate = '{filter range="tracker_field_projectDate" from="'|cat:$projectDate[0]|cat:'" to="'|cat:$projectDate[1]|cat:'"}'}
{/if}
<table class="table" id="wpcs-0">
<thead>
<tr>
<th>{tr}Company Name{/tr}</th>
<th>{tr}New Projects{/tr}</th>
<th>{tr}Live Projects{/tr}</th>
<th>{tr}High Priority Status{/tr}</th>
<th>{tr}Medium Priority Status{/tr}</th>
<th>{tr}Low Priority Status{/tr}</th>
<th>{tr}Ordered PP{/tr}</th>
<th>{tr}Ordered MP{/tr}</th>
</tr>
</thead>
<tbody>
{foreach $facets['tracker_field_projectCompanyName'].options as $id => $name}
<pre class="results-row" style="display: none">{$row|var_dump}</pre>
{* facet labels get sent in the form "Label Text (count)" so use a regular expression here to split it into an array *}
{$r = preg_match('/(.*)\((\d+)\)/', $name, $m)}
{wikiplugin _name='list'}{literal}
{filter field="tracker_id" content="3"}
{filter field="tracker_field_projectCompanyName" content="{/literal}{$id}{literal}"}
{pagination max="1"}
{facet name="tracker_field_projectCurrentStatus" operator="or"}
{facet name="tracker_field_projectPriorityLevel" operator="or"}
{/literal}{$projectDate}{literal}
{output template="themes/templates/monthly_statistics_inner_row.tpl"}
{ALTERNATE()}<tr class="result-row"><td>{/literal}{$m[1]}{literal}</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td><td>0</td></tr>{ALTERNATE}
{FORMAT(name="distributorName")}{/literal}{$m[1]}{literal}{FORMAT}
{FORMAT(name="projectCount")}{/literal}{$m[2]}{literal}{FORMAT}
{/literal}{/wikiplugin}
{/foreach}
</tbody>
<tfoot>
<tr>
<th>{tr}Company Name{/tr}</th>
<th>{tr}New Projects{/tr}</th>
<th>{tr}Live Projects{/tr}</th>
<th>{tr}High Priority Status{/tr}</th>
<th>{tr}Medium Priority Status{/tr}</th>
<th>{tr}Low Priority Status{/tr}</th>
<th>{tr}Ordered PP{/tr}</th>
<th>{tr}Ordered MP{/tr}</th>
</tr>
</tfoot>
</table>
monthly_statistics_inner_row.tpl
Copy to clipboard {$row = $results[0]}
<tr class="result-row">
<pre class="disty-facets" style="display: none">{$facets|var_dump}</pre>
<pre class="disty-results" style="display: none">{$results|var_dump}</pre>
<td>{$row.distributorName}</td>
<td>{$row.projectCount}</td>
{$c = preg_replace('/[^\(]*\((\d+)\)/', '$1', $facets.tracker_field_projectCurrentStatus.options.live)}
<td>{($c) ? $c : 0}</td>
{$c = preg_replace('/[^\(]*\((\d+)\)/', '$1', $facets.tracker_field_projectPriorityLevel.options.High)}
<td>{($c) ? $c : 0}</td>
{$c = preg_replace('/[^\(]*\((\d+)\)/', '$1', $facets.tracker_field_projectPriorityLevel.options.Medium)}
<td>{($c) ? $c : 0}</td>
{$c = preg_replace('/[^\(]*\((\d+)\)/', '$1', $facets.tracker_field_projectPriorityLevel.options.Low)}
<td>{($c) ? $c : 0}</td>
{$c = preg_replace('/[^\(]*\((\d+)\)/', '$1', $facets.tracker_field_projectCurrentStatus.options.orderedforpreproduction)}
<td>{($c) ? $c : 0}</td>
{$c = preg_replace('/[^\(]*\((\d+)\)/', '$1', $facets.tracker_field_projectCurrentStatus.options.orderedmassproduction)}
<td>{($c) ? $c : 0}</td>
</tr>
Finally the JavaScript Bit
Copy to clipboard $(document).ready( function() {
// set up month selector dropdown
$("#daterange-presets").change(function () {
var val = $(this).val(),
$from = $("#date_from_dptxt"),
$to = $("#date_to_dptxt"),
now = new Date(),
year = now.getFullYear();
if (val === "year") {
$from.datepicker("setDate", "1/05/" + year).change();
$to.datepicker("setDate", now).change();
} else {
val = parseInt(val);
$from.datepicker("setDate", "1/" + val + "/" + year).change();
if (val === 12) {
val = 0;
year++;
}
$to.datepicker("setDate", "1/" + (val + 1) + "/" + year).change();
}
$("table#wpcs-0").find("th:first-child").trigger("sort");
$csForm.submit();
});
});
|