

from itertools import count
from multiprocessing import context
import re
import requests
# from typing_extensions import Required
from rest_framework import serializers

# from magazine.utils import get_custom_image_url
from .models import*
from base.models import*
from django.db.models import Sum,Avg,Max,Min,Count,F,Q


# Magazine Image serializer
class MagazineImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazineImage
        fields = ['image']

        
class MagazineCategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazineCategory
        # fields = ['id','first_name','last_name','username','email','exp_otp_datetime','phone_number','country_code','otp']
        fields = '__all__'
    
class SystemCategorySerializer(serializers.ModelSerializer):
    class Meta:
        model = SystemCategory
        # fields = ['id','first_name','last_name','username','email','exp_otp_datetime','phone_number','country_code','otp']
        fields = ('id','category_name')
    
#magazine author
class AuthorSerializer(serializers.ModelSerializer):
    class Meta:
        model = Author
        fields = ['id','author_name']

# promotional magazineS
class MagazineInfoSerializer(serializers.ModelSerializer):
    authors = serializers.SerializerMethodField()
    ratting = serializers.SerializerMethodField()
    # cover_pic = serializers.SerializerMethodField()
    class Meta:
        model = MagazineInfo
        fields =  ['id','cover_pic','authors','is_aproved','is_active','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','issue_date','system_category','magazine_category','create_on','updated_on']
        # fields = '__all__'


    # def get_cover_pic(self,obj):
    #     return get_custom_image_url(obj.cover_pic.url)

        
    # def get_ratting(self,obj):
    #     try:
    #         magazineobj =magazineReviewInfo.objects.filter(magazines=obj.id)
    #         list,sum,count=[],0,0
    #         if magazineobj:
    #             for row in magazineobj:
    #                 list.append(row.ratting)
    #                 digit = float((row.ratting)/5)*100
    #                 sum=float(sum+digit)
    #                 count+=1
    #             if count == 1:
    #                 return row.ratting
    #             result=int(sum/count)  
    #             if 0 < result <= 19:
    #                 return 1
    #             elif 20 <= result <= 39:
    #                 return 2
    #             elif 40 <= result <= 59:
    #                 return 3
    #             elif 60 <= result <= 79:
    #                 return 4
    #             elif 80 <= result <= 100:
    #                 return 5
    #             else:
    #                 return 1
    #         return 1
    #     except magazineReviewInfo.DoesNotExist:
    #         return 1

    def get_ratting(self,obj):
        # try:
        #     magazineobj =magazineReviewInfo.objects.filter(magazines=obj.id)
        #     sum,count=0,0
        #     if magazineobj:
        #         for row in magazineobj:
        #             if row.ratting == 'NULL' or row.ratting == None:
        #                 rattings = 1
        #             else:
        #                 rattings = row.ratting
        #             sum=float(sum + rattings if row and rattings else 0)
        #             count+=1
        #         result=float(sum/count)
        #         return round(result,1)
        #     else:
        #         return 1.0
        # except magazineReviewInfo.DoesNotExist:
        #     return 1.0

        try:
            magazineobj =magazineReviewInfo.objects.filter(magazines=obj.id)
            sum,count=0,0
            if magazineobj:
                for row in magazineobj:
                    if row.ratting == 'NULL' or row.ratting == None:
                        rattings = 1.0
                    else:
                        rattings = row.ratting
                    sum=float(sum + rattings if row and rattings else 0)
                    count+=1
                result=float(sum/count)
                MagazineInfo.objects.filter(id=obj.id).update(ratting=float(sum/count))
                return round(result,1)
            else:
                MagazineInfo.objects.filter(id=obj.id).update(ratting=float(1))
                return 1.0
        except magazineReviewInfo.DoesNotExist:
            return 1.0


    def get_authors(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.id,is_aproved=True,is_active=True).values_list('id',flat=True)
        maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj).exclude(author__isnull=True)
        if maputhorobj:
            authordata = PTestmagazineSerializer(maputhorobj,many=True)
            if authordata:
                return authordata.data
            return []
        return []

# #magazine author
# class AuthorSerializer(serializers.ModelSerializer):
#     class Meta:
#         model = Author
#         fields = ['id','author_name']
 
 # magazine bt System category
class MagazinebySystemSerializer(serializers.ModelSerializer):
    frequency = serializers.SerializerMethodField()
    is_favorite = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    ratting = serializers.SerializerMethodField()
    # cover_pic = serializers.SerializerMethodField()
    class Meta:
        model = MagazineInfo
        # fields = '__all__'
        fields = ['id','cover_pic','is_aproved','is_active','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','issue_date','published_date','frequency','total_page','authors','is_favorite','create_on','updated_on']

    # def get_cover_pic(self,obj):
    #     try:
    #         if obj.cover_pic:
    #             # return obj.cover_pic.url
    #             return get_custom_image_url(obj.cover_pic.url)
    #         return None
    #     except MagazineInfo.DoesNotExist:
    #         return None

    def get_ratting(self,obj):
        # try:
        #     magazineobj =magazineReviewInfo.objects.filter(magazines=obj.id)
        #     sum,count=0,0
        #     if magazineobj:
        #         for row in magazineobj:
        #             if row.ratting == 'NULL' or row.ratting == None:
        #                 rattings = 1
        #             else:
        #                 rattings = row.ratting
        #             sum=float(sum + rattings if row and rattings else 0)
        #             count+=1
        #         result=float(sum/count)
        #         return round(result,1)
        #     else:
        #         return 1.0
        # except magazineReviewInfo.DoesNotExist:
        #     return 1.0
        try:
            magazineobj =magazineReviewInfo.objects.filter(magazines=obj.id)
            sum,count=0,0
            if magazineobj:
                for row in magazineobj:
                    if row.ratting == 'NULL' or row.ratting == None:
                        rattings = 1.0
                    else:
                        rattings = row.ratting
                    sum=float(sum + rattings if row and rattings else 0)
                    count+=1
                result=float(sum/count)
                MagazineInfo.objects.filter(id=obj.id).update(ratting=float(sum/count))
                return round(result,1)
            else:
                MagazineInfo.objects.filter(id=obj.id).update(ratting=float(1))
                return 1.0
        except magazineReviewInfo.DoesNotExist:
            return 1.0

    # def get_ratting(self,obj):
    #     try:
    #         magazineobj =magazineReviewInfo.objects.filter(magazines=obj.id)
    #         list,sum,count=[],0,0
    #         if magazineobj:
    #             for row in magazineobj:
    #                 list.append(row.ratting)
    #                 digit = float((row.ratting)/5)*100
    #                 sum=float(sum+digit)
    #                 count+=1
    #             if count == 1:
    #                 return row.ratting
    #             result=int(sum/count)  
    #             if 0 < result <= 19:
    #                 return 1
    #             elif 20 <= result <= 39:
    #                 return 2
    #             elif 40 <= result <= 59:
    #                 return 3
    #             elif 60 <= result <= 79:
    #                 return 4
    #             elif 80 <= result <= 100:
    #                 return 5
    #             else:
    #                 return 1
    #         return 1
        # except magazineReviewInfo.DoesNotExist:
        #     return 1

    def get_frequency(self,obj):
        try:
            if obj.frequency=="W":
                return "Weekly"
            elif obj.frequency=="Y":
                return "Yearly"
            elif obj.frequency=="Q":
                return "Quaterly"
            elif obj.frequency=="H":
                return "Half Yearly"
            elif obj.frequency=="M":
                return "Monthly"
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_is_favorite(self, obj):
        # auth = Author.objects.filter(id=obj.author_id).all()

        if obj:
            user_id = self.context.get('user_id')
            if user_id:
                mag_fav = MagazineFavorite.objects.filter(users=user_id,magazines=obj.id).count()
                if mag_fav:

                    return True
                else:
                    return False
            #return obj.is_favorite
        return False

    # def get_authors(self, obj):
    #     auth = Author.objects.filter(id=obj.author_id).all()
    #     if auth:
    #         return AuthorSerializer(auth,many=True).data
    #     return None

    def get_authors(self,obj):
        try:
            magazineobj = MagazineInfo.objects.filter(id=obj.id,is_aproved=True,is_active=True).last()#values_list('id',flat=True)
            if magazineobj:
                maputhorobj = MagMapAuthor.objects.filter(magazine_id=magazineobj.id).all().exclude(author__isnull=True)
                authordata = PTestmagazineSerializer(maputhorobj,many=True)
                if authordata:
                    return authordata.data
                return []
            return []
        except MagazineInfo.DoesNotExist:
            return []

class SystemCategorySerializer(serializers.ModelSerializer):
    system_category_id = serializers.SerializerMethodField()
    system_category_name = serializers.SerializerMethodField()
    magazine = serializers.SerializerMethodField()
    class Meta:
        model = SystemCategory
        fields = ('system_category_id','system_category_name','magazine')

    def get_system_category_id(self, obj):
        return obj.id
        
    def get_system_category_name(self, obj):
        return obj.category_name

    # magine list based on system category.

    def get_magazine(self, obj):

        # magazineinfo = MagazineInfo.objects.filter(system_category=obj.id,is_aproved=True,is_active=True).all()
        current_date = datetime.datetime.now()#- datetime.timedelta(days=1)
        magazineinfo=MagazineInfo.objects.filter((Q(published_date__lte=current_date)|Q(published_date=None)),system_category=obj.id,is_aproved=True,is_active=True).all()
        # print(magazineinfo.count(),'====2222')
        return MagazinebySystemSerializer(magazineinfo,many=True,context={'user_id':self.context.get('user_id')},).data
        
#############################################################
class SystemppCategorySerializer(serializers.ModelSerializer):
    magazine_category_id = serializers.SerializerMethodField()
    magazine_category_name = serializers.SerializerMethodField()
    magazine = serializers.SerializerMethodField()
    class Meta:
        model = MagazineCategory
        fields = ('magazine_category_id','magazine_category_name','magazine')

    def get_magazine_category_id(self, obj):
        return obj.id
        
    def get_magazine_category_name(self, obj):
        return obj.category_name

    # magine list based on system category.

    def get_magazine(self, obj):
        current_date = datetime.datetime.now()
        magazineinfo = MagazineInfo.objects.filter((Q(published_date__lte=current_date)|Q(published_date=None)),magazine_category_id=obj.id,is_aproved=True,is_active=True).all()
        # print(magazineinfo.count(),"================================")
        return MagazinebySystemSerializer(magazineinfo,many=True).data
########################################################
class SystemAndMagazineDetailsSerializer(serializers.ModelSerializer):
    magazine = serializers.SerializerMethodField()
    system_category = serializers.SerializerMethodField()
    magazine_category = serializers.SerializerMethodField()
    class Meta:
        model = MagazineInfo
        fields = ['system_category','magazine_category','magazine']

    def get_magazine_category(self, obj):
        return self.context.get('magazine_category_id')

    def get_system_category(self, obj):
        return self.context.get('system_category_id')

    def get_magazine(self, obj):
        user_id = self.context.get('user_id')
        system_category_id = self.context.get('system_category_id')
        magazine_category_id = self.context.get('magazine_category_id')
        # mangine = MagazineInfo.objects.filter(system_category=system_category_id,magazine_category=magazine_category_id,is_aproved=True,is_active=True).all()
        current_date = datetime.datetime.now() #- datetime.timedelta(days=1)
        mangine=MagazineInfo.objects.filter((Q(published_date__date__lte=current_date)|Q(published_date=None)),system_category=system_category_id,magazine_category=magazine_category_id,is_aproved=True,is_active=True).all()
        return MagazinebySystemSerializer(mangine, many=True,context={'user_id':user_id}).data
       

# magazine bookmark pages
class MagazinebookmarkSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazineBookmark
        # fields = '__all__'
        fields = ['page_number']

# magazine pages
class MegazinePagesSerializer(serializers.ModelSerializer):
    class Meta:
        model = MegazinePages
        # fields = '__all__'
        fields = ['pages']

# magazine Detail serializer
class MagazineDetailSerializer(serializers.ModelSerializer):
    system_category_name = serializers.SerializerMethodField()
    magazine_category_name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    pages = serializers.SerializerMethodField()
    magazine_url = serializers.SerializerMethodField()
    frequency = serializers.SerializerMethodField()
    is_bookmark = serializers.SerializerMethodField()
    is_favorite = serializers.SerializerMethodField()
    class Meta:
        model = MagazineInfo
        # fields = '__all__'
        fields = ['id','magazine_url','is_aproved','is_active','is_purchase','cover_pic','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','is_bookmark','is_favorite','pages','users','create_on','updated_on']

    def get_is_bookmark(self,obj):
        bookmarkobj=MagazineBookmark.objects.filter(magazines=obj.id).last()
        if obj.id and bookmarkobj:
            statusbookmark=MagazineInfo.objects.filter(id=obj.id).update(is_bookmark=True)
            if statusbookmark==1:
                return True
            return False 
        else:
            return False

    def get_is_favorite(self,obj):
        favoritreobj=MagazineFavorite.objects.filter(magazines=obj.id).last()
        if obj.id and favoritreobj:
            statusfavoritre=MagazineInfo.objects.filter(id=obj.id).update(is_favorite=True)
            if statusfavoritre==1:
                return True
            return False 
        else:
            return False

    def get_frequency(self,obj):
        try:
            if obj.frequency=="W":
                return "Weekly"
            elif obj.frequency=="Y":
                return "Yearly"
            elif obj.frequency=="Q":
                return "Quaterly"
            elif obj.frequency=="H":
                return "Half Yearly"
            elif obj.frequency=="M":
                return "Monthly"
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_magazine_url(self,obj):
        try:
            if obj.id:
                magazineobj=MegazinePages.objects.filter(magazine=obj.id).last()
                if magazineobj:
                    serializer = MegazinePagesSerializer(magazineobj).data
                    return serializer
                return None
            return None
        except MagazineInfo.DoesNotExist:
            return None

    # def get_is_purchase(self,obj):
    #     try:
    #         purchaseobj=MagazinePurchaseInfo.objects.filter(magazineInfos=obj.id).last()
    #         print(purchaseobj.magazineInfos.id,'===')
    #         purchase_status=MagazineInfo.objects.filter(id=purchaseobj.magazineInfos.id).last()
    #         if purchase_status:
    #             purchase_condition=MagazineInfo.objects.filter(id=purchaseobj.magazineInfos.id).update(is_purchase=True)
    #             return purchase_condition
    #         else:
    #             purchase_condition=MagazineInfo.objects.filter(id=purchaseobj.magazineInfos.id).update(is_purchase=False)
    #             return purchase_condition
    #     except MagazineInfo.DoesNotExist:
    #         return None

            # print(purchaseobj.is_purchase,'===data')
            # return purchaseobj.is_purchase
        # if systemobj:
        # return None

    def get_system_category_name(self,obj):
        if obj.system_category:
            systemobj=SystemCategory.objects.filter(id=obj.system_category.id).last()
            return systemobj.category_name
        # if systemobj:
        return None

    def get_magazine_category_name(self,obj):
        if obj.system_category:
            magazineobj=MagazineCategory.objects.filter(id=obj.magazine_category.id).last()
            # if magazineobj:
            return magazineobj.category_name
        return None

    def get_authors(self, obj):
        auth = Author.objects.filter(id=obj.author_id).all()
        if auth:
            return AuthorSerializer(auth,many=True).data
        return None

    def get_pages(self, obj):
        pageobj = MagazineBookmark.objects.filter(magazines=obj.id).values()
        if pageobj:
            return MagazinebookmarkSerializer(pageobj,many=True).data
        return None

#Today magazine detail
class DetailSerializer(serializers.ModelSerializer):
    system_category_name = serializers.SerializerMethodField()
    magazine_category_name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    pages = serializers.SerializerMethodField()
    magazine_url = serializers.SerializerMethodField()
    frequency = serializers.SerializerMethodField()
    is_bookmark = serializers.SerializerMethodField()
    is_favorite = serializers.SerializerMethodField()
    class Meta:
        model = MagazineInfo
        # fields = '__all__'
        fields = ['id','magazine_url','is_aproved','is_active','is_purchase','cover_pic','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','is_bookmark','is_favorite','pages','users','create_on','updated_on']

    def get_is_bookmark(self,obj):
        try:
            bookmarkobj=MagazineBookmark.objects.filter(magazines=obj.id).last()
            if bookmarkobj:
                statusbookmark=MagazineInfo.objects.filter(id=obj.id).update(is_bookmark=True)
                if statusbookmark:
                    return True
            else:
                return False
        except MagazineBookmark.DoesNotExist:
            return False
            

        # bookmarkobj=MagazineBookmark.objects.filter(magazines=obj.id).last()
        # if obj.id and bookmarkobj:
        #     statusbookmark=MagazineInfo.objects.filter(id=obj.id).update(is_bookmark=True)
        #     if statusbookmark==1:
        #         return True
        #     return False 
        # else:
        #     return False

    def get_is_favorite(self,obj):
        favoritreobj=MagazineFavorite.objects.filter(magazines=obj.id).last()
        if obj.id and favoritreobj:
            statusfavoritre=MagazineInfo.objects.filter(id=obj.id).update(is_favorite=True)
            if statusfavoritre==1:
                return True
            return False 
        else:
            return False


    def get_frequency(self,obj):
        try:
            if obj.frequency=="W":
                return "Weekly"
            elif obj.frequency=="Y":
                return "Yearly"
            elif obj.frequency=="Q":
                return "Quaterly"
            elif obj.frequency=="H":
                return "Half Yearly"
            elif obj.frequency=="M":
                return "Monthly"
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_magazine_url(self,obj):
        try:
            if obj.id:
                magazineobj=MegazinePages.objects.filter(magazine=obj.id).last()
                if magazineobj:
                    serializer = MegazinePagesSerializer(magazineobj).data
                    return serializer
                return None
            return None
        except MagazineInfo.DoesNotExist:
            return None

    # def get_is_purchase(self,obj):
    #     try:
    #         purchaseobj=MagazinePurchaseInfo.objects.filter(magazineInfos=obj.id).last()
    #         print(purchaseobj.magazineInfos.id,'===')
    #         purchase_status=MagazineInfo.objects.filter(id=purchaseobj.magazineInfos.id).last()
    #         if purchase_status:
    #             purchase_condition=MagazineInfo.objects.filter(id=purchaseobj.magazineInfos.id).update(is_purchase=True)
    #             return purchase_condition
    #         else:
    #             purchase_condition=MagazineInfo.objects.filter(id=purchaseobj.magazineInfos.id).update(is_purchase=False)
    #             return purchase_condition
    #     except MagazineInfo.DoesNotExist:
    #         return None

            # print(purchaseobj.is_purchase,'===data')
            # return purchaseobj.is_purchase
        # if systemobj:
        # return None

    def get_system_category_name(self,obj):
        if obj.system_category:
            systemobj=SystemCategory.objects.filter(id=obj.system_category.id).last()
            return systemobj.category_name
        # if systemobj:
        return None

    def get_magazine_category_name(self,obj):
        if obj.system_category:
            magazineobj=MagazineCategory.objects.filter(id=obj.magazine_category.id).last()
            # if magazineobj:
            return magazineobj.category_name
        return None

    def get_authors(self, obj):
        auth = Author.objects.filter(id=obj.author_id).all()
        if auth:
            return AuthorSerializer(auth,many=True).data
        return None

    def get_pages(self, obj):
        pageobj = MagazineBookmark.objects.filter(magazines=obj.id).values()
        if pageobj:
            return MagazinebookmarkSerializer(pageobj,many=True).data
        return None

# magazine bookmark
class MagazineBookmarkSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazineBookmark
        # fields = '__all__'
        fields = ['id','page_number','magazines','users','create_on','updated_on']
    
#update magazine bookmark
class UMagazineBookmarkSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazineBookmark
        # fields = '__all__'
        fields = ['id','page_number','magazines','users']

# bookmark list serializer
class BookmarkListSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    class Meta:
        model = MagazineBookmark
        # fields = '__all__'
        fields = ['id','page_number','magazine_id','user_id','create_on','updated_on']

    def get_magazine_id(self,obj):
        if obj.magazines:
            return obj.magazines.id
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None
class LBookmarkListSerializer(serializers.ModelSerializer):
    # pages = serializers.SerializerMethodField()
    # magazine_id = serializers.SerializerMethodField()
    class Meta:
        model = MagazineBookmark
        # fields = '__all__'
        fields = ['page_number']


    # def get_pages(self, obj):
    #     userid=self.context.get('user_id')
    #     magazineid=self.context.get('magazine_id')
    #     pageobj = MagazineBookmark.objects.filter(magazines=magazineid,users=userid).values_list('page_number',flat=True).order_by('page_number')
    #     if pageobj:
    #         return pageobj
    #         # return MagazinebookmarkSerializer(pageobj,many=True).data
    #     return None

    # def get_user_id(self,obj):
    #     if obj.users:
    #         return obj.users.id
    #     return None

# magazine Favorite
class MagazineFavoriteSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazineFavorite
        # fields = '__all__'
        fields = ['id','page_number','magazines','users','create_on','updated_on']


################  # Magazine Liberary ####
class MagazineInfosSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazineInfo
        fields = '__all__'
class MagazineInfosCoverPicSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazineInfo
        fields = ['cover_pic',]
