marge statistic/backend and statistic/frontend
This commit is contained in:
parent
b50a6668a6
commit
6fd81c3ccc
@ -2,7 +2,6 @@ from django import forms
|
||||
from django.contrib.auth.forms import AuthenticationForm
|
||||
from django_registration.forms import RegistrationFormUniqueEmail
|
||||
|
||||
from access_controller.settings import ZENDESK_ROLES
|
||||
from main.models import UserProfile
|
||||
|
||||
|
||||
@ -15,6 +14,7 @@ class CustomRegistrationForm(RegistrationFormUniqueEmail):
|
||||
:param visible_fields.email: Поле для ввода email, зарегистирированного на Zendesk
|
||||
:type visible_fields.email: :class:`django_registration.forms.RegistrationFormUniqueEmail`
|
||||
"""
|
||||
|
||||
def __init__(self, *args, **kwargs) -> RegistrationFormUniqueEmail:
|
||||
super().__init__(*args, **kwargs)
|
||||
for visible in self.visible_fields():
|
||||
@ -68,29 +68,60 @@ class CustomAuthenticationForm(AuthenticationForm):
|
||||
}
|
||||
|
||||
|
||||
INTERVAL_CHOICES = [
|
||||
('days', 'Дни'),
|
||||
('months', 'Месяцы')
|
||||
]
|
||||
DISPLAY_CHOICES = [
|
||||
('hours', 'Часы'),
|
||||
('days', 'Дни')
|
||||
]
|
||||
|
||||
|
||||
class StatisticForm(forms.Form):
|
||||
email = forms.EmailField(
|
||||
label='Электроная почта',
|
||||
)
|
||||
interval = forms.CharField( # TODO: Переделать под html страницу
|
||||
label='Интервал работы',
|
||||
)
|
||||
display_format = forms.CharField( # TODO: Переделать под html страницу
|
||||
label='Формат отображения',
|
||||
)
|
||||
range_start = forms.DateField( # TODO: Переделать под html страницу
|
||||
label='Начало диапазона',
|
||||
widget=forms.DateInput(
|
||||
widget=forms.EmailInput(
|
||||
attrs={
|
||||
'type': 'date',
|
||||
'placeholder': 'example@ngenix.ru',
|
||||
'class': 'form-control',
|
||||
'style': 'background-color:#f2f2f2;'
|
||||
}
|
||||
),
|
||||
)
|
||||
range_end = forms.DateField( # TODO: Переделать под html страницу
|
||||
label='Конец диапазона',
|
||||
interval = forms.ChoiceField(
|
||||
label='Выберите интервалы времени работы',
|
||||
choices=INTERVAL_CHOICES,
|
||||
widget=forms.RadioSelect(
|
||||
attrs={
|
||||
'class': 'btn-check',
|
||||
}
|
||||
)
|
||||
)
|
||||
display_format = forms.ChoiceField(
|
||||
label='Выберите формат отображения',
|
||||
choices=DISPLAY_CHOICES,
|
||||
widget=forms.RadioSelect(
|
||||
attrs={
|
||||
'class': 'btn-check',
|
||||
}
|
||||
)
|
||||
)
|
||||
range_start = forms.DateField(
|
||||
label='Начало статистики',
|
||||
widget=forms.DateInput(
|
||||
attrs={
|
||||
'type': 'date',
|
||||
'class': 'btn btn-secondary text-primary bg-white',
|
||||
}
|
||||
),
|
||||
)
|
||||
range_end = forms.DateField(
|
||||
label='Конец статистики',
|
||||
widget=forms.DateInput(
|
||||
attrs={
|
||||
'type': 'date',
|
||||
'class': 'btn btn-secondary text-primary bg-white',
|
||||
}
|
||||
),
|
||||
)
|
||||
|
@ -34,7 +34,6 @@ class RoleChangeLogs(models.Model):
|
||||
"""Модель для логирования изменений ролей пользователя"""
|
||||
user = models.ForeignKey(to=User, on_delete=models.CASCADE,
|
||||
help_text='Пользователь, которому присвоили другую роль')
|
||||
name = models.TextField(help_text='Имя пользователя')
|
||||
old_role = models.IntegerField(default=0, help_text='Старая роль')
|
||||
new_role = models.IntegerField(default=0, help_text='Присвоенная роль')
|
||||
change_time = models.DateTimeField(help_text='Дата и время изменения роли')
|
||||
|
@ -1,49 +0,0 @@
|
||||
{% extends 'base/base.html' %}
|
||||
|
||||
{% load static %}
|
||||
|
||||
{% block title %}{{ pagename }}{% endblock %}
|
||||
|
||||
{% block heading %} Пример страницы статистики(палками не бейти плиз){% endblock %}
|
||||
|
||||
{% block extra_css %}
|
||||
<link rel="stylesheet" href="{% static 'main/css/work.css' %}">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div>
|
||||
<form action="" method="post">
|
||||
{% csrf_token %}
|
||||
{% for field in form %}
|
||||
{{field.label}}
|
||||
{{field}}
|
||||
<br>
|
||||
{% endfor %}
|
||||
<input type="submit">
|
||||
</form>
|
||||
<ul>
|
||||
{% for error in errors %}
|
||||
<li><span class="badge bg-danger">{{error}}</span></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{%if form.errors%}
|
||||
<ul>
|
||||
{% for field, errors in form.errors.items %}
|
||||
{% for error in errors %}
|
||||
<li><span class="badge bg-danger">{{error}}</span></li>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{%endif%}
|
||||
<ul>
|
||||
{% for warning in warnings %}
|
||||
<li><span class="badge bg-warning">{{warning}}</span></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% for key,val in log_stats.items %}
|
||||
<h3>{{key}} <b>|</b> {{val}}</h3>
|
||||
<br>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
106
main/templates/pages/statistic.html
Normal file
106
main/templates/pages/statistic.html
Normal file
@ -0,0 +1,106 @@
|
||||
{% extends 'base/base.html' %}
|
||||
|
||||
{% load static %}
|
||||
|
||||
{% block title %}{{ pagename }}{% endblock %}
|
||||
|
||||
{% block heading %} Страницы просмотра статистики{% endblock %}
|
||||
|
||||
{% block content%}
|
||||
<div class="mt-5">
|
||||
<div class="container-fluid" style="font-size:2rem">
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
<div class="row g-3">
|
||||
<div class="col-auto">
|
||||
{{ form.email.label }}
|
||||
</div>
|
||||
<div class="col-auto mt-4">
|
||||
{{ form.email }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row g-3 mt-4">
|
||||
<div class="col-auto">
|
||||
{{ form.interval.label }}
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
{% for radio in form.interval%}
|
||||
{{ radio.tag }}
|
||||
<label class="btn btn-secondary text-primary bg-white" for="{{ radio.id_for_label }}">
|
||||
{{ radio.choice_label }}
|
||||
</label>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row g-3 mt-4">
|
||||
<div class="col-auto">
|
||||
{{ form.display_format.label }}
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
{% for radio in form.display_format%}
|
||||
{{ radio.tag }}
|
||||
<label class="btn btn-secondary text-primary bg-white" for="{{ radio.id_for_label }}">
|
||||
{{ radio.choice_label }}
|
||||
</label>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row g-3 mt-4">
|
||||
<div class="col-auto">
|
||||
{{ form.range_start.label}}
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<div class='col-sm-7'>
|
||||
{{ form.range_start}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row g-3 mt-4">
|
||||
<div class="col-auto">
|
||||
{{ form.range_end.label}}
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<div class='col-sm-7'>
|
||||
{{ form.range_end}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row text-center">
|
||||
<div class="col-12">
|
||||
<button type="submit" class="btn btn-primary bg-white text-primary">Посмотреть статистику</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<ul>
|
||||
{% for error in errors %}
|
||||
<li><span class="badge bg-danger">{{error}}</span></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<ul>
|
||||
{% for warning in warnings %}
|
||||
<li><span class="badge bg-warning">{{warning}}</span></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
<div class="container-fluid">
|
||||
<table class="table table-bordered text-center text-secondary mt-5" style="background-color:#f2f2f2;">
|
||||
<thead>
|
||||
<tr>
|
||||
<td scope="col">Пользователи/Даты</td>
|
||||
{% for date in log_stats.keys %}
|
||||
<td scope="col">{{date}}</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{ form.email.value }}</td>
|
||||
{% for time in log_stats.values %}
|
||||
<td>{{time}}</td>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
@ -1,207 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
|
||||
<html lang="ru" class="h-100">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<title>Statistic</title>
|
||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/5.0.0-alpha1/css/bootstrap.min.css"
|
||||
integrity="sha384-r4NyP46KrjDleawBgD5tp8Y7UzmLA05oM1iAEQ17CSuDqnUK2+k9luXQOfXJCJ4I" crossorigin="anonymous">
|
||||
|
||||
|
||||
<!-- jQuery -->
|
||||
<script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
|
||||
|
||||
<!-- Isolated Version of Bootstrap, not needed if your site already uses Bootstrap -->
|
||||
<link rel="stylesheet" href="https://formden.com/static/cdn/bootstrap-iso.css"/>
|
||||
|
||||
<!-- Bootstrap Date-Picker Plugin -->
|
||||
<script type="text/javascript"
|
||||
src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.4.1/js/bootstrap-datepicker.min.js"></script>
|
||||
<link rel="stylesheet"
|
||||
href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.4.1/css/bootstrap-datepicker3.css"/>
|
||||
|
||||
<script>
|
||||
$(document).ready(function(){
|
||||
var date_input=$('input[name="date"]'); //our date input has the name "date"
|
||||
var container=$('.bootstrap-iso form').length>0 ? $('.bootstrap-iso form').parent() : "body";
|
||||
var options={
|
||||
format: 'mm/dd/yyyy',
|
||||
container: container,
|
||||
todayHighlight: true,
|
||||
autoclose: true,
|
||||
};
|
||||
$ lessc build/build_standalone.less datepicker.css
|
||||
$('.datepicker').datepicker();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
<style>
|
||||
.bd-placeholder-img {
|
||||
font-size: 1.125rem;
|
||||
text-anchor: middle;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.bd-placeholder-img-lg {
|
||||
font-size: 3.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<!-- Fixed navbar -->
|
||||
<nav
|
||||
class="navbar navbar-expand-md fixed-top"
|
||||
>
|
||||
<ul
|
||||
class="navbar-nav me-auto mb-2 mb-md-0 justify-content-between fixed-top"
|
||||
style="background-color:#f2f2f2;"
|
||||
>
|
||||
<div class="mx-4">
|
||||
<h1>Logo</h1>
|
||||
</div>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<main class="pt-5">
|
||||
<div class="mt-5">
|
||||
<div class="container-fluid" style="font-size:2rem">
|
||||
<form class="row g-3" method="post">
|
||||
<div class="col-auto">
|
||||
<p class="p">Введите email пользователя</p>
|
||||
</div>
|
||||
<div class="col-auto mt-4">
|
||||
<input type="email" class="form-control" style="background-color:#f2f2f2;" id="inputEmail"
|
||||
placeholder="example@ngenix.ru">
|
||||
</div>
|
||||
</form>
|
||||
<form class="row g-3 mt-4" method="post">
|
||||
<div class="col-auto">
|
||||
<p class="p"> Выберите интервалы времени работы</p>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<input type="radio" class="btn-check" name="options" id="option1" autocomplete="off">
|
||||
<label class="btn btn-secondary text-primary bg-white" for="option1">Дни</label>
|
||||
|
||||
<input type="radio" class="btn-check" name="options" id="option2" autocomplete="off">
|
||||
<label class="btn btn-secondary text-primary bg-white" for="option2">Месяцы</label>
|
||||
</div>
|
||||
</form>
|
||||
<form class="row g-3 mt-4" method="post">
|
||||
<div class="col-auto">
|
||||
<p class="p">Начало статистики</p>
|
||||
</div>
|
||||
|
||||
<div class="col-auto">
|
||||
<div class='col-sm-6'>
|
||||
<div class="form-group mt-2" style="width: 130px;">
|
||||
<div class="input-group date" data-provide="datepicker">
|
||||
<input type="text" style="background-color:#f2f2f2;" placeholder="MM/DD/YYYY" class="form-control">
|
||||
<div class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-th"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<p class="pull-right">Начало статистики</p>
|
||||
</div>
|
||||
|
||||
<div class="col-auto">
|
||||
<div class="form-group mt-2" style="width: 130px;"> <!-- Date input -->
|
||||
<div class="input-group date" data-provide="datepicker">
|
||||
<input type="text" style="background-color:#f2f2f2;" placeholder="MM/DD/YYYY" class="form-control">
|
||||
<div class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-th"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="form-row text-center">
|
||||
<div class="col-12">
|
||||
<button type="submit" class="btn btn-primary bg-white text-primary">Посмотреть статистику</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<div class="container-fluid">
|
||||
<table class="table table-bordered text-center text-secondary mt-5" style="background-color:#f2f2f2;">
|
||||
<thead>
|
||||
<tr>
|
||||
<td scope="col">Пользователи/Даты</td>
|
||||
<td scope="col">05/01/2021-01/02/2021</td>
|
||||
<td scope="col">01/02/2021-28/02/2021</td>
|
||||
<td scope="col">01/03/2021-05/03/2021</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
|
||||
<tr>
|
||||
<td>keanu@gmail.com</td>
|
||||
<td>15</td>
|
||||
<td>21</td>
|
||||
<td>1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>vadim@mail.ru</td>
|
||||
<td>2</td>
|
||||
<td>15</td>
|
||||
<td>3</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>example@ngenix.ru</td>
|
||||
<td>0</td>
|
||||
<td>19</td>
|
||||
<td>4</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
</body>
|
||||
|
||||
</html>
|
@ -244,8 +244,6 @@ class UsersViewSet(viewsets.ReadOnlyModelViewSet):
|
||||
|
||||
@login_required()
|
||||
def statistic_page(request):
|
||||
if not request.user.is_superuser:
|
||||
return redirect('index')
|
||||
context = {
|
||||
'pagename': 'страница статистики',
|
||||
'errors': list(),
|
||||
@ -267,4 +265,6 @@ def statistic_page(request):
|
||||
if request.method == 'GET':
|
||||
form = StatisticForm()
|
||||
context['form'] = form
|
||||
return render(request, 'pages/stat.html', context)
|
||||
a = form['interval']
|
||||
print(form['interval'].auto_id,form['interval'].id_for_label)
|
||||
return render(request, 'pages/statistic.html', context)
|
||||
|
Loading…
x
Reference in New Issue
Block a user