49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
from django.db import models
|
|
|
|
from apps.core.models import TimeStampedModel, UUIDModel
|
|
|
|
|
|
class ReportDefinition(UUIDModel, TimeStampedModel):
|
|
workflow = models.ForeignKey("workflows.Workflow", on_delete=models.CASCADE, related_name="report_definitions")
|
|
name = models.CharField(max_length=200)
|
|
active = models.BooleanField(default=True)
|
|
|
|
def __str__(self) -> str:
|
|
return self.name
|
|
|
|
|
|
class ReportField(UUIDModel):
|
|
class FieldType(models.TextChoices):
|
|
TEXT = "text", "Text"
|
|
INTEGER = "integer", "Integer"
|
|
DECIMAL = "decimal", "Decimal"
|
|
BOOLEAN = "boolean", "Boolean"
|
|
DATE = "date", "Date"
|
|
DATETIME = "datetime", "DateTime"
|
|
CHOICE = "choice", "Choice"
|
|
MULTICHOICE = "multichoice", "Multi-choice"
|
|
MEASUREMENT = "measurement", "Measurement"
|
|
PERCENTAGE = "percentage", "Percentage"
|
|
WEIGHT = "weight", "Weight"
|
|
FILE = "file", "File / image"
|
|
|
|
definition = models.ForeignKey(ReportDefinition, on_delete=models.CASCADE, related_name="fields")
|
|
key = models.SlugField(max_length=100)
|
|
label = models.CharField(max_length=200)
|
|
field_type = models.CharField(max_length=16, choices=FieldType.choices, default=FieldType.TEXT)
|
|
required = models.BooleanField(default=False)
|
|
choices = models.JSONField(default=list, blank=True)
|
|
order = models.PositiveIntegerField(default=0)
|
|
|
|
class Meta:
|
|
ordering = ["order"]
|
|
constraints = [
|
|
models.UniqueConstraint(fields=["definition", "key"], name="uniq_report_field_key")
|
|
]
|
|
|
|
|
|
class FinalReport(UUIDModel, TimeStampedModel):
|
|
order = models.OneToOneField("orders.ProcessingOrder", on_delete=models.CASCADE, related_name="final_report")
|
|
data = models.JSONField(default=dict, blank=True)
|
|
generated_at = models.DateTimeField(auto_now_add=True)
|