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)