2024-07-19 19:29:27 +03:00
|
|
|
|
''' Models: Operation in OSS. '''
|
|
|
|
|
from django.db.models import (
|
|
|
|
|
CASCADE,
|
|
|
|
|
SET_NULL,
|
|
|
|
|
CharField,
|
|
|
|
|
FloatField,
|
|
|
|
|
ForeignKey,
|
|
|
|
|
Model,
|
2024-07-29 22:31:11 +03:00
|
|
|
|
QuerySet,
|
2024-07-19 19:29:27 +03:00
|
|
|
|
TextChoices,
|
|
|
|
|
TextField
|
|
|
|
|
)
|
|
|
|
|
|
2024-07-29 22:31:11 +03:00
|
|
|
|
from .Argument import Argument
|
|
|
|
|
from .Substitution import Substitution
|
|
|
|
|
|
2024-07-19 19:29:27 +03:00
|
|
|
|
|
|
|
|
|
class OperationType(TextChoices):
|
|
|
|
|
''' Type of operation. '''
|
|
|
|
|
INPUT = 'input'
|
|
|
|
|
SYNTHESIS = 'synthesis'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Operation(Model):
|
|
|
|
|
''' Operational schema Unit.'''
|
|
|
|
|
oss: ForeignKey = ForeignKey(
|
|
|
|
|
verbose_name='Схема синтеза',
|
2024-07-25 19:12:59 +03:00
|
|
|
|
to='library.LibraryItem',
|
2024-07-19 19:29:27 +03:00
|
|
|
|
on_delete=CASCADE,
|
2024-08-09 20:58:28 +03:00
|
|
|
|
related_name='operations'
|
2024-07-19 19:29:27 +03:00
|
|
|
|
)
|
|
|
|
|
operation_type: CharField = CharField(
|
|
|
|
|
verbose_name='Тип',
|
|
|
|
|
max_length=10,
|
|
|
|
|
choices=OperationType.choices,
|
|
|
|
|
default=OperationType.INPUT
|
|
|
|
|
)
|
|
|
|
|
result: ForeignKey = ForeignKey(
|
|
|
|
|
verbose_name='Связанная КС',
|
2024-07-25 19:12:59 +03:00
|
|
|
|
to='library.LibraryItem',
|
2024-07-19 19:29:27 +03:00
|
|
|
|
null=True,
|
|
|
|
|
on_delete=SET_NULL,
|
|
|
|
|
related_name='producer'
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
alias: CharField = CharField(
|
|
|
|
|
verbose_name='Шифр',
|
|
|
|
|
max_length=255,
|
|
|
|
|
blank=True
|
|
|
|
|
)
|
|
|
|
|
title: TextField = TextField(
|
|
|
|
|
verbose_name='Название',
|
|
|
|
|
blank=True
|
|
|
|
|
)
|
|
|
|
|
comment: TextField = TextField(
|
|
|
|
|
verbose_name='Комментарий',
|
|
|
|
|
blank=True
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
position_x: FloatField = FloatField(
|
|
|
|
|
verbose_name='Положение по горизонтали',
|
|
|
|
|
default=0
|
|
|
|
|
)
|
|
|
|
|
position_y: FloatField = FloatField(
|
|
|
|
|
verbose_name='Положение по вертикали',
|
|
|
|
|
default=0
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
''' Model metadata. '''
|
|
|
|
|
verbose_name = 'Операция'
|
|
|
|
|
verbose_name_plural = 'Операции'
|
|
|
|
|
|
|
|
|
|
def __str__(self) -> str:
|
|
|
|
|
return f'Операция {self.alias}'
|
2024-07-29 22:31:11 +03:00
|
|
|
|
|
|
|
|
|
def getArguments(self) -> QuerySet[Argument]:
|
|
|
|
|
''' Operation arguments. '''
|
|
|
|
|
return Argument.objects.filter(operation=self)
|
|
|
|
|
|
|
|
|
|
def getSubstitutions(self) -> QuerySet[Substitution]:
|
|
|
|
|
''' Operation substitutions. '''
|
|
|
|
|
return Substitution.objects.filter(operation=self)
|