Таблицы статистики по сайтам и регионам, формат данных, логика рендера

parent e846e1a5
...@@ -14,6 +14,45 @@ ...@@ -14,6 +14,45 @@
text-align: center; text-align: center;
} }
.switch-data
{
margin-bottom: 20px;
padding-bottom: 10px;
line-height: 30px;
border-bottom: 1px solid #BCE8F1;
}
.switch-item
{
padding: 5px;
border: 1px solid #2E6DA4;
color: #2E6DA4;
border-radius: 4px;
cursor: pointer;
}
.switch-item:hover
{
color: #FFFFFF;
background-color: #2E6DA4;
}
.switch-item.selected
{
color: #FFFFFF;
background-color: #2E6DA4;
}
.form-group-data
{
display: none;
}
.form-group-data.selected
{
display: block;
}
.form-group .form-control .form-group .form-control
{ {
font-family: monospace; font-family: monospace;
...@@ -236,13 +275,19 @@ table.campaign-banners tbody tr td { ...@@ -236,13 +275,19 @@ table.campaign-banners tbody tr td {
textarea#campaign-stat, textarea#campaign-stat,
textarea#campaign-stat-total, textarea#campaign-stat-total,
textarea#campaign-stat-cats textarea#campaign-stat-cats,
textarea#campaign-sites-stat,
textarea#campaign-regions-stat,
textarea#regions-codes,
textarea#cities-codes
{ {
display: none; display: none;
} }
.chart-graph-stat-info, .chart-graph-stat-info,
.chart-graph-stat-error .chart-graph-stat-error,
.sites-stats-error,
.regions-stats-error
{ {
display: none; display: none;
padding-top: 160px; padding-top: 160px;
...@@ -259,7 +304,7 @@ textarea#campaign-stat-cats ...@@ -259,7 +304,7 @@ textarea#campaign-stat-cats
/* /*
#table-stat #table-stat
*/ */
.b-table_wrapp.report .b-table_wrapp
{ {
display: none; display: none;
margin-top: 30px; margin-top: 30px;
...@@ -313,4 +358,63 @@ textarea#campaign-stat-cats ...@@ -313,4 +358,63 @@ textarea#campaign-stat-cats
font-weight: bold; font-weight: bold;
} }
.table.table-by-cats span.group
{
display: inline-block;
min-width: 12px;
color: #697075;
cursor: pointer;
}
.table.table-by-cats span.group b.open
{
display: none;
}
.table.table-by-cats span.group.open b.closed
{
display: none;
}
.table.table-by-cats span.group.open b.open
{
display: inline;
}
.table.table-by-cats tr.subcat
{
display: none;
}
.table.table-by-cats tr.subcat.open
{
display: table-row;
}
.table.table-by-cats td.subcat-title
{
padding-left: 30px;
}
.table.table-by-cats
{
white-space: nowrap;
}
.table.table-by-cats th:not(.period)
{
width: 1px;
}
.table.table-by-cats th.zone-size
{
width: 90px;
}
.table.table-by-cats td.stat
{
font-family: monospace;
text-align: right;
}
\ No newline at end of file
This diff is collapsed.
...@@ -154,6 +154,7 @@ class CabinetAmSystem extends Common ...@@ -154,6 +154,7 @@ class CabinetAmSystem extends Common
$stats = $this->container->get(\App\Model\Statistics::class); $stats = $this->container->get(\App\Model\Statistics::class);
$date_begin = $campaign->getDateBegin(); $date_begin = $campaign->getDateBegin();
$date_end = $campaign->getDateEnd() ? : date("Y-m-d"); $date_end = $campaign->getDateEnd() ? : date("Y-m-d");
// последние 90 дней, если кампания долго идет
$dates = [$date_begin, $date_end]; $dates = [$date_begin, $date_end];
$campaign_stat = $stats->getCampaignsStat([(int)$campaign_id], $campaign->getTargetAction(), $dates); $campaign_stat = $stats->getCampaignsStat([(int)$campaign_id], $campaign->getTargetAction(), $dates);
$campaign_stat_total = $stats->getCampaignsStat([(int)$campaign_id], $campaign->getTargetAction(), null); $campaign_stat_total = $stats->getCampaignsStat([(int)$campaign_id], $campaign->getTargetAction(), null);
...@@ -194,12 +195,18 @@ class CabinetAmSystem extends Common ...@@ -194,12 +195,18 @@ class CabinetAmSystem extends Common
} }
$sites_stats = $stats->getCampaignsSitesStat((int)$campaign_id, $campaign->getTargetAction(), $dates);
$regions_stats = $stats->getCampaignsRegionsStat((int)$campaign_id, $campaign->getTargetAction(), $dates);
$data['campaign'] = $campaign; $data['campaign'] = $campaign;
$data['countries'] = $countries; $data['countries'] = $countries;
$data['regions'] = $regions; $data['regions'] = $regions;
$data['cities'] = $cities; $data['cities'] = $cities;
$data['banners'] = $banners; $data['banners'] = $banners;
$data['banners_stats'] = $banners_stats; $data['banners_stats'] = $banners_stats;
$data['sites_stats'] = $sites_stats;
$data['regions_stats'] = $regions_stats;
$data['campaign_stat'] = $campaign_stat; $data['campaign_stat'] = $campaign_stat;
$data['campaign_stat_total'] = $campaign_stat_total; $data['campaign_stat_total'] = $campaign_stat_total;
$data['campaign_stat_cats'] = self::CAMPAIGN_STAT_CATS; $data['campaign_stat_cats'] = self::CAMPAIGN_STAT_CATS;
......
...@@ -345,7 +345,7 @@ class Statistics ...@@ -345,7 +345,7 @@ class Statistics
return $stats; return $stats;
} }
// Данные по статистике для кампании (баннеры) // Данные для статистики по кампании (баннеры)
public function getCampaignsStat($id_list, $taget_action, $dates) public function getCampaignsStat($id_list, $taget_action, $dates)
{ {
$dataRequest = array( $dataRequest = array(
...@@ -463,8 +463,7 @@ class Statistics ...@@ -463,8 +463,7 @@ class Statistics
return $dataStats; return $dataStats;
} }
// Данные для статистики по баннерам
// Данные по статистике для баннеров
public function getBannersStat($banners_id_list, $dates) public function getBannersStat($banners_id_list, $dates)
{ {
$dataRequest = array( $dataRequest = array(
...@@ -488,6 +487,131 @@ class Statistics ...@@ -488,6 +487,131 @@ class Statistics
return $stats; return $stats;
} }
// Данные для статистики кампании по сайтам
public function getCampaignsSitesStat($id, $taget_action, $dates)
{
$dataRequest = array(
'method' => 'camp_zone',
'data' => array(
'id' => $id,
'start_date' => $dates[0],
'end_date' => $dates[1]
)
);
//return $dataRequest;
try {
$stats = $this->apiRequest($dataRequest);
} catch (\Exception $e) {
$stats['status'] = 'Error';
return $stats;
}
//return $stats;
if ($stats) {
// Добавляем спец. поля
$AddSpecialFields = function(&$stats)
{
if ($taget_action == 'load') {
$stats['views'] = $stats['loads'];
$stats['reach'] = $stats['reach_load'];
} else {
$stats['reach'] = $stats['reach_view'];
}
unset($stats['loads']);
unset($stats['reach_load']);
unset($stats['reach_view']);
$views = $stats['views'];
$money = $stats['money'];
$clicks = $stats['clicks'];
$stats['ctr'] = ($views != 0) ? round(($clicks/$views)*100, 2) : 0;
$stats['cpm'] = ($views != 0) ? round(($money/$views)*1000, 3) : 0;
$stats['cpc'] = ($clicks != 0) ? round(($money/$clicks)*100, 1) : 0;
$stats['money'] = round($stats['money'], 2);
};
foreach ($stats as $site => $stat) {
$AddSpecialFields($stats[$site]);
if ($stat['sub']) {
foreach ($stat['sub'] as $sub => $stat) {
$AddSpecialFields($stats[$site]['sub'][$sub]);
}
}
}
$dataStats = $stats;
}
return $dataStats;
}
// Данные для статистики кампании по регионам
public function getCampaignsRegionsStat($id, $taget_action, $dates)
{
$dataRequest = array(
'method' => 'camp_geo',
'data' => array(
'id' => $id,
'start_date' => $dates[0],
'end_date' => $dates[1]
)
);
//return $dataRequest;
try {
$stats = $this->apiRequest($dataRequest);
} catch (\Exception $e) {
$stats['status'] = 'Error';
return $stats;
}
//return $stats;
if ($stats) {
// Добавляем спец. поля
$AddSpecialFields = function(&$stats)
{
if ($taget_action == 'load') {
$stats['views'] = $stats['loads'];
$stats['reach'] = $stats['reach_load'];
} else {
$stats['reach'] = $stats['reach_view'];
}
unset($stats['loads']);
unset($stats['reach_load']);
unset($stats['reach_view']);
$views = $stats['views'];
$money = $stats['money'];
$clicks = $stats['clicks'];
$stats['ctr'] = ($views != 0) ? round(($clicks/$views)*100, 2) : 0;
$stats['cpm'] = ($views != 0) ? round(($money/$views)*1000, 3) : 0;
$stats['cpc'] = ($clicks != 0) ? round(($money/$clicks)*100, 1) : 0;
$stats['money'] = round($stats['money'], 2);
};
foreach ($stats as $region => $stat) {
$AddSpecialFields($stats[$region]);
if ($stat['sub']) {
foreach ($stat['sub'] as $sub => $stat) {
$AddSpecialFields($stats[$region]['sub'][$sub]);
}
}
}
$dataStats = $stats;
}
return $dataStats;
}
// Запрос к API: // Запрос к API:
......
This diff is collapsed.
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