Browse Source

fix: course price

master
mortezaei 1 year ago
parent
commit
8d48c358c5
  1. 11
      apps/course/models/course.py
  2. 22
      apps/course/serializers/course.py

11
apps/course/models/course.py

@ -119,7 +119,16 @@ class Course(models.Model):
if not self.slug:
self.slug = generate_slug_for_model(Course, self.title)
if self.discount_percentage > 0:
# Ensure consistency: if price is 0, set is_free to True and discount_percentage to 0
if self.price == 0:
self.is_free = True
self.discount_percentage = 0
self.final_price = Decimal('0.00')
elif self.is_free:
self.price = Decimal('0.00')
self.discount_percentage = 0
self.final_price = Decimal('0.00')
elif self.discount_percentage > 0:
discount_amount = (self.price * self.discount_percentage) / 100
final_price = self.price - discount_amount
self.final_price = Decimal(math.ceil(final_price)).quantize(Decimal('0.00'))

22
apps/course/serializers/course.py

@ -24,9 +24,9 @@ class CourseListSerializer(serializers.ModelSerializer):
thumbnail = serializers.SerializerMethodField()
participant_count = serializers.SerializerMethodField()
lessons_count = serializers.SerializerMethodField()
# price = serializers.SerializerMethodField()
# discount_percentage = serializers.SerializerMethodField()
# final_price = serializers.SerializerMethodField()
price = serializers.SerializerMethodField()
discount_percentage = serializers.SerializerMethodField()
final_price = serializers.SerializerMethodField()
class Meta:
model = Course
@ -61,15 +61,17 @@ class CourseListSerializer(serializers.ModelSerializer):
return max(lessons_count, obj.lessons_count)
def get_price(self, obj):
if obj.is_free:
if obj.is_free or obj.price == 0:
return "0.00"
return str(obj.price)
def get_discount_percentage(self, obj):
return 0 if obj.is_free else obj.discount_percentage
if obj.is_free or obj.price == 0:
return 0
return obj.discount_percentage
def get_final_price(self, obj):
if obj.is_free:
if obj.is_free or obj.price == 0:
return "0.00"
return str(obj.final_price)
@ -217,15 +219,17 @@ class CourseDetailSerializer(serializers.ModelSerializer):
return obj.participants.count()
def get_price(self, obj):
if obj.is_free:
if obj.is_free or obj.price == 0:
return "0.00"
return str(obj.price)
def get_discount_percentage(self, obj):
return 0 if obj.is_free else obj.discount_percentage
if obj.is_free or obj.price == 0:
return 0
return obj.discount_percentage
def get_final_price(self, obj):
if obj.is_free:
if obj.is_free or obj.price == 0:
return "0.00"
return str(obj.final_price)

Loading…
Cancel
Save