Фильтрация списка кампаний в табл., срок действия, правки по скриптам

parent 946fc237
......@@ -97,6 +97,12 @@ table.campaigns tbody tr td.stat {
text-align: right;
}
table.campaigns thead th.stat {
width: 1px;
text-align: right;
font-family: monospace;
}
table.campaigns tbody tr.group-item {
font-weight: bold;
background-color: #f9f9f9;
......@@ -486,5 +492,41 @@ textarea#cities-codes
font-family: monospace;
text-align: right;
}
.table tbody tr td.stat.date
{
font-size: 12px;
}
.table tbody tr td.stat.date span.not-active
{
color: #D33E3D;
}
.form-control.campaign-status
{
display: inline;
width: 120px;
}
.table.active tr.not-active,
.table.not-active tr.active,
.table.archive tr.not-archive,
.table.not-archive tr.archive
{
display: none !important;
}
.table.common-stat thead tr th:not(:first-child),
.table.common-stat tbody tr td:not(:first-child)
{
text-align: right;
}
.table.campaign-banners th,
.table.campaign-banners td
{
padding: 4px;
}
\ No newline at end of file
......@@ -20,7 +20,7 @@ $(document).ready(function () {
$switchItems.removeClass(classSelected);
$this.addClass(classSelected);
window.location.hash = type;
location.replace("#" + type);
$formGroups.removeClass(classSelected);
$('.form-group-data[data-type="' + type + '"]').addClass(classSelected);
......@@ -185,6 +185,10 @@ $(document).ready(function () {
isCurrencyValue = currencyFields.indexOf(dataLine) > -1,
format = (isCurrencyValue) ? d3.format(',.2f') : d3.format(',.0f');
if (['ctr', 'cpm', 'cpc'].indexOf(dataLine) > -1) {
format = d3.format(',.2f');
}
if (parseFloat(format(value)) == 0 && value != 0) {
var accuracy = Math.abs(Math.floor(Math.log10(value)));
return value.toFixed(accuracy);
......@@ -216,7 +220,9 @@ $(document).ready(function () {
if (isCurrencyValue) format = d3.format(',.2f');
if (currentActiveLine == 'ctr') format = d3.format(',.2f');
if (currentActiveLine == 'cpc') format = d3.format(',.1f');
if (currentActiveLine == 'cpm') format = d3.format(',.2f');
if (currentActiveLine == 'cpc') format = d3.format(',.2f');
if (isCurrencyValue) return format(value) + ' ₴';
if (currentActiveLine == 'ctr') return format(value) + ' %';
......
......@@ -26,5 +26,30 @@ $(document).ready(function () {
// Разворачиваем списки групп кампаний при старте:
$('.table.campaigns span.group').click();
// Фильтрация для таблицы:
var
$table = $('.table.campaigns'),
$selectStatus = $('.form-control.campaign-status'),
filters = ['all', 'active', 'not-active', 'archive', 'not-archive'],
cookieName = 'table_filter_status',
currentFilter = ($.cookie(cookieName)) ? $.cookie(cookieName) : 'not-archive';
function setTableFilter(val)
{
$selectStatus.val(val);
filters.forEach(function(item) {
$table.removeClass(item);
})
$table.addClass(val);
$.cookie(cookieName, val, { expires : 365 });
}
$selectStatus.on('change', function(){
setTableFilter($(this).val());
});
// Устанавливаем по-умолчанию фильтр для таблицы:
setTableFilter(currentFilter);
});
......@@ -191,11 +191,12 @@ class CabinetAmSystem extends Common
/** @var \App\Model\Statistics $stats */
$stats = $this->container->get(\App\Model\Statistics::class);
$banners_stats = [];
foreach ($banners as $banner_item) {
$banner_id = $banner_item['id'];
$banners_stats[$banner_id] = $stats->getBannersStat([$banner_id], $campaign->getTargetAction(), null);
/*
$banners_stats[$banner_id] = $stats->getBannersStat([$banner_id], null);
if ($campaign->getTargetAction() == 'load') {
$banners_stats[$banner_id]['views'] = $banners_stats[$banner_id]['loads'];
......@@ -208,9 +209,10 @@ class CabinetAmSystem extends Common
$banners_stats[$banner_id]['ctr'] = ($views != 0) ? round(($clicks/$views)*100, 2) : 0;
$banners_stats[$banner_id]['cpm'] = ($views != 0) ? round(($money/$views)*1000, 3) : 0;
$banners_stats[$banner_id]['cpc'] = ($clicks != 0) ? round(($money/$clicks)*100, 1) : 0;
$banners_stats[$banner_id]['cpc'] = ($clicks != 0) ? round(($money/$clicks), 1) : 0;
$banners_stats[$banner_id]['money'] = round($banners_stats[$banner_id]['money'], 2);
*/
}
}
......
......@@ -67,6 +67,17 @@ class Campaign extends Common
return $this;
}
/* archive */
public function getArchive()
{
return $this->archive;
}
public function setArchive($archive)
{
$this->archive = $archive;
return $this;
}
/* url */
public function getUrl()
{
......@@ -78,6 +89,17 @@ class Campaign extends Common
return $this;
}
/* checksum */
public function getChecksum()
{
return $this->checksum;
}
public function setChecksum($checksum)
{
$this->checksum = $checksum;
return $this;
}
/* date_begin */
public function getDateBegin()
{
......
......@@ -345,6 +345,30 @@ class Statistics
return $stats;
}
// Добавление спец. полей в статистики по кампаниям (баннерам)
private function AddSpecialFields(&$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), 2) : 0;
$stats['money'] = round($stats['money'], 2);
}
// Данные для статистики по кампании (баннеры)
public function getCampaignsStat($id_list, $taget_action, $dates, $by_days = false)
{
......@@ -392,39 +416,15 @@ class Statistics
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);
};
if (!$dates || !$by_days)
{
$AddSpecialFields($stats);
$this->AddSpecialFields($stats);
$dataStats = $stats;
}
else
{
foreach ($stats as $day => $stat) {
$AddSpecialFields($stats[$day]);
$this->AddSpecialFields($stats[$day]);
}
// Формируем данные для временного промежутка
......@@ -514,7 +514,14 @@ class Statistics
} catch (\Exception $e) {
$stats['status'] = 'Error';
}
return $stats;
//return $stats;
if ($stats) {
$this->AddSpecialFields($stats);
$dataStats = $stats;
}
return $dataStats;
}
// Данные для статистики кампании по сайтам
......@@ -541,35 +548,11 @@ class Statistics
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]);
$this->AddSpecialFields($stats[$site]);
if ($stat['sub']) {
foreach ($stat['sub'] as $sub => $stat) {
$AddSpecialFields($stats[$site]['sub'][$sub]);
$this->AddSpecialFields($stats[$site]['sub'][$sub]);
}
}
}
......@@ -603,41 +586,16 @@ class Statistics
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);
};
// Убираем города у регионов Киев(703447) и empty:
foreach ([703447, 'empty'] as $region_code) {
unset($stats[$region_code]['sub']);
}
foreach ($stats as $region => $stat) {
$AddSpecialFields($stats[$region]);
$this->AddSpecialFields($stats[$region]);
if ($stat['sub']) {
foreach ($stat['sub'] as $sub => $stat) {
$AddSpecialFields($stats[$region]['sub'][$sub]);
$this->AddSpecialFields($stats[$region]['sub'][$sub]);
}
}
}
......
<?php
/*
Функции для форматирования
*/
function formatMoney($val)
{
return number_format((float)$val, 2, ',', ' ') . ' &#8372';
}
?>
......@@ -95,11 +95,12 @@ if (!$error) {
$link_campaigns_list = $this->url('user.cabinet.amsystem', ['lang' => $lang]);
$data_request_link = $this->url('user.cabinet.campaign', ['lang' => $lang]);
}
?>
<?= $this->partial('app::user/_format'); ?>
<?php if($error): ?>
<section class="b-content__work error">
......@@ -358,7 +359,7 @@ if (!$error) {
<td class="stat <?= $target_class ?>"><?= $stat['views'] ?></td>
<td class="stat"><?= $stat['clicks'] ?></td>
<td class="stat"><?= $stat['ctr'] ?></td>
<td class="stat <?= $target_class ?>"><?= $stat['money'] ?> &#8372;</td>
<td class="stat <?= $target_class ?>"><?= formatMoney($stat['money']) ?></td>
<td class="stat"><?= $stat['cpm'] ?> &#8372;</td>
<td class="stat"><?= $stat['cpc'] ?> &#8372;</td>
</tr>
......@@ -406,7 +407,7 @@ if (!$error) {
<!-- Таблица -->
<div id="table-stat" class="b-table_wrapp">
<table id="table-line-common" class="table table-striped">
<table id="table-line-common" class="table table-striped common-stat">
<thead class="sortable">
<tr>
<th class="period" data-id="period">
......
......@@ -27,6 +27,7 @@
/** @var $this \Zend\View\Renderer\PhpRenderer */
$this->headScript()
->appendFile('/js/jquery.cookie.js')
->appendFile('/js/adm/amsystem.js')
;
......@@ -43,6 +44,8 @@ $error = $this->error;
?>
<?= $this->partial('app::user/_format'); ?>
<?php if($error): ?>
<section class="b-content__work error">
......@@ -60,18 +63,30 @@ $error = $this->error;
</div>
<div class="panel-body all">
<div class="table-filters">
Статус кампании:
<select class="form-control campaign-status">
<option value="all"><?= _t('все') ?></option>
<option value="active"><?= _t('активные') ?></option>
<option value="not-active"><?= _t('не активные') ?></option>
<option value="archive"><?= _t('в архиве') ?></option>
<option value="not-archive"><?= _t('не в архиве') ?></option>
</select>
</div>
<table class="table campaigns" data-content="campaigns" data-action="/amsystem/campaigns/id/edit/">
<thead>
<tr>
<th>Название кампании</th>
<th width="1px">Показы</th>
<th width="1px">Клики</th>
<th width="1px">CTR</th>
<th width="1px">Расход</th>
<th width="1px">Охват</th>
<th width="1px">eCPM</th>
<th width="1px">eCPC</th>
<th class="stat">Срок действия</th>
<th class="stat">Показы</th>
<th class="stat">Клики</th>
<th class="stat">CTR</th>
<th class="stat">Расход</th>
<th class="stat">Охват</th>
<th class="stat">eCPM</th>
<th class="stat">eCPC</th>
</tr>
</thead>
<tbody>
......@@ -95,6 +110,7 @@ $error = $this->error;
<input class="is-active" type="checkbox" data-id="<?= $group_id ?>" <?php if ($group['active']): ?>checked<?php endif; ?> disabled>
<span class="item-title"><?= $group['title'] ?></span>
</td>
<td></td>
<td class="stat <?= $target_class ?>"><?= $stat['views'] ?></td>
<td class="stat"><?= $stat['clicks'] ?></td>
<td class="stat"><?= $stat['ctr'] ?></td>
......@@ -107,7 +123,20 @@ $error = $this->error;
<?php if ($groups_campaigns[$group_id]): ?>
<?php foreach ($groups_campaigns[$group_id] as $campaign) : ?>
<tr class="campaign-item <?php if (!$campaign['active']): ?>disabled<?php endif; ?>" data-parent="<?= $group_id ?>">
<?php
$tr_class = '';
if (!$campaign['active']) {
$tr_class.= 'not-active disabled ';
} else {
$tr_class.= 'active ';
}
if ($campaign['archive']) {
$tr_class.= 'archive ';
} else {
$tr_class.= 'not-archive ';
}
?>
<tr class="campaign-item <?= $tr_class ?>" data-parent="<?= $group_id ?>">
<?php
$campaign_id = $campaign['id'];
$stat = $stats[$campaign_id];
......@@ -123,13 +152,30 @@ $error = $this->error;
<input class="is-active" type="checkbox" data-id="<?= $campaign_id ?>" <?php if ($campaign['active']): ?>checked<?php endif; ?> disabled>
<span class="item-title"><a href="<?= $btn_link?>"><?= $campaign['title'] ?></a></span>
</td>
<?php
$begin = ($campaign['date_begin']) ? date('d-m-Y', strtotime($campaign['date_begin'])) : '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
$end = ($campaign['date_end']) ? date('d-m-Y', strtotime($campaign['date_end'])) : '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
$today = date('Y-m-d');
$date_begin_class = '';
$date_end_class = '';
if ($campaign['date_begin'] && $today < $campaign['date_begin']) {
$date_begin_class = 'not-active';
}
if ($campaign['date_end'] && $today > $campaign['date_end']) {
$date_end_class = 'not-active';
}
?>
<td class="stat date">
<span class="<?= $date_begin_class ?>"><?= $begin ?></span> &ndash; <span class="<?= $date_end_class ?>"><?= $end ?></span>
</td>
<td class="stat <?= $target_class ?>"><?= $stat['views'] ?></td>
<td class="stat"><?= $stat['clicks'] ?></td>
<td class="stat"><?= $stat['ctr'] ?></td>
<td class="stat"><?= $stat['money'] ?></td>
<td class="stat"><?= formatMoney($stat['money']) ?></td>
<td class="stat <?= $target_class ?>"><?= $stat['reach'] ?></td>
<td class="stat"><?= $stat['cpm'] ?></td>
<td class="stat"><?= $stat['cpc'] ?></td>
<td class="stat"><?= $stat['cpm'] ?> &#8372;</td>
<td class="stat"><?= $stat['cpc'] ?> &#8372;</td>
</tr>
<?php endforeach; ?>
......
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