fix bag
This commit is contained in:
parent
ef9d0fc721
commit
dd08821aea
@ -185,12 +185,13 @@ def daterange(start_date, end_date) -> list:
|
||||
return dates
|
||||
|
||||
|
||||
def get_timedelta(log) -> timedelta:
|
||||
def get_timedelta(log,time=None) -> timedelta:
|
||||
"""
|
||||
Возвращает объект класса timedelta, который хранит промежуток времени от начала суток до момента,
|
||||
который находится в log (объект класса RoleChangeLogs)
|
||||
который находится в log (объект класса RoleChangeLogs) или в time(datetime.time), если введён
|
||||
"""
|
||||
time = log.change_time.time()
|
||||
if time is None:
|
||||
time = log.change_time.time()
|
||||
time = timedelta(hours=time.hour, minutes=time.minute, seconds=time.second)
|
||||
return time
|
||||
|
||||
@ -227,8 +228,8 @@ class StatisticData:
|
||||
"""
|
||||
if self.is_valid_statistic():
|
||||
stat = self.statistic
|
||||
self._use_display(stat)
|
||||
self._use_interval(stat)
|
||||
stat = self._use_display(stat)
|
||||
stat = self._use_interval(stat)
|
||||
return stat
|
||||
else:
|
||||
return None
|
||||
@ -281,19 +282,21 @@ class StatisticData:
|
||||
Приводит данные к формату отображения
|
||||
"""
|
||||
if not self.is_valid_statistic() or not self.display:
|
||||
return
|
||||
for key, item in self.statistic.items():
|
||||
return stat
|
||||
new_stat = {}
|
||||
for key, item in stat.items():
|
||||
if self.display == 'hours':
|
||||
self.statistic[key] = item / 3600
|
||||
new_stat[key] = item / 3600
|
||||
elif self.display == 'days':
|
||||
self.statistic[key] = item / 86400
|
||||
new_stat[key] = item / 86400
|
||||
return new_stat
|
||||
|
||||
def _use_interval(self, stat):
|
||||
"""
|
||||
Объединяет ключи и значения в соответствии с интервалом работы
|
||||
"""
|
||||
if not self.is_valid_statistic() or not self.interval:
|
||||
return
|
||||
return stat
|
||||
new_stat = {}
|
||||
if self.interval == 'months':
|
||||
# Переделываем ключи под формат('начало_месяца - конец_месяца')
|
||||
@ -307,7 +310,7 @@ class StatisticData:
|
||||
new_stat[index] = value
|
||||
elif self.interval == 'days':
|
||||
new_stat = stat # статистика изначально в днях
|
||||
self.statistic = new_stat
|
||||
return new_stat
|
||||
|
||||
def check_time(self):
|
||||
"""
|
||||
@ -341,12 +344,16 @@ class StatisticData:
|
||||
self.warnings += ['Не обнаружены изменения роли в данном промежутке']
|
||||
return None
|
||||
first_log, last_log = self.data[0], self.data[len(self.data) - 1]
|
||||
|
||||
if first_log.old_role == ROLES['engineer']:
|
||||
self.fill_daterange(self.start_date, first_log.change_time.date())
|
||||
self.statistic[first_log.change_time.date()] += get_timedelta(first_log).total_seconds()
|
||||
|
||||
if last_log.new_role == ROLES['engineer']:
|
||||
self.fill_daterange(last_log.change_time.date() + timedelta(days=1), self.end_date + timedelta(days=1))
|
||||
self.fill_daterange(last_log.change_time.date() + timedelta(days=1), self.end_date)
|
||||
self.statistic[self.end_date + timedelta(days=1)] = get_timedelta(None,datetime.now().time()).total_seconds()
|
||||
self.statistic[last_log.change_time.date()] += (timedelta(days=1) - get_timedelta(last_log)).total_seconds()
|
||||
|
||||
for log_index in range(len(self.data) - 1):
|
||||
if self.data[log_index].new_role == ROLES['engineer']:
|
||||
current_log, next_log = self.data[log_index], self.data[log_index + 1]
|
||||
@ -364,7 +371,6 @@ class StatisticData:
|
||||
Заполение диапазона дат значением val
|
||||
по умолчанию val = кол-во секунд в 1 дне
|
||||
"""
|
||||
self.statistic.clear()
|
||||
for day in daterange(first, last):
|
||||
self.statistic[day] = val
|
||||
|
||||
@ -372,4 +378,5 @@ class StatisticData:
|
||||
"""
|
||||
Обнуление всех дней
|
||||
"""
|
||||
self.statistic.clear()
|
||||
self.fill_daterange(self.start_date, self.end_date + timedelta(days=1), 0)
|
||||
|
@ -1,67 +0,0 @@
|
||||
# Generated by Django 3.1.6 on 2021-03-03 22:19
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('main', '0004_rolechangelogs'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='rolechangelogs',
|
||||
name='old_role',
|
||||
field=models.TextField(default='agent', help_text='Старая роль'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='rolechangelogs',
|
||||
name='change_time',
|
||||
field=models.DateTimeField(help_text='Дата и время изменения роли'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='rolechangelogs',
|
||||
name='changed_by',
|
||||
field=models.ForeignKey(help_text='Кем была изменена роль', on_delete=django.db.models.deletion.CASCADE, related_name='changed_by', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='rolechangelogs',
|
||||
name='name',
|
||||
field=models.TextField(help_text='Имя пользователя'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='rolechangelogs',
|
||||
name='new_role',
|
||||
field=models.TextField(help_text='Присвоенная роль'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='rolechangelogs',
|
||||
name='user',
|
||||
field=models.ForeignKey(help_text='Пользователь, которому присвоили другую роль', on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='userprofile',
|
||||
name='image',
|
||||
field=models.URLField(blank=True, help_text='Аватарка', null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='userprofile',
|
||||
name='name',
|
||||
field=models.CharField(default='None', help_text='Имя пользователя на нашем сайте', max_length=100),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='userprofile',
|
||||
name='role',
|
||||
field=models.CharField(default='None', help_text='Код роли пользователя', max_length=100),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='userprofile',
|
||||
name='user',
|
||||
field=models.OneToOneField(help_text='Пользователь', on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
]
|
28
main/migrations/0011_auto_20210311_1734.py
Normal file
28
main/migrations/0011_auto_20210311_1734.py
Normal file
@ -0,0 +1,28 @@
|
||||
# Generated by Django 3.1.6 on 2021-03-11 14:34
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('main', '0010_userprofile_meta'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='rolechangelogs',
|
||||
name='old_role',
|
||||
field=models.IntegerField(default=0, help_text='Старая роль'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='rolechangelogs',
|
||||
name='new_role',
|
||||
field=models.IntegerField(default=0, help_text='Присвоенная роль'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='userprofile',
|
||||
name='role',
|
||||
field=models.IntegerField(default=0, help_text='Код роли пользователя'),
|
||||
),
|
||||
]
|
@ -31,9 +31,11 @@ def save_user_profile(sender, instance, **kwargs):
|
||||
|
||||
class RoleChangeLogs(models.Model):
|
||||
"""Модель для логирования изменений ролей пользователя"""
|
||||
user = models.ForeignKey(to=User, on_delete=models.CASCADE, help_text='Пользователь, которому присвоили другую роль')
|
||||
user = models.ForeignKey(to=User, on_delete=models.CASCADE,
|
||||
help_text='Пользователь, которому присвоили другую роль')
|
||||
name = models.TextField(help_text='Имя пользователя')
|
||||
old_role = models.IntegerField(help_text='Старая роль')
|
||||
new_role = models.IntegerField(help_text='Присвоенная роль')
|
||||
old_role = models.IntegerField(default=0, help_text='Старая роль')
|
||||
new_role = models.IntegerField(default=0, help_text='Присвоенная роль')
|
||||
change_time = models.DateTimeField(help_text='Дата и время изменения роли')
|
||||
changed_by = models.ForeignKey(to=User, on_delete=models.CASCADE, related_name='changed_by', help_text='Кем была изменена роль')
|
||||
changed_by = models.ForeignKey(to=User, on_delete=models.CASCADE, related_name='changed_by',
|
||||
help_text='Кем была изменена роль')
|
||||
|
@ -21,26 +21,29 @@
|
||||
{% endfor %}
|
||||
<input type="submit">
|
||||
</form>
|
||||
{% for key,val in log_stats.items %}
|
||||
<h3>{{key}} <b>|</b> {{val}}</h3>
|
||||
<br>
|
||||
{% endfor %}
|
||||
|
||||
<ul>
|
||||
{% for error in errors %}
|
||||
<li>{{error}}</li>
|
||||
<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>{{error}}</li>
|
||||
{% endfor %}
|
||||
{% 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 %}
|
||||
|
||||
|
@ -236,6 +236,7 @@ def statistic_page(request):
|
||||
return redirect('index')
|
||||
context = {
|
||||
'pagename': 'страница статистики',
|
||||
'errors': list(),
|
||||
}
|
||||
if request.method == "POST":
|
||||
form = StatisticForm(request.POST)
|
||||
|
Loading…
x
Reference in New Issue
Block a user