Отчет по статистике по транзакциям

parent d72eff0c
...@@ -41,14 +41,12 @@ return [ ...@@ -41,14 +41,12 @@ return [
], ],
'transaction' => [ 'transaction' => [
'title' => 'Транзакции', 'title' => 'Транзакции',
'type' => 'feed_stat', 'type' => 'feed_transactions',
'fields' => ['Views','Clicks','Orders','OrderSum'], 'fields' => ['Views','Clicks','Orders','OrderSum'],
'cats' => [ 'cats' => [
'Views' => 'Показы', 'Timestamp' => 'Дата и время',
'Clicks' => 'Клики', 'OrderSum' => 'Сумма',
'Orders' => 'Заказы', 'BasketCount' => 'Количество товаров'
'OrderSum' => 'Заказы на сумму',
'AdMoney' => 'Комиссия AddCPM'
] ]
/* /*
$cats => [ $cats => [
......
...@@ -12,10 +12,16 @@ $(document).ready(function(){ ...@@ -12,10 +12,16 @@ $(document).ready(function(){
{ {
var var
currencyFields = ['admoney', 'salemoney', 'usdollarmoney', 'localmoney', 'AdMoney', 'OrderSum'], currencyFields = ['admoney', 'salemoney', 'usdollarmoney', 'localmoney', 'AdMoney', 'OrderSum'],
nonFormatFields = ['Timestamp'],
isCurrencyValue = currencyFields.indexOf(currentActiveLine) > -1, isCurrencyValue = currencyFields.indexOf(currentActiveLine) > -1,
isNonFormatValue = nonFormatFields.indexOf(currentActiveLine) > -1,
//format = (isCurrencyValue) ? d3.format(',.2f') : d3.format(',.0f'); //format = (isCurrencyValue) ? d3.format(',.2f') : d3.format(',.0f');
format = (isCurrencyValue) ? d3.format(',.0f') : d3.format(',.0f'); format = (isCurrencyValue) ? d3.format(',.0f') : d3.format(',.0f');
if (isNonFormatValue) {
return value;
}
if (isCurrencyValue) { if (isCurrencyValue) {
return format(value) + ' грн.'; return format(value) + ' грн.';
} else { } else {
...@@ -27,6 +33,9 @@ $(document).ready(function(){ ...@@ -27,6 +33,9 @@ $(document).ready(function(){
function RenderInterval(dataLineChartStat) function RenderInterval(dataLineChartStat)
{ {
var dataPeriod = dataLineChartStat['period']; var dataPeriod = dataLineChartStat['period'];
var notSumFields = ['Timestamp'];
dataTable = dataLineChartStat; dataTable = dataLineChartStat;
...@@ -36,9 +45,15 @@ $(document).ready(function(){ ...@@ -36,9 +45,15 @@ $(document).ready(function(){
activeLines.forEach(function(item){ activeLines.forEach(function(item){
currentActiveLine = item; currentActiveLine = item;
var totalValue = 0; var isNotSumValue = notSumFields.indexOf(currentActiveLine) > -1;
for(var i = dataPeriod.length-1; i >= 0; i--) {
totalValue += dataTable[item][i]; if (!isNotSumValue) {
var totalValue = 0;
for(var i = dataPeriod.length-1; i >= 0; i--) {
totalValue += dataTable[item][i];
}
} else {
totalValue = '';
} }
$row.append($('<td>').html(valueFormat(totalValue))); $row.append($('<td>').html(valueFormat(totalValue)));
...@@ -129,7 +144,7 @@ $(document).ready(function(){ ...@@ -129,7 +144,7 @@ $(document).ready(function(){
}); });
console.log('AAA TableStat render: ', dataLineChartStat); console.log('AAA TableStat render: ', dataLineChartStat);
//console.log('AAA activeLines: ', activeLines); console.log('AAA activeLines: ', activeLines);
dataTable = {}; dataTable = {};
activeLines.forEach(function(item){ activeLines.forEach(function(item){
...@@ -140,6 +155,10 @@ $(document).ready(function(){ ...@@ -140,6 +155,10 @@ $(document).ready(function(){
RenderInterval(dataLineChartStat); RenderInterval(dataLineChartStat);
} }
if (dataLineChartStat.report == 'transaction') {
RenderInterval(dataLineChartStat);
}
$tableBody.html('').append($tableContent.children()); $tableBody.html('').append($tableContent.children());
}, },
......
...@@ -36,29 +36,35 @@ class Statistics ...@@ -36,29 +36,35 @@ class Statistics
); );
// Параметры запроса по типу отчета: // Параметры запроса по типу отчета:
switch ($report_type) { $type = $report_conf['type'];
case 'common': $fields = $report_conf['fields'];
$type = $report_conf['type'];
$fields = $report_conf['fields'];
break;
case 'transaction':
$type = $report_conf['type'];
$fields = $report_conf['fields'];
break;
}
// Данные для запроса: // Данные для запроса:
$dataRequest = array( if ($report_type == 'common') {
'method' => "reports", $dataRequest = array(
'data' => array( 'method' => "reports",
'type' => $type, 'data' => array(
'filters' => array( 'type' => $type,
'FeedID' => array('values' => $feed_id_list), 'filters' => array(
), 'FeedID' => array('values' => $feed_id_list),
'fields' => $fields, ),
'dates' => $dates, 'fields' => $fields,
) 'dates' => $dates,
); )
);
}
if ($report_type == 'transaction') {
$dataRequest = array(
'method' => $type,
'data' => array(
'feed_id' => 10003,
'start_date' => $dates['start'],
'end_date' => $dates['end'],
)
);
}
//return $dataRequest; //return $dataRequest;
$stats = $this->apiRequest($dataRequest); $stats = $this->apiRequest($dataRequest);
...@@ -72,151 +78,183 @@ class Statistics ...@@ -72,151 +78,183 @@ class Statistics
return null; return null;
} }
$dataStats = array(); $dataStats = array();
$period = array(); $dataStats['report'] = $report_type;
// Формируем данные для временного промежутка if ($report_type == 'common') {
function AddDataStats(&$data_stats, $data, $date_type)
{
$min_koef = ($date_type == 'interval') ? 1 : 5;
foreach ($data as $cat=>$value) {
$data_stats[$cat][] = $value/$min_koef;
}
$data_stats['AdMoney'][] = 224 * $data['Orders']; // временно
}
// Формируем пустые данные для временного промежутка $period = array();
function AddDataStatsNull(&$data_stats, $cats)
{ // Формируем данные для временного промежутка
foreach ($cats as $cat) { function AddDataStats(&$data_stats, $data, $date_type)
$data_stats[$cat][] = 0; {
$min_koef = ($date_type == 'interval') ? 1 : 5;
foreach ($data as $cat=>$value) {
$data_stats[$cat][] = $value/$min_koef;
}
$data_stats['AdMoney'][] = 224 * $data['Orders']; // временно
} }
$data_stats['AdMoney'][] = 0; // временно
}
// Логика формирования данных по временному интервалу: // Формируем пустые данные для временного промежутка
if (false) { function AddDataStatsNull(&$data_stats, $cats)
if ($timeDiff == 0) // Одни сутки
{ {
$dataStats['type'] = 'day'; foreach ($cats as $cat) {
$data_stats[$cat][] = 0;
}
$data_stats['AdMoney'][] = 0; // временно
}
// Логика формирования данных по временному интервалу:
if (false) {
if ($timeDiff == 0) // Одни сутки
{
$dataStats['type'] = 'day';
// Формируем пустые данные (для отсутствующих значений во временной точке): // Формируем пустые данные (для отсутствующих значений во временной точке):
foreach ($stats['data']['Day'] as $day=>$value_day) { foreach ($stats['data']['Day'] as $day=>$value_day) {
foreach ($value_day['Min'] as $min=>$data) { foreach ($value_day['Min'] as $min=>$data) {
$data_null = $data; $data_null = $data;
break;
}
break; break;
} }
break; foreach ($data_null as $key=>$value) {
} $data_null[$key] = 0;
foreach ($data_null as $key=>$value) { }
$data_null[$key] = 0; // Формируем 5-минутные интервалы:
} for ($i=0; $i<288; $i++) {
// Формируем 5-минутные интервалы: $min = $i * 60 * 5;
for ($i=0; $i<288; $i++) { $period[] = gmdate("H:i", $min);
$min = $i * 60 * 5;
$period[] = gmdate("H:i", $min);
}
foreach ($stats['data']['Day'] as $day) {
// Формируем временные интервалы, для которых есть значения:
$dates_min = [];
foreach (array_keys($day['Min']) as $min) {
$dates_min[date("H:i", strtotime($min))] = $min;
} }
foreach ($period as $min_value) { foreach ($stats['data']['Day'] as $day) {
$value_min = ($dates_min[$min_value]) ? $day['Min'][$dates_min[$min_value]] : $data_null; // Формируем временные интервалы, для которых есть значения:
AddDataStats($dataStats, $value_min, $metric, $dataStats['type']); $dates_min = [];
foreach (array_keys($day['Min']) as $min) {
$dates_min[date("H:i", strtotime($min))] = $min;
}
foreach ($period as $min_value) {
$value_min = ($dates_min[$min_value]) ? $day['Min'][$dates_min[$min_value]] : $data_null;
AddDataStats($dataStats, $value_min, $metric, $dataStats['type']);
}
} }
}
} }
elseif (!$by_days) // Набор дат elseif (!$by_days) // Набор дат
{ {
$dataStats['type'] = 'compare'; $dataStats['type'] = 'compare';
// Формируем пустые данные (для отсутствующих значений во временной точке): // Формируем пустые данные (для отсутствующих значений во временной точке):
foreach ($stats['data']['Day'] as $day=>$value_day) { foreach ($stats['data']['Day'] as $day=>$value_day) {
foreach ($value_day['Min'] as $min=>$data) { foreach ($value_day['Min'] as $min=>$data) {
$data_null = $data; $data_null = $data;
break;
}
break; break;
} }
break; foreach ($data_null as $key=>$value) {
} $data_null[$key] = 0;
foreach ($data_null as $key=>$value) { }
$data_null[$key] = 0; // Формируем 5-минутные интервалы:
} for ($i=0; $i<288; $i++) {
// Формируем 5-минутные интервалы: $min = $i * 60 * 5;
for ($i=0; $i<288; $i++) { $period[] = gmdate("H:i", $min);
$min = $i * 60 * 5; }
$period[] = gmdate("H:i", $min);
} foreach ($stats['data']['Day'] as $day=>$value_day) {
$dataStats[date("Y-m-d", strtotime($day))] = [];
// Формируем временные интервалы, для которых есть значения:
$dates_min = [];
foreach (array_keys($value_day['Min']) as $min) {
$dates_min[date("H:i", strtotime($min))] = $min;
}
foreach ($stats['data']['Day'] as $day=>$value_day) { foreach ($period as $min_value) {
$dataStats[date("Y-m-d", strtotime($day))] = []; $data = ($dates_min[$min_value]) ? $value_day['Min'][$dates_min[$min_value]] : $data_null;
// Формируем временные интервалы, для которых есть значения: AddDataStats($dataStats[date("Y-m-d", strtotime($day))], $data, $metric, $dataStats['type']);
$dates_min = []; }
foreach (array_keys($value_day['Min']) as $min) {
$dates_min[date("H:i", strtotime($min))] = $min;
} }
foreach ($period as $min_value) { }
$data = ($dates_min[$min_value]) ? $value_day['Min'][$dates_min[$min_value]] : $data_null; else // Несколько суток
AddDataStats($dataStats[date("Y-m-d", strtotime($day))], $data, $metric, $dataStats['type']); {
$dataStats['type'] = 'interval';
foreach ($stats['data']['Day'] as $day=>$value_day) {
$period[] = $day;
AddDataStats($dataStats, $value_day, $metric, $dataStats['type']);
} }
} }
}
$dataStats['type'] = 'interval';
// Спискок всех дат из запроса стастистики:
$all_period = array();
$begin = new DateTime($dates['start']);
$end = new DateTime($dates['end']);
for($i = $begin; $i <= $end; $i->modify('+1 day')){
$all_period[] = $i->format("Y-m-d");
} }
else // Несколько суток
{ // Список дат, полученных в статистике:
$dataStats['type'] = 'interval'; $stat_days = array_keys($stats['data']['Day']);
foreach ($stats['data']['Day'] as $day=>$value_day) { // Список категорий в данных статистики:
$period[] = $day; $stat_cats = array_keys($stats['data']['Day'][$stat_days[0]]);
AddDataStats($dataStats, $value_day, $metric, $dataStats['type']);
foreach ($all_period as $day_item) {
$item = new DateTime($day_item);
$stat_from = new DateTime($stat_days[0]);
$stat_to = new DateTime($stat_days[count($stat_days)-1]);
if (($item>= $stat_from) && ($item<= $stat_to)) {
$period[] = $day_item;
if ($stats['data']['Day'][$day_item]) {
AddDataStats($dataStats, $stats['data']['Day'][$day_item], $dataStats['type']);
} else {
AddDataStatsNull($dataStats, $stat_cats);
}
} }
} }
/*
foreach ($stats['data']['Day'] as $day=>$value_day) {
$period[] = $day;
AddDataStats($dataStats, $value_day, $dataStats['type']);
}
*/
$dataStats['period'] = $period;
} }
$dataStats['type'] = 'interval'; if ($report_type == 'transaction') {
// Спискок всех дат из запроса стастистики:
$all_period = array();
$begin = new DateTime($dates['start']);
$end = new DateTime($dates['end']);
for($i = $begin; $i <= $end; $i->modify('+1 day')){
$all_period[] = $i->format("Y-m-d");
}
// Список дат, полученных в статистике:
$stat_days = array_keys($stats['data']['Day']);
// Список категорий в данных статистики:
$stat_cats = array_keys($stats['data']['Day'][$stat_days[0]]);
foreach ($all_period as $day_item) {
$item = new DateTime($day_item);
$stat_from = new DateTime($stat_days[0]);
$stat_to = new DateTime($stat_days[count($stat_days)-1]);
if (($item>= $stat_from) && ($item<= $stat_to)) { $period = array();
$period[] = $day_item;
if ($stats['data']['Day'][$day_item]) { //$data = [];
AddDataStats($dataStats, $stats['data']['Day'][$day_item], $dataStats['type']); $dataStats['Timestamp'] = [];
} else { $dataStats['OrderSum'] = [];
AddDataStatsNull($dataStats, $stat_cats); $dataStats['BasketCount'] = [];
}
foreach ($stats['data'] as $item) {
$period[] = $item['TransactionID'];
$dataStats['Timestamp'][] = $item['Timestamp'];
$dataStats['OrderSum'][] = $item['OrderSum'];
$dataStats['BasketCount'][] = count($item['Basket']);
/*
$data[] = array(
'Timestamp' => $item['Timestamp'],
'OrderSum' => $item['OrderSum'],
'BasketCount' => count($item['Basket']),
);
*/
} }
}
$dataStats['period'] = $period;
/*
foreach ($stats['data']['Day'] as $day=>$value_day) { //$dataStats['data'] = $data;
$period[] = $day;
AddDataStats($dataStats, $value_day, $dataStats['type']);
} }
*/
$dataStats['period'] = $period;
$dataStats['report'] = $report_type;
$stats = $dataStats; $stats = $dataStats;
return $stats; return $stats;
......
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