update
This commit is contained in:
@@ -0,0 +1,17 @@
|
|||||||
|
# Generated by Django 5.2.7 on 2026-05-01 12:06
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('evaluation', '0040_basevaluebonus_bonustype_employeebonus_delete_bonus'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RenameModel(
|
||||||
|
old_name='BonusType',
|
||||||
|
new_name='BonusCategory',
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -11,13 +11,8 @@ class BaseValueBonus(AbstractBaseModel):
|
|||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"Base: {self.base_price}"
|
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 BonusCategory(AbstractBaseModel):
|
||||||
class BonusType(AbstractBaseModel):
|
|
||||||
name = models.CharField(max_length=255)
|
name = models.CharField(max_length=255)
|
||||||
category = models.CharField(
|
category = models.CharField(
|
||||||
max_length=50,
|
max_length=50,
|
||||||
@@ -31,7 +26,7 @@ class BonusType(AbstractBaseModel):
|
|||||||
|
|
||||||
class EmployeeBonus(AbstractBaseModel):
|
class EmployeeBonus(AbstractBaseModel):
|
||||||
user = models.ForeignKey("accounts.User", on_delete=models.CASCADE, related_name="bonuses", )
|
user = models.ForeignKey("accounts.User", on_delete=models.CASCADE, related_name="bonuses", )
|
||||||
bonus_type = models.ForeignKey(BonusType, on_delete=models.CASCADE)
|
bonus_type = models.ForeignKey(BonusCategory, on_delete=models.CASCADE)
|
||||||
percentage = models.PositiveIntegerField()
|
percentage = models.PositiveIntegerField()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|||||||
@@ -1,20 +1,32 @@
|
|||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
from core.apps.evaluation.models.bonus import BonusType, EmployeeBonus, BaseValueBonus
|
from core.apps.evaluation.models.bonus import BonusCategory, EmployeeBonus, BaseValueBonus
|
||||||
|
|
||||||
|
|
||||||
class BonusTypeCreateSerializer(serializers.ModelSerializer):
|
class BaseBonusSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = BonusType
|
model = BaseValueBonus
|
||||||
|
fields = 'id', 'base_price'
|
||||||
|
|
||||||
|
def create(self, validated_data):
|
||||||
|
if BaseValueBonus.objects.exists():
|
||||||
|
raise serializers.ValidationError("Base bonus already exists")
|
||||||
|
|
||||||
|
return super().create(validated_data)
|
||||||
|
|
||||||
|
|
||||||
|
class BonusCategorySerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = BonusCategory
|
||||||
fields = 'name', 'category', 'percentage'
|
fields = 'name', 'category', 'percentage'
|
||||||
|
|
||||||
|
|
||||||
class BonusTypeListSerializer(serializers.ModelSerializer):
|
class BonusCategoryListSerializer(serializers.ModelSerializer):
|
||||||
price = serializers.SerializerMethodField()
|
price = serializers.DecimalField(max_digits=12, decimal_places=2)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = BonusType
|
model = BonusCategory
|
||||||
fields = 'name', 'category', 'percentage'
|
fields = 'id', 'name', 'category', 'percentage' , 'price'
|
||||||
|
|
||||||
def get_price(self, obj):
|
def get_price(self, obj):
|
||||||
base_obj = BaseValueBonus.objects.first()
|
base_obj = BaseValueBonus.objects.first()
|
||||||
@@ -27,15 +39,15 @@ class BonusTypeListSerializer(serializers.ModelSerializer):
|
|||||||
class BonusEmployeeBonusSerializer(serializers.ModelSerializer):
|
class BonusEmployeeBonusSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = EmployeeBonus
|
model = EmployeeBonus
|
||||||
fields = 'user' , 'bonus_type' , 'percentage'
|
fields = 'user', 'bonus_type', 'percentage'
|
||||||
|
|
||||||
|
|
||||||
class EmployeeBonusSerializer(serializers.ModelSerializer):
|
class EmployeeBonusListSerializer(serializers.ModelSerializer):
|
||||||
price = serializers.SerializerMethodField()
|
price = serializers.DecimalField(max_digits=12, decimal_places=2)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = EmployeeBonus
|
model = EmployeeBonus
|
||||||
fields = 'user', 'bonus_type', 'percentage'
|
fields = 'id', 'user', 'bonus_type', 'percentage' , 'price'
|
||||||
|
|
||||||
def get_price(self, obj):
|
def get_price(self, obj):
|
||||||
base_obj = BaseValueBonus.objects.first()
|
base_obj = BaseValueBonus.objects.first()
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ router.register("customer", views.CustomerView, basename="customer")
|
|||||||
router.register("certificate", views.CertificateView, basename="certificate")
|
router.register("certificate", views.CertificateView, basename="certificate")
|
||||||
router.register("bonus-type", views.BonusTypeView, basename="bonus-type")
|
router.register("bonus-type", views.BonusTypeView, basename="bonus-type")
|
||||||
router.register("bonus-employee", views.BonusEmployeeViewSet, basename="bonus-employee")
|
router.register("bonus-employee", views.BonusEmployeeViewSet, basename="bonus-employee")
|
||||||
|
router.register("bonus-base", views.BaseBonusViewSet, basename="bonus-base")
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path("", include(router.urls)),
|
path("", include(router.urls)),
|
||||||
|
|||||||
@@ -1,26 +1,33 @@
|
|||||||
from django_core.mixins import BaseViewSetMixin
|
from django_core.mixins import BaseViewSetMixin
|
||||||
from drf_spectacular.utils import extend_schema
|
from drf_spectacular.utils import extend_schema
|
||||||
from rest_framework.permissions import AllowAny, IsAdminUser
|
from rest_framework import viewsets
|
||||||
|
from rest_framework.permissions import IsAdminUser
|
||||||
from rest_framework.viewsets import ModelViewSet
|
from rest_framework.viewsets import ModelViewSet
|
||||||
|
|
||||||
# core
|
# core
|
||||||
from core.apps.evaluation.models.bonus import BonusType, EmployeeBonus
|
from core.apps.evaluation.models.bonus import BonusCategory, EmployeeBonus, BaseValueBonus
|
||||||
from core.apps.evaluation.serializers.bonus.Bonus import BonusTypeCreateSerializer, \
|
from core.apps.evaluation.serializers.bonus.Bonus import BonusCategorySerializer, \
|
||||||
BonusTypeListSerializer, EmployeeBonusSerializer, BonusEmployeeBonusSerializer
|
BonusCategoryListSerializer, EmployeeBonusListSerializer, BonusEmployeeBonusSerializer, BaseBonusSerializer
|
||||||
|
|
||||||
|
|
||||||
@extend_schema(tags=["Bonus"])
|
@extend_schema(tags=["BaseBonus"])
|
||||||
|
class BaseBonusViewSet(BaseViewSetMixin, viewsets.ModelViewSet):
|
||||||
|
queryset = BaseValueBonus.objects.all()
|
||||||
|
serializer_class = BaseBonusSerializer
|
||||||
|
|
||||||
|
|
||||||
|
@extend_schema(tags=["Bonus-Category"])
|
||||||
class BonusTypeView(BaseViewSetMixin, ModelViewSet):
|
class BonusTypeView(BaseViewSetMixin, ModelViewSet):
|
||||||
queryset = BonusType.objects.all()
|
queryset = BonusCategory.objects.all()
|
||||||
|
|
||||||
serializer_class = BonusTypeCreateSerializer
|
serializer_class = BonusCategorySerializer
|
||||||
|
|
||||||
action_serializer_class = {
|
action_serializer_class = {
|
||||||
'create': BonusTypeCreateSerializer,
|
'create': BonusCategorySerializer,
|
||||||
'update': BonusTypeCreateSerializer,
|
'update': BonusCategorySerializer,
|
||||||
'partial_update': BonusTypeCreateSerializer,
|
'partial_update': BonusCategorySerializer,
|
||||||
'list': BonusTypeListSerializer,
|
'list': BonusCategoryListSerializer,
|
||||||
'retrieve': BonusTypeListSerializer,
|
'retrieve': BonusCategoryListSerializer,
|
||||||
}
|
}
|
||||||
|
|
||||||
action_permission_classes = {
|
action_permission_classes = {
|
||||||
@@ -34,16 +41,14 @@ class BonusTypeView(BaseViewSetMixin, ModelViewSet):
|
|||||||
|
|
||||||
class BonusEmployeeViewSet(BaseViewSetMixin, ModelViewSet):
|
class BonusEmployeeViewSet(BaseViewSetMixin, ModelViewSet):
|
||||||
queryset = EmployeeBonus.objects.all()
|
queryset = EmployeeBonus.objects.all()
|
||||||
serializer_class = EmployeeBonusSerializer
|
serializer_class = BonusEmployeeBonusSerializer
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
action_serializer_class = {
|
action_serializer_class = {
|
||||||
'create': BonusEmployeeBonusSerializer,
|
'create': BonusEmployeeBonusSerializer,
|
||||||
'update': BonusEmployeeBonusSerializer,
|
'update': BonusEmployeeBonusSerializer,
|
||||||
'partial_update': BonusEmployeeBonusSerializer,
|
'partial_update': BonusEmployeeBonusSerializer,
|
||||||
'list': EmployeeBonusSerializer,
|
'list': EmployeeBonusListSerializer,
|
||||||
'retrieve': EmployeeBonusSerializer,
|
'retrieve': EmployeeBonusListSerializer,
|
||||||
}
|
}
|
||||||
|
|
||||||
action_permission_classes = {
|
action_permission_classes = {
|
||||||
@@ -52,4 +57,4 @@ class BonusEmployeeViewSet(BaseViewSetMixin, ModelViewSet):
|
|||||||
'partial_update': [IsAdminUser],
|
'partial_update': [IsAdminUser],
|
||||||
'destroy': [IsAdminUser],
|
'destroy': [IsAdminUser],
|
||||||
'list': [IsAdminUser],
|
'list': [IsAdminUser],
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user