def validate_message(self,request):
     if 'msgtype' in request.DATA:
         if request.DATA["msgtype"] == MessageEnum.ClubNotification and \
         UserUtil.checkClubNotificationAccess(request.user) == False:
             return False
         elif request.DATA["msgtype"] == MessageEnum.ClubConversation and \
         UserUtil.checkClubConversationAccess(request.user) == False:
             return False            
     return True
 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 set_guests(self,club,msids):
     try:
         term = Term.objects.get(id=club.curterm)
         if term:
             access = UserUtil.getExpectedAccess(MemberType.Guest)
             Membership.objects.filter(term__id__exact=term.id,id__in=msids).update(type=MemberType.Guest,access=access,status=True)
         
         #update club version!!! since the save() is not invoked with bulk update action
         club.save()
     except:
         pass
 def upd_mb(self,term,mss):
     try:
         for ms in mss:
             try:
                 rms = Membership.objects.get(id__exact=ms["id"])
                 rms.type = ms["type"]                    
                 rms.access = UserUtil.getExpectedAccess(ms["type"])
                 rms.save() 
             except:
                 pass
     except:
             pass
 def add_mbs(self,club,msids):
     try:
         #curTimeticks = int(time.mktime(datetime.now().timetuple())*1000) 
         #term = Term.objects.filter(club__id__exact=club.id,startdate__lt=curTimeticks,enddate__gt=curTimeticks).order_by('startdate')[0]
         term = Term.objects.get(id=club.curterm)
         if term:
             access = UserUtil.getExpectedAccess(MemberType.InactiveMember)
             Membership.objects.filter(term__id__exact=term.id,id__in=msids).update(type=MemberType.InactiveMember,access=access,status=True)
         
         #update club version!!! since the save() is not invoked with bulk update action
         club.save()
     except:
         pass
person.first_name = "tiger"
person.last_name = "napple"
person.username = "******"
person.displayname = "tiger gu"
person.email = "*****@*****.**"
person.set_password("d9b1d7db4cd6e70935368a1efb10e377")
person.note = "i am here"
person.phone = 13955544587
person.qq = "25364125"
person.weibo = "*****@*****.**"
person.location = "GZ"
person.is_staff = True
person.gender = 1

person.save()
membership = Membership(club=gnclub,term=gnclub_term, person=person,type=MemberType.ActiveMember,access=UserUtil.getExpectedAccess(MemberType.ActiveMember))
membership.save()
print(person.password)

person = Person()
person.tmid = 410000002
person.first_name = "peter"
person.last_name = "pan"
person.note = "i am here"
person.phone = 1395554887
person.username = "******"
person.displayname = "peter pan"
person.email = "*****@*****.**"
person.set_password("d9b1d7db4cd6e70935368a1efb10e377")
person.qq = "25364123235"
person.weibo = "*****@*****.**"
 def add_mb(self,term,ids):
     try:
         Membership.objects.filter(id__in=ids).update(type=MemberType.ActiveMember,\
                                                      access = UserUtil.getExpectedAccess(MemberType.ActiveMember))
     except:
         pass
    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)
 def approve_ccr(ccrid):
     ccr = None
     exclub = None
     
     try:
         ccr = CreateClubRequest.objects.get(id__exact=ccrid)
     except:
         pass
     
     try:
         exclub = Club.objects.get(tmid__exact=ccr.tmid)
     except:
         pass
     
     if exclub is None and ccr:
         club = Club()
         club.tmid = ccr.tmid
         club.fullname = ccr.fullname
         club.briefname = ccr.briefname
         club.address = ccr.address
         club.addressd = ccr.addressd
         
         club.mday = ccr.mday
         club.mtime = ccr.mtime
         
         club.conperson = ccr.conperson
         club.conphone = ccr.conphone
         
         club.email = ccr.email
         club.website = ccr.website
         club.qq = ccr.qq
         club.weibo = ccr.weibo
         club.facebook = ccr.facebook
         
         club.cdate = ccr.cdate            
         club.advanced = ccr.advanced            
         club.cstatus = 0 # set as created
         
         club.desc = ccr.desc            
         #process the location/section: district/area/division  country/province              
         club.location = ccr.location
         club.section = ccr.section
         
         club.active = True
         
         club.save()
         print("club: {} {}".format(club.id, club.fullname))            
         
         term = Term()
         term.startdate = int(time.mktime(datetime.now().timetuple())*1000)
         term.enddate = term.startdate + 16416000000 # half a year: 190*24*3600000
         term.club = club
         term.save()
         club.curterm = term.id
         club.save()
         print("term: {} {}".format(term.id, term.startdate))
         
         membership = Membership(club=club,term=term, person=ccr.user,type=MemberType.President,access=UserUtil.getExpectedAccess(MemberType.President))
         membership.save()
         print("membership(Set requester as President)# club:{} term:{} person: {}".format(membership.club.id, membership.club.id,membership.person.username))
         
         #the first club
         if Membership.objects.filter(person=ccr.user).count()==1:
             ccr.user.defclub = club.id
             ccr.user.save()
         
         msgcontent = "Congratulation! Club {} has bee setup with {} as president.".format(club.fullname,membership.person.username)
         MessageUtil.sendClubNty(club.id,club.fullname, club.id, msgcontent)
         
         print(msgcontent)
         CreateClubRequest.objects.filter(id__exact=ccrid).delete()
     else:
         print("This club has been created or the create request is not existed!")
         return False