b0fb8c5218
Co-authored-by: Cursor <cursoragent@cursor.com>
195 lines
8.7 KiB
Python
195 lines
8.7 KiB
Python
"""Стартовый контент справки портала."""
|
||
from __future__ import annotations
|
||
|
||
SEED_CATEGORIES = [
|
||
{
|
||
'slug': 'account',
|
||
'title': 'Профиль и аккаунт',
|
||
'description': 'Вход, пароль, 2FA и личные данные',
|
||
'icon': 'user',
|
||
'sort_order': 10,
|
||
},
|
||
{
|
||
'slug': 'hr',
|
||
'title': 'HR и заявки',
|
||
'description': 'Отпуск, больничный, подмена и HR-портал',
|
||
'icon': 'hr',
|
||
'sort_order': 20,
|
||
},
|
||
{
|
||
'slug': 'documents',
|
||
'title': 'Документы',
|
||
'description': 'Корпоративные файлы и разделы документов',
|
||
'icon': 'docs',
|
||
'sort_order': 30,
|
||
},
|
||
{
|
||
'slug': 'tasks',
|
||
'title': 'Задачи',
|
||
'description': 'Работа с задачами и сроками',
|
||
'icon': 'tasks',
|
||
'sort_order': 40,
|
||
},
|
||
{
|
||
'slug': 'accounting',
|
||
'title': 'Операционный учёт',
|
||
'description': 'РРО, коммуналка, энергооборудование и время',
|
||
'icon': 'book',
|
||
'sort_order': 50,
|
||
},
|
||
{
|
||
'slug': 'support',
|
||
'title': 'Техническая поддержка',
|
||
'description': 'Обращения в IT и типичные проблемы',
|
||
'icon': 'support',
|
||
'sort_order': 60,
|
||
},
|
||
]
|
||
|
||
SEED_ARTICLES = [
|
||
{
|
||
'category': 'account',
|
||
'slug': 'kak-vojti-v-portal',
|
||
'title': 'Как войти в корпоративный портал?',
|
||
'is_featured': True,
|
||
'sort_order': 10,
|
||
'body': (
|
||
'<p>Откройте адрес портала в браузере и введите логин и пароль сотрудника.</p>'
|
||
'<p>Если пароль ещё не задан (например, после найма), используйте одноразовую '
|
||
'ссылку из письма HR или обратитесь к администратору.</p>'
|
||
'<p>После входа staff-учётки могут попросить настроить двухфакторную аутентификацию (2FA).</p>'
|
||
),
|
||
},
|
||
{
|
||
'category': 'account',
|
||
'slug': 'smena-parolya-i-2fa',
|
||
'title': 'Как сменить пароль и настроить 2FA?',
|
||
'is_featured': True,
|
||
'sort_order': 20,
|
||
'body': (
|
||
'<p>Пароль и параметры безопасности управляются в разделе <strong>Настройки</strong> '
|
||
'и в профиле сотрудника.</p>'
|
||
'<p>Двухфакторная аутентификация: подключите приложение-аутентификатор, сохраните '
|
||
'резервные коды в надёжном месте. При потере телефона используйте резервный код '
|
||
'или обратитесь в IT.</p>'
|
||
),
|
||
},
|
||
{
|
||
'category': 'hr',
|
||
'slug': 'kak-podat-zayavku-na-otpusk',
|
||
'title': 'Как подать заявку на отпуск?',
|
||
'is_featured': True,
|
||
'sort_order': 10,
|
||
'body': (
|
||
'<p>Откройте <strong>HR-портал</strong> → вкладка заявок.</p>'
|
||
'<p>Выберите тип «Отпуск», укажите даты и при необходимости комментарий, затем отправьте. '
|
||
'Статус заявки отображается в блоке «Мои заявки». Утверждение выполняет HR.</p>'
|
||
),
|
||
},
|
||
{
|
||
'category': 'hr',
|
||
'slug': 'podmena-na-smene',
|
||
'title': 'Как оформить или взять подмену?',
|
||
'is_featured': True,
|
||
'sort_order': 20,
|
||
'body': (
|
||
'<p>Создайте заявку типа «Подмена» с датами смены — выбирать коллегу не нужно.</p>'
|
||
'<p>Открытый запрос виден другим сотрудникам аптек. Коллега нажимает '
|
||
'<strong>«Взять подмену»</strong> и становится заместителем; заявка переходит '
|
||
'в утверждённый статус.</p>'
|
||
),
|
||
},
|
||
{
|
||
'category': 'documents',
|
||
'slug': 'gde-najti-dokumenty',
|
||
'title': 'Где найти корпоративные документы?',
|
||
'is_featured': True,
|
||
'sort_order': 10,
|
||
'body': (
|
||
'<p>Раздел <strong>Документы</strong> в главном меню открывает доступные вам '
|
||
'папки и файлы (интеграция с корпоративным хранилищем).</p>'
|
||
'<p>Если нужного раздела нет — проверьте права у HR/IT или оформите заявку '
|
||
'в «Поддержка IT».</p>'
|
||
),
|
||
},
|
||
{
|
||
'category': 'tasks',
|
||
'slug': 'rabota-s-zadachami',
|
||
'title': 'Как работать с задачами?',
|
||
'is_featured': False,
|
||
'sort_order': 10,
|
||
'body': (
|
||
'<p>В разделе <strong>Задачи</strong> отображаются ваши и командные задачи: '
|
||
'статусы, приоритеты, чек-листы.</p>'
|
||
'<p>Обновляйте статус по мере выполнения, чтобы постановщик видел прогресс.</p>'
|
||
),
|
||
},
|
||
{
|
||
'category': 'accounting',
|
||
'slug': 'uchetnye-dannye',
|
||
'title': 'Что в разделе «Операционный учёт»?',
|
||
'is_featured': False,
|
||
'sort_order': 10,
|
||
'body': (
|
||
'<p>Раздел объединяет вкладки: РРО/ПРРО, коммунальные услуги, энергооборудование, '
|
||
'учёт рабочего времени и оплату провайдеров — в зависимости от ваших прав доступа.</p>'
|
||
'<p>Если пункта нет в меню, к нужному подразделу не выдано право. Обратитесь '
|
||
'к руководителю или администратору групп.</p>'
|
||
),
|
||
},
|
||
{
|
||
'category': 'support',
|
||
'slug': 'kak-sozdat-it-zayavku',
|
||
'title': 'Что делать, если не могу войти или нужна помощь IT?',
|
||
'is_featured': True,
|
||
'sort_order': 10,
|
||
'body': (
|
||
'<p>При технических сбоях откройте <strong>Поддержка IT</strong> и создайте заявку: '
|
||
'тема, категория, описание.</p>'
|
||
'<p>Если войти в портал невозможно — свяжитесь с IT по телефону или через коллегу. '
|
||
'Справка и предложения в базу знаний доступны после успешного входа.</p>'
|
||
),
|
||
},
|
||
]
|
||
|
||
|
||
def seed_help_content(apps, schema_editor):
|
||
HelpCategory = apps.get_model('help', 'HelpCategory')
|
||
HelpArticle = apps.get_model('help', 'HelpArticle')
|
||
|
||
cats = {}
|
||
for row in SEED_CATEGORIES:
|
||
obj, _ = HelpCategory.objects.update_or_create(
|
||
slug=row['slug'],
|
||
defaults={
|
||
'title': row['title'],
|
||
'description': row['description'],
|
||
'icon': row['icon'],
|
||
'sort_order': row['sort_order'],
|
||
'is_active': True,
|
||
},
|
||
)
|
||
cats[row['slug']] = obj
|
||
|
||
for row in SEED_ARTICLES:
|
||
category = cats[row['category']]
|
||
HelpArticle.objects.update_or_create(
|
||
slug=row['slug'],
|
||
defaults={
|
||
'category': category,
|
||
'title': row['title'],
|
||
'body': row['body'],
|
||
'is_published': True,
|
||
'is_featured': row['is_featured'],
|
||
'sort_order': row['sort_order'],
|
||
},
|
||
)
|
||
|
||
|
||
def unseed_help_content(apps, schema_editor):
|
||
HelpCategory = apps.get_model('help', 'HelpCategory')
|
||
HelpArticle = apps.get_model('help', 'HelpArticle')
|
||
slugs = [a['slug'] for a in SEED_ARTICLES]
|
||
HelpArticle.objects.filter(slug__in=slugs).delete()
|
||
HelpCategory.objects.filter(slug__in=[c['slug'] for c in SEED_CATEGORIES]).delete()
|