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

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