Corp/backend/scripts/create_test_calendar_users.py
igor_nadein f09ae3996c Реализация системы schedule (django-scheduler) с тестовыми данными
- Добавлен CustomToolbar для BigCalendar со стрелками навигации
- Выпадающий список для выбора вида календаря
- Management command для создания тестовых пользователей и календарей
- Создано 3 тестовых пользователя (anna_ivanova, petr_petrov, maria_sidorova)
- Создано 5 календарей с 11 событиями
- Убраны подписки (они для старой системы calendar_app)
- Исправлены стили тулбара BigCalendar
- Модалы календаря рендерятся на корневом уровне AppShell
2026-02-24 20:24:39 +03:00

227 lines
8.7 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Скрипт для создания тестовых пользователей с календарями и событиями для системы schedule.
Использование:
python manage.py shell < scripts/create_test_calendar_users.py
или
.venv/Scripts/python manage.py shell
>>> exec(open('scripts/create_test_calendar_users.py').read())
"""
from django.contrib.auth import get_user_model
from schedule.models import Calendar, Event, Rule
from datetime import datetime, timedelta
from django.utils import timezone
User = get_user_model()
print("🚀 Создание тестовых пользователей и календарей...")
# Создание пользователей
test_users = [
{
'username': 'anna_ivanova',
'email': 'anna@example.com',
'first_name': 'Анна',
'last_name': 'Иванова',
'password': 'test123',
},
{
'username': 'petr_petrov',
'email': 'petr@example.com',
'first_name': 'Пётр',
'last_name': 'Петров',
'password': 'test123',
},
{
'username': 'maria_sidorova',
'email': 'maria@example.com',
'first_name': 'Мария',
'last_name': 'Сидорова',
'password': 'test123',
},
]
created_users = []
for user_data in test_users:
user, created = User.objects.get_or_create(
username=user_data['username'],
defaults={
'email': user_data['email'],
'first_name': user_data['first_name'],
'last_name': user_data['last_name'],
}
)
if created:
user.set_password(user_data['password'])
user.save()
print(f"✅ Создан пользователь: {user.get_full_name()} ({user.username})")
else:
print(f"ℹ️ Пользователь уже существует: {user.get_full_name()} ({user.username})")
created_users.append(user)
# Создание календарей для каждого пользователя
calendar_data = [
{
'user': created_users[0],
'name': 'Рабочий календарь Анны',
'slug': 'anna-work',
},
{
'user': created_users[0],
'name': 'Личные дела Анны',
'slug': 'anna-personal',
},
{
'user': created_users[1],
'name': 'Проекты Петра',
'slug': 'petr-projects',
},
{
'user': created_users[1],
'name': 'Встречи Петра',
'slug': 'petr-meetings',
},
{
'user': created_users[2],
'name': 'Календарь Марии',
'slug': 'maria-calendar',
},
]
created_calendars = []
for cal_data in calendar_data:
calendar, created = Calendar.objects.get_or_create(
slug=cal_data['slug'],
defaults={
'name': cal_data['name'],
}
)
if created:
print(f"✅ Создан календарь: {calendar.name}")
else:
print(f"ℹ️ Календарь уже существует: {calendar.name}")
created_calendars.append(calendar)
# Создание тестовых событий
now = timezone.now()
today = now.date()
events_data = [
# События для Анны (календарь 0 - рабочий)
{
'calendar': created_calendars[0],
'title': 'Встреча с клиентом',
'start': datetime.combine(today + timedelta(days=1), datetime.min.time().replace(hour=10)),
'end': datetime.combine(today + timedelta(days=1), datetime.min.time().replace(hour=11)),
'description': 'Обсуждение проекта',
},
{
'calendar': created_calendars[0],
'title': 'Планерка команды',
'start': datetime.combine(today + timedelta(days=2), datetime.min.time().replace(hour=9)),
'end': datetime.combine(today + timedelta(days=2), datetime.min.time().replace(hour=10)),
'description': 'Еженедельная встреча',
},
{
'calendar': created_calendars[0],
'title': 'Презентация результатов',
'start': datetime.combine(today + timedelta(days=5), datetime.min.time().replace(hour=14)),
'end': datetime.combine(today + timedelta(days=5), datetime.min.time().replace(hour=15, minute=30)),
'description': 'Демо для заказчика',
},
# События для Анны (календарь 1 - личный)
{
'calendar': created_calendars[1],
'title': 'Врач',
'start': datetime.combine(today + timedelta(days=3), datetime.min.time().replace(hour=16)),
'end': datetime.combine(today + timedelta(days=3), datetime.min.time().replace(hour=17)),
'description': 'Плановый осмотр',
},
{
'calendar': created_calendars[1],
'title': 'Фитнес',
'start': datetime.combine(today + timedelta(days=4), datetime.min.time().replace(hour=19)),
'end': datetime.combine(today + timedelta(days=4), datetime.min.time().replace(hour=20)),
'description': 'Тренировка',
},
# События для Петра (календарь 2 - проекты)
{
'calendar': created_calendars[2],
'title': 'Разработка нового модуля',
'start': datetime.combine(today, datetime.min.time().replace(hour=10)),
'end': datetime.combine(today, datetime.min.time().replace(hour=18)),
'description': 'Работа над функционалом',
},
{
'calendar': created_calendars[2],
'title': 'Code Review',
'start': datetime.combine(today + timedelta(days=1), datetime.min.time().replace(hour=15)),
'end': datetime.combine(today + timedelta(days=1), datetime.min.time().replace(hour=16)),
'description': 'Проверка кода коллег',
},
# События для Петра (календарь 3 - встречи)
{
'calendar': created_calendars[3],
'title': 'Встреча с HR',
'start': datetime.combine(today + timedelta(days=2), datetime.min.time().replace(hour=11)),
'end': datetime.combine(today + timedelta(days=2), datetime.min.time().replace(hour=12)),
'description': 'Собеседование кандидата',
},
{
'calendar': created_calendars[3],
'title': '1-on-1 с руководителем',
'start': datetime.combine(today + timedelta(days=7), datetime.min.time().replace(hour=14)),
'end': datetime.combine(today + timedelta(days=7), datetime.min.time().replace(hour=15)),
'description': 'Обсуждение целей',
},
# События для Марии (календарь 4)
{
'calendar': created_calendars[4],
'title': 'Обучение новых сотрудников',
'start': datetime.combine(today + timedelta(days=1), datetime.min.time().replace(hour=13)),
'end': datetime.combine(today + timedelta(days=1), datetime.min.time().replace(hour=16)),
'description': 'Вводный курс',
},
{
'calendar': created_calendars[4],
'title': 'Подготовка отчета',
'start': datetime.combine(today + timedelta(days=6), datetime.min.time().replace(hour=10)),
'end': datetime.combine(today + timedelta(days=6), datetime.min.time().replace(hour=13)),
'description': 'Квартальный отчет',
},
]
print("\n📅 Создание событий...")
for event_data in events_data:
# Преобразуем datetime в timezone-aware
start = timezone.make_aware(event_data['start']) if timezone.is_naive(event_data['start']) else event_data['start']
end = timezone.make_aware(event_data['end']) if timezone.is_naive(event_data['end']) else event_data['end']
event, created = Event.objects.get_or_create(
calendar=event_data['calendar'],
title=event_data['title'],
start=start,
defaults={
'end': end,
'description': event_data.get('description', ''),
}
)
if created:
print(f" ✅ {event.title} ({event.calendar.name})")
else:
print(f" ℹ️ Событие уже существует: {event.title}")
print("\n" + "="*60)
print("✨ Готово! Создано:")
print(f" 👥 Пользователи: {len(created_users)}")
print(f" 📅 Календари: {len(created_calendars)}")
print(f" 🎯 События: {len(events_data)}")
print("="*60)
print("\n🔑 Учетные данные для входа:")
for user_data in test_users:
print(f" {user_data['username']} / {user_data['password']}")
print("\n")