3359a8db13
Модель/сервисы HR-заявок с заменами, приглашения на установку пароля (инвайты), обновлённая страница профиля сотрудника и правки 2FA. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
61 lines
4.1 KiB
Python
61 lines
4.1 KiB
Python
# Generated by Django 6.0.3 on 2026-09-01 10:18
|
||
|
||
import django.db.models.deletion
|
||
import uuid
|
||
from django.conf import settings
|
||
from django.db import migrations, models
|
||
|
||
|
||
class Migration(migrations.Migration):
|
||
|
||
dependencies = [
|
||
('employees', '0015_password_setup_invite'),
|
||
]
|
||
|
||
operations = [
|
||
migrations.CreateModel(
|
||
name='EmployeeHrRequest',
|
||
fields=[
|
||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||
('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
|
||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||
('updated_at', models.DateTimeField(auto_now=True)),
|
||
('request_type', models.CharField(choices=[('vacation', 'Отпуск'), ('additional_vacation', 'Дополнительный отпуск'), ('sick_leave', 'Больничный'), ('day_off', 'Отгул'), ('certificate', 'Справка')], max_length=32, verbose_name='Тип')),
|
||
('date_from', models.DateField(blank=True, null=True, verbose_name='Дата с')),
|
||
('date_to', models.DateField(blank=True, null=True, verbose_name='Дата по')),
|
||
('note', models.TextField(blank=True, verbose_name='Комментарий')),
|
||
('status', models.CharField(choices=[('pending', 'На рассмотрении'), ('approved', 'Утверждено'), ('rejected', 'Отклонено'), ('cancelled', 'Отменено')], default='pending', max_length=16, verbose_name='Статус')),
|
||
('decided_at', models.DateTimeField(blank=True, null=True, verbose_name='Дата решения')),
|
||
('decision_note', models.TextField(blank=True, verbose_name='Комментарий HR')),
|
||
('decided_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='hr_requests_decided', to=settings.AUTH_USER_MODEL, verbose_name='Решение принял')),
|
||
('employee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='hr_requests', to=settings.AUTH_USER_MODEL, verbose_name='Сотрудник')),
|
||
],
|
||
options={
|
||
'verbose_name': 'Кадровая заявка',
|
||
'verbose_name_plural': 'Кадровые заявки',
|
||
'ordering': ['-created_at'],
|
||
'indexes': [models.Index(fields=['employee', 'status'], name='employees_e_employe_283616_idx'), models.Index(fields=['status', 'request_type'], name='employees_e_status_a446a1_idx')],
|
||
},
|
||
),
|
||
migrations.CreateModel(
|
||
name='LeaveEntitlement',
|
||
fields=[
|
||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||
('uuid', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
|
||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||
('updated_at', models.DateTimeField(auto_now=True)),
|
||
('year', models.PositiveIntegerField(verbose_name='Год')),
|
||
('annual_days', models.PositiveSmallIntegerField(default=24, verbose_name='Основной отпуск, дн.')),
|
||
('additional_days', models.PositiveSmallIntegerField(default=7, verbose_name='Доп. отпуск, дн.')),
|
||
('sick_days', models.PositiveSmallIntegerField(default=30, verbose_name='Больничные, дн.')),
|
||
('employee', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='leave_entitlements', to=settings.AUTH_USER_MODEL, verbose_name='Сотрудник')),
|
||
],
|
||
options={
|
||
'verbose_name': 'Норма отпуска',
|
||
'verbose_name_plural': 'Нормы отпусков',
|
||
'ordering': ['-year', 'employee__last_name'],
|
||
'constraints': [models.UniqueConstraint(fields=('employee', 'year'), name='unique_leave_entitlement_per_year')],
|
||
},
|
||
),
|
||
]
|