34 lines
1.2 KiB
Python
34 lines
1.2 KiB
Python
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})"
|