39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
from django.db import models
|
|
from django.db.models.fields import PositiveIntegerField
|
|
from django_core.models import AbstractBaseModel
|
|
|
|
from core.apps.evaluation.choices.bonus import EvaluationCategory
|
|
|
|
|
|
class BaseValueBonus(AbstractBaseModel):
|
|
base_price = models.DecimalField(max_digits=12, decimal_places=2)
|
|
|
|
def __str__(self):
|
|
return f"Base: {self.base_price}"
|
|
|
|
def save(self, *args, **kwargs):
|
|
if not self.pk and BaseValueBonus.objects.exists():
|
|
raise ValueError("Value Bonus already exists")
|
|
return super().save(*args, **kwargs)
|
|
|
|
|
|
class BonusType(AbstractBaseModel):
|
|
name = models.CharField(max_length=255)
|
|
category = models.CharField(
|
|
max_length=50,
|
|
choices=EvaluationCategory.choices
|
|
)
|
|
percentage = PositiveIntegerField()
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
class EmployeeBonus(AbstractBaseModel):
|
|
user = models.ForeignKey("accounts.User", on_delete=models.CASCADE, related_name="bonuses", )
|
|
bonus_type = models.ForeignKey(BonusType, on_delete=models.CASCADE)
|
|
percentage = models.PositiveIntegerField()
|
|
|
|
class Meta:
|
|
unique_together = ("user", "bonus_type")
|