shafafiyat/processes/migrations/0001_initial.py
2025-08-10 07:44:23 +03:30

314 lines
26 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

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.

# Generated by Django 5.2.4 on 2025-08-07 09:08
import django.db.models.deletion
import simple_history.models
from django.conf import settings
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='HistoricalProcess',
fields=[
('id', models.BigIntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')),
('created', models.DateTimeField(blank=True, editable=False, verbose_name='تاریخ ایجاد')),
('updated', models.DateTimeField(blank=True, editable=False, verbose_name='تاریخ بروزرسانی')),
('is_deleted', models.BooleanField(default=False, verbose_name='حذف شده')),
('deleted_at', models.DateTimeField(blank=True, null=True, verbose_name='تاریخ حذف')),
('slug', models.SlugField(max_length=100, verbose_name='اسلاگ')),
('name', models.CharField(max_length=100, verbose_name='نام')),
('description', models.TextField(blank=True, verbose_name='توضیحات')),
('is_active', models.BooleanField(default=True, verbose_name='فعال')),
('history_id', models.AutoField(primary_key=True, serialize=False)),
('history_date', models.DateTimeField(db_index=True)),
('history_change_reason', models.CharField(max_length=100, null=True)),
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)),
('created_by', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='ایجاد کننده')),
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)),
],
options={
'verbose_name': 'historical فرآیند',
'verbose_name_plural': 'historical فرآیندها',
'ordering': ('-history_date', '-history_id'),
'get_latest_by': ('history_date', 'history_id'),
},
bases=(simple_history.models.HistoricalChanges, models.Model),
),
migrations.CreateModel(
name='Process',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
('updated', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
('is_deleted', models.BooleanField(default=False, verbose_name='حذف شده')),
('deleted_at', models.DateTimeField(blank=True, null=True, verbose_name='تاریخ حذف')),
('slug', models.SlugField(max_length=100, unique=True, verbose_name='اسلاگ')),
('name', models.CharField(max_length=100, verbose_name='نام')),
('description', models.TextField(blank=True, verbose_name='توضیحات')),
('is_active', models.BooleanField(default=True, verbose_name='فعال')),
('created_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='ایجاد کننده')),
],
options={
'verbose_name': 'فرآیند',
'verbose_name_plural': 'فرآیندها',
'ordering': ['-created'],
},
),
migrations.CreateModel(
name='HistoricalProcessStep',
fields=[
('id', models.BigIntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')),
('created', models.DateTimeField(blank=True, editable=False, verbose_name='تاریخ ایجاد')),
('updated', models.DateTimeField(blank=True, editable=False, verbose_name='تاریخ بروزرسانی')),
('is_active', models.BooleanField(default=True, verbose_name='فعال')),
('is_deleted', models.BooleanField(default=False, verbose_name='حذف شده')),
('deleted_at', models.DateTimeField(blank=True, null=True, verbose_name='تاریخ حذف')),
('slug', models.SlugField(max_length=100, verbose_name='اسلاگ')),
('name', models.CharField(max_length=100, verbose_name='نام')),
('order', models.PositiveIntegerField(verbose_name='ترتیب')),
('description', models.TextField(blank=True, verbose_name='توضیحات')),
('is_required', models.BooleanField(default=True, verbose_name='اجباری')),
('estimated_duration', models.PositiveIntegerField(blank=True, null=True, verbose_name='مدت زمان تخمینی (روز)')),
('blocks_previous', models.BooleanField(default=False, help_text='اگر فعال باشد، پس از تکمیل این مرحله، مراحل قبلی غیرقابل ویرایش می\u200cشوند', verbose_name='مسدود کننده مراحل قبلی')),
('can_go_back', models.BooleanField(default=True, help_text='آیا می\u200cتوان به مراحل قبلی بازگشت', verbose_name='قابل بازگشت')),
('history_id', models.AutoField(primary_key=True, serialize=False)),
('history_date', models.DateTimeField(db_index=True)),
('history_change_reason', models.CharField(max_length=100, null=True)),
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)),
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)),
('process', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='processes.process', verbose_name='فرآیند')),
],
options={
'verbose_name': 'historical مرحله فرآیند',
'verbose_name_plural': 'historical مراحل فرآیند',
'ordering': ('-history_date', '-history_id'),
'get_latest_by': ('history_date', 'history_id'),
},
bases=(simple_history.models.HistoricalChanges, models.Model),
),
migrations.CreateModel(
name='ProcessStep',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
('updated', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
('is_active', models.BooleanField(default=True, verbose_name='فعال')),
('is_deleted', models.BooleanField(default=False, verbose_name='حذف شده')),
('deleted_at', models.DateTimeField(blank=True, null=True, verbose_name='تاریخ حذف')),
('slug', models.SlugField(max_length=100, unique=True, verbose_name='اسلاگ')),
('name', models.CharField(max_length=100, verbose_name='نام')),
('order', models.PositiveIntegerField(verbose_name='ترتیب')),
('description', models.TextField(blank=True, verbose_name='توضیحات')),
('is_required', models.BooleanField(default=True, verbose_name='اجباری')),
('estimated_duration', models.PositiveIntegerField(blank=True, null=True, verbose_name='مدت زمان تخمینی (روز)')),
('blocks_previous', models.BooleanField(default=False, help_text='اگر فعال باشد، پس از تکمیل این مرحله، مراحل قبلی غیرقابل ویرایش می\u200cشوند', verbose_name='مسدود کننده مراحل قبلی')),
('can_go_back', models.BooleanField(default=True, help_text='آیا می\u200cتوان به مراحل قبلی بازگشت', verbose_name='قابل بازگشت')),
('process', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='steps', to='processes.process', verbose_name='فرآیند')),
],
options={
'verbose_name': 'مرحله فرآیند',
'verbose_name_plural': 'مراحل فرآیند',
'ordering': ['process', 'order'],
'unique_together': {('process', 'order')},
},
),
migrations.CreateModel(
name='ProcessInstance',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
('updated', models.DateTimeField(auto_now=True, verbose_name='تاریخ بروزرسانی')),
('is_active', models.BooleanField(default=True, verbose_name='فعال')),
('is_deleted', models.BooleanField(default=False, verbose_name='حذف شده')),
('deleted_at', models.DateTimeField(blank=True, null=True, verbose_name='تاریخ حذف')),
('slug', models.SlugField(max_length=100, unique=True, verbose_name='اسلاگ')),
('name', models.CharField(max_length=100, verbose_name='نام')),
('status', models.CharField(choices=[('pending', 'در انتظار'), ('in_progress', 'در حال انجام'), ('completed', 'تکمیل شده'), ('cancelled', 'لغو شده'), ('rejected', 'رد شده')], default='pending', max_length=20, verbose_name='وضعیت')),
('started_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ شروع')),
('completed_at', models.DateTimeField(blank=True, null=True, verbose_name='تاریخ تکمیل')),
('process', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='instances', to='processes.process', verbose_name='فرآیند')),
('requester', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='درخواست کننده')),
('current_step', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='processes.processstep', verbose_name='مرحله فعلی')),
],
options={
'verbose_name': 'نمونه فرآیند',
'verbose_name_plural': 'نمونه\u200cهای فرآیند',
'ordering': ['-started_at'],
},
),
migrations.CreateModel(
name='HistoricalStepInstance',
fields=[
('id', models.BigIntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')),
('status', models.CharField(choices=[('pending', 'در انتظار'), ('in_progress', 'در حال انجام'), ('completed', 'تکمیل شده'), ('skipped', 'رد شده'), ('blocked', 'مسدود شده'), ('rejected', 'رد شده و نیاز به اصلاح')], default='pending', max_length=20, verbose_name='وضعیت')),
('notes', models.TextField(blank=True, verbose_name='یادداشت\u200cها')),
('started_at', models.DateTimeField(blank=True, editable=False, verbose_name='تاریخ شروع')),
('completed_at', models.DateTimeField(blank=True, null=True, verbose_name='تاریخ تکمیل')),
('history_id', models.AutoField(primary_key=True, serialize=False)),
('history_date', models.DateTimeField(db_index=True)),
('history_change_reason', models.CharField(max_length=100, null=True)),
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)),
('assigned_to', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='واگذار شده به')),
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)),
('process_instance', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='processes.processinstance', verbose_name='نمونه فرآیند')),
('step', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='processes.processstep', verbose_name='مرحله')),
],
options={
'verbose_name': 'historical نمونه مرحله',
'verbose_name_plural': 'historical نمونه\u200cهای مرحله',
'ordering': ('-history_date', '-history_id'),
'get_latest_by': ('history_date', 'history_id'),
},
bases=(simple_history.models.HistoricalChanges, models.Model),
),
migrations.CreateModel(
name='HistoricalProcessInstance',
fields=[
('id', models.BigIntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')),
('created', models.DateTimeField(blank=True, editable=False, verbose_name='تاریخ ایجاد')),
('updated', models.DateTimeField(blank=True, editable=False, verbose_name='تاریخ بروزرسانی')),
('is_active', models.BooleanField(default=True, verbose_name='فعال')),
('is_deleted', models.BooleanField(default=False, verbose_name='حذف شده')),
('deleted_at', models.DateTimeField(blank=True, null=True, verbose_name='تاریخ حذف')),
('slug', models.SlugField(max_length=100, verbose_name='اسلاگ')),
('name', models.CharField(max_length=100, verbose_name='نام')),
('status', models.CharField(choices=[('pending', 'در انتظار'), ('in_progress', 'در حال انجام'), ('completed', 'تکمیل شده'), ('cancelled', 'لغو شده'), ('rejected', 'رد شده')], default='pending', max_length=20, verbose_name='وضعیت')),
('started_at', models.DateTimeField(blank=True, editable=False, verbose_name='تاریخ شروع')),
('completed_at', models.DateTimeField(blank=True, null=True, verbose_name='تاریخ تکمیل')),
('history_id', models.AutoField(primary_key=True, serialize=False)),
('history_date', models.DateTimeField(db_index=True)),
('history_change_reason', models.CharField(max_length=100, null=True)),
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)),
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)),
('requester', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='درخواست کننده')),
('process', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='processes.process', verbose_name='فرآیند')),
('current_step', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='processes.processstep', verbose_name='مرحله فعلی')),
],
options={
'verbose_name': 'historical نمونه فرآیند',
'verbose_name_plural': 'historical نمونه\u200cهای فرآیند',
'ordering': ('-history_date', '-history_id'),
'get_latest_by': ('history_date', 'history_id'),
},
bases=(simple_history.models.HistoricalChanges, models.Model),
),
migrations.CreateModel(
name='StepInstance',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('status', models.CharField(choices=[('pending', 'در انتظار'), ('in_progress', 'در حال انجام'), ('completed', 'تکمیل شده'), ('skipped', 'رد شده'), ('blocked', 'مسدود شده'), ('rejected', 'رد شده و نیاز به اصلاح')], default='pending', max_length=20, verbose_name='وضعیت')),
('notes', models.TextField(blank=True, verbose_name='یادداشت\u200cها')),
('started_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ شروع')),
('completed_at', models.DateTimeField(blank=True, null=True, verbose_name='تاریخ تکمیل')),
('assigned_to', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='واگذار شده به')),
('process_instance', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='step_instances', to='processes.processinstance', verbose_name='نمونه فرآیند')),
('step', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='processes.processstep', verbose_name='مرحله')),
],
options={
'verbose_name': 'نمونه مرحله',
'verbose_name_plural': 'نمونه\u200cهای مرحله',
'ordering': ['process_instance', 'step__order'],
},
),
migrations.CreateModel(
name='HistoricalStepRejection',
fields=[
('id', models.BigIntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')),
('reason', models.TextField(help_text='توضیح کامل دلیل رد شدن', verbose_name='دلیل رد شدن')),
('instructions', models.TextField(blank=True, help_text='دستورالعمل\u200cهایی برای اصلاح مرحله', verbose_name='دستورالعمل\u200cهای اصلاح')),
('created_at', models.DateTimeField(blank=True, editable=False, verbose_name='تاریخ رد شدن')),
('history_id', models.AutoField(primary_key=True, serialize=False)),
('history_date', models.DateTimeField(db_index=True)),
('history_change_reason', models.CharField(max_length=100, null=True)),
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)),
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)),
('rejected_by', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='رد کننده')),
('step_instance', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='processes.stepinstance', verbose_name='نمونه مرحله')),
],
options={
'verbose_name': 'historical رد شدن مرحله',
'verbose_name_plural': 'historical رد شدن\u200cهای مراحل',
'ordering': ('-history_date', '-history_id'),
'get_latest_by': ('history_date', 'history_id'),
},
bases=(simple_history.models.HistoricalChanges, models.Model),
),
migrations.CreateModel(
name='StepRejection',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('reason', models.TextField(help_text='توضیح کامل دلیل رد شدن', verbose_name='دلیل رد شدن')),
('instructions', models.TextField(blank=True, help_text='دستورالعمل\u200cهایی برای اصلاح مرحله', verbose_name='دستورالعمل\u200cهای اصلاح')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ رد شدن')),
('rejected_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='step_rejections', to=settings.AUTH_USER_MODEL, verbose_name='رد کننده')),
('step_instance', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='rejections', to='processes.stepinstance', verbose_name='نمونه مرحله')),
],
options={
'verbose_name': 'رد شدن مرحله',
'verbose_name_plural': 'رد شدن\u200cهای مراحل',
'ordering': ['-created_at'],
},
),
migrations.CreateModel(
name='HistoricalStepRevision',
fields=[
('id', models.BigIntegerField(auto_created=True, blank=True, db_index=True, verbose_name='ID')),
('changes_description', models.TextField(help_text='توضیح تغییراتی که برای اصلاح انجام شده', verbose_name='توضیح تغییرات')),
('created_at', models.DateTimeField(blank=True, editable=False, verbose_name='تاریخ اصلاح')),
('history_id', models.AutoField(primary_key=True, serialize=False)),
('history_date', models.DateTimeField(db_index=True)),
('history_change_reason', models.CharField(max_length=100, null=True)),
('history_type', models.CharField(choices=[('+', 'Created'), ('~', 'Changed'), ('-', 'Deleted')], max_length=1)),
('history_user', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)),
('revised_by', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL, verbose_name='اصلاح کننده')),
('step_instance', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='processes.stepinstance', verbose_name='نمونه مرحله')),
('rejection', models.ForeignKey(blank=True, db_constraint=False, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='processes.steprejection', verbose_name='رد شدن مربوطه')),
],
options={
'verbose_name': 'historical بازبینی مرحله',
'verbose_name_plural': 'historical بازبینی\u200cهای مراحل',
'ordering': ('-history_date', '-history_id'),
'get_latest_by': ('history_date', 'history_id'),
},
bases=(simple_history.models.HistoricalChanges, models.Model),
),
migrations.CreateModel(
name='StepRevision',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('changes_description', models.TextField(help_text='توضیح تغییراتی که برای اصلاح انجام شده', verbose_name='توضیح تغییرات')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ اصلاح')),
('rejection', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='revisions', to='processes.steprejection', verbose_name='رد شدن مربوطه')),
('revised_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='step_revisions', to=settings.AUTH_USER_MODEL, verbose_name='اصلاح کننده')),
('step_instance', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='revisions', to='processes.stepinstance', verbose_name='نمونه مرحله')),
],
options={
'verbose_name': 'بازبینی مرحله',
'verbose_name_plural': 'بازبینی\u200cهای مراحل',
'ordering': ['-created_at'],
},
),
migrations.CreateModel(
name='StepDependency',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='تاریخ ایجاد')),
('dependency_step', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='dependents', to='processes.processstep', verbose_name='مرحله مورد نیاز')),
('dependent_step', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='dependencies', to='processes.processstep', verbose_name='مرحله وابسته')),
],
options={
'verbose_name': 'وابستگی مرحله',
'verbose_name_plural': 'وابستگی\u200cهای مراحل',
'ordering': ['dependent_step__order', 'dependency_step__order'],
'unique_together': {('dependent_step', 'dependency_step')},
},
),
]