import uuid from decimal import Decimal import django.core.validators import django.db.models.deletion from django.conf import settings from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("finance", "0038_payrollperiod_component_snapshot"), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name="PayrollOffCyclePayment", fields=[ ( "id", models.BigAutoField( auto_created=True, primary_key=True, serialize=False, verbose_name="ID", ), ), ( "payee_name", models.CharField(max_length=250, verbose_name="Получатель"), ), ( "paid_on", models.DateField(db_index=True, verbose_name="Дата выдачи"), ), ( "amount", models.DecimalField( max_digits=19, decimal_places=2, validators=[ django.core.validators.MinValueValidator(Decimal("0.01")) ], verbose_name="Выдано", ), ), ( "currency", models.CharField( default="RUB", max_length=3, validators=[ django.core.validators.RegexValidator("^[A-Z]{3}$") ], ), ), ("note", models.CharField(max_length=1000, verbose_name="Основание")), ( "request_id", models.UUIDField(default=uuid.uuid4, editable=False, unique=True), ), ("created_at", models.DateTimeField(auto_now_add=True)), ("voided_at", models.DateTimeField(blank=True, null=True)), ("void_reason", models.CharField(blank=True, max_length=1000)), ( "employee", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name="off_cycle_payments", to=settings.AUTH_USER_MODEL, ), ), ( "created_by", models.ForeignKey( on_delete=django.db.models.deletion.PROTECT, related_name="off_cycle_payments_created", to=settings.AUTH_USER_MODEL, ), ), ( "voided_by", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name="off_cycle_payments_voided", to=settings.AUTH_USER_MODEL, ), ), ( "source_period", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name="off_cycle_payments", to="finance.payrollperiod", ), ), ( "source_statement", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name="off_cycle_payments", to="finance.payrollstatement", ), ), ], options={ "verbose_name": "Выплата вне периода", "verbose_name_plural": "Выплаты вне периода", "ordering": ["-paid_on", "-pk"], "constraints": [ models.CheckConstraint( condition=models.Q(amount__gt=0), name="off_cycle_payment_positive", ), models.CheckConstraint( condition=( models.Q( voided_at__isnull=True, voided_by__isnull=True, void_reason="", ) | ( models.Q( voided_at__isnull=False, voided_by__isnull=False ) & ~models.Q(void_reason="") ) ), name="off_cycle_payment_void_consistent", ), ], }, ), ]