@ -5,10 +5,31 @@ from apps.course.models import Course, CourseCategory, Attachment, Glossary, Les
from apps.course.models.course import get_localized_field
from apps.chat.models import RoomMessage
from apps.account.serializers import UserProfileSerializer
from decimal import Decimal
import ast
import json
def resolve_request_lang ( request , default = ' en ' ) :
language_code = getattr ( request , ' LANGUAGE_CODE ' , None )
if language_code :
return str ( language_code ) . lower ( )
if not request :
return default
header_value = ' '
if hasattr ( request , ' headers ' ) :
header_value = request . headers . get ( ' Accept-Language ' , ' ' )
if not header_value and hasattr ( request , ' META ' ) :
header_value = request . META . get ( ' HTTP_ACCEPT_LANGUAGE ' , ' ' )
if header_value :
return header_value . split ( ' , ' ) [ 0 ] . strip ( ) . lower ( )
return default
class CourseCategorySerializer ( serializers . ModelSerializer ) :
course_count = serializers . SerializerMethodField ( )
@ -21,7 +42,7 @@ class CourseCategorySerializer(serializers.ModelSerializer):
def _lang ( self ) :
request = self . context . get ( ' request ' )
return getattr ( request , ' LANGUAGE_CODE ' , None ) or ' en '
return resolve_request_lang ( request )
def get_name ( self , obj ) :
return get_localized_field ( self . _lang ( ) , obj . name )
@ -41,6 +62,7 @@ class CourseListSerializer(serializers.ModelSerializer):
price = serializers . SerializerMethodField ( )
discount_percentage = serializers . SerializerMethodField ( )
final_price = serializers . SerializerMethodField ( )
currency = serializers . SerializerMethodField ( )
is_free = serializers . SerializerMethodField ( )
title = serializers . SerializerMethodField ( )
slug = serializers . SerializerMethodField ( )
@ -67,12 +89,13 @@ class CourseListSerializer(serializers.ModelSerializer):
' is_free ' ,
' price ' ,
' discount_percentage ' ,
' final_price ' ,
' final_price ' ,
' currency ' ,
]
def _lang ( self ) :
request = self . context . get ( ' request ' )
return getattr ( request , ' LANGUAGE_CODE ' , None ) or ' en '
return resolve_request_lang ( request )
def get_title ( self , obj ) :
return get_localized_field ( self . _lang ( ) , obj . title )
@ -110,22 +133,27 @@ class CourseListSerializer(serializers.ModelSerializer):
return max ( lessons_count , obj . lessons_count )
def get_price ( self , obj ) :
if obj . is_free or obj . price == 0 :
amount = obj . get_price_for_language ( self . _lang ( ) )
if obj . is_free or amount == 0 :
return " 0.00 "
return str ( obj . price )
return str ( amount )
def get_discount_percentage ( self , obj ) :
if obj . is_free or obj . price == 0 :
if obj . is_free or obj . get_ price_for_language ( self . _lang ( ) ) == 0 :
return 0
return obj . discount_percentage
def get_final_price ( self , obj ) :
if obj . is_free or obj . price == 0 :
amount = obj . get_final_price_for_language ( self . _lang ( ) )
if obj . is_free or amount == 0 :
return " 0.00 "
return str ( obj . final_price )
return str ( amount )
def get_currency ( self , obj ) :
return obj . get_currency_for_language ( self . _lang ( ) )
def get_is_free ( self , obj ) :
return obj . is_free or obj . price == 0
return obj . is_free or ( Decimal ( obj . price or 0 ) == 0 and Decimal ( obj . price_rub or 0 ) == 0 )
class CourseDetailSerializer ( serializers . ModelSerializer ) :
@ -142,6 +170,7 @@ class CourseDetailSerializer(serializers.ModelSerializer):
price = serializers . SerializerMethodField ( )
discount_percentage = serializers . SerializerMethodField ( )
final_price = serializers . SerializerMethodField ( )
currency = serializers . SerializerMethodField ( )
is_free = serializers . SerializerMethodField ( )
is_professor = serializers . SerializerMethodField ( )
title = serializers . SerializerMethodField ( )
@ -181,6 +210,7 @@ class CourseDetailSerializer(serializers.ModelSerializer):
' price ' ,
' discount_percentage ' ,
' final_price ' ,
' currency ' ,
' timing ' ,
' features ' ,
' last_lesson_id ' ,
@ -389,25 +419,29 @@ class CourseDetailSerializer(serializers.ModelSerializer):
return obj . participants . count ( )
def get_price ( self , obj ) :
if obj . is_free or obj . price == 0 :
amount = obj . get_price_for_language ( self . _lang ( ) )
if obj . is_free or amount == 0 :
return " 0.00 "
return str ( obj . price )
return str ( amount )
def get_discount_percentage ( self , obj ) :
if obj . is_free or obj . price == 0 :
if obj . is_free or obj . get_ price_for_language ( self . _lang ( ) ) == 0 :
return 0
return obj . discount_percentage
def get_final_price ( self , obj ) :
if obj . is_free or obj . price == 0 :
amount = obj . get_final_price_for_language ( self . _lang ( ) )
if obj . is_free or amount == 0 :
return " 0.00 "
return str ( obj . final_price )
return str ( amount )
def get_currency ( self , obj ) :
return obj . get_currency_for_language ( self . _lang ( ) )
def get_is_free ( self , obj ) :
return obj . is_free or obj . price == 0
return obj . is_free or ( Decimal ( obj . price or 0 ) == 0 and Decimal ( obj . price_rub or 0 ) == 0 )
def _lang ( self ) :
request = self . context . get ( ' request ' )
return getattr ( request , ' LANGUAGE_CODE ' , None ) or ' en '
return resolve_request_lang ( request )
def get_title ( self , obj ) :
return get_localized_field ( self . _lang ( ) , obj . title )