def post_process(self,userid,displayname,serializer):
     try:
         club = serializer.object.club
         
         #curTimeticks = int(time.mktime(datetime.now().timetuple())*1000)
         #term = Term.objects.filter(club_id__exact=club.id,finished__exact=False,\
         #            startdate__lt=curTimeticks, enddate__gt=curTimeticks).order_by("startdate")[0]
         term = Term.objects.get(id=club.curterm)
         
         person = Person.objects.get(id__exact=userid)
         
         #P1 update person profile if required
         if len(displayname) > 2:
             person.displayname = displayname
             person.save()
             
         #P2 get_or_create Membership
         ms, created = Membership.objects.get_or_create(club=club, term=term, person=person)
         ms.type = MemberType.Applicant
         ms.access=UserUtil.getExpectedAccess(MemberType.Applicant)
         ms.status = True
         ms.save()
         
         #P3 send club to person notification
         try:
             msgfname = club.fullname
         except:
             msgfname = club.briefname
         msgcontent = "Your request to join club {} is being handled.".format(msgfname)
         MessageUtil.sendClubToPersonNty(club.id,msgfname,userid, msgcontent)
     except:
         pass
 def reject_ccr(ccrid,reason):
     ccr = None        
     try:
         ccr = CreateClubRequest.objects.get(id__exact=ccrid)
     except:
         pass
     
     if ccr:
         try:
             msgcontent = "Sorry, the request to create the Club {} has been rejected as '{}'.".format(ccr.fullname,reason)
             MessageUtil.sendClubToPersonNty(0, "System", ccr.user.id, msgcontent)                
             CreateClubRequest.objects.filter(id__exact=ccrid).delete()                
             print("The create request is deleted!")
         except:
             pass
     else:
         print("The create request is not existed!")
         return False
    def post(self, request, *args, **kwargs):
        respData = {"errorcode":""}
        
        try:
            clubid = int(kwargs['clubid'])
            pk = int(kwargs['pk'])
        except:
            respData["errorcode"] = "Invalid club or request!"
            return Response(respData, status=status.HTTP_400_BAD_REQUEST)
        
        try:
            action = int(request.GET.get("action"))
        except:
            pass

        joinreq = self.get_object(pk)            
        requestDATA = {}
        requestDATA["id"] = pk
        
        if action == 1:
            requestDATA["status"] = JoinClubReqStatus.APPROVED
        elif action == 2:
            requestDATA["status"] = JoinClubReqStatus.REJECTED
            requestDATA["comment"] = request.DATA["comment"]
        else:
            requestDATA["status"] = JoinClubReqStatus.DETAILED        

        serializer = JoinClubUpdateSerializer(joinreq, data=requestDATA)
        if serializer.is_valid():
            serializer.save()
            club = serializer.object.club
            person = Person.objects.get(id__exact=serializer.object.user.id)
            #curTimeticks = int(time.mktime(datetime.now().timetuple())*1000)
            #term = Term.objects.filter(club_id__exact=club.id,finished__exact=False,\
            #            startdate__lt=curTimeticks, enddate__gt=curTimeticks).order_by("startdate")[0]
            term = Term.objects.get(id=club.curterm)
            if action == 1:
                access = UserUtil.getExpectedAccess(joinreq.type)
                Membership.objects.filter(club_id__exact=club.id, term_id__exact=term.id,\
                                 person_id__exact=person.id).update(access=access,type=joinreq.type)
                                 
                #the first club
                if Membership.objects.filter(person=person).count()==1:                
                    person.defclub = club.id
                    person.save()
                
                #send club notification to all club member
                try:
                    msgfname = club.fullname
                except:
                    msgfname = club.briefname
                msgcontent = "Welcome! {} has joined {}.".format(person.get_identification(),msgfname)
                MessageUtil.sendClubNty(club.id,msgfname,club.id, msgcontent)
            elif action == 2:
                Membership.objects.filter(club_id__exact=club.id, term_id__exact=term.id,person_id__exact=person.id).delete()
                                
                #send club notification to person
                try:
                    msgfname = club.fullname
                except:
                    msgfname = club.briefname
                msgcontent = "Your request to join {} has been rejected.".format(msgfname)
                if "comment" in request.DATA and len(request.DATA["comment"])>0:
                    msgcontent += "The reason is '{}'.".format(request.DATA["comment"])
                MessageUtil.sendClubToPersonNty(club.id, msgfname,person.id, msgcontent)

            return Response(serializer.data)
        else:
            respData["errorcode"] = "Invalid club or request!"
            return Response(respData, status=status.HTTP_400_BAD_REQUEST)