Правки по сортировке для подкатегорий, пересчет строки итого для общей статистики

parent 56c60383
......@@ -3012,6 +3012,7 @@ return [
'codes' =>
array(
0 => 703883,
1 => 694422,
),
),
340 =>
......@@ -3140,6 +3141,7 @@ return [
'codes' =>
array(
0 => 240241,
1 => 695592,
),
),
356 =>
......
......@@ -144,7 +144,7 @@ $(document).ready(function () {
$tableRegions = $('#table-line-regions'),
$tableRegionsBody = $tableRegions.find('tbody').first(),
codeRegions, codeCities,
regionName, cityName;
regionName, cityName, catName;
// Добавление впереди 0 у однозначных значений
......@@ -241,7 +241,7 @@ $(document).ready(function () {
codeCities = JSON.parse($('#cities-codes').val());
}
console.log('AAA dataStat = ', dataStat);
//console.log('AAA dataStat = ', dataStat);
function ShowCommonStatInfo()
{
......@@ -297,6 +297,40 @@ $(document).ready(function () {
}
}
function prepareDataForSort(dataTable, dataTableForSort)
{
for (var cat in dataTable) {
var dataTableSortItem = dataTable[cat];
dataTableSortItem['cat'] = cat;
if (dataTable[cat]['sub']) {
var subData = [];
for (var subCat in dataTable[cat]['sub']) {
var subDataItem = dataTable[cat]['sub'][subCat];
subDataItem['cat'] = subCat;
subData.push(subDataItem);
}
dataTable[cat]['sub'] = subData
}
dataTableForSort.push(dataTableSortItem);
}
}
function sortingDataByField(data, sortField, isDesc)
{
data.sort(function(a,b){
if (dateTimeFields.indexOf(sortField) > -1) {
var
aT = new Date(a[sortField]),
bT = new Date(b[sortField]);
return (isDesc) ? bT-aT : aT-bT;
} else {
return (isDesc) ? b[sortField]-a[sortField] : a[sortField]-b[sortField];
}
});
}
function getCheckedCategories() {
var listCats = [];
$('thead th input[type="checkbox"]', $tableCommonStat).each(function(){
......@@ -438,16 +472,7 @@ $(document).ready(function () {
});
// Сортировка данных для таблицы:
dataTableForSort.sort(function(a,b){
if (dateTimeFields.indexOf(sortField) > -1) {
var
aT = new Date(a[sortField]),
bT = new Date(b[sortField]);
return (isDesc) ? bT-aT : aT-bT;
} else {
return (isDesc) ? b[sortField]-a[sortField] : a[sortField]-b[sortField];
}
});
sortingDataByField(dataTableForSort, sortField, isDesc);
// Отрисовка таблицы:
dataTableForSort.forEach(function(item){
......@@ -489,6 +514,7 @@ $(document).ready(function () {
isDesc = true;
// Определение поля для сортировки строк в таблице:
/*
if ($selectedField.length > 0) {
sortField = $selectedField.attr('id');
isDesc = $selectedField.hasClass('desc');
......@@ -497,24 +523,20 @@ $(document).ready(function () {
sortField = 'money';
isDesc = true;
}
//console.log('AAA sortField = ', sortField, ' isDesc = ', isDesc);
console.log('AAA sortField = ', sortField, ' isDesc = ', isDesc);
*/
sortField = 'money';
isDesc = true;
// Подготовка данных для сортировки:
for (var site in dataTable) {
var dataTableSortItem = dataTable[site];
dataTableSortItem['site'] = site;
dataTableForSort.push(dataTableSortItem);
}
prepareDataForSort(dataTable, dataTableForSort);
// Сортировка данных для таблицы:
dataTableForSort.sort(function(a,b){
if (dateTimeFields.indexOf(sortField) > -1) {
var
aT = new Date(a[sortField]),
bT = new Date(b[sortField]);
return (isDesc) ? bT-aT : aT-bT;
} else {
return (isDesc) ? b[sortField]-a[sortField] : a[sortField]-b[sortField];
sortingDataByField(dataTableForSort, sortField, isDesc);
// Сортировка подкатегорий для таблицы:
dataTableForSort.forEach(function(item, ind){
if (item['sub']) {
sortingDataByField(dataTableForSort[ind]['sub'], sortField, isDesc);
}
});
//console.log('AAA dataTableForSort = ', dataTableForSort);
......@@ -522,11 +544,11 @@ $(document).ready(function () {
// Отрисовка таблицы:
dataTableForSort.forEach(function(item){
$row = $('<tr class="cat" data-id="' + item['site'] + '">');
$row = $('<tr class="cat" data-id="' + item['cat'] + '">');
if (item['sub']) {
$row.append($('<td class="period">').html('<span class="group"><b class="closed">+</b><b class="open">&ndash;</b></span> ' + item['site']));
$row.append($('<td>').html('<span class="group"><b class="closed">+</b><b class="open">&ndash;</b></span> ' + item['cat']));
} else {
$row.append($('<td class="period">').html(item['site']));
$row.append($('<td>').html(item['cat']));
}
activeLinesId.forEach(function(line){
......@@ -535,14 +557,16 @@ $(document).ready(function () {
$row.appendTo($tableContent);
if (item['sub']) {
for (var zone in item['sub']) {
$row = $('<tr class="subcat" data-parent="' + item['site'] + '">');
$row.append($('<td class="subcat-title">').html('[зона ' + zone % 100 + '] (' + item['sub'][zone]['size'] + ')'));
item['sub'].forEach(function(itemSub){
var zone = itemSub['cat'];
$row = $('<tr class="subcat" data-parent="' + item['cat'] + '">');
$row.append($('<td class="subcat-title">').html('[зона ' + zone % 100 + '] (' + itemSub['size'] + ')'));
activeLinesId.forEach(function(line){
$row.append($('<td class="stat '+ line +'">').html(valueFormatTable(item['sub'][zone][line], line)));
$row.append($('<td class="stat '+ line +'">').html(valueFormatTable(itemSub[line], line)));
});
$row.appendTo($tableContent);
}
});
}
});
......@@ -560,53 +584,33 @@ $(document).ready(function () {
var
dataTable = dataRegionsStat,
dataTableForSort = [],
$selectedField = $('thead th b.selected', $tableRegions),
$tableContent = $('<tbody>'),
$row,
sortField = false,
isDesc = true;
// Определение поля для сортировки строк в таблице:
if ($selectedField.length > 0) {
sortField = $selectedField.attr('id');
isDesc = $selectedField.hasClass('desc');
}
if (!sortField) {
sortField = 'money';
sortField = 'money',
isDesc = true;
}
//console.log('AAA sortField = ', sortField, ' isDesc = ', isDesc);
// Подготовка данных для сортировки:
for (var region in dataTable) {
var dataTableSortItem = dataTable[region];
dataTableSortItem['region'] = region;
dataTableForSort.push(dataTableSortItem);
}
prepareDataForSort(dataTable, dataTableForSort);
// Сортировка данных для таблицы:
dataTableForSort.sort(function(a,b){
if (dateTimeFields.indexOf(sortField) > -1) {
var
aT = new Date(a[sortField]),
bT = new Date(b[sortField]);
return (isDesc) ? bT-aT : aT-bT;
} else {
return (isDesc) ? b[sortField]-a[sortField] : a[sortField]-b[sortField];
sortingDataByField(dataTableForSort, sortField, isDesc);
// Сортировка подкатегорий для таблицы:
dataTableForSort.forEach(function(item, ind){
if (item['sub']) {
sortingDataByField(dataTableForSort[ind]['sub'], sortField, isDesc);
}
});
//console.log('AAA dataTableForSort = ', dataTableForSort);
// Отрисовка таблицы:
dataTableForSort.forEach(function(item){
regionName = (codeRegions[item['region']]) ? codeRegions[item['region']] : item['region'];
regionName = (codeRegions[item['cat']]) ? codeRegions[item['cat']] : item['cat'];
$row = $('<tr class="cat" data-id="' + item['region'] + '">');
$row = $('<tr class="cat" data-id="' + item['cat'] + '">');
if (item['sub']) {
$row.append($('<td class="period">').html('<span class="group"><b class="closed">+</b><b class="open">&ndash;</b></span> ' + regionName));
$row.append($('<td>').html('<span class="group"><b class="closed">+</b><b class="open">&ndash;</b></span> ' + regionName));
} else {
$row.append($('<td class="period">').html(regionName));
$row.append($('<td>').html(regionName));
}
activeLinesId.forEach(function(line){
......@@ -615,15 +619,20 @@ $(document).ready(function () {
$row.appendTo($tableContent);
if (item['sub']) {
for (var city in item['sub']) {
cityName = (codeCities[city]) ? codeCities[city] : city;
$row = $('<tr class="subcat" data-parent="' + item['region'] + '">');
item['sub'].forEach(function(itemSub){
var city = itemSub['cat'];
if (codeCities[city]) {
cityName = codeCities[city];
$row = $('<tr class="subcat" data-parent="' + item['cat'] + '">');
$row.append($('<td class="subcat-title">').html(cityName));
activeLinesId.forEach(function(line){
$row.append($('<td class="stat '+ line +'">').html(valueFormatTable(item['sub'][city][line], line)));
$row.append($('<td class="stat '+ line +'">').html(valueFormatTable(itemSub[line], line)));
});
$row.appendTo($tableContent);
}
});
}
});
......
......@@ -105,7 +105,7 @@ class CabinetAmSystem extends Common
foreach ($campaigns as $campaign_item) {
$campaign_id = $campaign_item['id'];
$campaigns_stat[$campaign_id] = $stats->getCampaignsStat([$campaign_id], $campaign_item['target_action'], null);
$campaigns_stat[$campaign_id] = $stats->getCampaignsStat([$campaign_id], $campaign_item['target_action'], null, false);
}
$data['campaigns'] = $campaigns;
......@@ -159,8 +159,8 @@ class CabinetAmSystem extends Common
$date_end = $campaign->getDateEnd() ? : date("Y-m-d");
$dates_common = [$date_begin, $date_end_common];
$dates = [$date_begin, $date_end];
$campaign_stat = $stats->getCampaignsStat([(int)$campaign_id], $campaign->getTargetAction(), $dates_common);
$campaign_stat_total = $stats->getCampaignsStat([(int)$campaign_id], $campaign->getTargetAction(), null);
$campaign_stat = $stats->getCampaignsStat([(int)$campaign_id], $campaign->getTargetAction(), $dates_common, true);
$campaign_stat_total = $stats->getCampaignsStat([(int)$campaign_id], $campaign->getTargetAction(), $dates_common, false);
$active_line = 'views';
......@@ -277,8 +277,8 @@ class CabinetAmSystem extends Common
if ($data_request['type'] == 'stat-common') {
$data_stat = [
'stat' => $stats->getCampaignsStat([(int)$campaign_id], $campaign->getTargetAction(), $data_request['period']),
'total' => $stats->getCampaignsStat([(int)$campaign_id], $campaign->getTargetAction(), null)
'stat' => $stats->getCampaignsStat([(int)$campaign_id], $campaign->getTargetAction(), $data_request['period'], true),
'total' => $stats->getCampaignsStat([(int)$campaign_id], $campaign->getTargetAction(), $data_request['period'], false)
];
}
......
......@@ -346,7 +346,7 @@ class Statistics
}
// Данные для статистики по кампании (баннеры)
public function getCampaignsStat($id_list, $taget_action, $dates)
public function getCampaignsStat($id_list, $taget_action, $dates, $by_days = false)
{
$dataRequest = array(
'method' => ($dates) ? 'camp_day' : 'camp_total',
......@@ -356,7 +356,7 @@ class Statistics
);
if ($dates) {
// последние 90 дней, если кампания долго идет
$dataRequest['data']['start_date'] = $dates[0];
if ($dates[1] && $dates[1] < date("Y-m-d")) {
......@@ -366,12 +366,15 @@ class Statistics
}
$dataRequest['data']['end_date'] = $date_end;
// последние 90 дней, если кампания долго идет
//$date_start = $dates[0];
//$interval = date($date_end)->diff(date($date_start)); // получаем разницу в виде объекта DateInterval
//$dataRequest['data']['diff'] = $interval->d;
if ($by_days) {
$dataRequest['data']['by_days'] = true;
}
}
//return $dataRequest;
try {
......@@ -408,7 +411,7 @@ class Statistics
$stats['money'] = round($stats['money'], 2);
};
if (!$dates)
if (!$dates || !$by_days)
{
$AddSpecialFields($stats);
$dataStats = $stats;
......@@ -618,8 +621,14 @@ class Statistics
$stats['money'] = round($stats['money'], 2);
};
// Убираем города у регионов Киев(703447) и empty:
foreach ([703447, 'empty'] as $region_code) {
unset($stats[$region_code]['sub']);
}
foreach ($stats as $region => $stat) {
$AddSpecialFields($stats[$region]);
if ($stat['sub']) {
foreach ($stat['sub'] as $sub => $stat) {
$AddSpecialFields($stats[$region]['sub'][$sub]);
......
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