from django.db import models from apps.core.models import TimeStampedModel, UUIDModel class PricingRule(UUIDModel, TimeStampedModel): class RuleType(models.TextChoices): FIXED = "fixed", "Fixed" PER_KG = "per_kg", "Per kilogram" PER_UNIT = "per_unit", "Per unit" PERCENTAGE = "percentage", "Percentage" TIERED = "tiered", "Tiered" DISCOUNT = "discount", "Discount" TAX = "tax", "Tax" FEE = "fee", "Additional fee" step = models.ForeignKey( "workflows.WorkflowStep", on_delete=models.CASCADE, related_name="pricing_rules" ) name = models.CharField(max_length=200) rule_type = models.CharField(max_length=16, choices=RuleType.choices) # Base amount. Meaning depends on rule_type: # fixed/per_kg/per_unit -> money; percentage/discount/tax -> percent. amount = models.DecimalField(max_digits=18, decimal_places=2, default=0) config = models.JSONField(default=dict, blank=True) active = models.BooleanField(default=True) priority = models.IntegerField(default=0) class Meta: ordering = ["priority"] def __str__(self) -> str: return f"{self.name} ({self.rule_type})"