Режим статистики stats_day по компаниям

parent 96a7a30b
......@@ -124,7 +124,7 @@ input[type="checkbox"]
line-height: 15px;
}
.b-feeds-stat_controls .order-period
.b-feeds-stat_controls .stat-period
{
width: 135px;
}
......
......@@ -51,7 +51,7 @@ $(document).ready(function(){
function valueFormat(value, ratio, id)
{
var
currencyFields = ['admoney', 'salemoney'],
currencyFields = ['admoney', 'salemoney', 'usdollarmoney', 'localmoney'],
isCurrencyValue = currencyFields.indexOf(activeLine) > -1,
format = (isCurrencyValue) ? d3.format(',.2f') : d3.format(',.0f');
......@@ -91,7 +91,6 @@ $(document).ready(function(){
if (weekDatesDataStart.getTime() - startWeekDay.getTime() > 0) {
startWeekDay = weekDatesDataStart;
}
//return (startWeekDay.getMonth()+1) +'/'+ pad(startWeekDay.getDate()) + '-' + (value.getMonth()+1) +'/'+ pad(value.getDate());
return startWeekDay.getDate() + monthes[startWeekDay.getMonth()] + '-' + value.getDate() + monthes[value.getMonth()];
}
......@@ -112,7 +111,7 @@ $(document).ready(function(){
var activeLines = ['shows', 'clicks', 'transactions', 'salemoney', 'admoney'];
activeLine = 'shows';
activeDays = 'day';
//console.log('AAA DateStat: ', dataLineChartStat);
// Диапазон дат:
......@@ -125,10 +124,7 @@ $(document).ready(function(){
titleFormat = formatDate,
formatTimeX = '%m-%d';
if (activeDays == 'day') {
dataPeriod = dataLineChartStat['period'];
dataValue = dataLineChartStat[activeLine];
}
var
dataColumnsTemp = [['x'].concat(dataPeriod)],
......@@ -139,7 +135,7 @@ $(document).ready(function(){
// Определяем названия в легенде:
var selectedCategoriesId = $.TableStat.CheckedCategories();
console.log('AAA selectedCategoriesId = ', selectedCategoriesId);
//console.log('AAA selectedCategoriesId = ', selectedCategoriesId);
for (var i = 1; i <= activeLines.length; i++) {
var currentActiveLine = activeLines[i-1];
if (!selectedCategoriesId || selectedCategoriesId.length == 0 || selectedCategoriesId.indexOf(currentActiveLine) > -1) {
......
......@@ -11,7 +11,7 @@ $(document).ready(function(){
function valueFormat(value)
{
var
currencyFields = ['admoney', 'salemoney'],
currencyFields = ['admoney', 'salemoney', 'usdollarmoney', 'localmoney'],
isCurrencyValue = currencyFields.indexOf(currentActiveLine) > -1,
format = (isCurrencyValue) ? d3.format(',.2f') : d3.format(',.0f');
......@@ -87,7 +87,8 @@ $(document).ready(function(){
});
} else {
for(var i = dataPeriod.length-1; i >= 0; i--) {
for(var i = 0; i < dataPeriod.length; i++) {
var
date = dataPeriod[i],
......
......@@ -2,6 +2,7 @@ $(document).ready(function(){
(function(){
})();
// Выбор дат для Stat http://t1m0n.name/air-datepicker/docs/index-ru.html
var
......@@ -16,41 +17,104 @@ $(document).ready(function(){
autoClose: true,
maxDate: nowDate
}).data('datepicker'),
currentDay1 = new Date($('#date-value-1').val()),
currentDay2 = new Date($('#date-value-2').val());
// Установка стартовых значений дат:
datepicker1.selectDate(currentDay1);
datepicker2.selectDate(currentDay2);
})();
var
$chartStat = $('#chart-graph-stat'),
$chartTable = $('#table-stat'),
$chartStatInfo = $('.chart-graph-stat-info'),
$chartStatError = $('.chart-graph-stat-error'),
$chartStatLoading = $('.chart-graph-stat-loading'),
$chartStatErrorMessage = $('.chart-graph-stat-error .message'),
periodStatsData,
companyStatsData,
dataLineChartStat;
// Установка стартовых значений дат:
//datepicker1.selectDate(new Date($('#date-value-1').val()));
//datepicker2.selectDate(new Date($('#date-value-2').val()));
// Получение данных для отрисовки графика Stat при старте:
if ($('#period-stats').val()) {
dataLineChartStat = JSON.parse($('#period-stats').val());
periodStatsData = JSON.parse($('#period-stats').val());
}
if ($('#company-stats').val()) {
companyStatsData = JSON.parse($('#company-stats').val());
}
// Устанавливаем данные по периоду в качестве стартовых:
dataLineChartStat = periodStatsData;
//console.log('AAA dataLineChartStat = ', dataLineChartStat);
// Отрисовка графика и таблицы по стартовым данным:
renderLineChart();
renderHourTable();
// Смена периода:
$('.form-control.stat-period').on('change', function(){
var period = $(this).val();
// Установка значений периода в дате:
switch(period) {
case 'today':
datepicker1.selectDate(nowDate);
datepicker2.selectDate(nowDate);
break;
case 'yesterday':
var yesterdayDate = new Date();
yesterdayDate.setDate(yesterdayDate.getDate()-1);
datepicker1.selectDate(yesterdayDate);
datepicker2.selectDate(yesterdayDate);
break;
case '7days':
var prev7day = new Date();
prev7day.setDate(prev7day.getDate()-7);
datepicker1.selectDate(prev7day);
datepicker2.selectDate(nowDate);
break;
case '30days':
var prev30day = new Date();
prev30day.setDate(prev30day.getDate()-30);
datepicker1.selectDate(prev30day);
datepicker2.selectDate(nowDate);
break;
case 'current_month':
var firstDay = new Date(nowDate.getFullYear(), nowDate.getMonth(), 1);
datepicker1.selectDate(firstDay);
datepicker2.selectDate(nowDate);
break;
case 'prev_month':
var firstDay = new Date(nowDate.getFullYear(), nowDate.getMonth()-1, 1);
var lastDay = new Date(nowDate.getFullYear(), nowDate.getMonth(), 0);
datepicker1.selectDate(firstDay);
datepicker2.selectDate(lastDay);
break;
case 'year':
var firstDay = new Date(nowDate.getFullYear(), 0, 1);
datepicker1.selectDate(firstDay);
datepicker2.selectDate(nowDate);
break;
default:
datepicker1.clear();
datepicker2.clear();
break;
}
});
// Сортировка по колонкам внутри таблицы:
$('#table-line').on('click', 'thead.metric.sortable th b', function(){
var
$this = $(this);
$('#table-line thead.metric.sortable th b').removeClass('selected');
$(this).addClass('selected');
$(this).toggleClass('desc');
$this.addClass('selected');
$this.toggleClass('desc');
if ($this.hasClass('main-cat')) {
if ($this.hasClass('date')) {
dataLineChartStat = periodStatsData;
} else {
dataLineChartStat = companyStatsData;
}
}
renderHourTable();
});
// Клик на checkbox в названии поля таблицы:
......@@ -58,7 +122,6 @@ $(document).ready(function(){
renderLineChart();
});
// Отрисовка графика Stat
function renderLineChart()
{
......
......@@ -37,6 +37,7 @@ use App\Model\Feeds\Transactions;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Zend\Diactoros\Response\HtmlResponse;
use Zend\Diactoros\Response\JsonResponse;
use Zend\Diactoros\Response\RedirectResponse;
......@@ -86,33 +87,20 @@ class Cabinet extends Common
}
}
$report_type = $request->getAttribute('report');
$dates = ['2018-10-09', '2018-11-09'];
// Текущий месяц:
$dates = [date('Y-m-01'), date('Y-m-d')];
if ($report_type == 'common') {
/** @var \App\Model\Feeds $statDaysModel */
$statsDaysModel = $this->container->get(StatsDays::class);
$stats = $statsDaysModel->findAll(['FeedID' => $feed_id_list])->toArray();
$periodStats = array(
'period' => [],
'shows' => [],
'clicks' => [],
'transactions' => [],
'salemoney' => [],
'admoney' => [],
'type' => 'interval',
'report' => $report_type
);
//$stats = $statsDaysModel->findAll(['FeedID' => $feed_id_list])->toArray();
$periodStats = $statsDaysModel->getStatsByDate($feed_id_list);
$companyStats = $statsDaysModel->getStatsByFeeds($feed_id_list);
foreach($stats as $stat_item) {
$periodStats['period'][] = $stat_item['eventdate'];
$periodStats['shows'][] = $stat_item['shows'];
$periodStats['clicks'][] = $stat_item['clicks'];
$periodStats['transactions'][] = $stat_item['transactions'];
$periodStats['salemoney'][] = $stat_item['salemoney'];
$periodStats['admoney'][] = $stat_item['admoney'];
}
//return new JsonResponse($stats);
$cats = ['shows','clicks','transactions','salemoney','admoney'];
}
......@@ -126,8 +114,6 @@ class Cabinet extends Common
'period' => [],
'localmoney' => [],
'usdollarmoney' => [],
'type' => 'interval',
'report' => $report_type
);
foreach($stats as $stat_item) {
......@@ -141,16 +127,20 @@ class Cabinet extends Common
$data['error'] = _t('Извините, тип отчета "'. $report_type .'" недоступен');
}
$periodStats['type'] = 'interval';
$periodStats['report'] = $report_type;
$companyStats['type'] = 'interval';
$companyStats['report'] = $report_type;
$data['feeds'] = $feeds;
$data['report'] = $report_type;
$data['dates'] = $dates;
$data['periodStats'] = $periodStats;
$data['companyStats'] = $companyStats;
$data['cats'] = $cats;
//return new HtmlResponse('123132data: '.var_dump($stats));
//return new JsonResponse($periodStats);
/*
$response = new HtmlResponse($this->template->render('app::user/feeds', [
......
......@@ -35,4 +35,69 @@ use App\Model\Common;
class StatsDays extends Common
{
public function getStatsByFeeds($feeds)
{
$adapter = $this->tableGateway->getAdapter();
$sql = 'SELECT FeedID, SUM(Shows) AS Shows, SUM(Clicks) AS Clicks, SUM(Transactions) AS Transactions, SUM(SaleMoney) AS SaleMoney, SUM(AdMoney) AS AdMoney'
. ' FROM ' . (string) $this->tableGateway->getTable()
. ' WHERE FeedID in (\''.implode('\',\'', $feeds).'\')'
. ' GROUP BY FeedID'
. ' ORDER BY FeedID';
$res = $adapter->query($sql, \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
$stats = array(
'period' => [],
'shows' => [],
'clicks' => [],
'transactions' => [],
'salemoney' => [],
'admoney' => [],
);
foreach($res as $stat_item) {
$stats['period'][] = $stat_item['FeedID'];
$stats['shows'][] = (int)$stat_item['Shows'];
$stats['clicks'][] = (int)$stat_item['Clicks'];
$stats['transactions'][] = (int)$stat_item['Transactions'];
$stats['salemoney'][] = (float)$stat_item['SaleMoney'];
$stats['admoney'][] = (float)$stat_item['AdMoney'];
}
return $stats;
}
public function getStatsByDate($feeds)
{
$adapter = $this->tableGateway->getAdapter();
$sql = 'SELECT EventDate, SUM(Shows) AS Shows, SUM(Clicks) AS Clicks, SUM(Transactions) AS Transactions, SUM(SaleMoney) AS SaleMoney, SUM(AdMoney) AS AdMoney'
. ' FROM ' . (string) $this->tableGateway->getTable()
. ' WHERE FeedID in (\''.implode('\',\'', $feeds).'\')'
. ' GROUP BY EventDate'
. ' ORDER BY EventDate desc';
$res = $adapter->query($sql, \Zend\Db\Adapter\Adapter::QUERY_MODE_EXECUTE);
$stats = array(
'period' => [],
'shows' => [],
'clicks' => [],
'transactions' => [],
'salemoney' => [],
'admoney' => [],
);
foreach($res as $stat_item) {
$stats['period'][] = $stat_item['EventDate'];
$stats['shows'][] = (int)$stat_item['Shows'];
$stats['clicks'][] = (int)$stat_item['Clicks'];
$stats['transactions'][] = (int)$stat_item['Transactions'];
$stats['salemoney'][] = (float)$stat_item['SaleMoney'];
$stats['admoney'][] = (float)$stat_item['AdMoney'];
}
return $stats;
}
}
\ No newline at end of file
......@@ -56,6 +56,7 @@ $src = $sxml['src'];
$error = $this->error;
$periodStats = $this->periodStats;
$companyStats = $this->companyStats;
$dates = $this->dates;
$cats = $this->cats;
$report = $this->report;
......@@ -100,6 +101,7 @@ $colors_active_lines = array(
<?php else: ?>
<textarea id="period-stats" style="display: none;"><?= ($periodStats ? json_encode($periodStats) : '')?></textarea>
<textarea id="company-stats" style="display: none;"><?= ($companyStats ? json_encode($companyStats) : '')?></textarea>
<section class="b-content__work">
<div class="wrapp">
......@@ -130,14 +132,14 @@ $colors_active_lines = array(
<input type='text' id="date-value-2" class="btn btn-default date-value" value="<?=$dates[1] ?>"/>
<span>период: </span>
<select class="form-control order-period" name="period">
<select class="form-control stat-period" name="period">
<option value="" disabled>--</option>
<option value="today">сегодня</option>
<option value="yesterday">вчера</option>
<option value="7days">7 дней</option>
<option value="30days">30 дней</option>
<option value="current_month">текущий месяц</option>
<option value="prev_month" selected>прошлый месяц</option>
<option value="current_month" selected>текущий месяц</option>
<option value="prev_month" >прошлый месяц</option>
<option value="year">год</option>
</select>
</span>
......@@ -162,11 +164,9 @@ $colors_active_lines = array(
<div class="b-content__loading"></div>
<table id="table-line" class="table table-striped admin">
<thead class="metric sortable">
<tr data-metric="<?= $metric ?>">
<tr>
<th>
<b>
<?= _t('Дата/Компания')?>
</b>
<b class="main-cat date selected"><?= _t('Дата')?></b> / <b class="main-cat company"><?= _t('Компания')?></b>
</th>
<?php foreach($cats as $name): ?>
<th>
......@@ -190,5 +190,4 @@ $colors_active_lines = array(
</div>
</section>
<?php endif ?>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment