264 lines
10 KiB
HTML
264 lines
10 KiB
HTML
<<<<<<< HEAD
|
||
{% extends 'admin/base.html' %}
|
||
{% load programmer_tags %}
|
||
|
||
{% block title %}Статистика посещений{% endblock %}
|
||
{% block page_title %}Статистика посещений{% endblock %}
|
||
|
||
{% block content %}
|
||
<!-- Уведомления о заявках -->
|
||
{% get_unread_callbacks as unread_callbacks %}
|
||
{% get_today_callbacks as today_callbacks %}
|
||
{% if unread_callbacks > 0 %}
|
||
<div class="alert alert-warning alert-dismissible fade show" role="alert">
|
||
<h4>🚨 Внимание!</h4>
|
||
<p>
|
||
У вас <strong>{{ unread_callbacks }}</strong> непрочитанных заявок на обратный звонок
|
||
{% if today_callbacks > 0 %}
|
||
({{ today_callbacks }} из них сегодня)
|
||
{% endif %}
|
||
</p>
|
||
<a href="{% url 'admin:programmer_callbackrequest_changelist' %}" class="btn btn-warning btn-sm">
|
||
📋 Перейти к заявкам
|
||
</a>
|
||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||
</div>
|
||
{% endif %}
|
||
|
||
<div class="row mb-4">
|
||
<div class="col-12">
|
||
<div class="stats-grid">
|
||
<div class="stat-card">
|
||
<h3>📊 Просмотров сегодня</h3>
|
||
<p class="stat-number">{{ today_views }}</p>
|
||
</div>
|
||
<div class="stat-card">
|
||
<h3>📈 Просмотров за неделю</h3>
|
||
<p class="stat-number">{{ weekly_views }}</p>
|
||
</div>
|
||
<div class="stat-card">
|
||
<h3>👥 Уникальных посетителей</h3>
|
||
<p class="stat-number">{{ unique_visitors }}</p>
|
||
</div>
|
||
<div class="stat-card">
|
||
<h3>🕒 Всего просмотров</h3>
|
||
<p class="stat-number">{{ total_views }}</p>
|
||
</div>
|
||
<!-- Добавляем статистику по заявкам -->
|
||
<div class="stat-card">
|
||
<h3>📞 Заявок сегодня</h3>
|
||
<p class="stat-number">{{ today_callbacks }}</p>
|
||
</div>
|
||
<div class="stat-card">
|
||
<h3>📋 Всего заявок</h3>
|
||
<p class="stat-number">{% get_unread_callbacks %}/{{ total_callbacks }}</p>
|
||
<small>(непрочитанные/всего)</small>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Остальной код статистики остается без изменений -->
|
||
<div class="row">
|
||
<div class="col-12">
|
||
<div class="card">
|
||
<div class="card-header">
|
||
<h3>🔥 Популярные страницы (за неделю)</h3>
|
||
</div>
|
||
<div class="card-body p-0">
|
||
<table class="table table-striped mb-0">
|
||
<thead>
|
||
<tr>
|
||
<th>Страница</th>
|
||
<th>Просмотров</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{% for page in popular_pages %}
|
||
<tr>
|
||
<td>
|
||
<code>{{ page.url }}</code>
|
||
{% if page.url == '/' %}
|
||
<span class="badge bg-primary">Главная</span>
|
||
{% endif %}
|
||
</td>
|
||
<td><strong>{{ page.views }}</strong></td>
|
||
</tr>
|
||
{% empty %}
|
||
<tr>
|
||
<td colspan="2" class="text-center text-muted">Нет данных за выбранный период</td>
|
||
</tr>
|
||
{% endfor %}
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="row mt-4">
|
||
<div class="col-12">
|
||
<div class="card">
|
||
<div class="card-header">
|
||
<h3>📋 Последние посещения</h3>
|
||
</div>
|
||
<div class="card-body p-0">
|
||
<table class="table table-striped mb-0">
|
||
<thead>
|
||
<tr>
|
||
<th>Время</th>
|
||
<th>Страница</th>
|
||
<th>IP-адрес</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{% for view in recent_views %}
|
||
<tr>
|
||
<td>{{ view.timestamp|date:"d.m.Y H:i" }}</td>
|
||
<td><code>{{ view.url }}</code></td>
|
||
<td><small>{{ view.ip_address }}</small></td>
|
||
</tr>
|
||
{% empty %}
|
||
<tr>
|
||
<td colspan="3" class="text-center text-muted">Нет данных</td>
|
||
</tr>
|
||
{% endfor %}
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
=======
|
||
{% extends 'admin/base.html' %}
|
||
{% load programmer_tags %}
|
||
|
||
{% block title %}Статистика посещений{% endblock %}
|
||
{% block page_title %}Статистика посещений{% endblock %}
|
||
|
||
{% block content %}
|
||
<!-- Уведомления о заявках -->
|
||
{% get_unread_callbacks as unread_callbacks %}
|
||
{% get_today_callbacks as today_callbacks %}
|
||
{% if unread_callbacks > 0 %}
|
||
<div class="alert alert-warning alert-dismissible fade show" role="alert">
|
||
<h4>🚨 Внимание!</h4>
|
||
<p>
|
||
У вас <strong>{{ unread_callbacks }}</strong> непрочитанных заявок на обратный звонок
|
||
{% if today_callbacks > 0 %}
|
||
({{ today_callbacks }} из них сегодня)
|
||
{% endif %}
|
||
</p>
|
||
<a href="{% url 'admin:programmer_callbackrequest_changelist' %}" class="btn btn-warning btn-sm">
|
||
📋 Перейти к заявкам
|
||
</a>
|
||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||
</div>
|
||
{% endif %}
|
||
|
||
<div class="row mb-4">
|
||
<div class="col-12">
|
||
<div class="stats-grid">
|
||
<div class="stat-card">
|
||
<h3>📊 Просмотров сегодня</h3>
|
||
<p class="stat-number">{{ today_views }}</p>
|
||
</div>
|
||
<div class="stat-card">
|
||
<h3>📈 Просмотров за неделю</h3>
|
||
<p class="stat-number">{{ weekly_views }}</p>
|
||
</div>
|
||
<div class="stat-card">
|
||
<h3>👥 Уникальных посетителей</h3>
|
||
<p class="stat-number">{{ unique_visitors }}</p>
|
||
</div>
|
||
<div class="stat-card">
|
||
<h3>🕒 Всего просмотров</h3>
|
||
<p class="stat-number">{{ total_views }}</p>
|
||
</div>
|
||
<!-- Добавляем статистику по заявкам -->
|
||
<div class="stat-card">
|
||
<h3>📞 Заявок сегодня</h3>
|
||
<p class="stat-number">{{ today_callbacks }}</p>
|
||
</div>
|
||
<div class="stat-card">
|
||
<h3>📋 Всего заявок</h3>
|
||
<p class="stat-number">{% get_unread_callbacks %}/{{ total_callbacks }}</p>
|
||
<small>(непрочитанные/всего)</small>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Остальной код статистики остается без изменений -->
|
||
<div class="row">
|
||
<div class="col-12">
|
||
<div class="card">
|
||
<div class="card-header">
|
||
<h3>🔥 Популярные страницы (за неделю)</h3>
|
||
</div>
|
||
<div class="card-body p-0">
|
||
<table class="table table-striped mb-0">
|
||
<thead>
|
||
<tr>
|
||
<th>Страница</th>
|
||
<th>Просмотров</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{% for page in popular_pages %}
|
||
<tr>
|
||
<td>
|
||
<code>{{ page.url }}</code>
|
||
{% if page.url == '/' %}
|
||
<span class="badge bg-primary">Главная</span>
|
||
{% endif %}
|
||
</td>
|
||
<td><strong>{{ page.views }}</strong></td>
|
||
</tr>
|
||
{% empty %}
|
||
<tr>
|
||
<td colspan="2" class="text-center text-muted">Нет данных за выбранный период</td>
|
||
</tr>
|
||
{% endfor %}
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="row mt-4">
|
||
<div class="col-12">
|
||
<div class="card">
|
||
<div class="card-header">
|
||
<h3>📋 Последние посещения</h3>
|
||
</div>
|
||
<div class="card-body p-0">
|
||
<table class="table table-striped mb-0">
|
||
<thead>
|
||
<tr>
|
||
<th>Время</th>
|
||
<th>Страница</th>
|
||
<th>IP-адрес</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
{% for view in recent_views %}
|
||
<tr>
|
||
<td>{{ view.timestamp|date:"d.m.Y H:i" }}</td>
|
||
<td><code>{{ view.url }}</code></td>
|
||
<td><small>{{ view.ip_address }}</small></td>
|
||
</tr>
|
||
{% empty %}
|
||
<tr>
|
||
<td colspan="3" class="text-center text-muted">Нет данных</td>
|
||
</tr>
|
||
{% endfor %}
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
>>>>>>> master
|
||
{% endblock %} |