class MagazinePurchaseInfoSerializer(serializers.ModelSerializer):         # Magazine Liberary
    name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    ratting = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    total_order_price = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','name','magazine_id','price','total_order_price','rent_date','ratting','buy_date','is_buyed','is_rented','rent_expiry_date','authors','cover_pic','create_on','updated_on']


    def get_price(self,obj):
        if obj.buy_price:
            return round(obj.buy_price, 2)
            # return format(float(obj.buy_price), '.2f')
        return None

    def get_total_order_price(self,obj):
        try:
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id).last()
            if magazineobj:
                if magazineobj.offer_price:
                    return round(magazineobj.offer_price,2)
                    # return format(float(magazineobj.offer_price), '.2f')
                elif magazineobj.buy_price:
                    return round(magazineobj.buy_price, 2)
                    # return format(float(magazineobj.buy_price), '.2f')
                elif magazineobj.rent_price:
                    return round(magazineobj.rent_price, 2)
                    # return format(float(magazineobj.rent_price), '.2f')
                elif magazineobj.hard_copy_price:
                    return round(magazineobj.hard_copy_price, 2)
                    # return format(float(magazineobj.hard_copy_price), '.2f')
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None

    def get_ratting(self,obj):
        # try:
        #     magazineobj =magazineReviewInfo.objects.filter(magazines=obj.magazineInfos.id)
        #     sum,count=0,0
        #     if magazineobj:
        #         for row in magazineobj:
        #             if row.ratting == 'NULL' or row.ratting == None:
        #                 rattings = 1
        #             else:
        #                 rattings = row.ratting
        #             sum=float(sum + rattings if row and rattings else 0)
        #             count+=1
        #         result=float(sum/count)
        #         return round(result,1)
        #     else:
        #         return 1.0
        # except magazineReviewInfo.DoesNotExist:
        #     return 1.0
        try:
            magazineobj =magazineReviewInfo.objects.filter(magazines=obj.magazineInfos.id)
            sum,count=0,0
            if magazineobj:
                for row in magazineobj:
                    if row.ratting == 'NULL' or row.ratting == None:
                        rattings = 1.0
                    else:
                        rattings = row.ratting
                    sum=float(sum + rattings if row and rattings else 0)
                    count+=1
                result=float(sum/count)
                MagazineInfo.objects.filter(id=obj.id).update(ratting=float(sum/count))
                return round(result,1)
            else:
                MagazineInfo.objects.filter(id=obj.id).update(ratting=float(1))
                return 1.0
        except magazineReviewInfo.DoesNotExist:
            return 1.0

    def get_magazine_id(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.id
        return None

    def get_name(self,obj):
        try:
            if obj.magazineInfos:     
                magazineobj=MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
                if magazineobj and magazineobj.name:
                    return magazineobj.name
                return None 
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_cover_pic(self,obj):
        try:
            if obj.magazineInfos.cover_pic:
                # return {'cover_pic':get_custom_image_url(obj.magazineInfos.cover_pic.url)}
                return {'cover_pic':(obj.magazineInfos.cover_pic.url)}
            return None
        except MagazineInfo.DoesNotExist:
            return None
            
    # def get_cover_pic(self,obj):
    #     try:
    #         if obj.magazineInfos:
    #             magazineobj=MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
    #             serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
    #             return serializer.data
    #         return None
    #     except MagazineInfo.DoesNotExist:
    #         return None


    def get_authors(self,obj):
        try:
            maputhorobj = MagMapAuthor.objects.filter(magazine=obj.magazineInfos).exclude(author__isnull=True)
            if maputhorobj:
                authordata = PTestmagazineSerializer(maputhorobj,many=True)
                if authordata:
                    return authordata.data
                return []
            return []
        except MagMapAuthor.DoesNotExist:
            return None

class SearchMagazinePurchaseInfoSerializer(serializers.ModelSerializer):         # Magazine search
    name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    ratting = serializers.SerializerMethodField()
    # authors = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','name','magazine_id','rent_date','ratting','buy_date','is_buyed','is_rented','rent_expiry_date','authors','cover_pic','create_on','updated_on']


    def get_ratting(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.ratting
        return None

    def get_magazine_id(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.id
        return None

    def get_name(self,obj):
        try:
            if obj.magazineInfos:     
                magazineobj=MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
                if magazineobj and magazineobj.name:
                    return magazineobj.name
                return None 
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None
    def get_cover_pic(self,obj):
        try:
            if obj.magazineInfos:
                magazineobj=MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
                serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
                return serializer.data
            return None
        except MagazineInfo.DoesNotExist:
            return None


    def get_authors(self,obj):
        try:
            maputhorobj = MagMapAuthor.objects.filter(magazine=obj.magazineInfos)
            authordata = PTestmagazineSerializer(maputhorobj,many=True)
            if authordata:
                return authordata.data
            return None 
        except MagMapAuthor.DoesNotExist:
            return None


# purchase magazine
class PurchaseInfoSerializer(serializers.ModelSerializer):         # Magazine Liberary
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','purchases_type','magazineInfos','users','rent_date','buy_date','is_buyed','is_rented','rent_expiry_date','create_on','updated_on']



# Magazine Search count ####
class SearchMagazineinfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = SearchMagazineinfo
        fields = '__all__'
        # fields = ['id','rent_date','buy_date','is_buyed','is_rented','rent_expiry_date','create_on','updated_on']


class SearchMagazineDetailSerializer(serializers.ModelSerializer):
    system_category_name = serializers.SerializerMethodField()
    magazine_category_name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    pages = serializers.SerializerMethodField()
    frequency = serializers.SerializerMethodField()
    is_bookmark = serializers.SerializerMethodField()
    is_favorite = serializers.SerializerMethodField()
    class Meta:
        model = MagazineInfo
        # fields = '__all__'
        fields = ['id','magazine_url','is_aproved','is_active','is_purchase','cover_pic','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','is_bookmark','is_favorite','pages','users','create_on','updated_on']

    def get_is_bookmark(self,obj):
        bookmarkobj=MagazineBookmark.objects.filter(magazines=obj.id).last()
        if obj.id and bookmarkobj:
            statusbookmark=MagazineInfo.objects.filter(id=obj.id).update(is_bookmark=True)
            if statusbookmark==1:
                return True
            return False 
        else:
            return False

    def get_is_favorite(self,obj):
        favoritreobj=MagazineFavorite.objects.filter(magazines=obj.id).last()
        if obj.id and favoritreobj:
            statusfavoritre=MagazineInfo.objects.filter(id=obj.id).update(is_favorite=True)
            if statusfavoritre==1:
                return True
            return False 
        else:
            return False

    def get_frequency(self,obj):
        try:
            if obj.frequency=="W":
                return "Weekly"
            elif obj.frequency=="Y":
                return "Yearly"
            elif obj.frequency=="Q":
                return "Quaterly"
            elif obj.frequency=="H":
                return "Half Yearly"
            elif obj.frequency=="M":
                return "Monthly"
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_system_category_name(self,obj):
        if obj.system_category:
            systemobj=SystemCategory.objects.filter(id=obj.system_category.id).last()
            return systemobj.category_name
        return None


    def get_magazine_category_name(self,obj):
        if obj.magazine_category:
            magazineobj=MagazineCategory.objects.filter(id=obj.magazine_category.id).last()
            # if magazineobj:
            return magazineobj.category_name
        return None

    # def get_authors(self, obj):
    #     auth = Author.objects.filter(id=obj.author_id).all()
    #     if auth:
    #         return AuthorSerializer(auth,many=True).data
    #     return None

    def get_authors(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.id).values_list('id',flat=True)
        maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj)
        authordata = PTestmagazineSerializer(maputhorobj,many=True)
        if authordata:
            return authordata.data
        return None

    def get_pages(self, obj):
        pageobj = MagazineBookmark.objects.filter(magazines=obj.id).values()
        if pageobj:
            return MagazinebookmarkSerializer(pageobj,many=True).data
        return None

# serach purchase serializer
class PuchaseSearchMagazineDetailSerializer(serializers.ModelSerializer):
    authors = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    rent_date = serializers.SerializerMethodField()
    buy_date = serializers.SerializerMethodField()
    is_buyed = serializers.SerializerMethodField()
    is_rented = serializers.SerializerMethodField()
    rent_expiry_date = serializers.SerializerMethodField()
    is_buyed = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    ratting = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    class Meta:
        model = MagazineInfo
        # fields = '__all__'
        # fields = ['id','magazine_url','is_aproved','is_active','is_purchase','cover_pic','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','is_bookmark','is_favorite','pages','users','create_on','updated_on']
        fields = ['id','name','magazine_id','price','rent_date','ratting','buy_date','is_buyed','is_rented','rent_expiry_date','authors','cover_pic','create_on','updated_on']

    def get_price(self,obj):
        try:
            buyobj = MagazinePurchaseInfo.objects.filter(magazineInfos=obj.id).first()
            if buyobj:
                if buyobj.buy_price:
                    return buyobj.buy_price
                elif buyobj.rent_price:
                    return buyobj.rent_price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    # def get_ratting(self,obj):
    #     try:
    #         magazineobj =magazineReviewInfo.objects.filter(magazines=obj.id)
    #         list,sum,count=[],0,0
    #         if magazineobj:
    #             for row in magazineobj:
    #                 list.append(row.ratting)
    #                 digit = float((row.ratting)/5)*100
    #                 sum=float(sum+digit)
    #                 count+=1
    #             if count == 1:
    #                 return row.ratting
    #             result=int(sum/count)  
    #             if 0 < result <= 19:
    #                 return 1
    #             elif 20 <= result <= 39:
    #                 return 2
    #             elif 40 <= result <= 59:
    #                 return 3
    #             elif 60 <= result <= 79:
    #                 return 4
    #             elif 80 <= result <= 100:
    #                 return 5
    #             else:
    #                 return 1
    #         return 1
    #     except magazineReviewInfo.DoesNotExist:
    #         return 1

    def get_ratting(self,obj):
        try:
            magazineobj =magazineReviewInfo.objects.filter(magazines_id=obj.id).all()
            mgn_count = magazineobj.count()
            sum,count=0,0
            if magazineobj:
                for row in magazineobj:
                    if row.ratting == 'NULL' or row.ratting == None:
                        rattings = 1
                    else:
                        rattings = row.ratting
                    sum+=rattings
                    count+=1
                result=float(sum/count)
                return round(result,1)
            else:
                return 1.0
        except magazineReviewInfo.DoesNotExist:
            return 1.0

    def get_cover_pic(self,obj):
        try:
            if obj.cover_pic:
                # return {'cover_pic':get_custom_image_url(obj.cover_pic.url)}
                return {'cover_pic':(obj.cover_pic.url)}
            return None
        except MagazineInfo.DoesNotExist:
            return None

    # def get_cover_pic(self,obj):
    #     try:
    #         if obj.id:
    #             magazineobj=MagazineInfo.objects.filter(id=obj.id).last()
    #             serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
    #             return serializer.data
    #         return None
    #     except MagazineInfo.DoesNotExist:
    #         return None

    def get_magazine_id(self,obj):
        if obj.id:

            return obj.id 
        else:
            return None

    def get_rent_date(self,obj):
            return None

    def get_buy_date(self,obj):
            return None
    def get_is_buyed(self,obj):
            return True
    def get_is_rented(self,obj):
            return False
    def get_rent_expiry_date(self,obj):
            return None

    def get_authors(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.id).values_list('id',flat=True)
        maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj)
        authordata = PTestmagazineSerializer(maputhorobj,many=True)
        if authordata:
            return authordata.data
        return None

# search magazine author serializer
class MagMapAuthorSerializer(serializers.ModelSerializer):
    system_category_name = serializers.SerializerMethodField()
    magazine_category_name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    pages = serializers.SerializerMethodField()
    frequency = serializers.SerializerMethodField()
    is_bookmark = serializers.SerializerMethodField()
    is_favorite = serializers.SerializerMethodField()
    magazine_url = serializers.SerializerMethodField()
    is_aproved = serializers.SerializerMethodField()
    is_active = serializers.SerializerMethodField()
    is_purchase = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    is_bookmark = serializers.SerializerMethodField()
    name = serializers.SerializerMethodField()
    ratting = serializers.SerializerMethodField()
    rent_price = serializers.SerializerMethodField()
    buy_price = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    background_first_color = serializers.SerializerMethodField()
    background_second_color = serializers.SerializerMethodField()
    reads = serializers.SerializerMethodField()
    published_date = serializers.SerializerMethodField()
    users = serializers.SerializerMethodField()
    create_on = serializers.SerializerMethodField()
    updated_on = serializers.SerializerMethodField()
    id = serializers.SerializerMethodField()

    class Meta:
        model = MagMapAuthor
        # fields = '__all__'
        # fields = ['id','magazine_url','is_purchase','cover_pic','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','is_bookmark','is_favorite','pages','users','create_on','updated_on']
        fields = ['id','magazine_url','is_aproved','is_active','is_purchase','cover_pic','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','is_bookmark','is_favorite','pages','users','create_on','updated_on']
    
    def get_id(self,obj):
        if obj.magazine:
            magazineobj = MagazineInfo.objects.filter(id=obj.magazine_id).last()
            if magazineobj:
                return magazineobj.id
            return None
        return None

    def get_published_date(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.published_date
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_users(self,obj):
        try:
            # magazine = MagazineInfo.objects.filter(id=obj.magazine.id).last()
            # if magazine:
            #     return magazine.users
            return 0
        except MagazineInfo.DoesNotExist:
            return None

    def get_create_on(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.create_on
            return None
        except MagazineInfo.DoesNotExist:
            return None
    def get_updated_on(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.updated_on
            return None
        except MagazineInfo.DoesNotExist:
            return None
    def get_name(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.name
            return None
        except MagazineInfo.DoesNotExist:
            return None
    # def get_ratting(self,obj):
    #     try:
    #         if obj.magazine:
    #             return obj.magazine.ratting
    #         return None
    #     except MagazineInfo.DoesNotExist:
    #         return None

    def get_ratting(self,obj):
        # try:
        #     magazineobj =magazineReviewInfo.objects.filter(magazines_id=obj.magazine_id)
        #     mgn_count = magazineobj.count()
        #     sum,count=0,0
        #     if magazineobj:
        #         for row in magazineobj:
        #             if row.ratting == 'NULL' or row.ratting == None:
        #                 rattings = 1
        #             else:
        #                 rattings = row.ratting
        #             sum+=rattings
        #             count+=1
        #         result=float(sum/count)
        #         return round(result,1)
        #     else:
        #         return 1.0
        # except magazineReviewInfo.DoesNotExist:
        #     return 1.0
        try:
            magazineobj =magazineReviewInfo.objects.filter(magazines=obj.magazine_id)
            sum,count=0,0
            if magazineobj:
                for row in magazineobj:
                    if row.ratting == 'NULL' or row.ratting == None:
                        rattings = 1.0
                    else:
                        rattings = row.ratting
                    sum=float(sum + rattings if row and rattings else 0)
                    count+=1
                result=float(sum/count)
                MagazineInfo.objects.filter(id=obj.id).update(ratting=float(sum/count))
                return round(result,1)
            else:
                MagazineInfo.objects.filter(id=obj.id).update(ratting=float(1))
                return 1.0
        except magazineReviewInfo.DoesNotExist:
            return 1.0

    def get_rent_price(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.rent_price
            return None
        except MagazineInfo.DoesNotExist:
            return None
    def get_buy_price(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.buy_price
            return None
        except MagazineInfo.DoesNotExist:
            return None
    def get_description(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.description
            return None
        except MagazineInfo.DoesNotExist:
            return None
    def get_background_first_color(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.background_first_color
            return None
        except MagazineInfo.DoesNotExist:
            return None
    def get_background_second_color(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.background_second_color
            return None
        except MagazineInfo.DoesNotExist:
            return None
    def get_reads(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.reads
            return None
        except MagazineInfo.DoesNotExist:
            return None
    def get_is_aproved(self,obj):
        try:
            maonj = MagazineInfo.objects.filter(id=obj.magazine_id).last()
            if maonj.is_aproved:
                return True
            return False
        except MagMapAuthor.DoesNotExist:
            return False

    def get_is_active(self,obj):
        try:
            if obj.magazine.is_active:
                return True
            return False
        except MagMapAuthor.DoesNotExist:
            return False

    def get_is_purchase(self,obj):
        try:
            if obj.magazine.is_purchase:
                return True
            return False
        except MagMapAuthor.DoesNotExist:
            return False


    # def get_cover_pic(self,obj):
    #     try:
    #         if obj.magazine:
    #             magazineobj=MagazineInfo.objects.filter(id=obj.magazine.id).last()
    #             serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
    #             print(serializer.data,'======')
    #             return serializer.data
    #         return None
    #     except MagazineInfo.DoesNotExist:
    #         return None


    def get_cover_pic(self,obj):
        try:
            if obj.magazine:
                # return get_custom_image_url(obj.magazine.cover_pic.url)
                return (obj.magazine.cover_pic.url)
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_magazine_url(self,obj):
        try:
            if obj.id:
                magazineobj=MegazinePages.objects.filter(magazine=obj.magazine.id).last()
                if magazineobj:
                    serializer = MegazinePagesSerializer(magazineobj).data
                    return serializer
                return None
            return None
        except MagazineInfo.DoesNotExist:
            pass

    def get_is_bookmark(self,obj):
        bookmarkobj=MagazineBookmark.objects.filter(magazines=obj.magazine.id).last()
        if obj.id and bookmarkobj:
            statusbookmark=MagazineInfo.objects.filter(id=obj.magazine.id).update(is_bookmark=True)
            if statusbookmark==1:
                return True
            return False 
        else:
            return False

    def get_is_favorite(self,obj):
        favoritreobj=MagazineFavorite.objects.filter(magazines=obj.magazine.id).last()
        if obj.id and favoritreobj:
            statusfavoritre=MagazineInfo.objects.filter(id=obj.magazine.id).update(is_favorite=True)
            if statusfavoritre==1:
                return True
            return False 
        else:
            return False

    def get_frequency(self,obj):
        try:
            if obj.magazine.frequency=="W":
                return "Weekly"
            elif obj.magazine.frequency=="Y":
                return "Yearly"
            elif obj.magazine.frequency=="Q":
                return "Quaterly"
            elif obj.magazine.frequency=="H":
                return "Half Yearly"
            elif obj.magazine.frequency=="M":
                return "Monthly"
            return None
        except MagMapAuthor.DoesNotExist:
            return None

    def get_system_category_name(self,obj):
        print(obj.magazine.system_category.category_name,'=====')
        if obj.magazine:
            systemobj=SystemCategory.objects.filter(id=obj.magazine.system_category.id).last()
            return systemobj.category_name
        return None

    def get_magazine_category_name(self,obj):
        if obj.magazine:
            magazineobj=MagazineCategory.objects.filter(id=obj.magazine.magazine_category.id).last()
            # if magazineobj:
            return magazineobj.category_name
        return None

    # def get_authors(self, obj):
    #     auth = Author.objects.filter(id=obj.author.author_id).all()
    #     if auth:
    #         return AuthorSerializer(auth,many=True).data
    #     return None

    def get_authors(self,obj):
        
        magazineobj = MagazineInfo.objects.filter(id=obj.magazine.id,is_aproved=True,is_active=True).values_list('id',flat=True)
        if magazineobj:
            maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj).exclude(author__isnull=True)
            if maputhorobj:
                authordata = PTestmagazineSerializer(maputhorobj,many=True)
                if authordata:
                    return authordata.data
                return None
            return []
        return []

    def get_pages(self, obj):
        pageobj = MagazineBookmark.objects.filter(magazines=obj.magazine.id).values().order_by('page_number')
        if pageobj:
            return MagazinebookmarkSerializer(pageobj,many=True).data
        return []
    # def to_representation(self, instance):
    #     data=super().to_representation(instance)
    #     print(data,'5622654254875')
    #     return super().to_representation(instance)

class orderSerializer(serializers.ModelSerializer):
    name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
   
    # magazine_category_name = serializers.SerializerMethodField()
    # authors = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','purchases_type','name','cover_pic','rent_date','buy_date','is_buyed','is_rented','rent_expiry_date','authors','create_on','updated_on']

    def get_name(self,obj):
        try:
            if obj.magazineInfos:     
                magazineobj=MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
                if magazineobj and magazineobj.name:
                    return magazineobj.name
                return None 
        except MagazineInfo.DoesNotExist:
            return None

    def get_cover_pic(self,obj):
        try:
            if obj.magazineInfos:
                magazineobj=MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
                serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
                return serializer.data
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_authors(self, obj):
        if obj.magazineInfos and obj.magazineInfos.author_id:
            auth = Author.objects.filter(id=obj.magazineInfos.author_id).all()
            if auth:
                return AuthorSerializer(auth,many=True).data
            return None
        return None


#Today magazine libarery
class magazineliberarySerializer(serializers.ModelSerializer):
    system_category_name = serializers.SerializerMethodField()
    magazine_category_name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    pages = serializers.SerializerMethodField()
    magazine_url = serializers.SerializerMethodField()
    frequency = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    ratting = serializers.SerializerMethodField()
    # is_purchase = serializers.SerializerMethodField()
    class Meta:
        model = MagazineInfo
        # fields = '__all__'
        fields = ['id','magazine_url','is_aproved','is_active','is_purchase','cover_pic','magazine_id','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','is_bookmark','is_favorite','pages','create_on','updated_on']

    # def get_ratting(self,obj):
    #     try:
    #         magazineobj =magazineReviewInfo.objects.filter(magazines=obj.id)
    #         list,sum,count=[],0,0
    #         if magazineobj:
    #             for row in magazineobj:
    #                 list.append(row.ratting)
    #                 digit = float((row.ratting)/5)*100
    #                 sum=float(sum+digit)
    #                 count+=1
    #             if count == 1:
    #                 return row.ratting
    #             result=int(sum/count)  
    #             if 0 < result <= 19:
    #                 return 1
    #             elif 20 <= result <= 39:
    #                 return 2
    #             elif 40 <= result <= 59:
    #                 return 3
    #             elif 60 <= result <= 79:
    #                 return 4
    #             elif 80 <= result <= 100:
    #                 return 5
    #             else:
    #                 return 1
    #         return 1
    #     except magazineReviewInfo.DoesNotExist:
    #         return 1


    def get_ratting(self,obj):
        # try:
        #     magazineobj = magazineReviewInfo.objects.filter(magazines=obj.id)
        #     sum = 0
        #     count = 0
        #     if magazineobj:
        #         for row in magazineobj:
        #             if not row.ratting:
        #                 return float(1)
        #             sum=float(sum+row.ratting)
        #             count+=1
        #         result=float(sum/count)
        #         return round(result,1)
        #     return float(1)
        # except magazineReviewInfo.DoesNotExist:
        #     return float(1)

        try:
            magazineobj =magazineReviewInfo.objects.filter(magazines=obj.id)
            sum,count=0,0
            if magazineobj:
                for row in magazineobj:
                    if row.ratting == 'NULL' or row.ratting == None:
                        rattings = 1.0
                    else:
                        rattings = row.ratting
                    sum=float(sum + rattings if row and rattings else 0)
                    count+=1
                result=float(sum/count)
                MagazineInfo.objects.filter(id=obj.id).update(ratting=float(sum/count))
                return round(result,1)
            else:
                MagazineInfo.objects.filter(id=obj.id).update(ratting=float(1))
                return 1.0
        except magazineReviewInfo.DoesNotExist:
            return 1.0
            
    def get_magazine_id(self,obj):
        if obj.id:
            return obj.id
        return None

    def get_cover_pic(self,obj):
        try:
            if obj.cover_pic:
                # return {'cover_pic':get_custom_image_url(obj.cover_pic.url)}
                return {'cover_pic':(obj.cover_pic.url)}
            return None
        except MagazineInfo.DoesNotExist:
            return None

    # def get_cover_pic(self,obj):
    #     try:
    #         if obj:
    #             magazineobj=MagazineInfo.objects.filter(id=obj.id).last()
    #             serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
    #             return serializer.data
    #         return None
    #     except MagazineInfo.DoesNotExist:
    #         return None

    def get_frequency(self,obj):
        try:
            if obj.frequency=="W":
                return "Weekly"
            elif obj.frequency=="Y":
                return "Yearly"
            elif obj.frequency=="Q":
                return "Quaterly"
            elif obj.frequency=="H":
                return "Half Yearly"
            elif obj.frequency=="M":
                return "Monthly"
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_magazine_url(self,obj):
        try:
            if obj.id:
                magazineobj=MegazinePages.objects.filter(magazine=obj.id).last()
                if magazineobj:
                    serializer = MegazinePagesSerializer(magazineobj).data
                    return serializer
                return None
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_system_category_name(self,obj):
        if obj.system_category:
            systemobj=SystemCategory.objects.filter(id=obj.system_category.id).last()
            return systemobj.category_name
        # if systemobj:
        return None

    def get_magazine_category_name(self,obj):
        if obj.system_category:
            magazineobj=MagazineCategory.objects.filter(id=obj.magazine_category.id).last()
            # if magazineobj:
            return magazineobj.category_name
        return None

    # def get_authors(self, obj):
    #     auth = Author.objects.filter(id=obj.author_id).all()
    #     if auth:
    #         return AuthorSerializer(auth,many=True).data
    #     return None

    def get_authors(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.id).values_list('id',flat=True)
        maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj).exclude(author__isnull=True)
        if maputhorobj:
            authordata = PTestmagazineSerializer(maputhorobj,many=True)
            if authordata:
                return authordata.data
            return []
        return []

    def get_pages(self, obj):
        user_id = self.context.get('user_id')
        pageobj = MagazineBookmark.objects.filter(magazines=obj.id,users=user_id).values()
        if pageobj:
            return MagazinebookmarkSerializer(pageobj,many=True).data
        return []


# Test user,magazine magazine detail
class TestmagazineSerializer(serializers.ModelSerializer):
    magazine_type = serializers.CharField()
    system_category_name = serializers.SerializerMethodField()
    magazine_category_name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    pages = serializers.SerializerMethodField()
    magazine_url = serializers.SerializerMethodField()
    frequency = serializers.SerializerMethodField()
    pdf_count = serializers.SerializerMethodField()
    currency = serializers.SerializerMethodField()
    is_subscription = serializers.SerializerMethodField()
    cover_price = serializers.SerializerMethodField()
    sku = serializers.SerializerMethodField()
    issues = serializers.SerializerMethodField()
    years_available = serializers.SerializerMethodField()
    umc = serializers.CharField()
    comment = serializers.SerializerMethodField()
    is_purchase = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    name = serializers.SerializerMethodField()
    ratting = serializers.SerializerMethodField()
    rent_price = serializers.SerializerMethodField()
    buy_price = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    background_first_color = serializers.SerializerMethodField()
    background_second_color = serializers.SerializerMethodField()
    reads = serializers.SerializerMethodField()
    published_date = serializers.SerializerMethodField()
    is_bookmark = serializers.SerializerMethodField()
    is_favorite =serializers.SerializerMethodField()
    is_read_status = serializers.SerializerMethodField()
    is_rented = serializers.SerializerMethodField()
    free_pages = serializers.SerializerMethodField()
    create_on = serializers.SerializerMethodField()
    updated_on = serializers.SerializerMethodField()

    class Meta:
        model = MagMapAuthor
        # fields = '__all__'
        # fields = ['id','magazine_url','magazine_type','cover_price','sku','issues','years_available','umc','subrate','remit','comment','currency','pdf_count','is_purchase','cover_pic','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','is_bookmark','is_favorite','is_read_status','is_rented','is_subscription','free_pages','pages','create_on','updated_on']
        fields = ['id','magazine_url','magazine_type','cover_price','sku','issues','years_available','umc','comment','currency','pdf_count','is_purchase','cover_pic','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','is_bookmark','is_favorite','is_read_status','is_rented','is_subscription','free_pages','pages','create_on','updated_on']

    def get_is_subscription(self,obj):
        userid=self.context.get('user')
        userobj = MagazinePurchaseInfo.objects.filter(users_id=userid,is_subscription=True,subscription_user_status=True).last()
        if userobj:
            return True
        return False

    def get_currency(self,obj):
        return str('USD')

    def get_pdf_count(self,obj):
        try:
            magazineobj=MegazinePages.objects.filter(magazine=obj.magazine.id).last()
            if magazineobj:
                if magazineobj.page_number:
                    return magazineobj.page_number
                return None
            return None
        except MagMapAuthor.DoesNotExist:
            return None

    def get_magazine_type(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.magazine_type
            return None
        except MagMapAuthor.DoesNotExist:
            return None


    def get_cover_price(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.cover_price
            return None
        except MagMapAuthor.DoesNotExist:
            return None


    def get_sku(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.sku
            return None
        except MagMapAuthor.DoesNotExist:
            return None


    def get_issues(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.issues
            return None
        except MagMapAuthor.DoesNotExist:
            return None


    def get_years_available(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.years_available
            return None
        except MagMapAuthor.DoesNotExist:
            return None


    def get_umc(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.umc
            return None
        except MagMapAuthor.DoesNotExist:
            return None


    def get_comment(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.comment
            return None
        except MagMapAuthor.DoesNotExist:
            return None

    def get_is_purchase(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.is_purchase
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_cover_pic(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.cover_pic
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_name(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.name
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_ratting(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.ratting
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_rent_price(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.rent_price
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_buy_price(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.buy_price
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_description(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.description
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_background_first_color(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.background_first_color
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_background_second_color(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.background_second_color
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_reads(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.reads
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_published_date(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.published_date
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_is_bookmark(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.is_bookmark
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_is_favorite(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.is_favorite
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_is_read_status(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.is_read_status
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_is_rented(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.is_rented
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_free_pages(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.free_pages
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_create_on(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.create_on
            return None
        except MagMapAuthor.DoesNotExist:
            return None
    def get_updated_on(self,obj):
        try:
            if obj.magazine:
                return obj.magazine.updated_on
            return None
        except MagMapAuthor.DoesNotExist:
            return None

    def get_frequency(self,obj):
        try:
            if obj.magazine.frequency=="W":
                return "Weekly"
            elif obj.magazine.frequency=="Y":
                return "Yearly"
            elif obj.magazine.frequency=="Q":
                return "Quaterly"
            elif obj.magazine.frequency=="H":
                return "Half Yearly"
            elif obj.magazine.frequency=="M":
                return "Monthly"
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_magazine_url(self,obj):
        try:
            if obj.id:
                print(obj.magazine.id,'=======id====')
                magazineobj=MegazinePages.objects.filter(magazine=obj.magazine.id).last()
                if magazineobj:
                    serializer = MegazinePagesSerializer(magazineobj).data
                    return serializer
                return None
            return None
        except MagazineInfo.DoesNotExist:
            return None


    def get_system_category_name(self,obj):
        if obj.system_category:
            systemobj=SystemCategory.objects.filter(id=obj.magazine.system_category.id).last()
            return systemobj.category_name
        # if systemobj:
        return None

    def get_magazine_category_name(self,obj):
        if obj.system_category:
            magazineobj=MagazineCategory.objects.filter(id=obj.magazine.magazine_category.id).last()
            # if magazineobj:
            return magazineobj.category_name
        return None

    def get_authors(self, obj):
        auth = Author.objects.filter(id=obj.author.author_id).all()
        if auth:
            return AuthorSerializer(auth,many=True).data
        return None


    def get_pages(self, obj):
        userid=self.context.get('user')
        pageobj = MagazineBookmark.objects.filter(magazines=obj.magazine.id,users=userid).values_list('page_number',flat=True)
        if pageobj:
            return pageobj
            # return MagazinebookmarkSerializer(pageobj,many=True).data
        return None

# Test user,magazine magazine detail
class PTestmagazineSerializer(serializers.ModelSerializer):
    id = serializers.CharField()
    author_name = serializers.SerializerMethodField()

    class Meta:
        model = MagMapAuthor
        # fields = '__all__'
        fields = ['id','author_name']

    def get_id(self,obj):
        return obj.author
    
    def get_author_name(self,obj):
        if obj.author and obj.author.author_name:
            return obj.author.author_name
        return ""
        

# user,magazine magazine detail
class magazineSerializer(serializers.ModelSerializer):
    reads = serializers.SerializerMethodField()
    # magazine_id = serializers.CharField()
    system_category_name = serializers.SerializerMethodField()
    magazine_category_name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    pages = serializers.SerializerMethodField()
    magazine_url = serializers.SerializerMethodField()
    frequency = serializers.SerializerMethodField()
    pdf_count = serializers.SerializerMethodField()
    currency = serializers.SerializerMethodField()
    is_subscription = serializers.SerializerMethodField()
    is_rented = serializers.SerializerMethodField()
    rent_price = serializers.SerializerMethodField()
    buy_price = serializers.SerializerMethodField()
    rent_disabled = serializers.SerializerMethodField()
    buy_disabled = serializers.SerializerMethodField()
    hard_copy_price = serializers.SerializerMethodField()
    hard_copy_disabled = serializers.SerializerMethodField()
    ratting = serializers.SerializerMethodField()
    image_list = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    minimum_subscription = serializers.SerializerMethodField()
    is_bookmark = serializers.SerializerMethodField()
    is_favorite = serializers.SerializerMethodField()
    is_read_status = serializers.SerializerMethodField()
    is_purchase = serializers.SerializerMethodField()
    validity = serializers.SerializerMethodField()
    cover_price = serializers.SerializerMethodField()
    class Meta:
        model = MagazineInfo
        # fields = '__all__'
        # fields = ['id','magazine_url','image_list','rent_price','buy_price','rent_disabled','buy_disabled','hard_copy_price','hard_copy_disabled','is_aproved','is_active','magazine_type','cover_price','sku','issues','years_available','umc','subrate','remit','comment','currency','pdf_count','is_purchase','cover_pic','name','ratting','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','is_bookmark','is_favorite','is_read_status','is_rented','is_subscription','free_pages','pages','create_on','updated_on']
        fields = ['id','magazine_url','validity','image_list','rent_price','buy_price','rent_disabled','buy_disabled','hard_copy_price','hard_copy_disabled','is_aproved','is_active','magazine_type','cover_price','sku','issues','years_available','umc','subrate','remit','comment','currency','pdf_count','is_purchase','cover_pic','name','ratting','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','is_bookmark','is_favorite','is_read_status','is_rented','is_subscription','free_pages','pages','create_on','updated_on','minimum_subscription']


    def get_validity(self,obj):
        #####KAmal
        rent_validity =  UserRent.objects.filter(rent_status=True).last()
        if rent_validity:
            return int(rent_validity.validity) * 28
        else:
            return 28
        ###########
        # if obj.rent_date:
        #     return obj.rent_date
        # return None


    def get_minimum_subscription(self,obj):
        try:
            userid = self.context.get('user')
            userobj = User.objects.filter(id=userid).last()
            print(userobj.country.id,'======country id')
            print(userobj.country.name,'===== name country')
            ###############################
            # purchesesubscript = MagazinePurchaseInfo.objects.filter(users=userobj,is_subscription=True,subscription_user_status=True).last()
            # if purchesesubscript:
            ############################
            # subsobj = SubscriptionType.objects.filter(country=userobj.country.id,subscription_status=True).order_by('per_month_price').first()
            subsobj = SubscriptionType.objects.filter(country=userobj.country.id,subscription_status=True).order_by('per_month_price')
            print(subsobj)
            new_obj = 0
            for i in subsobj:
                if abs(i.per_month_price) == 0:
                    pass 
                else:
                    new_obj = i
                    break
                 
            if subsobj:
                # countryserializer = CountryListUserSerializer(subsobj, many=False,context={'user_id':userid })
                countryserializer = CountryListUserSerializer(new_obj, many=False,context={'user_id':userid })
                return countryserializer.data
            return None
            # else:
            #     return None
        except SubscriptionType.DoesNotExist:
            return None

    def get_is_bookmark(self, obj):
        
        # userid = self.context.get('user')
        # userbookobj = MagazineBookmark.objects.filter(magazines=obj.id,users=userid).last()
        # if userbookobj:
        #     return True
        # return False

        userid = self.context.get('user')
        try:
            userbookobj = MagazineBookmark.objects.filter(magazines=obj.id,users=userid,page_number=None).last()
            if userbookobj:
                if userbookobj.bookmark_status == True:
                    return True
                return False
            return False
        except:
            return False

        # ####rasmi
        # userid = self.context.get('user')
        # userbookobj1 = MagazineBookmark.objects.filter(magazines=obj.id,users=userid,page_number__isnull = True).last()
        # userbookobj = MagazineBookmark.objects.filter(magazines=obj.id,users=userid,page_number__isnull = False).last()
        # print(userbookobj1,'==userbookobj1',userbookobj)
        # if userbookobj1 and not userbookobj:
        #     return False
        # if userbookobj or userbookobj1:
        #     return True
        # else:
        #     return False

            
    def get_is_favorite(self, obj):
        userid = self.context.get('user')
        userfauvariteobj = MagazineFavorite.objects.filter(magazines=obj.id,users=userid).last()
        if userfauvariteobj:
            return True
        return False

    def get_is_purchase(self, obj):
        userid = self.context.get('user')
        userpurchaseobj = MagazinePurchaseInfo.objects.filter(magazineInfos=obj.id,users=userid,is_buyed=True,status="success").first()
        if userpurchaseobj:
            return True
        return False

    def get_is_read_status(self, obj):
        #########
        userid = self.context.get('user')
        readstatusobj = MagazineReadStatus.objects.filter(magazine=obj.id,user=userid).first()
        # if readstatusobj and obj.free_pages:
        if readstatusobj:
            return True
        # elif readstatusobj and not obj.free_pages:
        #     return False
        return False

    def get_cover_pic(self,obj):
        # return get_custom_image_url(obj.cover_pic.url)
        return (obj.cover_pic.url)

    def get_image_list(self,obj):
        try:
            magazineobj=MagazineImage.objects.filter(magazine=obj.id)
            if magazineobj:
                return MagazineImageSerializer(magazineobj, many=True).data
            else:
                return []
        except MagazineImage.DoesNotExist:
            return []

    # def get_ratting(self,obj):
    #     try:
    #         magazineobj =magazineReviewInfo.objects.filter(magazines=obj.id)
    #         list,sum,count=[],0,0
    #         if magazineobj:
    #             for row in magazineobj:
    #                 list.append(row.ratting)
    #                 digit = float((row.ratting)/5)*100
    #                 sum=float(sum+digit)
    #                 count+=1
    #             if count == 1:
    #                 return row.ratting
    #             result=int(sum/count)  
    #             if 0 < result <= 19:
    #                 return 1
    #             elif 20 <= result <= 39:
    #                 return 2
    #             elif 40 <= result <= 59:
    #                 return 3
    #             elif 60 <= result <= 79:
    #                 return 4
    #             elif 80 <= result <= 100:
    #                 return 5
    #             else:
    #                 return 1
    #         return 1
    #     except magazineReviewInfo.DoesNotExist:
    #         return 1

    def get_ratting(self,obj):
        try:
            magazineobj =magazineReviewInfo.objects.filter(magazines=obj.id)
            sum,count=0,0
            if magazineobj:
                for row in magazineobj:
                    if row.ratting == 'NULL' or row.ratting == None:
                        rattings = 1.0
                    else:
                        rattings = row.ratting
                    sum=float(sum + rattings if row and rattings else 0)
                    count+=1
                result=float(sum/count)
                MagazineInfo.objects.filter(id=obj.id).update(ratting=float(sum/count))
                return round(result,1)
            else:
                MagazineInfo.objects.filter(id=obj.id).update(ratting=float(1))
                return 1.0
        except magazineReviewInfo.DoesNotExist:
            return 1.0


    def get_rent_price(self,obj):
        userid = self.context.get('user')
        user = User.objects.filter(id=userid).last()
        rent_price = UserRent.objects.filter(rent_status=True,country=user.country.id).last()
        # rent_price = UserRent.objects.filter(rent_status=True).last()
        if rent_price:
            # return rent_price.price
            return format(float(rent_price.price), '.2f')
        else:
            return "6.99"

    def get_buy_price(self,obj):
        if obj.buy_price:
            # return round(obj.buy_price,2)
            return format(float(obj.buy_price), '.2f')
        return None

    def get_rent_disabled(self,obj):
        try:
            userid = self.context.get('user')
            magazineobj=MegazinePages.objects.filter(magazine=obj.id).last()
            print(userid,magazineobj)
            if magazineobj:
                userobj = MagazinePurchaseInfo.objects.filter(users_id=userid,is_subscription=True,subscription_user_status=True,status="success").last()
                if userobj:
                    return True
                buyobj = MagazinePurchaseInfo.objects.filter(users_id=userid,is_buyed=True,magazineInfos_id=obj.id ,status="success").last()
                if buyobj:
                    return True
                current_date = datetime.datetime.now() 
                rentedobj = MagazinePurchaseInfo.objects.filter(users_id=userid,is_rented=True, status="success").last()
                if rentedobj:
                    if rentedobj.rent_date:
                        if rentedobj.rent_date <= current_date <= rentedobj.rent_expiry_date and rentedobj.status == "success":
                            return True
                        else:
                            return False
                    return False
                return False
            else:
                return True
        except MagazinePurchaseInfo.DoesNotExist:
            # MagazinePurchaseInfo.objects.filter(magazineInfos=obj.id,users=userid,is_rented=True,status='success').update(subscription_user_status=False)
            return False

    def get_buy_disabled(self,obj):
        # try:
        userid = self.context.get('user')
        magazineobj=MegazinePages.objects.filter(magazine=obj.id).last()
        if magazineobj:
            if not obj.buy_price:
                return True
            userobj = MagazinePurchaseInfo.objects.filter(users_id=userid,is_subscription=True,subscription_user_status=True,status="success").last()
            if userobj:
                return True
            buyobj = MagazinePurchaseInfo.objects.filter(users_id=userid,is_buyed=True,magazineInfos_id=obj.id ,status="success").last()
            if buyobj:
                return True
            rentedobj = MagazinePurchaseInfo.objects.filter(magazineInfos=obj.id,users_id=userid,is_rented=True,status="success").last()
            if rentedobj:
                if rentedobj.rent_date:
                    current_date = datetime.datetime.now()
                    if rentedobj.rent_date <= current_date <= rentedobj.rent_expiry_date and (rentedobj.status).lower() == "success":
                        return True
                    return False
                return False
            else:
                return False
        else:
            return True
        # except MagazinePurchaseInfo.DoesNotExist:
            # MagazinePurchaseInfo.objects.filter(magazineInfos=obj.id,users=userid,is_rented=True,status='success').update(subscription_user_status=False)
            # return False
        
    def get_hard_copy_price(self,obj):
        if obj.buy_price:
            return format(float(obj.buy_price), '.2f')
        return None

    def get_cover_price(self,obj):
        if obj.buy_price:
            return format(float(obj.buy_price), '.2f')
        return None

    def get_hard_copy_disabled(self,obj):
        if obj.buy_price:
            return False
        return False

    def get_is_rented(self,obj):
        try:
            userid = self.context.get('user')
            magazine_id = self.context.get('magazine_id')
            current_date = datetime.datetime.now() 
            rentedobj = MagazinePurchaseInfo.objects.filter(users=userid,is_rented=True,status="success").last()
            if rentedobj:
                if rentedobj.rent_date:
                    if rentedobj.rent_date <= current_date <= rentedobj.rent_expiry_date and (rentedobj.status).lower() == "success":
                        MagazinePurchaseInfo.objects.filter(is_rented=True,status='success').update(subscription_user_status=True)
                        return True
                    else:
                        MagazinePurchaseInfo.objects.filter(is_rented=True,status='success').update(subscription_user_status=False)
                        return False
                return False
            
            MagazinePurchaseInfo.objects.filter(is_rented=True,status='success').update(subscription_user_status=False)
            return False
        except MagazinePurchaseInfo.DoesNotExist:
            # MagazinePurchaseInfo.objects.filter(magazineInfos=obj.id,users=userid,is_rented=True,status='success').update(subscription_user_status=False)
            return False

    def get_is_subscription(self,obj):
        userid=self.context.get('user')
        userobj = MagazinePurchaseInfo.objects.filter(users_id=userid,is_subscription=True,subscription_user_status=True).last()
        if userobj:
            return True
        return False

    def get_currency(self,obj):
        return str('USD')

    def get_pdf_count(self,obj):
        try:
            magazineobj=MegazinePages.objects.filter(magazine=obj.id).last()
            if magazineobj:
                if magazineobj.page_number:
                    return magazineobj.page_number
                return None
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_frequency(self,obj):
        try:
            if obj.frequency=="W":
                return "Weekly"
            elif obj.frequency=="Y":
                return "Yearly"
            elif obj.frequency=="Q":
                return "Quaterly"
            elif obj.frequency=="H":
                return "Half Yearly"
            elif obj.frequency=="M":
                return "Monthly"
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_magazine_url(self,obj):
        try:
            if obj.id:
                magazineobj=MegazinePages.objects.filter(magazine=obj.id).last()
                # print(magazineobj,'======data===')
                if magazineobj:
                    serializer = MegazinePagesSerializer(magazineobj).data
                    return serializer
                return None
            return None
        except MagazineInfo.DoesNotExist:
            return None


    def get_system_category_name(self,obj):
        if obj.system_category:
            systemobj=SystemCategory.objects.filter(id=obj.system_category.id).last()
            return systemobj.category_name
        # if systemobj:
        return None

    def get_magazine_category_name(self,obj):
        if obj.system_category:
            magazineobj=MagazineCategory.objects.filter(id=obj.magazine_category.id).last()
            # if magazineobj:
            return magazineobj.category_name
        return None


    def get_authors(self,obj):
        try:
            magazineobj = MagazineInfo.objects.filter(id=obj.id,is_aproved=True,is_active=True).last()#values_list('id',flat=True)
            if magazineobj:
                maputhorobj = MagMapAuthor.objects.filter(magazine_id=magazineobj.id).all().exclude(author__isnull=True)
                authordata = PTestmagazineSerializer(maputhorobj,many=True)
                if authordata:
                    return authordata.data
                return []
            return []
        except MagazineInfo.DoesNotExist:
            return []

    def get_pages(self, obj):
        userid=self.context.get('user')
        pageobj = MagazineBookmark.objects.filter(magazines=obj.id,users=userid).values_list('page_number',flat=True).order_by('page_number').exclude(page_number__isnull=True)
        if pageobj:
            #############
            l=[]
            for i in pageobj:
                l.append(i)
            # for c in 
            ###############
            print(set(l),'=======lllll')
            return set(l)            
            # return MagazinebookmarkSerializer(pageobj,many=True).data
        return []

        ###########
        # if pageobj:
        #     #############
        #     l=[]
        #     for i in pageobj:
        #         l.append(i)
        #     # uniqueList = []
        #     # duplicateList = []
    
        #     # for i in l:
        #     #     if i not in uniqueList:
        #     #         uniqueList.append(i)
        #     #     elif i not in duplicateList:
        #     #         duplicateList.append(i)
    
        #     # print(duplicateList)
        #     print(l,'======lllll')
        #     return l
        ###########

        # userid=self.context.get('user')
        # magazine_id=self.context.get('magazine_id')
        # magazineobj=MegazinePages.objects.filter(magazine=magazine_id).last()
        # if magazineobj:
        #     pageobj = MagazineBookmark.objects.filter(magazines=obj.id,users=userid).values_list('page_number',flat=True).order_by('page_number')
        #     if pageobj:
        #         return pageobj
        #         # return MagazinebookmarkSerializer(pageobj,many=True).data
        #     return None
        # return None

    def get_reads(self, obj):
        read_count = MagazineReadStatus.objects.filter(magazine = obj.id)
        return read_count.count()

# magazine magazine detail
class AlldataSerializer(serializers.ModelSerializer):
    system_category_name = serializers.SerializerMethodField()
    magazine_category_name = serializers.SerializerMethodField()
    authors = serializers.SerializerMethodField()
    pages = serializers.SerializerMethodField()
    magazine_url = serializers.SerializerMethodField()
    frequency = serializers.SerializerMethodField()
    # cover_pic = serializers.SerializerMethodField()
    is_favorite = serializers.SerializerMethodField()
    is_bookmark = serializers.SerializerMethodField()
    is_purchase = serializers.SerializerMethodField()
    is_read_status = serializers.SerializerMethodField()
    is_rented = serializers.SerializerMethodField()
    is_subscription = serializers.SerializerMethodField()
    pdf_count = serializers.SerializerMethodField()
    currency = serializers.SerializerMethodField()
    read_count = serializers.SerializerMethodField()
    rent_price = serializers.SerializerMethodField()
    buy_price = serializers.SerializerMethodField()
    rent_disabled = serializers.SerializerMethodField()
    buy_disabled = serializers.SerializerMethodField()
    hard_copy_price = serializers.SerializerMethodField()
    hard_copy_disabled = serializers.SerializerMethodField()
    ratting = serializers.SerializerMethodField()
    image_list = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    minimum_subscription = serializers.SerializerMethodField()
    validity = serializers.SerializerMethodField()
    cover_price = serializers.SerializerMethodField()
    class Meta:
        model = MagazineInfo
        # fields = '__all__'
        fields = ['id','magazine_url','validity','image_list','is_aproved','is_active','rent_price','buy_price','rent_disabled','buy_disabled','hard_copy_price','hard_copy_disabled','magazine_type','cover_price','sku','issues','years_available','umc','subrate','remit','comment','currency','pdf_count','cover_pic','name','ratting','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','pages','is_bookmark','is_favorite','is_purchase','is_read_status','is_rented','is_subscription','free_pages','create_on','updated_on','read_count','minimum_subscription']
        # fields = ['id','magazine_url','magazine_type','cover_price','sku','issues','years_available','umc','comment','currency','pdf_count','cover_pic','name','ratting','rent_price','buy_price','description','background_first_color','background_second_color','reads','authors','published_date','frequency','system_category_name','magazine_category_name','pages','is_bookmark','is_favorite','is_purchase','is_read_status','is_rented','is_subscription','is_hard_copy','free_pages','create_on','updated_on']


    def get_validity(self,obj):
        #####KAmal
        rent_validity =  UserRent.objects.filter(rent_status=True).last()
        if rent_validity:
            return int(rent_validity.validity) * 28
        else:
            return 30
        ###########
        # if obj.rent_date:
        #     return obj.rent_date
        # return None

    def get_minimum_subscription(self,obj):
        return None

    def get_cover_pic(self,obj):
        # return get_custom_image_url(obj.cover_pic.url)
        return (obj.cover_pic.url)

    def get_image_list(self,obj):
        try:
            magazineobj=MagazineImage.objects.filter(magazine=obj.id)
            if magazineobj:
                return MagazineImageSerializer(magazineobj, many=True).data
            else:
                return []
        except MagazineImage.DoesNotExist:
            return []
    # def get_ratting(self,obj):
    #     try:
    #         magazineobj =magazineReviewInfo.objects.filter(magazines=obj.id)
    #         list,sum,count=[],0,0
    #         if magazineobj:
    #             for row in magazineobj:
    #                 list.append(row.ratting)
    #                 digit = float((row.ratting)/5)*100
    #                 sum=float(sum+digit)
    #                 count+=1
    #             if count == 1:
    #                 return row.ratting
    #             result=int(sum/count)  
    #             if 0 < result <= 19:
    #                 return 1
    #             elif 20 <= result <= 39:
    #                 return 2
    #             elif 40 <= result <= 59:
    #                 return 3
    #             elif 60 <= result <= 79:
    #                 return 4
    #             elif 80 <= result <= 100:
    #                 return 5
    #             else:
    #                 return 1
    #         return 1
    #     except magazineReviewInfo.DoesNotExist:
    #         return 1

    def get_ratting(self,obj):
        try:
            magazineobj =magazineReviewInfo.objects.filter(magazines=obj.id)
            sum,count=0,0
            if magazineobj:
                for row in magazineobj:
                    if row.ratting == 'NULL' or row.ratting == None:
                        rattings = 1.0
                    else:
                        rattings = row.ratting
                    sum=float(sum + rattings if row and rattings else 0)
                    count+=1
                result=float(sum/count)
                MagazineInfo.objects.filter(id=obj.id).update(ratting=float(sum/count))
                return round(result,1)
            else:
                MagazineInfo.objects.filter(id=obj.id).update(ratting=float(1))
                return 1.0
        except magazineReviewInfo.DoesNotExist:
            return 1.0

    def get_rent_price(self,obj):
        ###################
        # if obj.rent_price:
        #     # return obj.rent_price
        #     return format(float(obj.rent_price), '.2f')
        # return None
        ##########
        # rent_price = UserRent.objects.filter(rent_status=True).last()
        # if rent_price:
        #     # return rent_price.price
        #     return format(float(rent_price.price), '.2f')
        # else:
        return "6.99"
        ##############
    def get_buy_price(self,obj):
        if obj.buy_price:
            return format(float(obj.buy_price), '.2f')
        return None

    def get_rent_disabled(self,obj):
        magazineobj=MegazinePages.objects.filter(magazine=obj.id).last()
        if obj.rent_price and magazineobj:
            return False
        return True

    def get_buy_disabled(self,obj):
        magazineobj=MegazinePages.objects.filter(magazine=obj.id).last()
        if obj.buy_price and magazineobj:
            return False
        return True
        
    def get_hard_copy_price(self,obj):
        if obj.buy_price:
            return format(float(obj.buy_price), '.2f')
        return None

    def get_cover_price(self,obj):
        if obj.buy_price:
            return format(float(obj.buy_price), '.2f')
        return None

    def get_hard_copy_disabled(self,obj):
        if obj.buy_price:
            return False
        return False

    def get_currency(self,obj):
        return str('USD')

    def get_pdf_count(self,obj):
        try:
            magazineobj=MegazinePages.objects.filter(magazine=obj.id).last()
            if magazineobj:
                if magazineobj.page_number:
                    return magazineobj.page_number
                return None
            return None
        except MagazineInfo.DoesNotExist:
            return None


    def get_is_bookmark(self,obj):
        return False

    def get_is_favorite(self,obj):
        return False

    def get_is_purchase(self,obj):
        return False

    def get_is_read_status(self,obj):
        return False

    def get_is_rented(self,obj):
        return False

    def get_is_subscription(self,obj):
        return False
    
    # def get_is_hard_copy(self,obj):
    #     return False

    def get_frequency(self,obj):
        try:
            if obj.frequency=="W":
                return "Weekly"
            elif obj.frequency=="Y":
                return "Yearly"
            elif obj.frequency=="Q":
                return "Quaterly"
            elif obj.frequency=="H":
                return "Half Yearly"
            elif obj.frequency=="M":
                return "Monthly"
            return None
        except MagazineInfo.DoesNotExist:
            return None

    def get_magazine_url(self,obj):
        try:
            if obj.id:
                magazineobj=MegazinePages.objects.filter(magazine=obj.id).last()
                if magazineobj:
                    serializer = MegazinePagesSerializer(magazineobj).data
                    return serializer
                return None
            return None
        except MagazineInfo.DoesNotExist:
            return None


    def get_system_category_name(self,obj):
        if obj.system_category:
            systemobj=SystemCategory.objects.filter(id=obj.system_category.id).last()
            return systemobj.category_name
        # if systemobj:
        return None

    def get_magazine_category_name(self,obj):
        if obj.system_category:
            magazineobj=MagazineCategory.objects.filter(id=obj.magazine_category.id).last()
            # if magazineobj:
            return magazineobj.category_name
        return None

    # def get_authors(self, obj):
    #     auth = Author.objects.filter(id=obj.author_id).all()
    #     if auth:
    #         return AuthorSerializer(auth,many=True).data
    #     return None


    def get_authors(self,obj):
        try:
            magazineobj = MagazineInfo.objects.filter(id=obj.id,is_aproved=True,is_active=True).last()#values_list('id',flat=True)
            if magazineobj:
                maputhorobj = MagMapAuthor.objects.filter(magazine_id=magazineobj.id).all().exclude(author__isnull=True)
                authordata = PTestmagazineSerializer(maputhorobj,many=True)
                if authordata:
                    return authordata.data
                return []
            return []
        except MagazineInfo.DoesNotExist:
            return []

    def get_pages(self, obj):
        return []
        # pageobj = MagazineBookmark.objects.filter(magazines=obj.id).values_list('page_number',flat=True)
        # if pageobj:
        #     return pageobj
        #     # return MagazinebookmarkSerializer(pageobj,many=True).data
        # return None
    def get_read_count(self, obj):
        read_count = MagazineReadStatus.objects.filter(magazine = obj.id)
        return read_count.count()


########################################## Magazine Purchase Info serializer
class CreatepurchageSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        # fields = ['id','purchases_type','offer_code','offer_max_amount','offer_discount_amount','offer_discount','magazineOffer','purchases_order_id','transaction_id','currency','subscription_price','buy_price','offer_price','is_offered','rent_price','rent_date','buy_date','is_buyed','is_rented','is_subscription','rent_expiry_date','magazineInfos','users','subscription','months','create_on','updated_on']
        fields = ['id','purchases_type','delivery_location','offer_code','offer_max_amount','offer_discount_amount','offer_discount','magazineOffer','purchases_order_id','transaction_id','currency','subscription_price','buy_price','offer_price','is_offered','rent_price','hard_copy_price','rent_date','buy_date','is_buyed','is_rented','is_subscription','is_hard_copy','rent_expiry_date','magazineInfos','users','subscription','months','create_on','updated_on','status']
class ShowPurchaseSerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    currency = serializers.SerializerMethodField()
    class Meta:

        model = MagazinePurchaseInfo
        # fields = '__all__'
        # fields = ['id','purchases_type','purchases_order_id','transaction_id','offer_code','offer_max_amount','offer_discount_amount','offer_discount','currency','date','price','offer_price','is_offered','is_buyed','is_rented','is_subscription','expiry_date','magazine_id','magazine_name','user_id','user_name','months','create_on','updated_on']
        fields = ['id','purchases_type','delivery_location','purchases_order_id','transaction_id','offer_code','offer_max_amount','offer_discount_amount','offer_discount','currency','date','price','offer_price','is_offered','is_buyed','is_rented','is_subscription','is_hard_copy','expiry_date','magazine_id','magazine_name','user_id','user_name','months','create_on','updated_on','status']
    def get_currency(self,obj):
        return str('USD')

    def get_magazine_id(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.id
        return None

    def get_magazine_name(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.name
        return None

    def get_expiry_date(self,obj):
        if obj:
            return obj.rent_expiry_date
        return None

    def get_user_id(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.id
        return None

    def get_user_name(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.first_name
        return None

    def get_price(self,obj):
        rentobj=obj.rent_price
        priceobj=obj.buy_price
        # Subscriptionobj = obj.subscription.price
        # subs = MagazinePurchaseInfo.objects.filter(subscription=obj.subscription.id).last()
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj
        elif obj.subscription_price:
            return obj.subscription_price
        elif obj.hard_copy_price:
            return obj.hard_copy_price
        return None

    def get_date(self,obj):
        rentobj=obj.rent_date
        priceobj=obj.buy_date
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj

class RentShowPurchaseSerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    currency = serializers.SerializerMethodField()
    class Meta:

        model = MagazinePurchaseInfo
        # fields = '__all__'
        # fields = ['id','purchases_type','purchases_order_id','transaction_id','offer_code','offer_max_amount','offer_discount_amount','offer_discount','currency','date','price','offer_price','is_offered','is_buyed','is_rented','is_subscription','expiry_date','magazine_id','magazine_name','user_id','user_name','months','create_on','updated_on']
        fields = ['id','purchases_type','delivery_location','purchases_order_id','transaction_id','offer_code','offer_max_amount','offer_discount_amount','offer_discount','currency','date','price','offer_price','is_offered','is_buyed','is_rented','is_subscription','is_hard_copy','expiry_date','magazine_id','magazine_name','user_id','user_name','months','create_on','updated_on','status']
    def get_currency(self,obj):
        return str('USD')

    def get_magazine_id(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.id
        return None

    def get_magazine_name(self,obj):
        # magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        # if magazineobj:
        #     return magazineobj.name
        return ""

    def get_expiry_date(self,obj):
        if obj:
            return obj.rent_expiry_date
        return None

    def get_user_id(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.id
        return None

    def get_user_name(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.first_name
        return None

    def get_price(self,obj):
        rentobj=obj.rent_price
        priceobj=obj.buy_price
        # Subscriptionobj = obj.subscription.price
        # subs = MagazinePurchaseInfo.objects.filter(subscription=obj.subscription.id).last()
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj
        elif obj.subscription_price:
            return obj.subscription_price
        elif obj.hard_copy_price:
            return obj.hard_copy_price
        return None

    def get_date(self,obj):
        rentobj=obj.rent_date
        priceobj=obj.buy_date
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj

########################################## Subscriptions Magazine Purchase Info serializer
class SCreatepurchageSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        # fields = ['id','purchases_type','offer_code','offer_max_amount','offer_discount_amount','offer_discount','magazineOffer','purchases_order_id','transaction_id','currency','subscription_price','buy_price','offer_price','is_offered','rent_price','rent_date','buy_date','is_buyed','is_rented','is_subscription','rent_expiry_date','magazineInfos','users','subscription','months','create_on','updated_on']
        fields = ['id','purchases_type','delivery_location','offer_code','offer_max_amount','offer_discount_amount','offer_discount','magazineOffer','purchases_order_id','transaction_id','currency','subscription_price','buy_price','offer_price','is_offered','rent_price','hard_copy_price','rent_date','buy_date','is_buyed','is_rented','is_subscription','is_hard_copy','rent_expiry_date','magazineInfos','users','subscription','months','create_on','updated_on']
class SShowPurchaseSerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    currency = serializers.SerializerMethodField()
    class Meta:

        model = MagazinePurchaseInfo
        # fields = '__all__'
        # fields = ['id','purchases_type','purchases_order_id','transaction_id','offer_code','offer_max_amount','offer_discount_amount','offer_discount','currency','date','price','offer_price','is_offered','is_buyed','is_rented','is_subscription','expiry_date','magazine_id','magazine_name','user_id','user_name','months','create_on','updated_on']
        fields = ['id','purchases_type','delivery_location','purchases_order_id','transaction_id','offer_code','offer_max_amount','offer_discount_amount','offer_discount','currency','date','price','offer_price','is_offered','is_buyed','is_rented','is_subscription','is_hard_copy','expiry_date','magazine_id','magazine_name','user_id','user_name','months','create_on','updated_on']
    def get_currency(self,obj):
        return str('USD')

    def get_magazine_id(self,obj):
        # magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        # if magazineobj:
        #     return magazineobj.id
        return None

    def get_magazine_name(self,obj):
        # magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        # if magazineobj:
        #     return magazineobj.name
        return None

    def get_expiry_date(self,obj):
        if obj:
            return obj.rent_expiry_date
        return None

    def get_user_id(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.id
        return None

    def get_user_name(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.first_name
        return None

    def get_price(self,obj):
        # rentobj=obj.rent_price
        # priceobj=obj.buy_price
        # Subscriptionobj = obj.subscription.price
        # subs = MagazinePurchaseInfo.objects.filter(subscription=obj.subscription.id).last()
        # if rentobj:
        #     return rentobj
        # elif priceobj:
        #     return priceobj
        # elif obj.subscription_price:
        #     return obj.subscription_price
        # elif obj.hard_copy_price:
        #     return obj.hard_copy_price
        return None

    def get_date(self,obj):
        rentobj=obj.rent_date
        priceobj=obj.buy_date
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj
        return None

class MagazinePurchaseInfodataSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','purchases_type','rent_date','buy_date','is_buyed','is_rented','rent_expiry_date','magazineInfos','users','create_on','updated_on']

# magazine Offer list serializer

class MagazineOfferListSerializer(serializers.ModelSerializer):
    # user_id = serializers.SerializerMethodField()
    # subscription_type = serializers.SerializerMethodField()
    # days = serializers.SerializerMethodField()
    # months = serializers.SerializerMethodField()
    # price = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    class Meta:
        model = MagazineOfferinfo
        # fields = '__all__'
        fields = ['id','code','discount','months','description','created_on','updated_on']

class MagazineOfferListSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    days = serializers.SerializerMethodField()
    months = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    class Meta:
        model = MagazineOfferinfo
        # fields = '__all__'
        fields = ['id','code','total_price','discount','months','subscription_type','days','price','start_date','end_date','user_id','description','created_on','updated_on']

    def get_total_price(self,obj):
        if obj:
            return obj.max_discount
        return None

    def get_price(self,obj):
        if obj.subscriptiontype:
            obj.subscriptiontype.price
            return obj.subscriptiontype.price
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_subscription_type(self,obj):
        if obj.subscriptiontype:
            return obj.subscriptiontype.subscription_type
        return None

    def get_days(self,obj):
        if obj.subscriptiontype:
            return obj.subscriptiontype.days
        return None

    def get_months(self,obj):
        try:
            if obj.subscriptiontype:
                if obj.subscriptiontype.subscription_type == "golden":
                    return str('3 months')
                elif obj.subscriptiontype.subscription_type == "silver":
                    return str('2 months')
                elif obj.subscriptiontype.subscription_type == "premium":
                    return str('1 months')
                return None   
            return None
        except Subscription.DoesNotExist as e:
            return None

class MutipleMAGOfferListSerializer(serializers.ModelSerializer):
    # code = serializers.SerializerMethodField()
    # # user_id = serializers.SerializerMethodField()
    # offer_id = serializers.SerializerMethodField()
    # discount = serializers.SerializerMethodField()
    max_discount = serializers.SerializerMethodField()
    # start_date = serializers.SerializerMethodField()
    # end_date = serializers.SerializerMethodField()
    offer_status = serializers.SerializerMethodField()
    # description = serializers.SerializerMethodField()
    # created_on = serializers.SerializerMethodField()
    # updated_on = serializers.SerializerMethodField()
    class Meta:
        model = MagazineOfferinfo
        # fields = '__all__'
        # fields = ['id','users','code','price','discount','max_discount','start_date','end_date','offer_status','description','created_on','updated_on']
        fields = ['id','code','discount','max_discount','start_date','end_date','offer_status','description','created_on','updated_on']

    def get_offer_status(self,obj):
        current_date = datetime.datetime.now().date()
        duration = obj.start_date <= current_date <= obj.end_date
        if duration:
            return True
        return False
    # def get_offer_id(self,obj):
    #     if obj.magazineoffer:
    #         return obj.magazineoffer.id
    #     return None
    # def get_code(self,obj):
    #     if obj.magazineoffer:
    #         return obj.magazineoffer.code
    #     return None
    # def get_discount(self,obj):
    #     if obj.magazineoffer:
    #         return obj.magazineoffer.discount
    #     return None
    def get_max_discount(self,obj):
        if obj.max_discount:
            return obj.max_discount
        return ""
    # def get_start_date(self,obj):
    #     if obj.magazineoffer:
    #         return obj.magazineoffer.start_date
    #     return None
    # def get_end_date(self,obj):
    #     if obj.magazineoffer:
    #         return obj.magazineoffer.end_date
    #     return None
    # def get_offer_status(self,obj):
    #     if obj.magazineoffer:
    #         return obj.magazineoffer.offer_status
    #     return None
    # def get_description(self,obj):
    #     if obj.description:
    #         return obj.description
    #     return ""
    # def get_created_on(self,obj):
    #     if obj.magazineoffer:
    #         return obj.magazineoffer.created_on
    #     return None
    # def get_updated_on(self,obj):
    #     if obj.magazineoffer:
    #         return obj.magazineoffer.updated_on
    #     return None
class MAGOfferListSerializer(serializers.ModelSerializer):
    price = serializers.SerializerMethodField()
    # subscription_type = serializers.SerializerMethodField()
    # days = serializers.SerializerMethodField()
    # months = serializers.SerializerMethodField()
    # price = serializers.SerializerMethodField()
    # total_price = serializers.SerializerMethodField()
    class Meta:
        model = MagazineOfferinfo
        # fields = '__all__'
        fields = ['id','users','code','price','discount','max_discount','start_date','end_date','offer_status','description','created_on','updated_on']

    def get_price(self,obj):
        # purchaseobj = MagazinePurchaseInfo.
        if obj.subscriptiontype:
            return obj.subscriptiontype.id
        return None

# magazine Subscribtion Info serializer

class SubscriptionSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    days = serializers.SerializerMethodField()
    months = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    subscription_status = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    
    class Meta:
        model = Subscription
        # fields = '__all__'
        fields = ['id','user_id','user_name','subscription_type','total_price','days','name','price','save_percentage','months','per_month_price','start_date','end_date','subscription_status','description','created_on','updated_on']


    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_subscription_status(self,obj):
        if obj:
            if obj.subscription_status:
                return False
            False
        return False

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_total_price(self,obj):
        if obj.subscription:
            obj.subscription.price
            return obj.subscription.price
        return None

    def get_subscription_type(self,obj):
        if obj.subscription:
            return obj.subscription.subscription_type
        return None

    def get_days(self,obj):
        if obj.subscription:
            return obj.subscription.days
        return None

    def get_months(self,obj):
        try:
            if obj.subscription:
                if obj.subscription.subscription_type == "golden":
                    return str('3 months')
                elif obj.subscription.subscription_type == "silver":
                    return str('2 months')
                elif obj.subscription.subscription_type == "premium":
                    return str('1 months')
                return None   
            return None
        except Subscription.DoesNotExist as e:
            return None


# T country subscription list serializer
class ListcountrySerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    subscription_status = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    # days = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    # type = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    discount = serializers.SerializerMethodField()
    discount_price = serializers.SerializerMethodField()
    discount_to_pay = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo  
        # fields = '__all__'
        fields = ['id','magazine_id','months','magazine_name','user_id','user_name','subscription_type','subscription_status','description','total_price','discount','discount_price','discount_to_pay','price','date','expiry_date','create_on','updated_on']

    # def get_months(self,obj):
    #     try:
    #         if obj.subscription:
    #             if obj.subscription.subscription_type == "golden":
    #                 return str('3 months')
    #             elif obj.subscription.subscription_type == "silver":
    #                 return str('2 months')
    #             elif obj.subscription.subscription_type == "premium":
    #                 return str('1 months')
    #             return None   
    #         return None
    #     except Subscription.DoesNotExist as e:
    #         return None


    def get_price(self,obj):
        buyobj=obj.magazineInfos.buy_price
        rentobj=obj.magazineInfos.rent_price
        if buyobj:
            return buyobj
        elif rentobj:
            return rentobj
        return None


    def get_expiry_date(self,obj):
        expireobj=obj.rent_expiry_date
        if expireobj:
            return expireobj
        return None

    def get_date(self,obj):
        rentobj=obj.rent_date
        priceobj=obj.buy_date
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj

    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_magazine_name(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.name
        return None

    def get_magazine_id(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.id
        return None

    def get_subscription_type(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last()  
            if subobj:
                return subobj.subscription_type
            return None

        except MagazinePurchaseInfo.DoesNotExist:
            return None
        
    def get_subscription_status(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:

                return False
            return False
        except MagazinePurchaseInfo.DoesNotExist:
            return False

    def get_description(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                return subobj.description
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_total_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                return subobj.price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                return subobj.discount
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                price=round(percentage, 2)
                return price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_to_pay(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                discountprice=float(subprice)-float(percentage)
                price=round(discountprice, 2)
                return price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None


# subscription list serializer
class ListSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    subscription_status = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    # days = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    # type = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    discount = serializers.SerializerMethodField()
    discount_price = serializers.SerializerMethodField()
    discount_to_pay = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo  
        # fields = '__all__'
        fields = ['id','magazine_id','months','magazine_name','user_id','user_name','subscription_type','subscription_status','description','total_price','discount','discount_price','discount_to_pay','price','date','expiry_date','create_on','updated_on']

    # def get_months(self,obj):
    #     try:
    #         if obj.subscription:
    #             if obj.subscription.subscription_type == "golden":
    #                 return str('3 months')
    #             elif obj.subscription.subscription_type == "silver":
    #                 return str('2 months')
    #             elif obj.subscription.subscription_type == "premium":
    #                 return str('1 months')
    #             return None   
    #         return None
    #     except Subscription.DoesNotExist as e:
    #         return None


    def get_price(self,obj):
        buyobj=obj.magazineInfos.buy_price
        rentobj=obj.magazineInfos.rent_price
        if buyobj:
            return buyobj
        elif rentobj:
            return rentobj
        return None


    def get_expiry_date(self,obj):
        expireobj=obj.rent_expiry_date
        if expireobj:
            return expireobj
        return None

    def get_date(self,obj):
        rentobj=obj.rent_date
        priceobj=obj.buy_date
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj

    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_magazine_name(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.name
        return None

    def get_magazine_id(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.id
        return None

    def get_subscription_type(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last()  
            if subobj:
                return subobj.subscription_type
            return None

        except MagazinePurchaseInfo.DoesNotExist:
            return None
        
    def get_subscription_status(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:

                return True
            return False
        except MagazinePurchaseInfo.DoesNotExist:
            return False

    def get_description(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                return subobj.description
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_total_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                return subobj.price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                return subobj.discount
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                price=round(percentage, 2)
                return price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_to_pay(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                discountprice=float(subprice)-float(percentage)
                price=round(discountprice, 2)
                return price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None


#  TEST country serializer TTTPPP
class CountryListUserSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    # subscription_type = serializers.SerializerMethodField()
    subscription_status = serializers.SerializerMethodField()
    # description = serializers.SerializerMethodField()
    # # # days = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    # # # type = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    discount = serializers.SerializerMethodField()
    discount_price = serializers.SerializerMethodField()
    discount_to_pay = serializers.SerializerMethodField()
    months =  serializers.SerializerMethodField()
    class Meta:
        model = SubscriptionType  
        # fields = '__all__'
        # fields = ['id','months','user_id','user_name','subscription_type','subscription_status','description','total_price','discount','discount_price','discount_to_pay','created_on']
        fields = ['id','magazine_id','months','magazine_name','user_id','user_name','subscription_type','subscription_status','description','total_price','discount','discount_price','discount_to_pay','price','date','expiry_date','create_on','updated_on']

    def get_months(self,obj):
        # userid = self.context.get('user_id')
        # user = User.objects.filter(id=userid).last()
        # subcription_data = SubscriptionType.objects.filter(country=user.country.id).last()
        if obj.days:
            return str(obj.days)+str(' ')+str('months')
            # return f'{{obj.days}} {{months}}'
        else:
            return ""
    # def get_price(self,obj):
    #     if obj.price:
    #         total=float(obj.price)
    #         price=float(total/float(obj.days))
    #         return price
    #     else:
    #         return None

    def get_price(self,obj):
        if obj.per_month_price:
            # return obj.per_month_price
            return format(float(obj.per_month_price), '.2f')
        else:
            return None

    def get_user_name(self,obj):
        if obj:
            return ""
        return None

    def get_user_id(self,obj):
        if obj:
            return 0
        return None

    def get_magazine_id(self,obj):
        if obj:
            return 0
        return None
        
    def get_magazine_name(self,obj):
        if obj:
            return ""
        return None

    def get_subscription_status(self,obj):
        userid = self.context.get('user_id')
        today = datetime.datetime.now()
        # purchaseonj = MagazinePurchaseInfo.objects.filter(subscription=obj.id,is_subscription=True,subscription_user_status=True, rent_expiry_date__lte = today, users=userid).first()
        purchaseonj = MagazinePurchaseInfo.objects.filter(subscription_id=obj.id,is_subscription=True,subscription_user_status=True, users_id=userid).last()
        if purchaseonj:
            return True
        else:
            return False

    def get_date(self,obj):
        if obj:
            current_date = datetime.datetime.now()
            return current_date
        return None

    def get_expiry_date(self,obj):
        if obj:
            current_date = datetime.datetime.now()
            month=int(obj.days)*30
            exp = current_date + datetime.timedelta(days=month)
            return exp
        return None

    def get_total_price(self,obj):
        if obj:
            # return obj.price
            return format(float(obj.price), '.2f')
        return None 

    def get_discount(self,obj):
        if obj:
            return obj.discount
        return None

    def get_discount_price(self,obj):
        if obj.price:
            if obj.discount:
                print(obj.discount,'===1')
                print((obj.price),'===1')
                # print(((obj.discount)/100),'======')
                percentage=float(obj.price)*(float(obj.discount)/100)
                # price=percentage
                # return round(percentage,2)
                return format(float(percentage), '.2f')
            # return obj.price
            # return format(float(obj.price), '.2f')
            return ""
        return None

    def get_discount_to_pay(self,obj):
        if obj.price:
            if obj.discount:
                print(obj.discount)
                # print(float(obj.price))
                # print(float((obj.discount)/100))
                percentage=float(obj.price)*(float(obj.discount)/100)
                discountprice=float(obj.price)-float(percentage)
                # price=round(discountprice, 2)
                # return price
                return format(float(discountprice), '.2f')
            else:
                # obj.price
                return format(float(obj.price), '.2f')
        return None

# TEST main serializer
class TestListUserSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    subscription_status = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    # days = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    # type = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    discount = serializers.SerializerMethodField()
    discount_price = serializers.SerializerMethodField()
    discount_to_pay = serializers.SerializerMethodField()
    months =  serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo  
        # fields = '__all__'
        fields = ['id','magazine_id','months','magazine_name','user_id','user_name','subscription_type','subscription_status','description','total_price','discount','discount_price','discount_to_pay','price','date','expiry_date','create_on','updated_on']

    def get_months(self,obj):
        if obj.months:
            return obj.months
        else:
            return None
        # try:
        #     if obj.subscription:
        #         if obj.subscription.subscription_type == "golden":
        #             return str('3 months')
        #         elif obj.subscription.subscription_type == "silver":
        #             return str('2 months')
        #         elif obj.subscription.subscription_type == "premium":
        #             return str('1 months')
        #         return None   
        #     return None
        # except Subscription.DoesNotExist as e:
        #     return None


    def get_price(self,obj):
        buyobj=obj.magazineInfos.buy_price
        rentobj=obj.magazineInfos.rent_price
        if buyobj:
            return buyobj
        elif rentobj:
            return rentobj
        return None


    def get_expiry_date(self,obj):
        expireobj=obj.rent_expiry_date
        if expireobj:
            return expireobj
        return None

    def get_date(self,obj):
        rentobj=obj.rent_date
        priceobj=obj.buy_date
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj

    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_magazine_name(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.name
        return None

    def get_magazine_id(self,obj):

        if obj.magazineInfos:
            return obj.magazineInfos.id
        return None

    def get_subscription_type(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last()  
            if subobj:
                return subobj.subscription_type
            return None

        except MagazinePurchaseInfo.DoesNotExist:
            return None
        
    def get_subscription_status(self,obj):

        purchase = MagazinePurchaseInfo.objects.filter(users=obj.users.id,is_subscription=True,rent_date__lte=obj.rent_date)
        if purchase:
            return True
        return False

        # try:
        #     subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
        #     if subobj:
        #         return subobj.subscription_status
        #     return False
        # except MagazinePurchaseInfo.DoesNotExist:
        #     return False

    def get_description(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                return subobj.description
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_total_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                return subobj.price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                return subobj.discount
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                discountprice=float(subprice)-float(percentage)
                price=round(percentage, 2)
                return price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_to_pay(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                discountprice=float(subprice)-float(percentage)
                price=round(discountprice, 2)
                return price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None


# server main serializer
class ListUserSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    subscription_status = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    # days = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    # type = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    discount = serializers.SerializerMethodField()
    discount_price = serializers.SerializerMethodField()
    discount_to_pay = serializers.SerializerMethodField()
    months =  serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','magazine_id','months','magazine_name','user_id','user_name','subscription_type','subscription_status','description','total_price','discount','discount_price','discount_to_pay','price','date','expiry_date','create_on','updated_on']

    def get_months(self,obj):
        if obj.months:
            return obj.months
        else:
            return None
        # try:
        #     if obj.subscription:
        #         if obj.subscription.subscription_type == "golden":
        #             return str('3 months')
        #         elif obj.subscription.subscription_type == "silver":
        #             return str('2 months')
        #         elif obj.subscription.subscription_type == "premium":
        #             return str('1 months')
        #         return None   
        #     return None
        # except Subscription.DoesNotExist as e:
        #     return None


    # def get_price(self,obj):
    #     buyobj=obj.magazineInfos.buy_price
    #     rentobj=obj.magazineInfos.rent_price
    #     subobj = obj.subscription.price
    #     if buyobj:
    #         return buyobj
    #     elif rentobj:
    #         return rentobj
    #     # elif subobj:
    #     #     return subobj
    #     return None


    def get_price(self,obj):
        print(obj.subscription_id)
        sunsobj = SubscriptionType.objects.filter(id=obj.subscription_id).last()
        if sunsobj:
            # return round(sunsobj.per_month_price,2)
            return format(float(sunsobj.per_month_price),'.2f')
        return None


    def get_expiry_date(self,obj):
        expireobj=obj.rent_expiry_date
        if expireobj:
            return expireobj
        return None

    def get_date(self,obj):
        rentobj=obj.rent_date
        priceobj=obj.buy_date
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj

    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_magazine_name(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.name
        return None

    def get_magazine_id(self,obj):

        if obj.magazineInfos:
            return obj.magazineInfos.id
        return None

    def get_subscription_type(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last()  
            if subobj:
                return subobj.subscription_type
            return None

        except MagazinePurchaseInfo.DoesNotExist:
            return None
        
    def get_subscription_status(self,obj):
        try:
            current_date = datetime.datetime.now() 
            purchase = MagazinePurchaseInfo.objects.filter(users=obj.users.id,is_subscription=True,subscription_user_status=True).last()
            duration = purchase.rent_date <=current_date <= purchase.rent_expiry_date
            if purchase and duration:
                return True
            purchase = MagazinePurchaseInfo.objects.filter(users=obj.users.id,is_subscription=True).update(subscription_user_status=False)
            return False
        except MagazinePurchaseInfo.DoesNotExist:
            return False

    def get_description(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last()
            if subobj:
                return subobj.description
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_total_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                # return subobj.price
                return format(float(subobj.price),'.2f')
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                return subobj.discount
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                print(subobj.discount,'========11111111')
                subprice=subobj.price
                if not subobj.discount:
                    return format(float(subprice),'.2f')
                percentage=float(float(subprice)*float(subobj.discount)/100)
                discountprice=float(subprice)-float(percentage)
                # price=round(percentage, 2)
                # return price
                return format(float(percentage),'.2f')
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_to_pay(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                subprice=subobj.price
                if not subobj.discount:
                    return format(float(subprice),'.2f')
                percentage=float(float(subprice)*float(subobj.discount)/100)
                discountprice=float(subprice)-float(percentage)
                # price=round(discountprice, 2)
                # return price
                return format(float(discountprice),'.2f')
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

# subscription main serializer
class SListUserSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    subscription_status = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    # days = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    # type = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    discount = serializers.SerializerMethodField()
    discount_price = serializers.SerializerMethodField()
    discount_to_pay = serializers.SerializerMethodField()
    months =  serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','magazine_id','months','magazine_name','user_id','user_name','subscription_type','subscription_status','description','total_price','discount','discount_price','discount_to_pay','price','date','expiry_date','create_on','updated_on']

    def get_months(self,obj):
        if obj.months:
            return obj.months
        else:
            return None
        # try:
        #     if obj.subscription:
        #         if obj.subscription.subscription_type == "golden":
        #             return str('3 months')
        #         elif obj.subscription.subscription_type == "silver":
        #             return str('2 months')
        #         elif obj.subscription.subscription_type == "premium":
        #             return str('1 months')
        #         return None   
        #     return None
        # except Subscription.DoesNotExist as e:
        #     return None


    # def get_price(self,obj):
    #     buyobj=obj.magazineInfos.buy_price
    #     rentobj=obj.magazineInfos.rent_price
    #     subobj = obj.subscription.price
    #     if buyobj:
    #         return buyobj
    #     elif rentobj:
    #         return rentobj
    #     # elif subobj:
    #     #     return subobj
    #     return None


    def get_price(self,obj):
        sunsobj = SubscriptionType.objects.filter(id=obj.subscription.id).last()
        if sunsobj:
            print('====round(sunsobj.per_month_price,2)====',round(sunsobj.per_month_price,2))
            # return round(sunsobj.per_month_price,2)
            return format(float(sunsobj.per_month_price), '.2f')
        return None


    def get_expiry_date(self,obj):
        expireobj=obj.rent_expiry_date
        if expireobj:
            return expireobj
        return None

    def get_date(self,obj):
        rentobj=obj.rent_date
        priceobj=obj.buy_date
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj

    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_magazine_name(self,obj):
        # if obj.magazineInfos:
        #     return obj.magazineInfos.name
        return None

    def get_magazine_id(self,obj):

        # if obj.magazineInfos:
        #     return obj.magazineInfos.id
        return None

    def get_subscription_type(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last()  
            if subobj:
                return subobj.subscription_type
            return None

        except MagazinePurchaseInfo.DoesNotExist:
            return None
    
    def get_subscription_status(self,obj):
        try:
            current_date = datetime.datetime.now() 
            # purchase = MagazinePurchaseInfo.objects.filter(users=obj.users.id,is_subscription=True,subscription_user_status=True).last()
            purchase = MagazinePurchaseInfo.objects.filter(users=obj.users.id,is_subscription=True,subscription_user_status=True,status='success').last() #success
            duration = purchase.rent_date <=current_date <= purchase.rent_expiry_date
            if purchase and duration:
                return True
            # purchase = MagazinePurchaseInfo.objects.filter(users=obj.users.id,is_subscription=True).update(subscription_user_status=False)
            purchase = MagazinePurchaseInfo.objects.filter(users=obj.users.id,is_subscription=True,status='success').update(subscription_user_status=False) #success
            return False
        except MagazinePurchaseInfo.DoesNotExist:
            return False

    def get_description(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last()
            if subobj:
                return subobj.description
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_total_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                # return subobj.price
                return format(float(subobj.price), '.2f')
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj:
                return subobj.discount
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj and subobj.discount:
                subprice=subobj.price
                percentage=float(float(subprice)*(float(subobj.discount)/100))
                discountprice=float(subprice)-float(percentage)
                # price=round(percentage, 2)
                # return price
                return format(float(percentage), '.2f')
            # return subobj.price
            return ""
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_to_pay(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(id=obj.subscription_id).last() 
            if subobj and subobj.discount:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                discountprice=float(subprice)-float(percentage)
                # price=round(discountprice, 2)
                # return price
                return format(float(discountprice), '.2f')
            return subobj.price
        except MagazinePurchaseInfo.DoesNotExist:
            return None


class UserPurchaseListSerializer(serializers.ModelSerializer):
    user_subscription = serializers.SerializerMethodField()
    subscription_list = serializers.SerializerMethodField()
    class Meta:
        model = User
        # fields = '__all__'
        fields = ['user_subscription','subscription_list']

    def get_user_subscription(self,obj):
        # subobj = SubscriptionType.objects.filter(country=countryis).values_list('id',flat=True)
        mysublist = MagazinePurchaseInfo.objects.filter(users=obj.id,is_subscription=True).last()
        # print(mysublist.id,'========my')
        serializerdata = ListUserSerializer(mysublist,many=False)
        if serializerdata:
            return [serializerdata.data]
        return None

    def get_subscription_list(self,obj):
        mysublist = MagazinePurchaseInfo.objects.filter(users = obj.id,is_subscription=True).all()
        # print(mysublist,'====mysub')
        serializerdata = ListUserSerializer(mysublist,many=True)
        if serializerdata:
            return serializerdata.data
        return None


class UserPurchCountrySerializer(serializers.ModelSerializer):
    user_subscription = serializers.SerializerMethodField()
    subscription_list = serializers.SerializerMethodField()
    class Meta:
        model = Country
        # fields = '__all__'
        fields = ['user_subscription','subscription_list']

    def get_user_subscription(self,obj):
        return [ ]

    def get_subscription_list(self,obj):
    
        subobj = SubscriptionType.objects.filter(country_id=obj.id).values_list('id',flat=True)
        # mysublist = MagazinePurchaseInfo.objects.filter(subscription__in=subobj,is_subscription=True)
        mysublist = MagazinePurchaseInfo.objects.filter(subscription__in=subobj,is_subscription=True).all()
        serializerdata = ListSerializer(mysublist,many=True)
        if serializerdata:
            return serializerdata.data
        return None
    
class CountrybaseSerializer(serializers.ModelSerializer):
    # user_subscription = serializers.SerializerMethodField()
    subscription_list = serializers.SerializerMethodField()
    class Meta:
        model = Country
        # fields = '__all__'
        fields = ['subscription_list']

    # def get_user_subscription(self,obj):
    #     return [ ]

    def get_subscription_list(self,obj):
    
        subobj = SubscriptionType.objects.filter(country_id=obj.id).values_list('id',flat=True)
        # mysublist = MagazinePurchaseInfo.objects.filter(subscription__in=subobj,is_subscription=True)
        mysublist = MagazinePurchaseInfo.objects.filter(subscription__in=subobj,is_subscription=True).all()
        serializerdata = ListcountrySerializer(mysublist,many=True)
        if serializerdata:
            return serializerdata.data
        return None

class SortCountryListSerializer(serializers.ModelSerializer):
    months = serializers.SerializerMethodField()
    country_id = serializers.SerializerMethodField()
    # subscription_status = serializers.SerializerMethodField()
    # description = serializers.SerializerMethodField()
    # # days = serializers.SerializerMethodField()
    # user_name = serializers.SerializerMethodField()
    # total_price = serializers.SerializerMethodField()
    # # type = serializers.SerializerMethodField()
    # magazine_id = serializers.SerializerMethodField()
    # date = serializers.SerializerMethodField()
    # expiry_date = serializers.SerializerMethodField()
    # magazine_name = serializers.SerializerMethodField()
    # price = serializers.SerializerMethodField()
    # discount = serializers.SerializerMethodField()
    # discount_price = serializers.SerializerMethodField()
    # discount_to_pay = serializers.SerializerMethodField()
    class Meta:
        model = SubscriptionType  
        # fields = '__all__'
        fields = ['id','country_id','months','subscription_type','description','discount','price','created_on']

    def get_months(self,obj):
        try:
            if obj.days:
                return obj.days
            return None
        except SubscriptionType.DoesNotExist as e:
            return None

    def get_country_id(self,obj):
        try:
            if obj.country:
                return obj.country.id
            return None
        except SubscriptionType.DoesNotExist:
            return None

class SortCountrySerializer(serializers.ModelSerializer):
    user_subscription = serializers.SerializerMethodField()
    subscription_list = serializers.SerializerMethodField()
    class Meta:
        model = Country
        # fields = '__all__'
        fields = ['user_subscription','subscription_list']

    def get_user_subscription(self,obj):
        return [ ]

    def get_subscription_list(self,obj):

        subobj = SubscriptionType.objects.filter(country_id=obj.id)
        print(subobj,'====subobj')
        # mysublist = MagazinePurchaseInfo.objects.filter(subscription__in=subobj,is_subscription=True).all()
        print(subobj,"====mysublist")
        serializerdata = SortCountryListSerializer(subobj,many=True)
        print(serializerdata.data,'=================data')
        if serializerdata:
            return serializerdata.data
        return None

class CpppSortCountryListSerializer(serializers.ModelSerializer):
    months = serializers.SerializerMethodField()
    country_id = serializers.SerializerMethodField()
    # subscription_status = serializers.SerializerMethodField()
    # description = serializers.SerializerMethodField()
    # # days = serializers.SerializerMethodField()
    # user_name = serializers.SerializerMethodField()
    # total_price = serializers.SerializerMethodField()
    # # type = serializers.SerializerMethodField()
    # magazine_id = serializers.SerializerMethodField()
    # date = serializers.SerializerMethodField()
    # expiry_date = serializers.SerializerMethodField()
    # magazine_name = serializers.SerializerMethodField()
    # price = serializers.SerializerMethodField()
    # discount = serializers.SerializerMethodField()
    # discount_price = serializers.SerializerMethodField()
    # discount_to_pay = serializers.SerializerMethodField()
    class Meta:
        model = SubscriptionType  
        # fields = '__all__'
        fields = ['id','country_id','months','subscription_type','description','discount','price','created_on']

    def get_months(self,obj):
        try:
            if obj.days:
                return obj.days
            return None
        except SubscriptionType.DoesNotExist as e:
            return None

    def get_country_id(self,obj):
        try:
            if obj.country:
                return obj.country.id
            return None
        except SubscriptionType.DoesNotExist:
            return None

class PPListSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    subscription_status = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    # days = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    # type = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    discount = serializers.SerializerMethodField()
    discount_price = serializers.SerializerMethodField()
    discount_to_pay = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo  
        # fields = '__all__'
        fields = ['id','magazine_id','months','magazine_name','user_id','user_name','subscription_type','subscription_status','description','total_price','discount','discount_price','discount_to_pay','price','date','expiry_date','create_on','updated_on']

    # def get_months(self,obj):
    #     try:
    #         if obj.subscription:
    #             if obj.subscription.subscription_type == "golden":
    #                 return str('3 months')
    #             elif obj.subscription.subscription_type == "silver":
    #                 return str('2 months')
    #             elif obj.subscription.subscription_type == "premium":
    #                 return str('1 months')
    #             return None   
    #         return None
    #     except Subscription.DoesNotExist as e:
    #         return None


    def get_price(self,obj):
        buyobj=obj.magazineInfos.buy_price
        rentobj=obj.magazineInfos.rent_price
        if buyobj:
            return buyobj
        elif rentobj:
            return rentobj
        return None


    def get_expiry_date(self,obj):
        expireobj=obj.rent_expiry_date
        if expireobj:
            return expireobj
        return None

    def get_date(self,obj):
        rentobj=obj.rent_date
        priceobj=obj.buy_date
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj

    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_magazine_name(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.name
        return None

    def get_magazine_id(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.id
        return None

    def get_subscription_type(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last()  
            if subobj:
                return subobj.subscription_type
            return None

        except MagazinePurchaseInfo.DoesNotExist:
            return None
        
    def get_subscription_status(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:

                return True
            return False
        except MagazinePurchaseInfo.DoesNotExist:
            return False

    def get_description(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                return subobj.description
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_total_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                return subobj.price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                return subobj.discount
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_price(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                price=round(percentage, 2)
                return price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_discount_to_pay(self,obj):
        try:
            subobj=SubscriptionType.objects.filter(country=obj.subscription.country.id).last() 
            if subobj:
                subprice=subobj.price
                percentage=float(float(subprice)*float(subobj.discount)/100)
                discountprice=float(subprice)-float(percentage)
                price=round(discountprice, 2)
                return price
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

class pppSortCountrySerializer(serializers.ModelSerializer):
    user_subscription = serializers.SerializerMethodField()
    subscription_list = serializers.SerializerMethodField()
    class Meta:
        model = Country
        # fields = '__all__'
        fields = ['user_subscription','subscription_list']

    def get_user_subscription(self,obj):
        return [ ]

    def get_subscription_list(self,obj):

        subobj = SubscriptionType.objects.filter(country_id=obj.id)
        print(subobj,'====subobj')
        # mysublist = MagazinePurchaseInfo.objects.filter(subscription__in=subobj,is_subscription=True).all()
        print(subobj,"====mysublist")
        serializerdata = SortCountryListSerializer(subobj,many=True)
        print(serializerdata.data,'=================data')
        if serializerdata:
            return serializerdata.data
        return None



# user login subscription
class UserSubscriptionListSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    subscription_status = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()

    # subscription_list = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','user_id','user_name','subscription_type','subscription_status','description','create_on','updated_on']


    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None


    def get_subscription_type(self,obj):
        try:
            # subobj=SubscriptionType.objects.filter(country=obj.users.country).last()
            # subobj=SubscriptionType.objects.filter(id=obj.subscription.id).last()
            print(obj.subscription)
            if obj.subscription:
                return obj.subscription.subscription_type
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None
        
    def get_subscription_status(self,obj):
        try:
            # subobj=SubscriptionType.objects.filter(country=obj.users.country).last()
            # subobj=SubscriptionType.objects.filter(id=obj.subscription.id).last()
            if obj.subscription:
                return obj.subscription.subscription_status
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_description(self,obj):
        try:
            # subobj=SubscriptionType.objects.filter(country=obj.users.country).last()
            # subobj=SubscriptionType.objects.filter(id=obj.subscription.id).last()
            if obj.subscription:
                return obj.subscription.description
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None
class SubscriptionListSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    subscription_status = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    # days = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    # type = serializers.SerializerMethodField()
    magazine_id = serializers.SerializerMethodField()
    date = serializers.SerializerMethodField()
    expiry_date = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    months = serializers.SerializerMethodField()
    # subscription_list = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','magazine_id','months','magazine_name','user_id','user_name','subscription_type','subscription_status','description','total_price','price','date','expiry_date','create_on','updated_on']

    # def get_subscription_list(self,obj):
    #         mysublist = MagazinePurchaseInfo.objects.all()
    #         serializer = ListSerializer(mysublist,many=True)
    #         if serializer:
    #             return serializer.data
    #         return None

    def get_months(self,obj):
        try:
            if obj.subscription:
                if obj.subscription.subscription_type == "golden":
                    return str('3 months')
                elif obj.subscription.subscription_type == "silver":
                    return str('2 months')
                elif obj.subscription.subscription_type == "premium":
                    return str('1 months')
                return None   
            return None
        except SubscriptionType.DoesNotExist as e:
            return None
    # def get_price(self,obj):
    #     buyobj=obj.buy_price
    #     if buyobj:
    #         return buyobj
    #     return None

    # def get_price(self,obj):
    #     try:
    #         subobj=SubscriptionType.objects.filter(country=obj.users.country).last()
    #         if subobj:
    #             return subobj.price
    #         return None
    #     except MagazinePurchaseInfo.DoesNotExist:
    #         return None

    def get_price(self,obj):
        buyobj=obj.magazineInfos.buy_price
        rentobj=obj.magazineInfos.rent_price
        if buyobj:
            return buyobj
        elif rentobj:
            return rentobj
        return None


    def get_expiry_date(self,obj):
        expireobj=obj.rent_expiry_date
        if expireobj:
            return expireobj
        return None

    def get_date(self,obj):
        rentobj=obj.rent_date
        priceobj=obj.buy_date
        if rentobj:
            return rentobj
        elif priceobj:
            return priceobj

    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_magazine_name(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.name
        return None

    def get_magazine_id(self,obj):
        if obj.magazineInfos:
            return obj.magazineInfos.id
        return None

    def get_subscription_type(self,obj):
        try:
            # subobj=SubscriptionType.objects.filter(country=obj.users.country).last()
            subobj=SubscriptionType.objects.filter(id=obj.subscription.id).last()
            if subobj:
                return subobj.subscription_type
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None
        
    def get_subscription_status(self,obj):
        try:
            # subobj=SubscriptionType.objects.filter(country=obj.users.country).last()
            subobj=SubscriptionType.objects.filter(id=obj.subscription.id).last()
            if subobj:
                return subobj.subscription_status
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    def get_description(self,obj):
        try:
            # subobj=SubscriptionType.objects.filter(country=obj.users.country).last()
            subobj=SubscriptionType.objects.filter(id=obj.subscription.id).last()
            if subobj:
                return subobj.description
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None
    # def get_days(self,obj):
    #     try:
    #         subobj=SubscriptionType.objects.filter(subscription=obj.subscription_id).last()
    #         if subobj:
    #             return subobj.days
    #         return None
    #     except MagazinePurchaseInfo.DoesNotExist:
    #         return None

    # def get_type(self,obj):
    #     try:
    #         if obj.users.country:

    #             subobj=SubscriptionType.objects.filter(country=obj.users.country).last()
    #             if subobj:
    #                 return subobj.type
    #             return None
    #         return None
    #     except MagazinePurchaseInfo.DoesNotExist:
    #         return None

    # def get_total_price(self,obj):
    #     try:
    #         subobj=SubscriptionType.objects.filter(country=obj.users.country).last()
    #         if subobj:
    #             return subobj.price
    #         return None
    #     except MagazinePurchaseInfo.DoesNotExist:
    #         return None


    def get_total_price(self,obj):
        if obj.subscription_price:
            return obj.subscription_price
        return None

# class UserPurchaseListSerializer(serializers.ModelSerializer):
#     user_subscription = serializers.SerializerMethodField()
#     subscription_list = serializers.SerializerMethodField()
#     class Meta:
#         model = User
#         # fields = '__all__'
#         fields = ['user_subscription','subscription_list']

#     def get_user_subscription(self,obj):
#         # subobj = SubscriptionType.objects.filter(country=countryis).values_list('id',flat=True)
#         mysublist = MagazinePurchaseInfo.objects.filter(users=obj.id,is_subscription=True).last()
#         print(mysublist.id,'========my')
#         serializerdata = ListUserSerializer(mysublist,many=False)
#         if serializerdata:
#             return [serializerdata.data]
#         return None

#     def get_subscription_list(self,obj):
#         mysublist = MagazinePurchaseInfo.objects.filter(users = obj.id,is_subscription=True).all()
#         # print(mysublist,'====mysub')
#         serializerdata = ListUserSerializer(mysublist,many=True)
#         if serializerdata:
#             return serializerdata.data
#         return None

# # class UserPurchCountrySerializer(serializers.ModelSerializer):
# #     user_subscription = serializers.SerializerMethodField()
# #     subscription_list = serializers.SerializerMethodField()
# #     class Meta:
# #         model = Country
# #         # fields = '__all__'
# #         fields = ['user_subscription','subscription_list']

# #     def get_user_subscription(self,obj):
# #         return [ ]

# #     def get_subscription_list(self,obj):
# #         countryis = obj.id
# #         print(countryis,'====id')
# #         subobj = SubscriptionType.objects.filter(country=countryis).values_list('id',flat=True)
# #         print(subobj,'====subobj ')
# #         # mysublist = MagazinePurchaseInfo.objects.filter(subscription__in=subobj,is_subscription=True)
# #         mysublist = MagazinePurchaseInfo.objects.filter(subscription__in=subobj,is_subscription=True).all()
# #         print(mysublist,"====mysublist")
# #         serializerdata = ListSerializer(mysublist,many=True)
# #         print(serializerdata.data,'=================data')
# #         if serializerdata:
# #             return serializerdata.data
# #         return None

# class UserPurchCountrySerializer(serializers.ModelSerializer):
#     user_subscription = serializers.SerializerMethodField()
#     subscription_list = serializers.SerializerMethodField()
#     class Meta:
#         model = Country
#         # fields = '__all__'
#         fields = ['user_subscription','subscription_list']

#     def get_user_subscription(self,obj):
#         return [ ]

#     def get_subscription_list(self,obj):
    
#         subobj = SubscriptionType.objects.filter(country_id=obj.id).values_list('id',flat=True)
#         print(subobj,'====subobj>>>>>>>>>>>>>>>>>>>>> ')
#         # mysublist = MagazinePurchaseInfo.objects.filter(subscription__in=subobj,is_subscription=True)
#         mysublist = MagazinePurchaseInfo.objects.filter(subscription__in=subobj,is_subscription=True).all()
#         print(mysublist,"====mysublist")
#         serializerdata = ListSerializer(mysublist,many=True)
#         print(serializerdata.data,'=================data')
#         if serializerdata:
#             return serializerdata.data
#         return None


class MagazineSubscriptionInfoSerializer(serializers.ModelSerializer):
    user_id = serializers.SerializerMethodField()
    subscription_type = serializers.SerializerMethodField()
    days = serializers.SerializerMethodField()
    months = serializers.SerializerMethodField()
    total_price = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    class Meta:
        model = Subscription
        # fields = '__all__'
        fields = ['id','user_id','user_name','subscription_type','total_price','days','name','price','save_percentage','months','per_month_price','start_date','end_date','subscription_status','description','created_on','updated_on']


    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_total_price(self,obj):
        if obj.subscription:
            obj.subscription.price
            return obj.subscription.price
        return None

    def get_subscription_type(self,obj):
        if obj.subscription:
            return obj.subscription.subscription_type
        return None

    def get_days(self,obj):
        if obj.subscription:
            return obj.subscription.days
        return None

    def get_months(self,obj):
        try:
            if obj.subscription:
                if obj.subscription.subscription_type == "golden":
                    return str('3 months')
                elif obj.subscription.subscription_type == "silver":
                    return str('2 months')
                elif obj.subscription.subscription_type == "premium":
                    return str('1 months')
                return None   
            return None
        except Subscription.DoesNotExist as e:
            return None



# Post magazine order History serializer
class MagazineOrderHistorySerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazineOrderinfo
        # fields = '__all__'
        fields = ['id','transaction_id','magazines','users','subscriptions','magazineOffers','magazinePurchase','created_on','updated_on']



class MagazineOrderdataSerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    subscription_id = serializers.SerializerMethodField()
    magazineOffer_id = serializers.SerializerMethodField()
    magazinePurchase_id = serializers.SerializerMethodField()
    class Meta:
        model = MagazineOrderinfo
        # fields = '__all__'
        fields = ['id','transaction_id','magazine_id','user_id','subscription_id','magazineOffer_id','magazinePurchase_id','created_on','updated_on']

    def get_magazine_id(self,obj):
        if obj.magazines:
            return obj.magazines.id
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_subscription_id(self,obj):
        if obj.subscriptions:
            return obj.subscriptions.id
        return None

    def get_magazineOffer_id(self,obj):
        if obj.magazineOffers:
            return obj.magazineOffers.id
        return None

    def get_magazinePurchase_id(self,obj):
        if obj.magazinePurchase:
            return obj.magazinePurchase.id
        return None

#####################################################################################
# Magazine Order Detail Serializer 
class MagazineOrderDetailSerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    total_order_price = serializers.SerializerMethodField()
    magazine_author = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    magazine_ratting = serializers.SerializerMethodField()
    purchase_type = serializers.SerializerMethodField()
    currency = serializers.SerializerMethodField()
    read_count = serializers.SerializerMethodField()
    type = serializers.SerializerMethodField()
    delivery_location = serializers.SerializerMethodField()
    status = serializers.SerializerMethodField()
    # hard_copy_botton = serializers.SerializerMethodField()
    # rent_button = serializers.SerializerMethodField()
    # validity = serializers.SerializerMethodField()
    delivery_status = serializers.SerializerMethodField()
    # real_price = serializers.SerializerMethodField()

    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        # fields = ['id','transaction_id','type','is_hard_copy','purchases_order_id','read_count','currency','purchase_type','user_id','user_name','magazine_id','magazine_name','magazine_ratting','price','total_order_price','magazine_author','cover_pic','delivery_date','delivery_location','create_on','updated_on']
        fields = ['id','transaction_id','status','delivery_status','type','is_hard_copy','purchases_order_id','read_count','currency','purchase_type','user_id','user_name','magazine_id','magazine_name','magazine_ratting','price','total_order_price','magazine_author','cover_pic','delivery_date','delivery_location','create_on','updated_on']


    def get_status(self,obj):
        purstatus=MagazinePurchaseInfo.objects.filter(id=obj.id).first()
        if purstatus:
            if "success" == purstatus.status:
                return str('success')
            elif "fail" == purstatus.status:
                return str('fail')
            else:
                return None
        return None

    def get_delivery_status(self,obj):
            try:
                userid = self.context.get('user_id')
                orderid = self.context.get('order_id')
                purchaseobj = MagazinePurchaseInfo.objects.filter(id=orderid,users=userid,is_hard_copy=1,status="success",is_delivered=None)
                purchaseobj0 = MagazinePurchaseInfo.objects.filter(id=orderid,users=userid,is_hard_copy=1,status="success",is_delivered="0")
                purchaseobj1 = MagazinePurchaseInfo.objects.filter(id=orderid,users=userid,is_hard_copy=1,status="success",is_delivered=1)
                purchaseobj2 = MagazinePurchaseInfo.objects.filter(id=orderid,users=userid,is_hard_copy=1,status="success",is_delivered="2")
                purchaseobj3 = MagazinePurchaseInfo.objects.filter(id=orderid,users=userid,is_hard_copy=1,status="fail",is_delivered=None)

                if purchaseobj:
                    return str('Pending')
                elif purchaseobj0:
                    return str('Rejected')
                elif purchaseobj1:
                    purchaseobj1.update(delivery_date=datetime.datetime.now())
                    return str('Delivered')
                elif purchaseobj2:
                    return str('In progress')
                elif purchaseobj3:
                    return str('Failed')
                else:
                    return None
            except MagazinePurchaseInfo.DoesNotExist:
                return None


    # def get_magazine_ratting(self,obj):
    #     try:
    #         magazineobj =magazineReviewInfo.objects.filter(magazines=obj.magazineInfos.id)
    #         list,sum,count=[],0,0
    #         if magazineobj:
    #             for row in magazineobj:
    #                 list.append(row.ratting)
    #                 digit = float((row.ratting)/5)*100
    #                 sum=float(sum+digit)
    #                 count+=1
    #             if count == 1:
    #                 return row.ratting
    #             result=int(sum/count)  
    #             if 0 < result <= 19:
    #                 return 1
    #             elif 20 <= result <= 39:
    #                 return 2
    #             elif 40 <= result <= 59:
    #                 return 3
    #             elif 60 <= result <= 79:
    #                 return 4
    #             elif 80 <= result <= 100:
    #                 return 5
    #             else:
    #                 return 1
    #         return 1
    #     except magazineReviewInfo.DoesNotExist:
    #         return 1
    
    def get_magazine_ratting(self,obj):
        try:
            magazineobj =magazineReviewInfo.objects.filter(magazines=obj.magazineInfos.id)
            sum,count=0,0
            if magazineobj:
                for row in magazineobj:
                    if row.ratting == 'NULL' or row.ratting == None:
                        rattings = 1
                    else:
                        rattings = row.ratting
                    sum=float(sum + rattings if row and rattings else 0)
                    count+=1
                result=float(sum/count)
                return round(result,1)
            else:
                return 1.0
        except magazineReviewInfo.DoesNotExist:
            return 1.0

    # def get_magazine_ratting(self,obj):
    #     try:
    #         magazineobj =magazineReviewInfo.objects.filter(magazines=obj.magazineInfos.id)
    #         list,sum,count=[],0,0
    #         if magazineobj:
    #             for row in magazineobj:
    #                 sum=float(sum+row.ratting)
    #                 count+=1
    #             result=float(sum/count)
    #             return round(result,1)
    #         return float(1)
    #     except magazineReviewInfo.DoesNotExist:
    #         return float(1)



    def get_delivery_location(self,obj):
        if obj.is_hard_copy:
            print(obj.delivery_location,'================================++!!!!!!!!!!!!!!!!!!!!!!!!!')
            return obj.delivery_location
        return None

    def get_type(self,obj):
        try:
            userid = self.context.get('user_id')
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id,users=userid).first()
            if magazineobj:
                if magazineobj.is_buyed:
                    return str('Purchased')
                elif magazineobj.is_rented:
                    return str('Rent purchased')
                elif magazineobj.is_hard_copy:
                    return str('Hard copy purchased')
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None
            
    def get_read_count(self,obj):
        readobj = MagazinePurchaseInfo.objects.filter(users=obj.users.id).all().count()
        if readobj:
            return readobj
        return None

    def get_currency(self,obj):
        if obj:
            return str('USD')
        return None

    def get_purchase_type(self,obj):
        if obj:
            return obj.purchases_type
        return None

    def get_magazine_id(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.id
        return None

    def get_magazine_name(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.name
        return None


    def get_price(self,obj):
        try:
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id).last()
            if magazineobj:
                # if magazineobj.offer_price:
                #     return magazineobj.offer_price
                if magazineobj.buy_price:
                    # return round(magazineobj.buy_price,2)
                    return format(float(magazineobj.buy_price), '.2f')
                elif magazineobj.rent_price:
                    # return round(magazineobj.rent_price,2)
                    return format(float(magazineobj.rent_price), '.2f')
                elif magazineobj.hard_copy_price:
                    # return round(magazineobj.hard_copy_price,2)
                    return format(float(magazineobj.hard_copy_price), '.2f')
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None

    # def get_real_price(self,obj):
    #     try:
    #         magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
    #         if magazineobj:
    #             if magazineobj.buy_price:
    #                 return magazineobj.buy_price
    #             elif magazineobj.rent_price:
    #                 return magazineobj.rent_price
    #         return None
    #     except MagazinePurchaseInfo.DoesNotExist as e:
    #         return None

    def get_total_order_price(self,obj):
        try:
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id).last()
            if magazineobj:
                if magazineobj.offer_price:
                    # return round(magazineobj.offer_price,2)
                    return format(float(magazineobj.offer_price), '.2f')
                if magazineobj.buy_price:
                    # return round(magazineobj.buy_price,2)
                    return format(float(magazineobj.buy_price), '.2f')
                elif magazineobj.rent_price:
                    # return round(magazineobj.rent_price,2)
                    return format(float(magazineobj.rent_price), '.2f')
                elif magazineobj.hard_copy_price:
                    # return round(magazineobj.hard_copy_price,2)
                    return format(float(magazineobj.hard_copy_price), '.2f')
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None

    def get_magazine_rent_price(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.rent_price
            # return format(float(magazineobj.rent_price), '.2f')
        return None

    def get_cover_pic(self,obj):
        try:
            if obj:
                magazineobj=MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
                serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
                return serializer.data
            return None
        except MagazinePurchaseInfo.DoesNotExist:
            return None

    # def get_magazine_author(self,obj):
    #     auth = Author.objects.filter(id=obj.magazineInfos.author_id).all()
    #     if auth:
    #         return AuthorSerializer(auth,many=True).data
    #     return None

    # def get_magazine_author(self,obj):
    #     magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).values_list('id',flat=True)
    #     maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj).exclude(author__)
    #     authordata = PTestmagazineSerializer(maputhorobj,many=True)
    #     if authordata:
    #         return authordata.data
    #     return None


    def get_magazine_author(self,obj):
        
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id,is_aproved=True,is_active=True).values_list('id',flat=True)
        if magazineobj:
            maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj).exclude(author__isnull=True)
            authordata = PTestmagazineSerializer(maputhorobj,many=True)
            if authordata:
                return authordata.data
            return []
        return []


    def get_user_id(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.id
        return None

    def get_user_name(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.first_name
        return None

# SSSS Magazine Order Detail Serializer 
class SMagazineOrderDetailSerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    total_order_price = serializers.SerializerMethodField()
    magazine_author = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    magazine_ratting = serializers.SerializerMethodField()
    purchase_type = serializers.SerializerMethodField()
    currency = serializers.SerializerMethodField()
    read_count = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','transaction_id','is_hard_copy','purchases_order_id','read_count','currency','purchase_type','user_id','user_name','magazine_id','magazine_name','magazine_ratting','price','total_order_price','magazine_author','cover_pic','delivery_date','delivery_location','create_on','updated_on']

    def get_read_count(self,obj):
        readobj = MagazinePurchaseInfo.objects.filter(users=obj.users.id).all().count()
        if readobj:
            return readobj
        return None

    def get_currency(self,obj):
        if obj:
            return str('USD')
        return None

    def get_purchase_type(self,obj):
        if obj:
            return obj.purchases_type
        return None

    def get_magazine_id(self,obj):
        # magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        # if magazineobj:
        #     return magazineobj.id
        return None

    def get_magazine_name(self,obj):
        # magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        # if magazineobj:
        #     return magazineobj.name
        return None

    def get_magazine_ratting(self,obj):
        # magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        # if magazineobj:
        #     return magazineobj.ratting
        return None

    def get_price(self,obj):
        try:
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id).last()
            print()
            if magazineobj:
                if magazineobj.buy_price:
                    return magazineobj.buy_price
                elif magazineobj.rent_price:
                    return magazineobj.rent_price
                elif magazineobj.subscription_price:
                    return magazineobj.subscription_price
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None
    # def get_price(self,obj):
    #     try:
    #         magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
    #         if magazineobj:
    #             if magazineobj.buy_price:
    #                 print(magazineobj.buy_price,'====magazineobj.buy_price')
    #                 return magazineobj.buy_price
    #             elif magazineobj.rent_price:
    #                 print(magazineobj.rent_price,'=====magazineobj.rent_price')
    #                 return magazineobj.rent_price
    #         return None
    #     except MagazinePurchaseInfo.DoesNotExist as e:
    #         return None
    def get_total_order_price(self,obj):
        try:
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id).last()
            print()
            if magazineobj:
                if magazineobj.buy_price:
                    return magazineobj.buy_price
                elif magazineobj.rent_price:
                    return magazineobj.rent_price
                elif magazineobj.subscription_price:
                    return magazineobj.subscription_price
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None

    def get_magazine_rent_price(self,obj):
        # magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        # if magazineobj:
        #     return magazineobj.rent_price
        return None

    def get_cover_pic(self,obj):
        return None
        # try:
        #     if obj:
        #         magazineobj=MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        #         serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
        #         return serializer.data
        #     return None
        # except MagazinePurchaseInfo.DoesNotExist:
        #     return None

    # def get_magazine_author(self,obj):
    #     auth = Author.objects.filter(id=obj.magazineInfos.author_id).all()
    #     if auth:
    #         return AuthorSerializer(auth,many=True).data
    #     return None

    def get_magazine_author(self,obj):
        # magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).values_list('id',flat=True)
        # maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj)
        # authordata = PTestmagazineSerializer(maputhorobj,many=True)
        # if authordata:
        #     return authordata.data
        return None

    def get_user_id(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.id
        return None

    def get_user_name(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.first_name
        return None

        
        
# get magazine order History info serializer
class MGAOrderHistorySerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    magazine_price = serializers.SerializerMethodField()
    magazine_rent_price = serializers.SerializerMethodField()
    magazine_author = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    magazine_ratting = serializers.SerializerMethodField()
    purchase_type = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    total_order_price = serializers.SerializerMethodField()
    order_id = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','transaction_id','is_hard_copy','order_id','price','total_order_price','delivery_date','delivery_location','purchases_order_id','purchase_type','user_id','user_name','magazine_id','magazine_name','magazine_ratting','magazine_price','magazine_rent_price','magazine_author','cover_pic','create_on','updated_on']

    def get_order_id(self,obj):
        if obj.id:
            return obj.id
        return None

    def get_price(self,obj):
        try:
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id).last()
            if magazineobj:
                if magazineobj.buy_price:
                    return magazineobj.buy_price
                elif magazineobj.rent_price:
                    return magazineobj.rent_price
                elif magazineobj.subscription_price:
                    return magazineobj.subscription_price
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None
    # def get_price(self,obj):
    #     try:
    #         magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
    #         if magazineobj:
    #             if magazineobj.buy_price:
    #                 return magazineobj.buy_price
    #             elif magazineobj.rent_price:
    #                 return magazineobj.rent_price
    #         return None
    #     except MagazinePurchaseInfo.DoesNotExist as e:
    #         return None

    def get_total_order_price(self,obj):
        try:
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id).last()
            if magazineobj:
                if magazineobj.buy_price:
                    return magazineobj.buy_price
                elif magazineobj.rent_price:
                    return magazineobj.rent_price
                elif magazineobj.subscription_price:
                    return magazineobj.subscription_price
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None

    # def get_price(self,obj):
    #     try:
    #         priceobj = MagazineInfo.objects.filter(id=obj.magazines.id).last()
    #         print(priceobj,'====data purchase===')
    #         if priceobj:
    #                 return priceobj.buy_price
    #         return None
    #     except MagazineOrderinfo.DoesNotExist as e:
    #         return None
    # def get_price(self,obj):
    #     try:
    #         purchaseobj = MagazinePurchaseInfo.objects.filter(id=obj.magazinePurchase.id).last()
    #         print(purchaseobj,'====data purchase===')
    #         if purchaseobj:
    #             buyobj=purchaseobj.buy_price
    #             print(buyobj,'====buy price')
    #             rentobj=purchaseobj.rent_price
    #             print(rentobj,'===rent price==')
    #             if buyobj:
    #                 return buyobj
    #             elif rentobj:
    #                 return rentobj
    #         return None
    #     except MagazineOrderinfo.DoesNotExist as e:
    #         return None

    def get_purchase_type(self,obj):
        if obj:
            return obj.purchases_type
        return None

    def get_magazine_id(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.id
        return None

    def get_magazine_name(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.name
        return None

    def get_magazine_ratting(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.ratting
        return None

    def get_magazine_price(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.buy_price
        return None


    def get_magazine_rent_price(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.rent_price
        return None

    # def get_magazine_rent_price(self,obj):
    #     magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
    #     if magazineobj:
    #         return magazineobj.rent_price
    #     return None

    def get_cover_pic(self,obj):
        try:
            if obj:
                magazineobj=MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
                serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
                return serializer.data
            return None
        except MagazineInfo.DoesNotExist:
            return None

    # def get_magazine_url(self,obj):
    #     try:
    #         if obj.id:
    #             magazineobj=MegazinePages.objects.filter(magazine=obj.magazine.id).last()
    #             if magazineobj:
    #                 serializer = MegazinePagesSerializer(magazineobj).data
    #                 return serializer
    #             return None
    #         return None
    #     except MagazineInfo.DoesNotExist:
    #         return None

    # def get_magazine_author(self,obj):
    #     auth = Author.objects.filter(id=obj.magazineInfos.author_id).all()
    #     if auth:
    #         return AuthorSerializer(auth,many=True).data
    #     return None

    def get_magazine_author(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).values_list('id',flat=True)
        maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj)
        authordata = PTestmagazineSerializer(maputhorobj,many=True)
        if authordata:
            return authordata.data
        return None

    def get_user_id(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.id
        return None

    def get_user_name(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.first_name
        return None

    # def get_magazineOffer_id(self,obj):
    #     if obj.magazineOffers:
    #         return obj.magazineOffers.id
    #     return None

    # def get_magazinePurchase_id(self,obj):
    #     if obj.magazinePurchase:
    #         return obj.magazinePurchase.id
    #     return None

# get magazine order History info serializer
class MGAOrderHistorySerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    magazine_price = serializers.SerializerMethodField()
    magazine_rent_price = serializers.SerializerMethodField()
    magazine_author = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    magazine_ratting = serializers.SerializerMethodField()
    purchase_type = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    total_order_price = serializers.SerializerMethodField()
    order_id = serializers.SerializerMethodField()
    type = serializers.SerializerMethodField()
    status = serializers.SerializerMethodField()
    # delivery_status = serializers.SerializerMethodField()
    # real_price = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','status','transaction_id','type','is_hard_copy','order_id','price','total_order_price','delivery_date','delivery_location','purchases_order_id','purchase_type','user_id','user_name','magazine_id','magazine_name','magazine_ratting','magazine_price','magazine_rent_price','magazine_author','cover_pic','create_on','updated_on']
        # fields = ['id','transaction_id','delivery_status','type','is_hard_copy','order_id','price','total_order_price','delivery_date','delivery_location','purchases_order_id','purchase_type','user_id','user_name','magazine_id','magazine_name','magazine_ratting','magazine_price','magazine_rent_price','magazine_author','cover_pic','create_on','updated_on']

    def get_status(self,obj):
        purstatus=MagazinePurchaseInfo.objects.filter(id=obj.id).first()
        if purstatus:
            if "success" == purstatus.status:
                return str('success')
            elif "fail" == purstatus.status:
                return str('fail')
            else:
                return None
        return None
            

    # def get_delivery_status(self,obj):
    #     try:
    #         userid = self.context.get('user_id')
    #         # purchaseobj = MagazinePurchaseInfo.objects.filter(users=userid,is_hard_copy=1,status="success",is_delivered="None")
    #         # print(purchaseobj,'==99999=')
    #         # purchaseobj0 = MagazinePurchaseInfo.objects.filter(users=userid,is_hard_copy=1,status="success",is_delivered="0")
    #         # print('====00000')
    #         # purchaseobj1 = MagazinePurchaseInfo.objects.filter(users=userid,is_hard_copy=1,status="success",is_delivered="1")
    #         # print(purchaseobj1,'=====11111')
    #         # purchaseobj2 = MagazinePurchaseInfo.objects.filter(users=userid,is_hard_copy=1,status="success",is_delivered="2")
    #         # print(purchaseobj2,'====222')
    #     #     if purchaseobj:
    #     #         print('=====pending')
    #     #         return str('delivery pending')
    #     #     elif purchaseobj0:
    #     #         print('====rejected')
    #     #         return str('Delivery rejected')
    #     #     elif purchaseobj1:
    #     #         print('==Success')
    #     #         return str('Delivery Success')
    #     #     elif purchaseobj2:
    #     #         print('==progress')
    #     #         return str('delivery progress')
    #     #     else:
    #     #         return None
    #     # except MagazinePurchaseInfo.DoesNotExist:
    #     #     return None
    #         purchaseobj = MagazinePurchaseInfo.objects.filter(users=userid,is_hard_copy=1,status="success")
    #         for row in purchaseobj:

    #             if row.is_delivered==1:
    #                 print('=====pending')
    #                 return str('delivery pending')
    #             elif row.is_delivered=="0":
    #                 print('====rejected')
    #                 return str('Delivery rejected')
    #             elif row.is_delivered=="1":
    #                 print('==Success')
    #                 return str('Delivery Success')
    #             elif row.is_delivered=="2":
    #                 print('==progress')
    #                 return str('delivery progress')
    #             else:
    #                 return None
    #         return None
    #     except MagazinePurchaseInfo.DoesNotExist:
    #         return None

    # def get_magazine_ratting(self,obj):
    #     try:
    #         magazineobj =magazineReviewInfo.objects.filter(magazines=obj.magazineInfos.id)

    #         list,sum,count=[],0,0
    #         if magazineobj:
    #             for row in magazineobj:
    #                 list.append(row.ratting)
    #                 digit = float((row.ratting)/5)*100
    #                 sum=float(sum+digit)
    #                 count+=1
    #             if count == 1:
    #                 return row.ratting
    #             result=int(sum/count)  
    #             if 0 < result <= 19:
    #                 return 1
    #             elif 20 <= result <= 39:
    #                 return 2
    #             elif 40 <= result <= 59:
    #                 return 3
    #             elif 60 <= result <= 79:
    #                 return 4
    #             elif 80 <= result <= 100:
    #                 return 5
    #             else:
    #                 return 1
    #         return 1
    #     except magazineReviewInfo.DoesNotExist:
    #         return 1

    def get_magazine_ratting(self,obj):
        try:
            magazineobj =magazineReviewInfo.objects.filter(magazines=obj.magazineInfos.id)
            sum,count=0,0
            if magazineobj:
                for row in magazineobj:
                    if row.ratting == 'NULL' or row.ratting == None:
                        rattings = 1
                    else:
                        rattings = row.ratting
                    sum=float(sum + rattings if row and rattings else 0)
                    count+=1
                result=float(sum/count)
                return round(result,1)
            else:
                return 1.0
        except magazineReviewInfo.DoesNotExist:
            return 1.0

    # def get_magazine_ratting(self,obj):
    #     magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
    #     if magazineobj:
    #         return magazineobj.ratting
    #     return None


    def get_type(self,obj):
        try:
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id).last()
            if magazineobj:
                if magazineobj.is_buyed:
                    return str('Purchased')
                elif magazineobj.is_rented:
                    return str('Rented')
                elif magazineobj.is_hard_copy:
                    return str('Hard copy purchased')
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None
    def get_order_id(self,obj):
        if obj.id:
            return obj.id
        return None

    def get_price(self,obj):
        try:
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id).last()
            if magazineobj:
                if magazineobj.buy_price:
                    # return round(magazineobj.buy_price,2)
                    return format(float(magazineobj.buy_price), '.2f')
                elif magazineobj.rent_price:
                    # return round(magazineobj.rent_price,2)
                    return format(float(magazineobj.rent_price), '.2f')
                elif magazineobj.hard_copy_price:
                    # return round(magazineobj.hard_copy_price,2)
                    return format(float(magazineobj.hard_copy_price), '.2f')
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None

    # def get_real_price(self,obj):
    #     try:
    #         magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
    #         if magazineobj:
    #             if magazineobj.buy_price:
    #                 return magazineobj.buy_price
    #             elif magazineobj.rent_price:
    #                 return magazineobj.rent_price
    #         return None
    #     except MagazinePurchaseInfo.DoesNotExist as e:
    #         return None

    def get_total_order_price(self,obj):
        try:
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id).last()
            if magazineobj:
                if magazineobj.offer_price:
                    # return round(magazineobj.offer_price,2)
                    return format(float(magazineobj.offer_price), '.2f')
                elif magazineobj.buy_price:
                    # return round(magazineobj.buy_price,2)
                    return format(float(magazineobj.buy_price), '.2f')
                elif magazineobj.rent_price:
                    # return round(magazineobj.rent_price,2)
                    return format(float(magazineobj.rent_price), '.2f')
                elif magazineobj.hard_copy_price:
                    # return round(magazineobj.hard_copy_price,2)
                    return format(float(magazineobj.hard_copy_price), '.2f')
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None

    # def get_price(self,obj):
    #     try:
    #         priceobj = MagazineInfo.objects.filter(id=obj.magazines.id).last()
    #         print(priceobj,'====data purchase===')
    #         if priceobj:
    #                 return priceobj.buy_price
    #         return None
    #     except MagazineOrderinfo.DoesNotExist as e:
    #         return None
    # def get_price(self,obj):
    #     try:
    #         purchaseobj = MagazinePurchaseInfo.objects.filter(id=obj.magazinePurchase.id).last()
    #         print(purchaseobj,'====data purchase===')
    #         if purchaseobj:
    #             buyobj=purchaseobj.buy_price
    #             print(buyobj,'====buy price')
    #             rentobj=purchaseobj.rent_price
    #             print(rentobj,'===rent price==')
    #             if buyobj:
    #                 return buyobj
    #             elif rentobj:
    #                 return rentobj
    #         return None
    #     except MagazineOrderinfo.DoesNotExist as e:
    #         return None

    def get_purchase_type(self,obj):
        if obj:
            return obj.purchases_type
        return None

    def get_magazine_id(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.id
        return None

    def get_magazine_name(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.name
        return None


    def get_magazine_price(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.buy_price
            # return format(float(magazineobj.buy_price), '.2f')
        return None


    def get_magazine_rent_price(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.rent_price
            # return format(float(magazineobj.rent_price), '.2f')
        return None

    # def get_magazine_rent_price(self,obj):
    #     magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
    #     if magazineobj:
    #         return magazineobj.rent_price
    #     return None

    def get_cover_pic(self,obj):
        try:
            if obj:
                magazineobj=MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
                serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
                return serializer.data
            return None
        except MagazineInfo.DoesNotExist:
            return None

    # def get_magazine_url(self,obj):
    #     try:
    #         if obj.id:
    #             magazineobj=MegazinePages.objects.filter(magazine=obj.magazine.id).last()
    #             if magazineobj:
    #                 serializer = MegazinePagesSerializer(magazineobj).data
    #                 return serializer
    #             return None
    #         return None
    #     except MagazineInfo.DoesNotExist:
    #         return None

    # def get_magazine_author(self,obj):
    #     auth = Author.objects.filter(id=obj.magazineInfos.author_id).all()
    #     if auth:
    #         return AuthorSerializer(auth,many=True).data
    #     return None

    # def get_magazine_author(self,obj):
    #     magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).values_list('id',flat=True)
    #     maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj)
    #     authordata = PTestmagazineSerializer(maputhorobj,many=True)
    #     if authordata:
    #         return authordata.data
    #     return None

    def get_magazine_author(self,obj):
        
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id,is_aproved=True,is_active=True).values_list('id',flat=True)
        if magazineobj:
            maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj).exclude(author__isnull=True)
            authordata = PTestmagazineSerializer(maputhorobj,many=True)
            if authordata:
                return authordata.data
            return []
        return []

    def get_user_id(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.id
        return None

    def get_user_name(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.first_name
        return None

    # def get_magazineOffer_id(self,obj):
    #     if obj.magazineOffers:
    #         return obj.magazineOffers.id
    #     return None

    # def get_magazinePurchase_id(self,obj):
    #     if obj.magazinePurchase:
    #         return obj.magazinePurchase.id
    #     return None

# buy magazine order History info serializer
class BMGAOrderHistorySerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    magazine_price = serializers.SerializerMethodField()
    magazine_rent_price = serializers.SerializerMethodField()
    magazine_author = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    magazine_ratting = serializers.SerializerMethodField()
    purchase_type = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    total_order_price = serializers.SerializerMethodField()
    order_id = serializers.SerializerMethodField()
    type = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','transaction_id','type','is_hard_copy','order_id','price','total_order_price','delivery_date','delivery_location','purchases_order_id','purchase_type','user_id','user_name','magazine_id','magazine_name','magazine_ratting','magazine_price','magazine_rent_price','magazine_author','cover_pic','create_on','updated_on']

    def get_type(self,obj):
        if obj.is_buyed:
            return str('buy')
        return None
    def get_order_id(self,obj):
        if obj.id:
            return obj.id
        return None

    def get_price(self,obj):
        try:
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id).last()
            if magazineobj:
                if magazineobj.buy_price:
                    return magazineobj.buy_price
                elif magazineobj.rent_price:
                    return magazineobj.rent_price
                elif magazineobj.subscription_price:
                    return magazineobj.subscription_price
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None
    # def get_price(self,obj):
    #     try:
    #         magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
    #         if magazineobj:
    #             if magazineobj.buy_price:
    #                 return magazineobj.buy_price
    #             elif magazineobj.rent_price:
    #                 return magazineobj.rent_price
    #         return None
    #     except MagazinePurchaseInfo.DoesNotExist as e:
    #         return None

    def get_total_order_price(self,obj):
        try:
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id).last()
            if magazineobj:
                if magazineobj.buy_price:
                    return magazineobj.buy_price
                elif magazineobj.rent_price:
                    return magazineobj.rent_price
                elif magazineobj.subscription_price:
                    return magazineobj.subscription_price
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None

    # def get_price(self,obj):
    #     try:
    #         priceobj = MagazineInfo.objects.filter(id=obj.magazines.id).last()
    #         print(priceobj,'====data purchase===')
    #         if priceobj:
    #                 return priceobj.buy_price
    #         return None
    #     except MagazineOrderinfo.DoesNotExist as e:
    #         return None
    # def get_price(self,obj):
    #     try:
    #         purchaseobj = MagazinePurchaseInfo.objects.filter(id=obj.magazinePurchase.id).last()
    #         print(purchaseobj,'====data purchase===')
    #         if purchaseobj:
    #             buyobj=purchaseobj.buy_price
    #             print(buyobj,'====buy price')
    #             rentobj=purchaseobj.rent_price
    #             print(rentobj,'===rent price==')
    #             if buyobj:
    #                 return buyobj
    #             elif rentobj:
    #                 return rentobj
    #         return None
    #     except MagazineOrderinfo.DoesNotExist as e:
    #         return None

    def get_purchase_type(self,obj):
        if obj:
            return obj.purchases_type
        return None

    def get_magazine_id(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.id
        return None

    def get_magazine_name(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.name
        return None

    def get_magazine_ratting(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.ratting
        return None

    def get_magazine_price(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.buy_price
        return None


    def get_magazine_rent_price(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.rent_price
        return None

    # def get_magazine_rent_price(self,obj):
    #     magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
    #     if magazineobj:
    #         return magazineobj.rent_price
    #     return None

    def get_cover_pic(self,obj):
        try:
            if obj:
                magazineobj=MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
                serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
                return serializer.data
            return None
        except MagazineInfo.DoesNotExist:
            return None

    # def get_magazine_url(self,obj):
    #     try:
    #         if obj.id:
    #             magazineobj=MegazinePages.objects.filter(magazine=obj.magazine.id).last()
    #             if magazineobj:
    #                 serializer = MegazinePagesSerializer(magazineobj).data
    #                 return serializer
    #             return None
    #         return None
    #     except MagazineInfo.DoesNotExist:
    #         return None

    # def get_magazine_author(self,obj):
    #     auth = Author.objects.filter(id=obj.magazineInfos.author_id).all()
    #     if auth:
    #         return AuthorSerializer(auth,many=True).data
    #     return None

    def get_magazine_author(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).values_list('id',flat=True)
        maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj)
        authordata = PTestmagazineSerializer(maputhorobj,many=True)
        if authordata:
            return authordata.data
        return None

    def get_user_id(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.id
        return None

    def get_user_name(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.first_name
        return None

    # def get_magazineOffer_id(self,obj):
    #     if obj.magazineOffers:
    #         return obj.magazineOffers.id
    #     return None

    # def get_magazinePurchase_id(self,obj):
    #     if obj.magazinePurchase:
    #         return obj.magazinePurchase.id
    #     return None

# rent magazine order History info serializer
class RMGAOrderHistorySerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    magazine_price = serializers.SerializerMethodField()
    magazine_rent_price = serializers.SerializerMethodField()
    magazine_author = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    magazine_ratting = serializers.SerializerMethodField()
    purchase_type = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    total_order_price = serializers.SerializerMethodField()
    order_id = serializers.SerializerMethodField()
    type = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','transaction_id','type','is_hard_copy','order_id','price','total_order_price','delivery_date','delivery_location','purchases_order_id','purchase_type','user_id','user_name','magazine_id','magazine_name','magazine_ratting','magazine_price','magazine_rent_price','magazine_author','cover_pic','create_on','updated_on']

    def get_type(self,obj):
        if obj.is_rented:
            return str('rent')
        return None
    def get_order_id(self,obj):
        if obj.id:
            return obj.id
        return None

    def get_price(self,obj):
        try:
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id).last()
            if magazineobj:
                if magazineobj.buy_price:
                    return magazineobj.buy_price
                elif magazineobj.rent_price:
                    return magazineobj.rent_price
                elif magazineobj.subscription_price:
                    return magazineobj.subscription_price
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None
    # def get_price(self,obj):
    #     try:
    #         magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
    #         if magazineobj:
    #             if magazineobj.buy_price:
    #                 return magazineobj.buy_price
    #             elif magazineobj.rent_price:
    #                 return magazineobj.rent_price
    #         return None
    #     except MagazinePurchaseInfo.DoesNotExist as e:
    #         return None

    def get_total_order_price(self,obj):
        try:
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id).last()
            if magazineobj:
                if magazineobj.buy_price:
                    return magazineobj.buy_price
                elif magazineobj.rent_price:
                    return magazineobj.rent_price
                elif magazineobj.subscription_price:
                    return magazineobj.subscription_price
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None

    # def get_price(self,obj):
    #     try:
    #         priceobj = MagazineInfo.objects.filter(id=obj.magazines.id).last()
    #         print(priceobj,'====data purchase===')
    #         if priceobj:
    #                 return priceobj.buy_price
    #         return None
    #     except MagazineOrderinfo.DoesNotExist as e:
    #         return None
    # def get_price(self,obj):
    #     try:
    #         purchaseobj = MagazinePurchaseInfo.objects.filter(id=obj.magazinePurchase.id).last()
    #         print(purchaseobj,'====data purchase===')
    #         if purchaseobj:
    #             buyobj=purchaseobj.buy_price
    #             print(buyobj,'====buy price')
    #             rentobj=purchaseobj.rent_price
    #             print(rentobj,'===rent price==')
    #             if buyobj:
    #                 return buyobj
    #             elif rentobj:
    #                 return rentobj
    #         return None
    #     except MagazineOrderinfo.DoesNotExist as e:
    #         return None

    def get_purchase_type(self,obj):
        if obj:
            return obj.purchases_type
        return None

    def get_magazine_id(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.id
        return None

    def get_magazine_name(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.name
        return None

    def get_magazine_ratting(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.ratting
        return None

    def get_magazine_price(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.buy_price
        return None


    def get_magazine_rent_price(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        if magazineobj:
            return magazineobj.rent_price
        return None

    # def get_magazine_rent_price(self,obj):
    #     magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
    #     if magazineobj:
    #         return magazineobj.rent_price
    #     return None

    def get_cover_pic(self,obj):
        try:
            if obj:
                magazineobj=MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
                serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
                return serializer.data
            return None
        except MagazineInfo.DoesNotExist:
            return None

    # def get_magazine_url(self,obj):
    #     try:
    #         if obj.id:
    #             magazineobj=MegazinePages.objects.filter(magazine=obj.magazine.id).last()
    #             if magazineobj:
    #                 serializer = MegazinePagesSerializer(magazineobj).data
    #                 return serializer
    #             return None
    #         return None
    #     except MagazineInfo.DoesNotExist:
    #         return None

    # def get_magazine_author(self,obj):
    #     auth = Author.objects.filter(id=obj.magazineInfos.author_id).all()
    #     if auth:
    #         return AuthorSerializer(auth,many=True).data
    #     return None

    def get_magazine_author(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).values_list('id',flat=True)
        maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj)
        authordata = PTestmagazineSerializer(maputhorobj,many=True)
        if authordata:
            return authordata.data
        return None

    def get_user_id(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.id
        return None

    def get_user_name(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.first_name
        return None

    # def get_magazineOffer_id(self,obj):
    #     if obj.magazineOffers:
    #         return obj.magazineOffers.id
    #     return None

    # def get_magazinePurchase_id(self,obj):
    #     if obj.magazinePurchase:
    #         return obj.magazinePurchase.id
    #     return None
# SSSS magazine order History info serializer
class SMGAOrderHistorySerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    magazine_price = serializers.SerializerMethodField()
    magazine_rent_price = serializers.SerializerMethodField()
    magazine_author = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    magazine_ratting = serializers.SerializerMethodField()
    purchase_type = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()
    total_order_price = serializers.SerializerMethodField()
    order_id = serializers.SerializerMethodField()
    class Meta:
        model = MagazinePurchaseInfo
        # fields = '__all__'
        fields = ['id','transaction_id','is_hard_copy','order_id','price','total_order_price','delivery_date','delivery_location','purchases_order_id','purchase_type','user_id','user_name','magazine_id','magazine_name','magazine_ratting','magazine_price','magazine_rent_price','magazine_author','cover_pic','create_on','updated_on']

    def get_order_id(self,obj):
        if obj.id:
            return obj.id
        return None

    def get_price(self,obj):
        try:
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id).last()
            if magazineobj:
                if magazineobj.buy_price:
                    return magazineobj.buy_price
                elif magazineobj.rent_price:
                    return magazineobj.rent_price
                elif magazineobj.subscription_price:
                    return magazineobj.subscription_price
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None
    # def get_price(self,obj):
    #     try:
    #         magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
    #         if magazineobj:
    #             if magazineobj.buy_price:
    #                 return magazineobj.buy_price
    #             elif magazineobj.rent_price:
    #                 return magazineobj.rent_price
    #         return None
    #     except MagazinePurchaseInfo.DoesNotExist as e:
    #         return None

    def get_total_order_price(self,obj):
        try:
            magazineobj = MagazinePurchaseInfo.objects.filter(id=obj.id).last()
            if magazineobj:
                if magazineobj.buy_price:
                    return magazineobj.buy_price
                elif magazineobj.rent_price:
                    return magazineobj.rent_price
                elif magazineobj.subscription_price:
                    return magazineobj.subscription_price
            return None
        except MagazinePurchaseInfo.DoesNotExist as e:
            return None

    # def get_price(self,obj):
    #     try:
    #         priceobj = MagazineInfo.objects.filter(id=obj.magazines.id).last()
    #         print(priceobj,'====data purchase===')
    #         if priceobj:
    #                 return priceobj.buy_price
    #         return None
    #     except MagazineOrderinfo.DoesNotExist as e:
    #         return None
    # def get_price(self,obj):
    #     try:
    #         purchaseobj = MagazinePurchaseInfo.objects.filter(id=obj.magazinePurchase.id).last()
    #         print(purchaseobj,'====data purchase===')
    #         if purchaseobj:
    #             buyobj=purchaseobj.buy_price
    #             print(buyobj,'====buy price')
    #             rentobj=purchaseobj.rent_price
    #             print(rentobj,'===rent price==')
    #             if buyobj:
    #                 return buyobj
    #             elif rentobj:
    #                 return rentobj
    #         return None
    #     except MagazineOrderinfo.DoesNotExist as e:
    #         return None

    def get_purchase_type(self,obj):
        if obj:
            return obj.purchases_type
        return None

    def get_magazine_id(self,obj):
        # magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        # if magazineobj:
        #     return magazineobj.id
        return None

    def get_magazine_name(self,obj):
        # magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        # if magazineobj:
        #     return magazineobj.name
        return None

    def get_magazine_ratting(self,obj):
        # magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        # if magazineobj:
        #     return magazineobj.ratting
        return None

    def get_magazine_price(self,obj):
        # magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        # if magazineobj:
        #     return magazineobj.buy_price
        return None


    def get_magazine_rent_price(self,obj):
        # magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        # if magazineobj:
        #     return magazineobj.rent_price
        return None

    # def get_magazine_rent_price(self,obj):
    #     magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
    #     if magazineobj:
    #         return magazineobj.rent_price
    #     return None

    def get_cover_pic(self,obj):
        return None
        # try:
        #     if obj:
        #         magazineobj=MagazineInfo.objects.filter(id=obj.magazineInfos.id).last()
        #         serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
        #         return serializer.data
        #     return None
        # except MagazineInfo.DoesNotExist:
        #     return None

    # def get_magazine_url(self,obj):
    #     try:
    #         if obj.id:
    #             magazineobj=MegazinePages.objects.filter(magazine=obj.magazine.id).last()
    #             if magazineobj:
    #                 serializer = MegazinePagesSerializer(magazineobj).data
    #                 return serializer
    #             return None
    #         return None
    #     except MagazineInfo.DoesNotExist:
    #         return None

    # def get_magazine_author(self,obj):
    #     auth = Author.objects.filter(id=obj.magazineInfos.author_id).all()
    #     if auth:
    #         return AuthorSerializer(auth,many=True).data
    #     return None

    def get_magazine_author(self,obj):
        # magazineobj = MagazineInfo.objects.filter(id=obj.magazineInfos.id).values_list('id',flat=True)
        # maputhorobj = MagMapAuthor.objects.filter(magazine__in=magazineobj)
        # authordata = PTestmagazineSerializer(maputhorobj,many=True)
        # if authordata:
        #     return authordata.data
        return None

    def get_user_id(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.id
        return None

    def get_user_name(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.first_name
        return None


# get magazine order History serializer
class ShowMagazineOrderHistorySerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    magazine_price = serializers.SerializerMethodField()
    magazine_rent_price = serializers.SerializerMethodField()
    magazine_author = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    magazine_ratting = serializers.SerializerMethodField()
    purchase_type = serializers.SerializerMethodField()
    # price = serializers.SerializerMethodField()
    class Meta:
        model = MagazineOrderinfo
        # fields = '__all__'
        fields = ['id','transaction_id','purchase_type','user_id','user_name','magazine_id','magazine_name','magazine_ratting','magazine_price','magazine_rent_price','magazine_author','cover_pic','created_on','updated_on']


    # def get_price(self,obj):
    #     try:
    #         priceobj = MagazineInfo.objects.filter(id=obj.magazines.id).last()
    #         print(priceobj,'====data purchase===')
    #         if priceobj:
    #                 return priceobj.buy_price
    #         return None
    #     except MagazineOrderinfo.DoesNotExist as e:
    #         return None
    # def get_price(self,obj):
    #     try:
    #         purchaseobj = MagazinePurchaseInfo.objects.filter(id=obj.magazinePurchase.id).last()
    #         print(purchaseobj,'====data purchase===')
    #         if purchaseobj:
    #             buyobj=purchaseobj.buy_price
    #             print(buyobj,'====buy price')
    #             rentobj=purchaseobj.rent_price
    #             print(rentobj,'===rent price==')
    #             if buyobj:
    #                 return buyobj
    #             elif rentobj:
    #                 return rentobj
    #         return None
    #     except MagazineOrderinfo.DoesNotExist as e:
    #         return None

    def get_purchase_type(self,obj):
        purchaseobj = MagazinePurchaseInfo.objects.filter(id=obj.magazinePurchase.id).last()
        if purchaseobj:
            return purchaseobj.purchases_type
        return None

    def get_magazine_id(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazines.id).last()
        if magazineobj:
            return magazineobj.id
        return None

    def get_magazine_name(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazines.id).last()
        if magazineobj:
            return magazineobj.name
        return None

    def get_magazine_ratting(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazines.id).last()
        if magazineobj:
            return magazineobj.ratting
        return None

    def get_magazine_price(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazines.id).last()
        if magazineobj:
            return magazineobj.buy_price
        return None


    def get_magazine_rent_price(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazines.id).last()
        if magazineobj:
            return magazineobj.rent_price
        return None

    def get_magazine_rent_price(self,obj):
        magazineobj = MagazineInfo.objects.filter(id=obj.magazines.id).last()
        if magazineobj:
            return magazineobj.rent_price
        return None

    def get_cover_pic(self,obj):
        try:
            if obj:
                magazineobj=MagazineInfo.objects.filter(id=obj.magazines.id).last()
                serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
                return serializer.data
            return None
        except MagazineInfo.DoesNotExist:
            return None

    # def get_magazine_url(self,obj):
    #     try:
    #         if obj.id:
    #             magazineobj=MegazinePages.objects.filter(magazine=obj.magazine.id).last()
    #             if magazineobj:
    #                 serializer = MegazinePagesSerializer(magazineobj).data
    #                 return serializer
    #             return None
    #         return None
    #     except MagazineInfo.DoesNotExist:
    #         return None

    def get_magazine_author(self,obj):
        auth = Author.objects.filter(id=obj.magazines.author_id).all()
        if auth:
            return AuthorSerializer(auth,many=True).data
        return None

    def get_user_id(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.id
        return None

    def get_user_name(self,obj):
        userobj = User.objects.filter(id=obj.users.id).last()
        if userobj:
            return userobj.first_name
        return None

    # def get_magazineOffer_id(self,obj):
    #     if obj.magazineOffers:
    #         return obj.magazineOffers.id
    #     return None

    # def get_magazinePurchase_id(self,obj):
    #     if obj.magazinePurchase:
    #         return obj.magazinePurchase.id
    #     return None


# post magazine Review serializer
class MagazineReviewInfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = magazineReviewInfo
        # fields = '__all__'
        fields = ['id','magazines','users','ratting','description','created_on','updated_on']
# update magazine Review serializer
class UpdateMagazineReviewInfoSerializer(serializers.ModelSerializer):
    class Meta:
        model = magazineReviewInfo
        # fields = '__all__'
        fields = ['id','magazines','users','ratting','description']

# show Review serializer
class ReviewInfoSerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    ratting = serializers.SerializerMethodField()
    description = serializers.SerializerMethodField()
    class Meta:
        model = magazineReviewInfo
        # fields = '__all__'
        fields = ['id','magazine_id','user_id','ratting','description','created_on','updated_on']

    def get_magazine_id(self,obj):
        if obj.magazines:
            return obj.magazines.id
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_ratting(self,obj):
        if obj.ratting:
            return obj.ratting
        return None

    def get_description(self,obj):
        if obj.description:
            return obj.description
        return None
    
# show Review list serializer
class ReviewInfoListSerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    class Meta:
        model = magazineReviewInfo
        # fields = '__all__'
        fields = ['id','magazine_id','user_id','ratting','description','created_on','updated_on']

    def get_magazine_id(self,obj):
        if obj.magazines:
            return obj.magazines.id
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

class profilepicSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['profile_pic',]
        
# get Magazine ReviewInfo History serializer
class MagazineReviewInfoHistorySerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    magazine_name = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    user_name = serializers.SerializerMethodField()
    cover_pic = serializers.SerializerMethodField()
    profile_pic = serializers.SerializerMethodField()
    magazine_by_ratting = serializers.SerializerMethodField()
    class Meta:
        model = magazineReviewInfo
        # fields = '__all__'
        fields = ['id','magazine_id','magazine_by_ratting','magazine_name','user_id','user_name','ratting','description','profile_pic','cover_pic','created_on','updated_on']

    def get_cover_pic(self,obj):
        try:
            if obj:
                magazineobj=MagazineInfo.objects.filter(id=obj.magazines.id).last()
                serializer = MagazineInfosCoverPicSerializer(magazineobj, many=False)
                return serializer.data
            return None
        except magazineReviewInfo.DoesNotExist:
            return None

    def get_magazine_id(self,obj):
        if obj.magazines:
            return obj.magazines.id
        return None

    def get_magazine_by_ratting(self,obj):
        if obj.magazines:
            return obj.magazines.ratting
        return None

    def get_user_id(self,obj):
        if obj.users:
            return obj.users.id
        return None

    def get_profile_pic(self,obj):
        try:
            if obj:
                magazineobj=User.objects.filter(id=obj.users.id).last()
                serializer = profilepicSerializer(magazineobj, many=False)
                return serializer.data
            return None
        except magazineReviewInfo.DoesNotExist:
            return None
    # def get_profile_pic(self,obj):
    #     try:
    #         if obj.users:
    #             return obj.users.profile_pic
    #         return None
    #     except magazineReviewInfo.DoesNotExist:
    #         return None
    def get_user_name(self,obj):
        if obj.users:
            return obj.users.first_name
        return None

    def get_magazine_name(self,obj):
        if obj.magazines:
            return obj.magazines.name
        return None

# Magazine Read Status serializer
class MagazineReadStatusSerializer(serializers.ModelSerializer):
    class Meta:
        model = MagazineReadStatus
        # fields = '__all__'
        fields = ['id','magazine','user','is_read_status','read_count','created_on','updated_on']


# show Magazine Read Status serializer
class ShowMGAReadStatusSerializer(serializers.ModelSerializer):
    magazine_id = serializers.SerializerMethodField()
    user_id = serializers.SerializerMethodField()
    class Meta:
        model = MagazineReadStatus
        # fields = '__all__'
        fields = ['id','magazine_id','user_id','is_read_status','created_on','updated_on']

    def get_magazine_id(self,obj):
        if obj.magazine:
            return obj.magazine.id
        return None

    def get_user_id(self,obj):
        if obj.user:
            return obj.user.id
        return None
   
class BlogDetailSerializer(serializers.ModelSerializer):
    published_by = serializers.SerializerMethodField()
    category = serializers.SerializerMethodField()
    # cover_image = serializers.SerializerMethodField()
    published_date = serializers.SerializerMethodField()
    class Meta:
        model = Blogs
        fields = ['id','title','published_by','content','category','cover_image','published_date']

    def get_published_by(self,obj):
        if obj.user:
            user = User.objects.filter(id=obj.user.id).last()
            return user.first_name + " " + user.last_name
        else:
            return ""
    
    def get_category(self,obj):
        if obj.category:
            categoryobj = MagazineCategory.objects.filter(id=obj.category.id).last()
            if categoryobj:
                return categoryobj.category_name
            else:
                return ''
        else:
            return ''

    # def get_cover_image(self,obj):
    #     if obj.cover_image:
    #         return obj.cover_image.url
            

    def get_published_date(self, obj):
        return obj.created_on

class UserAddressSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserAddress
        fields = '__all__'

class PostUserAddressSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserAddress
        fields = ['user','country','address1','address2']