Esempio n. 1
0
    def countRecordedMeals(self, beneficiary_id):
        result = {}

        try:

            engine = db
            #create a Session
            Session = sessionmaker(bind=engine)
            session = Session()
            res = session.query(
                func.count(FoodAndBeverage.id).label("mealscounter")).filter(
                    FoodAndBeverage.beneficiary_id == beneficiary_id).first()
            if res.mealscounter is None:
                awarded_points = 0
            else:
                awarded_points = res.mealscounter

            result["NumberOfMeals"] = awarded_points
            result["Message"] = "Meals count obtained successfully"

        except Exception as e:
            result["NumberOfMeals"] = -1
            result["Message"] = e

        session.close()
        engine.dispose()
        dbconn.close()

        return (json.JSONEncoder().encode(result))
Esempio n. 2
0
    def countRecordedMeals(self,beneficiary_id):
      result={}

      try:
        
        engine=db
        #create a Session
        Session = sessionmaker(bind=engine)
        session = Session()
        res = session.query(func.count(FoodAndBeverage.id).label("mealscounter")).filter(FoodAndBeverage.beneficiary_id==beneficiary_id).first()
        if res.mealscounter is None:
          awarded_points=0;
        else:
          awarded_points=res.mealscounter



        result["NumberOfMeals"]=awarded_points
        result["Message"]="Meals count obtained successfully"


      except Exception as e:
        result["NumberOfMeals"]=-1
        result["Message"]=e

      session.close()
      engine.dispose()
      dbconn.close()

      return (json.JSONEncoder().encode(result))
    def retrieveIntermediaryClickPoints(self):
        result = {}
        try:
            #engine=create_engine('mysql://*****:*****@localhost/wellness', echo=False)
            engine = db
            # create a Session
            Session = sessionmaker(bind=engine)
            session = Session()

            #if self.last_date_specified==1:
            #    day=self.myjson["Day"]
            #    if day=="Today":
            #       day=datetime.date.today()

            #res= session.query(func.sum(Points.scoredpoints).label("sum_points")).filter(Points.intermediary_id==self.intermediary_id).filter(Points.datecaptured<=day).first()
            #get points by number of days an application has been used.
            #res=session.query(func.count(distinct(Points.datecaptured)).label("sum_points")).filter(Points.intermediary_id==self.intermediary_id).filter(Points.datecaptured<=day).first()
            #else:
            #res= session.query(func.sum(Points.scoredpoints).label("sum_points")).filter(Points.intermediary_id==self.intermediary_id).first()
            res = session.query(
                func.count(distinct(Points.datecaptured)).label("sum_points")
            ).filter(Points.intermediary_id == self.intermediary_id).first()

            retrieved_points_sum = 0  # initialize how many distinct dates are in the database
            #for retrieved_points_sum in res:
            #     break

            if res.sum_points is None:

                retrieved_points_sum = "0"
                result["message"] = "You have no points"
                result["points"] = int(retrieved_points_sum)
            else:
                result["message"] = "You have some points so far."
                retrieved_points_sum = int(res.sum_points)
                result["points"] = int(retrieved_points_sum)

            session.close()
            engine.dispose()
            dbconn.close()

            return (json.JSONEncoder().encode(result))

        except Exception as e:

            #print "Content-type: text/html\n"
            session.close()
            engine.dispose()
            dbconn.close()

            result["message"] = "Error: %s" % e
            print "Exception thrown in function getIntermediaryClickPoints(): %s" % e
            print "The day captured=%s" % day
            return (json.JSONEncoder().encode(result))
Esempio n. 4
0
    def retrieveIntermediaryClickPoints(self):
        result={}       
        try:
                         
            #engine=create_engine('mysql://*****:*****@localhost/wellness', echo=False) 
            engine=db
            # create a Session
            Session = sessionmaker(bind=engine)
            session = Session()
                                


            res=session.query(func.count(distinct(Points.datecaptured)).label("sum_points")).filter(Points.intermediary_id==self.intermediary_id).first()


            
            retrieved_points_sum=0# initialize how many distinct dates are in the database
                      
            
            
            if res.sum_points is None:
                
                 
                retrieved_points_sum="0"
                result["message"]="You have no points"
                result["points"]=int(retrieved_points_sum)
            else: 
                result["message"]="You have some points so far."
                retrieved_points_sum=int(res.sum_points)
                result["points"]=int(retrieved_points_sum)




            session.close()
            engine.dispose()
            dbconn.close()
                 
            return (json.JSONEncoder().encode(result))                   
                                 
        except Exception as e:
                       
            #print "Content-type: text/html\n" 
            session.close()
            engine.dispose() 
            dbconn.close()
                              
            result["message"]="Error: %s"%e
            print "Exception thrown in function getIntermediaryClickPoints(): %s"%e
            print "The day captured=%s"%day
            return (json.JSONEncoder().encode(result))
Esempio n. 5
0
    def retrieveIntermediaryClickPoints(self):
        result = {}
        try:

            #engine=create_engine('mysql://*****:*****@localhost/wellness', echo=False)
            engine = db
            # create a Session
            Session = sessionmaker(bind=engine)
            session = Session()

            res = session.query(
                func.count(distinct(Points.datecaptured)).label("sum_points")
            ).filter(Points.intermediary_id == self.intermediary_id).first()

            retrieved_points_sum = 0  # initialize how many distinct dates are in the database

            if res.sum_points is None:

                retrieved_points_sum = "0"
                result["message"] = "You have no points"
                result["points"] = int(retrieved_points_sum)
            else:
                result["message"] = "You have some points so far."
                retrieved_points_sum = int(res.sum_points)
                result["points"] = int(retrieved_points_sum)

            session.close()
            engine.dispose()
            dbconn.close()

            return (json.JSONEncoder().encode(result))

        except Exception as e:

            #print "Content-type: text/html\n"
            session.close()
            engine.dispose()
            dbconn.close()

            result["message"] = "Error: %s" % e
            print "Exception thrown in function getIntermediaryClickPoints(): %s" % e
            print "The day captured=%s" % day
            return (json.JSONEncoder().encode(result))
    def getSteps(self, beneficiary_id):

        try:
            engine = db
            #create a Session
            Session = sessionmaker(bind=engine)
            session = Session()

            currentdate = datetime.date.today()

            #get the date for the first day of this week
            day_of_week = currentdate.weekday()
            week_start_date = currentdate - datetime.timedelta(
                days=day_of_week)

            res = session.query(
                func.sum(PhysicalActivity.stepscounter).label("sum_steps")
            ).filter(PhysicalActivity.beneficiary_id == beneficiary_id).filter(
                PhysicalActivity.datecaptured >= week_start_date).filter(
                    PhysicalActivity.datecaptured <= currentdate).first()

            if res.sum_steps == None:
                sum_steps = 0
            else:
                sum_steps = int(res.sum_steps)
            result = {}
            result["steps"] = sum_steps

        except Exception as e:
            print "Exception thrown in function getSteps(): %s" % e
            result["steps"] = 0
            result["dates_counter"] = 1

        #self.steps=sum_steps
        session.close()
        engine.dispose()
        dbconn.close()

        return (json.JSONEncoder().encode(result))
Esempio n. 7
0
    def getSteps(self, beneficiary_id):

        try:
            engine = db
            # create a Session
            Session = sessionmaker(bind=engine)
            session = Session()
            if self.last_date_specified == 1:
                day = self.myjson["Day"]
                if day == "Today":
                    day = datetime.date.today()
                res = (
                    session.query(func.sum(PhysicalActivity.stepscounter).label("sum_steps"))
                    .filter(PhysicalActivity.beneficiary_id == beneficiary_id)
                    .filter(PhysicalActivity.datecaptured <= day)
                    .first()
                )

            else:

                res = (
                    session.query(func.sum(PhysicalActivity.stepscounter).label("sum_steps"))
                    .filter(PhysicalActivity.beneficiary_id == beneficiary_id)
                    .first()
                )

            if res.sum_steps == None:
                sum_steps = 0
            else:
                sum_steps = int(res.sum_steps)
            result = {}
            result["steps"] = sum_steps

            if self.last_date_specified == 1:
                res = (
                    session.query(func.min(PhysicalActivity.datecaptured).label("min_date"))
                    .filter(PhysicalActivity.beneficiary_id == beneficiary_id)
                    .filter(PhysicalActivity.datecaptured <= day)
                    .first()
                )
            else:
                res = (
                    session.query(func.min(PhysicalActivity.datecaptured).label("min_date"))
                    .filter(PhysicalActivity.beneficiary_id == beneficiary_id)
                    .first()
                )

            min_date = res.min_date

            if self.last_date_specified == 1:
                max_date = self.myjson["Day"]
                if max_date == "Today":
                    max_date = datetime.date.today()
                else:
                    max_date = datetime.datetime.strptime(max_date, "%Y-%m-%d").date()
            else:
                max_date = datetime.date.today()

            if min_date is None:
                dates_difference = 1
            else:
                delta = max_date - min_date
                dates_difference = delta.days + 1
                if min_date > max_date:
                    dates_difference = 1

            result["dates_counter"] = dates_difference

        except Exception as e:
            print "Exception thrown in function getSteps(): %s" % e
            result["steps"] = 0
            result["dates_counter"] = 1

        # self.steps=sum_steps
        session.close()
        engine.dispose()
        dbconn.close()

        return json.JSONEncoder().encode(result)
Esempio n. 8
0
    def retrieveIntermediaryClickPoints(self):
        result = {}
        try:
            # engine=create_engine('mysql://*****:*****@localhost/wellness', echo=False)
            engine = db
            # create a Session
            Session = sessionmaker(bind=engine)
            session = Session()

            if self.last_date_specified == 1:
                day = self.myjson["Day"]
                if day == "Today":
                    day = datetime.date.today()

                res = (
                    session.query(func.sum(Points.scoredpoints).label("sum_points"))
                    .filter(Points.intermediary_id == self.intermediary_id)
                    .filter(Points.datecaptured <= day)
                    .first()
                )
            else:
                res = (
                    session.query(func.sum(Points.scoredpoints).label("sum_points"))
                    .filter(Points.intermediary_id == self.intermediary_id)
                    .first()
                )

            retrieved_points_sum = 0  # initialize how many distinct dates are in the database
            for retrieved_points_sum in res:
                break

            if res.sum_points is None:

                retrieved_points_sum = "0"
                result["message"] = "You have no points"
                result["points"] = int(retrieved_points_sum)
            else:
                result["message"] = "You have some points so far."

                result["points"] = int(retrieved_points_sum)

            if self.last_date_specified == 1:
                res = (
                    session.query(func.min(Points.datecaptured).label("min_date"))
                    .filter(Points.intermediary_id == self.intermediary_id)
                    .filter(Points.datecaptured <= day)
                    .first()
                )
            else:
                res = (
                    session.query(func.min(Points.datecaptured).label("min_date"))
                    .filter(Points.intermediary_id == self.intermediary_id)
                    .first()
                )

            min_date = res.min_date

            if self.last_date_specified == 1:
                max_date = self.myjson["Day"]
                if max_date == "Today":
                    max_date = datetime.date.today()
                else:

                    max_date = datetime.datetime.strptime(max_date, "%Y-%m-%d").date()

            else:
                max_date = datetime.date.today()

            if min_date is None:
                dates_difference = 1
            else:
                delta = max_date - min_date
                dates_difference = delta.days + 1
                if min_date > max_date:
                    dates_difference = 1

            result["dates_counter"] = dates_difference

            session.close()
            engine.dispose()
            dbconn.close()

            return json.JSONEncoder().encode(result)

        except Exception as e:

            # print "Content-type: text/html\n"
            session.close()
            engine.dispose()
            dbconn.close()

            result["message"] = "Error: %s" % e
            print "Exception thrown in function getIntermediaryClickPoints(): %s" % e
            print "The day captured=%s" % day
            return json.JSONEncoder().encode(result)
Esempio n. 9
0
    def getSteps(self,beneficiary_id):
        

        try:
            engine=db
            #create a Session
            Session = sessionmaker(bind=engine)
            session = Session()
            #if self.last_date_specified==1:
            #    day=self.myjson["Day"]
            #    if day == "Today":
            #        day=datetime.date.today()
            #    res=session.query(func.sum(PhysicalActivity.stepscounter).label("sum_steps")).filter(PhysicalActivity.beneficiary_id==beneficiary_id).filter(PhysicalActivity.datecaptured<=day).first()
         
            #else:
            currentdate=datetime.date.today()
            
            #get the date for the first day of this week
            day_of_week=currentdate.weekday()
            week_start_date=currentdate-datetime.timedelta(days=day_of_week)            
            
          
            
 
            res=session.query(func.sum(PhysicalActivity.stepscounter).label("sum_steps")).filter(PhysicalActivity.beneficiary_id==beneficiary_id).filter(PhysicalActivity.datecaptured>=week_start_date).filter(PhysicalActivity.datecaptured<=currentdate).first()
            
            
            if res.sum_steps==None:
                sum_steps=0
            else:
                sum_steps=int(res.sum_steps)
            result={}
            result["steps"]=sum_steps
            
            #comment code for counting the number of days 
            '''
            if self.last_date_specified==1:
                res=session.query(func.min(PhysicalActivity.datecaptured).label("min_date")).filter(PhysicalActivity.beneficiary_id==beneficiary_id).filter(PhysicalActivity.datecaptured<=day).first()
            else: 
                res=session.query(func.min(PhysicalActivity.datecaptured).label("min_date")).filter(PhysicalActivity.beneficiary_id==beneficiary_id).first()
            
            min_date=res.min_date 

            

            if self.last_date_specified==1:
                max_date=self.myjson["Day"]
                if max_date=="Today":
                    max_date=datetime.date.today()
                else:
                    max_date=datetime.datetime.strptime(max_date , '%Y-%m-%d').date()
            else:
                max_date=datetime.date.today()

            
            if min_date is None:
                dates_difference=1
            else:
                delta=max_date-min_date
                dates_difference=delta.days+1
                if min_date>max_date:
                    dates_difference=1
        
            result["dates_counter"]=dates_difference
            '''   

        except Exception as e:
            print "Exception thrown in function getSteps(): %s"%e 
            result["steps"]=0
            result["dates_counter"]=1
        
        
        #self.steps=sum_steps
        session.close()
        engine.dispose()
        dbconn.close()

        return (json.JSONEncoder().encode(result))
Esempio n. 10
0
    def retrieveIndividualBadge(self):

         result={}

         try:


              varmyjson={'Day':"Today"}
              myjson={'Fname':'Dummy','Lname':'Dummy','Username':self.intermediary_id}
              obj=RetrieveIntermediary(myjson)
              res=obj.isAssignedBeneficiary()

              beneficiary_tuple=json.loads(res)
              b_id=beneficiary_tuple["Id"]
              if b_id==None :
                  raise ValueError('This individual is not assigned a beneficiary')

        
              clickPointsObj=RetrievePoints(varmyjson,self.intermediary_id,1)
              resclickpoints=clickPointsObj.retrieveIntermediaryClickPoints()
              resclickpoints=json.loads(resclickpoints)
        
              #clickpoints=int(resclickpoints["points"]/resclickpoints["dates_counter"])
              clickpoints=int(resclickpoints["points"])
              if clickpoints>18:
                  clickpoints=18
        
        
              ressteps=clickPointsObj.getSteps(b_id)
              ressteps=json.loads(ressteps)
        
        
              #stepspoints=int(ressteps["steps"]/(100*ressteps["dates_counter"]))
              
              stepspoints=int(ressteps["steps"])
        
        
        
              if stepspoints>70000:
                  stepspoints=70000
        
              badges_urls=[]
        
        
              
              if stepspoints>=70000:
                  if clickpoints>=18:
                     badges.append("Queen")
                     badges_urls.append("http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/queen.jpeg")
                  else:
                     badges.append("No promotion")
                     
              elif stepspoints>=63000:
                  if clickpoints>=16:
                     badges.append("Princess")
                     badges_urls.append("http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/princess.jpeg")
                  else:
                     badges.append("No promotion") 
                     badges_urls.append("http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/duchess.jpeg")
              elif stepspoints>=56000:
                  if clickpoints>=14:
                     badges.append("Duchess")
                     badges_urls.append("http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/duchess.jpeg")
                  else:
                     badges.append("No promotion")
                     badges_urls.append("http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/grandmaster.jpeg")
              elif stepspoints>=49000:
                  if clickpoints>=12:
                     badges.append("Grand Master")
                     badges_urls.append("http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/grandmaster.jpeg")
                  else:
                     badges.append("No promotion")
                     badges_urls.append("http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/seniormaster.jpeg")

              elif stepspoints>=42000:
                  if clickpoints>=10:
                     badges.append("Senior Master")
                     badges_urls.append("http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/seniormaster.jpeg")
                  else:
                     badges.append("No promotion")
                     badges_urls.append("http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/master.jpeg")
              elif stepspoints>=31500:
                  if clickpoints>=8:
                     badges.append("Master")
                     badges_urls.append("http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/master.jpeg")
                  else:
                     badges.append("No promotion")               
                     badges_urls.append("http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/juniormaster.jpeg")
              if stepspoints>=21000:
                  if clickpoints>=4:
                     badges.append("Junior Master")
                     badges_urls.append("http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/juniormaster.jpeg")
                  else:
                     badges.append("No promotion")
                     badges_urls.append("http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/seniorservant.jpeg")
              elif stepspoints>=14000:
                  if clickpoints>=2:
                     badges.append("Senior Servant")
                     badges_urls.append("http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/seniorservant.jpeg")
                  else:
                     badges.append("No Promotion") 
                     badges_urls.append("http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/servant.jpeg")
              if stepspoints>=7000:
                  if clickpoints>=1:
                     badges.append("Servant")
                     badges_urls.append("http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/servant.jpeg")
                  else:
                     badges.append("No promotion")
                     badges_urls.append("http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/slave.jpeg")
              else:
                  badges.append("Slave")
                  badges_urls.append("http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/slave.jpeg")
                       

              num=randint(2,49)
              obj=RetrieveSound(num)
              res=obj.retrieveSoundUrl()
              res=json.loads(res)
                
              sound_url=res["url"]              
              result={"R00":{"D0":"Badge Acquired","D1":badges_urls[0],"D2":sound_url}}

              
              

         except Exception as e:
              message="An exception was thrown in function retrieveIndividualScore(): %s"%e
              result={"R00":{"D0":message,"D1":"http://ict4d01.cs.uct.ac.za/static/django_facebook/images/nobadge.jpeg","D2":"Error"}}

         session.close()
         engine.dispose()
         dbconn.close()















    
         return (json.JSONEncoder().encode(result))
Esempio n. 11
0
     def get_monthly_steps(self,startdate,enddate):
          errorcode={}
          weekly_activity_tuple={}
          try:
               
               day_of_week = startdate.weekday()
               week_start_date=startdate    
               #week_end_date=(startdate-datetime.timedelta(days=day_of_week))+datetime.timedelta(days=6)
               week_end_date=startdate+datetime.timedelta(days=6)
             
               
                         
                            
               
               key1="R"
               key2="F"
               first_posn=0
               second_posn=0

               days_iterator=0
               weeks_iterator=1
               
               total_weekly_steps=0
               
               
               
               activity_tuples={} 
               found_data=0
               
               


               if(week_end_date>enddate): # make sure week end date is not greater than the current end date 
                    week_end_date=enddate
               
               daily_activity_tuple=None
               weekly_activity_tuple={}
               
               
               engine=db
               #create a Session
               Session = sessionmaker(bind=engine)
               session = Session()
               
               while((week_start_date>=startdate) and (week_start_date<=enddate)):
                        
                    weekly_activity_tuple={}
                    daily_activity_tuple=None
                    total_weekly_steps=0
                    
                    if week_end_date<enddate:
                        days_iterator=7
                    else:
                        diff=week_end_date-week_start_date
                        days_iterator=diff.days+1
                    
                    

                   # daily_activity_tuple=json.loads(self.get_weekly_steps(week_start_date,week_end_date))
                    #steps=0
                    res=session.query(func.sum(PhysicalActivity.stepscounter).label("sum_steps")).filter(PhysicalActivity.beneficiary_id==self.b_id).filter(PhysicalActivity.datecaptured>=week_start_date).filter(PhysicalActivity.datecaptured<=week_end_date).order_by(PhysicalActivity.datecaptured).first()
                    if res.sum_steps==None:
                         pass
                    else:
                         total_weekly_steps=int(res.sum_steps)
                         
                    
                    
                     
                         
                    if total_weekly_steps > 0:
                         found_data=found_data+1            

    
                    
                    
              
                    
                 
                    
                         
                    #weekly_activity_tuple[key2+"%d"%second_posn]="Week %s"%weeks_iterator
                    weekly_activity_tuple[key2+"%d"%second_posn]="%s-%s"%(week_start_date.strftime("%d"),week_end_date.strftime("%d"))
                    second_posn=second_posn+1
                    weeks_iterator=weeks_iterator+1
                                                                                                                                                                                  
                                                                                                                                                                                  
                    if(days_iterator>0):
                         weekly_activity_tuple[key2+"%d"%second_posn]=total_weekly_steps/days_iterator
                         second_posn=0
                    else:
                         weekly_activity_tuple[key2+"%d"%second_posn]=0 
                         second_posn=0
                    
                    
                    if first_posn<10:
                         key1="R0"
                    else:
                         key1="R"
                                                                                                                                                 
                    activity_tuples[key1+"%d"%first_posn]=weekly_activity_tuple
                    
                    first_posn=first_posn+1
                    
                    
                    week_start_date=week_end_date+datetime.timedelta(days=1)# move to next monday
                    week_end_date=week_start_date+datetime.timedelta(days=6)# move to next sunday 
                    
 
                    
                    if(week_end_date>enddate):
                         week_end_date=enddate#for the next iteration     
                    
                    
               session.close()
               engine.dispose()
               dbconn.close()

               if(found_data>0):
                    return(json.JSONEncoder().encode(OrderedDict(sorted(activity_tuples.items(), key=lambda t: t[0]))))
               
       
               
                    #errorcode["error"]=-4
               activity_tuples={}
               first_posn=0
               weekly_activity_tuple[key2+"%d"%second_posn]="No week"
               second_posn=second_posn+1
                                                                                                                                                                                  
                                                                                                                                                                                  
               weekly_activity_tuple[key2+"%d"%second_posn]=-4
               second_posn=0 
               if first_posn<10:
                    key1="R0"
               else:
                    key1="R"
                                                                                                                                                 
               activity_tuples[key1+"%d"%first_posn]=weekly_activity_tuple
                                                                                                                                               
               first_posn=first_posn+1 
               activity_tuple={}
               return(json.JSONEncoder().encode(OrderedDict(sorted(activity_tuples.items(), key=lambda t: t[0]))))  

              
          except Exception as e:
               session.close()
               engine.dispose()
               dbconn.close()

               second_posn=0 
               weekly_activity_tuple[key2+"%d"%second_posn]="%s"%e
               second_posn=second_posn+1
                                                                                                                                                                             
                                                                                                                                                                             
               weekly_activity_tuple[key2+"%d"%second_posn]=-1
               second_posn=0 
               if first_posn<10:
                    key1="R0"
               else:
                    key1="R"
                                                                                                                                            
               activity_tuples[key1+"%d"%first_posn]=weekly_activity_tuple
                                                                                                                                          
               first_posn=first_posn+1 
               weekly_activity_tuple={}
               return(json.JSONEncoder().encode(activity_tuples))
Esempio n. 12
0
     def get_weekly_steps(self,startdate,enddate):
          
          errorcode={}
          daily_activity_tuple={}
          try:
               
               key1="R"
               key2="F"
               first_posn=0
               second_posn=0
               #previousdate_string=None
               current_retrieved_date_string=""
               
               
               step_sum_by_date=0
               
        
               activity_tuples={} 
               #current_date_searched=startdate
               #number_of_tuples_counted=0
               #week_num_of_days=7 # the week has seven days. We will use this variable to determine if the total number of dates counted from the database is less than number of days in week
               num_of_weekdays_iterated=0# keeping track of the positiion within a seven days week.          
               weekdays_clusters=['Mon','Tue','Wed','Thur','Frid','Sat','Sun']
               
               #weekday=enddate.weekday()# is for checking if a week is shorter when this function is used by get_manth_data
               
               found_data=0
               day=""
               engine=db
               #create a Session
               Session = sessionmaker(bind=engine)
               session = Session()
               
               #new code
               daily_activity_tuple={}
               while(startdate<=enddate):
                        
                    day_of_week=startdate.weekday()     
                          
                    day=weekdays_clusters[day_of_week]
               
               #for week_day in weekdays_clusters:
                    #activity_tuple=json.loads(self.get_daily_steps(startdate, startdate))
                    daily_activity_tuple={}
                    hourly_activity_tuple=None
                    total_daily_steps=0
                    
                              
                    #activity_tuple=json.JSONDecoder.decode(self.get_daily_steps(startdate, startdate))
                    #activity_tuple=json.JSONDecoder.decode(self.get_daily_steps(startdate, startdate), _w=WHITESPACE.match)
                    #hourly_activity_tuple=json.loads(self.get_daily_steps(startdate, startdate))
                    
                    
                    
                    
                    
                    
                    #exception_info=""
                    
                    #steps=0
                    
                    res=session.query(func.sum(PhysicalActivity.stepscounter).label("sum_steps")).filter(PhysicalActivity.beneficiary_id==self.b_id).filter(PhysicalActivity.datecaptured==startdate).order_by(PhysicalActivity.datecaptured).first()
                    if res.sum_steps==None:
                         pass
                    else:
                         total_daily_steps=int(res.sum_steps)
                         
                         
                    startdate=startdate+datetime.timedelta(days=1)#move to the next day
                    

                         
                    if total_daily_steps > 0:
                         found_data=found_data+1
                    
                         
                         
                    daily_activity_tuple[key2+"%d"%second_posn]=day
                    second_posn=second_posn+1
                    
                                                                                                                                                                                  
                                                                                                                                                                                  
                    daily_activity_tuple[key2+"%d"%second_posn]=total_daily_steps
                    second_posn=0
                    
                    
                    if first_posn<10:
                         key1="R0"
                    else:
                         key1="R"
                                                                                                                                                 
                    activity_tuples[key1+"%d"%first_posn]=daily_activity_tuple
                    
                    first_posn=first_posn+1
                    total_daily_steps=0
                    
                    #if(num_of_weekdays_iterated==weekday):# we have encontered the end of the week. This is for shorter weeks within the month
                    #     break
                    #num_of_weekdays_iterated=num_of_weekdays_iterated+1     
               
               
               
               
               #end of new code
               
               session.close()
               engine.dispose()
               dbconn.close()
                 
               if(found_data > 0):
                    return(json.JSONEncoder().encode(OrderedDict(sorted(activity_tuples.items(), key=lambda t: t[0]))))
               else:
                    #errorcode["error"]=-4
                    activity_tuples={}
                    first_posn=0
                    daily_activity_tuple[key2+"%d"%second_posn]="No day"
                    second_posn=second_posn+1
                                                                                                                                                                                  
                                                                                                                                                                                  
                    daily_activity_tuple[key2+"%d"%second_posn]=-4
                    second_posn=0 
                    if first_posn<10:
                         key1="R0"
                    else:
                         key1="R"
                                                                                                                                                 
                    activity_tuples[key1+"%d"%first_posn]=daily_activity_tuple
                                                                                                                                               
                    first_posn=first_posn+1 
                    activity_tuple={}
                    return(json.JSONEncoder().encode(OrderedDict(sorted(activity_tuples.items(), key=lambda t: t[0]))))  

                    #return (json.JSONEncoder().encode(errorcode))                    
                                     
               
               
          except Exception as e:
               session.close()
               engine.dispose()
               dbconn.close() 
               second_posn=0
               
               daily_activity_tuple[key2+"%d"%second_posn]="%s"%e
               second_posn=second_posn+1
                                                                                                                                                                             
                                                                                                                                                                             
               daily_activity_tuple[key2+"%d"%second_posn]=-1
               second_posn=0 
               if first_posn<10:
                    key1="R0"
               else:
                    key1="R"
                                                                                                                                            
               activity_tuples[key1+"%d"%first_posn]=daily_activity_tuple
                                                                                                                                          
               first_posn=first_posn+1 
               daily_activity_tuple={}
               return(json.JSONEncoder().encode(activity_tuples)) 
    def getSteps(self,beneficiary_id):
        

        try:
            engine=db
            #create a Session
            Session = sessionmaker(bind=engine)
            session = Session()
            #if self.last_date_specified==1:
            #    day=self.myjson["Day"]
            #    if day == "Today":
            #        day=datetime.date.today()
            #    res=session.query(func.sum(PhysicalActivity.stepscounter).label("sum_steps")).filter(PhysicalActivity.beneficiary_id==beneficiary_id).filter(PhysicalActivity.datecaptured<=day).first()
         
            #else:
            currentdate=datetime.date.today()
            
            #get the date for the first day of this week
            day_of_week=currentdate.weekday()
            week_start_date=currentdate-datetime.timedelta(days=day_of_week)   
            
            #get the first and end date of last week
            previous_week_end_date=week_start_date-datetime.timedelta(days=1) #go to last sunday
            previous_week_start_date=previous_week_end_date-datetime.timedelta(days=6)#go to last monday
            
            #get the first and end date of the week before last week
            previous_previous_week_end_date=previous_week_start_date-datetime.timedelta(days=1) #go to last sunday of the week before last week
            previous_previous_week_start_date=previous_previous_week_end_date-datetime.timedelta(days=6)#go to last monday of the week before last week
          
            
 
            res=session.query(func.sum(PhysicalActivity.stepscounter).label("sum_steps")).filter(PhysicalActivity.beneficiary_id==beneficiary_id).filter(PhysicalActivity.datecaptured>=previous_week_start_date).filter(PhysicalActivity.datecaptured<=previous_week_end_date).first()
            
            
            if res.sum_steps==None:
                sum_steps1=0
            else:
                sum_steps1=int(res.sum_steps)
            result={}
            result["steps1"]=sum_steps1
            
            
            res=session.query(func.sum(PhysicalActivity.stepscounter).label("sum_steps")).filter(PhysicalActivity.beneficiary_id==beneficiary_id).filter(PhysicalActivity.datecaptured>=previous_previous_week_start_date).filter(PhysicalActivity.datecaptured<=previous_previous_week_end_date).first()
            
            
            if res.sum_steps==None:
                sum_steps2=0
            else:
                sum_steps2=int(res.sum_steps)
          
            result["steps2"]=sum_steps2
            
            
            

        except Exception as e:
            print "Exception thrown in function getSteps(): %s"%e 
            result={}
            result["steps1"]=0
            result["steps2"]=0
            result["dates_counter"]=1
        
        
        #self.steps=sum_steps
        session.close()
        engine.dispose()
        dbconn.close()
      
        return (json.JSONEncoder().encode(result))
Esempio n. 14
0
     def uploadActivity(self):
          
          self.lock.acquire()          
          self.modify=1
          self.counter=0 
          result={}
          try:
               stepsarray=self.myjson["header"]["steps"]
               datecapturedarray=self.myjson["header"]["datecaptured"]
               starthrarray=self.myjson["header"]["starthr"]
               endhrarray=self.myjson["header"]["endhr"]
               size=self.myjson["header"]["length"]  
               IMEI=self.myjson["header"]["Intermediary"]
               
               
               
               
               #stepsarray=[400,600]
               #datecapturedarray=['2014-08-23','2014-08-24']
               #starthrarray=['12:00','13:00']
               #endhrarray=['12:59','13:59']
               #size=2 
               #IMEI="*****@*****.**"
          except Exception as e:
               #print "Content-type: text/html\n" 
               #print('There was an error in processing a JSON object')
               result["message"]=e
               return json.JSONEncoder().encode(result)
          
          #self.lock.release()          
          #print "Content-Type: text/html\n"
     
          #get beneficiary_id through supplied IMEI
          
          
          #result["message"]={}
          #result["message"]=stepsarray[0]
          #return json.JSONEncoder().encode(result)
     
          
          
          try:
               engine=db 
              
               # create a Session
               Session = sessionmaker(bind=engine)
               session = Session()
               
               # querying for a record in the physical_activity pattern table
               res = session.query(Beneficiary).filter(Beneficiary.intermediary_id==IMEI).first()
               
               if res is None:
                         beneficiary_id=None
               else:
                         beneficiary_id=res.id
                         
                         session.commit()
                             
                    
               session.close()     
                    
          except Exception as e:
               #print "Content-type: text/html\n" 
               result["message"]=e
               #return json.JSONEncoder().encode(result)
          
          
          
          
          #first check if the last record arleady exists in the database and trying to update. Possibly this record is currently in use by the pedoemeter
          i=0
          element_pop=0
          try:
                    #engine=create_engine('mysql://*****:*****@localhost/wellness', echo=False) 
                    for i in range(size):
                    #while size>=i:

                         # create a Session
                         #Session = sessionmaker(bind=engine)
                         #session = Session()
                         
                         if element_pop >= 1:
                              i=i-element_pop
                         
                         # querying for a record in the physical_activity pattern table
                         res = session.query(PhysicalActivity).filter(PhysicalActivity.beneficiary_id==beneficiary_id).filter(PhysicalActivity.datecaptured==datecapturedarray[i]).filter(PhysicalActivity.starttimecaptured==starthrarray[i]).first()

                         
                         if res is None:
                                   continue
                         else:                                                                   
                                   res.stepscounter=stepsarray[i]
                                   #size=size-1 #ignore the last value because it has arleady been updated
                                 
                                   #pop a record so that it doesn't get inserted 
                                   
                                   stepsarray.pop(i)
                                   datecapturedarray.pop(i)
                                   starthrarray.pop(i)
                                   endhrarray.pop(i)
                                   self.counter=self.counter+1
                                   
                                   element_pop=element_pop+1
                      
                                   session.commit()
                    #result["message"]={}
                    #result["message"]=stepsarray[0]
                    #return json.JSONEncoder().encode(result)                    
          except Exception as e:
               result["message"]=e
               session.close()
               engine.dispose()
               dbconn.close()
               self.lock.release()
               return json.JSONEncoder().encode(result)          
          #needs to be edited
          size=size-self.counter
          
          if self.modify == 1:
               
               try:
                         engine=create_engine('mysql://*****:*****@localhost/wellness', echo=False)
                         for i in range(size):
                                   # create a Session
                                   Session = sessionmaker(bind=engine)
               
                                   session = Session()
                                   # Create Activity Pattern
                                   #new_food=FoodAndBeverage('KTLNTW00',datetime.date(1988,12,01))
                                   new_activity_pattern=PhysicalActivity(beneficiary_id,datecapturedarray[i],starthrarray[i],endhrarray[i],stepsarray[i])
               
               
               
               
                                   # Add the record to the session object
               
               
                                   session.add(new_activity_pattern)
               
               
                                   # commit the record the database
               
               
                                   session.commit()
                
               except Exception as e:
                    session.close()
                    engine.dispose()
                    dbconn.close()
                    result["message"]=e
                    self.lock.release()
                    return json.JSONEncoder().encode(result)         
                    
          session.close()
          engine.dispose()
          result["message"]="STEP_SYNC_SUCCESS"
          self.lock.release()
          return json.JSONEncoder().encode(result)          
Esempio n. 15
0
    def retrieveIntermediaryClickPoints(self):
        result={}       
        try:
                         
            #engine=create_engine('mysql://*****:*****@localhost/wellness', echo=False) 
            engine=db
            # create a Session
            Session = sessionmaker(bind=engine)
            session = Session()
                                

            if self.last_date_specified==1:
                day=self.myjson["Day"]
                if day=="Today":
                   day=datetime.date.today()

                res=session.query(func.count(distinct(Points.datecaptured)).label("sum_points")).filter(Points.intermediary_id==self.intermediary_id).filter(Points.datecaptured<=day).first()        
                 #res= session.query(func.sum(Points.scoredpoints).label("sum_points")).filter(Points.intermediary_id==self.intermediary_id).filter(Points.datecaptured<=day).first()
            #get points by number of days an application has been used.
            #res=session.query(func.count(distinct(Points.datecaptured)).label("sum_points")).filter(Points.intermediary_id==self.intermediary_id).filter(Points.datecaptured<=day).first()
            else:
                #res= session.query(func.sum(Points.scoredpoints).label("sum_points")).filter(Points.intermediary_id==self.intermediary_id).first()
                res=session.query(func.count(distinct(Points.datecaptured)).label("sum_points")).filter(Points.intermediary_id==self.intermediary_id).first()

            
            
            retrieved_points_sum=0# initialize how many distinct dates are in the database
            #for retrieved_points_sum in res:
            #     break               
            
            
            if res.sum_points is None:
                
                 
                retrieved_points_sum="0"
                result["message"]="You have no points"
                result["points"]=int(retrieved_points_sum)
            else: 
                result["message"]="You have some points so far."
                retrieved_points_sum=int(res.sum_points)
                result["points"]=int(retrieved_points_sum)


          






            session.close()
            engine.dispose()
            dbconn.close()
                 
            return (json.JSONEncoder().encode(result))                   
                                 
        except Exception as e:
                       
            #print "Content-type: text/html\n" 
            session.close()
            engine.dispose() 
            dbconn.close()
                              
            result["message"]="Error: %s"%e
            print "Exception thrown in function getIntermediaryClickPoints(): %s"%e
            print "The day captured=%s"%day
            return (json.JSONEncoder().encode(result))
Esempio n. 16
0
    def uploadActivity(self):

        self.lock.acquire()
        self.modify = 1
        self.counter = 0
        result = {}
        try:
            stepsarray = self.myjson["header"]["steps"]
            datecapturedarray = self.myjson["header"]["datecaptured"]
            starthrarray = self.myjson["header"]["starthr"]
            endhrarray = self.myjson["header"]["endhr"]
            size = self.myjson["header"]["length"]
            IMEI = self.myjson["header"]["Intermediary"]

            #stepsarray=[400,600]
            #datecapturedarray=['2014-11-14','2012-08-24']
            #starthrarray=['12:00','13:00']
            #endhrarray=['12:59','13:59']
            #size=2
            #IMEI="*****@*****.**"
        except Exception as e:
            #print "Content-type: text/html\n"
            #print('There was an error in processing a JSON object')
            result["message"] = e
            return json.JSONEncoder().encode(result)

        #self.lock.release()
        #print "Content-Type: text/html\n"

        #get beneficiary_id through supplied IMEI

        #result["message"]={}
        #result["message"]=stepsarray[0]
        #return json.JSONEncoder().encode(result)

        try:
            engine = db

            # create a Session
            Session = sessionmaker(bind=engine)
            session = Session()

            # querying for a record in the physical_activity pattern table
            res = session.query(Beneficiary).filter(
                Beneficiary.intermediary_id == IMEI).first()

            if res is None:
                beneficiary_id = None
            else:
                beneficiary_id = res.id

                session.commit()

            session.close()

        except Exception as e:
            #print "Content-type: text/html\n"
            result["message"] = e
            #return json.JSONEncoder().encode(result)

        #first check if the last record arleady exists in the database and trying to update. Possibly this record is currently in use by the pedoemeter
        i = 0
        element_pop = 0
        try:
            #engine=create_engine('mysql://*****:*****@localhost/wellness', echo=False)
            for i in range(size):
                #while size>=i:

                # create a Session
                #Session = sessionmaker(bind=engine)
                #session = Session()

                if element_pop >= 1:
                    i = i - element_pop

                # querying for a record in the physical_activity pattern table
                res = session.query(PhysicalActivity).filter(
                    PhysicalActivity.beneficiary_id == beneficiary_id).filter(
                        PhysicalActivity.datecaptured == datecapturedarray[i]
                    ).filter(PhysicalActivity.starttimecaptured ==
                             starthrarray[i]).first()

                if res is None:
                    continue
                else:

                    res.stepscounter = stepsarray[i]
                    session.commit()
                    #size=size-1 #ignore the last value because it has arleady been updated

                    #pop a record so that it doesn't get inserted

                    stepsarray.pop(i)
                    datecapturedarray.pop(i)
                    starthrarray.pop(i)
                    endhrarray.pop(i)
                    self.counter = self.counter + 1

                    element_pop = element_pop + 1

                    #session.commit()
            #result["message"]={}
            #result["message"]=stepsarray[0]
            #return json.JSONEncoder().encode(result)
        except Exception as e:
            result["message"] = e
            session.close()
            engine.dispose()
            dbconn.close()
            self.lock.release()
            return json.JSONEncoder().encode(result)
        #needs to be edited
        size = size - self.counter

        if self.modify == 1:

            try:
                min_date_allowed = '2014-01-01'
                orig_min_date = datetime.datetime.strptime(
                    min_date_allowed, '%Y-%m-%d').date()
                #engine=create_engine('mysql://*****:*****@localhost/wellness', echo=False)
                engine = db
                for i in range(size):
                    # create a Session
                    Session = sessionmaker(bind=engine)

                    session = Session()
                    # Create Activity Pattern
                    #new_food=FoodAndBeverage('KTLNTW00',datetime.date(1988,12,01))
                    #new_activity_pattern=PhysicalActivity(beneficiary_id,datecapturedarray[i],starthrarray[i],endhrarray[i],stepsarray[i])

                    datecaptured = datecapturedarray[i]
                    orig_date = datetime.datetime.strptime(
                        datecaptured, '%Y-%m-%d').date()

                    if orig_date < orig_min_date:
                        print "rejected"
                    else:
                        new_activity_pattern = PhysicalActivity(
                            beneficiary_id, datecapturedarray[i],
                            starthrarray[i], endhrarray[i], stepsarray[i])

                        # Add the record to the session object

                        session.add(new_activity_pattern)

                        # commit the record the database

                        session.commit()

            except Exception as e:
                session.close()
                engine.dispose()
                dbconn.close()
                result["message"] = e
                self.lock.release()
                return json.JSONEncoder().encode(result)

        session.close()
        engine.dispose()
        result["message"] = "STEP_SYNC_SUCCESS"
        self.lock.release()
        return json.JSONEncoder().encode(result)
    def getSteps(self, beneficiary_id):

        try:
            engine = db
            #create a Session
            Session = sessionmaker(bind=engine)
            session = Session()
            #if self.last_date_specified==1:
            #    day=self.myjson["Day"]
            #    if day == "Today":
            #        day=datetime.date.today()
            #    res=session.query(func.sum(PhysicalActivity.stepscounter).label("sum_steps")).filter(PhysicalActivity.beneficiary_id==beneficiary_id).filter(PhysicalActivity.datecaptured<=day).first()

            #else:
            currentdate = datetime.date.today()

            #get the date for the first day of this week
            day_of_week = currentdate.weekday()
            week_start_date = currentdate - datetime.timedelta(
                days=day_of_week)

            #get the first and end date of last week
            previous_week_end_date = week_start_date - datetime.timedelta(
                days=1)  #go to last sunday
            previous_week_start_date = previous_week_end_date - datetime.timedelta(
                days=6)  #go to last monday

            #get the first and end date of the week before last week
            previous_previous_week_end_date = previous_week_start_date - datetime.timedelta(
                days=1)  #go to last sunday of the week before last week
            previous_previous_week_start_date = previous_previous_week_end_date - datetime.timedelta(
                days=6)  #go to last monday of the week before last week

            res = session.query(
                func.sum(PhysicalActivity.stepscounter).label("sum_steps")
            ).filter(PhysicalActivity.beneficiary_id == beneficiary_id).filter(
                PhysicalActivity.datecaptured >= previous_week_start_date
            ).filter(PhysicalActivity.datecaptured <= previous_week_end_date
                     ).first()

            if res.sum_steps == None:
                sum_steps1 = 0
            else:
                sum_steps1 = int(res.sum_steps)
            result = {}
            result["steps1"] = sum_steps1

            res = session.query(
                func.sum(PhysicalActivity.stepscounter).label("sum_steps")
            ).filter(PhysicalActivity.beneficiary_id == beneficiary_id).filter(
                PhysicalActivity.datecaptured >=
                previous_previous_week_start_date).filter(
                    PhysicalActivity.datecaptured <=
                    previous_previous_week_end_date).first()

            if res.sum_steps == None:
                sum_steps2 = 0
            else:
                sum_steps2 = int(res.sum_steps)

            result["steps2"] = sum_steps2

        except Exception as e:
            print "Exception thrown in function getSteps(): %s" % e
            result = {}
            result["steps1"] = 0
            result["steps2"] = 0
            result["dates_counter"] = 1

        #self.steps=sum_steps
        session.close()
        engine.dispose()
        dbconn.close()

        return (json.JSONEncoder().encode(result))
Esempio n. 18
0
    def getSteps(self, beneficiary_id):

        try:
            engine = db
            #create a Session
            Session = sessionmaker(bind=engine)
            session = Session()

            pilotdateres = session.query(PilotCommencement).first()

            if pilotdateres is None:
                sys.exit
            else:
                datestarted = pilotdateres.datestarted

            if self.last_date_specified == 1:
                day = self.myjson["Day"]
                if day == "Today":
                    day = datetime.date.today()
                res = session.query(
                    func.sum(PhysicalActivity.stepscounter).label("sum_steps")
                ).filter(
                    PhysicalActivity.beneficiary_id == beneficiary_id).filter(
                        PhysicalActivity.datecaptured >= datestarted).filter(
                            PhysicalActivity.datecaptured <= day).first()

            else:

                res = session.query(
                    func.sum(PhysicalActivity.stepscounter).label("sum_steps")
                ).filter(
                    PhysicalActivity.beneficiary_id == beneficiary_id).filter(
                        PhysicalActivity.datecaptured >= datestarted).first()

            if res.sum_steps == None:
                sum_steps = 0
            else:
                sum_steps = int(res.sum_steps)
            result = {}
            result["steps"] = sum_steps

            if self.last_date_specified == 1:
                res = session.query(
                    func.min(PhysicalActivity.datecaptured).label("min_date")
                ).filter(
                    PhysicalActivity.beneficiary_id == beneficiary_id).filter(
                        PhysicalActivity.datecaptured <= day).first()
            else:
                res = session.query(
                    func.min(PhysicalActivity.datecaptured).label("min_date")
                ).filter(
                    PhysicalActivity.beneficiary_id == beneficiary_id).first()

            min_date = res.min_date

            if self.last_date_specified == 1:
                max_date = self.myjson["Day"]
                if max_date == "Today":
                    max_date = datetime.date.today()
                else:
                    max_date = datetime.datetime.strptime(
                        max_date, '%Y-%m-%d').date()
            else:
                max_date = datetime.date.today()

            if min_date is None:
                dates_difference = 1
            else:
                delta = max_date - min_date
                dates_difference = delta.days + 1
                if min_date > max_date:
                    dates_difference = 1

            result["dates_counter"] = dates_difference

        except Exception as e:
            print "Exception thrown in function getSteps(): %s" % e
            result["steps"] = 0
            result["dates_counter"] = 1

        #self.steps=sum_steps
        session.close()
        engine.dispose()
        dbconn.close()

        return (json.JSONEncoder().encode(result))
Esempio n. 19
0
     def get_daily_steps(self,startdate,enddate):
          
          errorcode={}
          
          try:
               
               engine=db
               #create a Session
               Session = sessionmaker(bind=engine)
               session = Session()
               
               
               key1="R"
               key2="F"
               first_posn=0
               second_posn=0
               
               counted_dates=0
               
            
               
               
               step_sum_by_date=0
               activity_tuple={}
               activity_tuples={} 
               
               # count if there are distinct dates.
               counted_dates=session.query(func.count(distinct(PhysicalActivity.datecaptured))).filter(PhysicalActivity.beneficiary_id==self.b_id).filter(PhysicalActivity.datecaptured>=startdate).filter(PhysicalActivity.datecaptured<=enddate).order_by(PhysicalActivity.datecaptured).first()
               
               
               
               
               retrieved_dates_counter=0# initialize how many distinct dates are in the database
               for retrieved_dates_counter in counted_dates:
                    break
          
               
               if retrieved_dates_counter==0:
                    #errorcode["error"]=-4
                    activity_tuple[key2+"%d"%second_posn]="12AM-12AM"
                    second_posn=second_posn+1
                                                                                                                                                                                  
                                                                                                                                                                                  
                    activity_tuple[key2+"%d"%second_posn]=-4
                    second_posn=0
                    if first_posn<10:
                         key1="R0"
                    else:
                         key1="R"
                                                                                                                                                 
                    activity_tuples[key1+"%d"%first_posn]=activity_tuple
                                                                                                                                               
                    first_posn=first_posn+1 
                    activity_tuple={}
                    return(json.JSONEncoder().encode(activity_tuples))               
                    
               
               

               res = session.query(PhysicalActivity).filter(PhysicalActivity.beneficiary_id==self.b_id).filter(PhysicalActivity.datecaptured>=startdate).filter(PhysicalActivity.datecaptured<=enddate).order_by(PhysicalActivity.datecaptured).order_by(PhysicalActivity.starttimecaptured).all()
               
               
               #query result within time clusters of one date
               if retrieved_dates_counter<2 and retrieved_dates_counter>0 and startdate==enddate: #The condition startdate==enddate prevents a weeks with only one day of activities to be splitted into time intervals.
                    time_clusters_str=['12AM-6AM','6AM-12PM','12PM-6PM','6PM-12AM']
                              
                    steps_on_time_clusters=[0,0,0,0]
                              
                    #time_clusters=[['00:00','03:59'],['04:00','07:59'],['08:00','11:59'],['12:00','15:59'],['16:00','19:59'],['20:00','23:59']]
                              
                    end_time_clusters=['05:59','11:59','17:59','23:59']
                              
                    time_clusters_counter=0
                    time_space_counter=0# for keeping track of time clustera                      
                                       
                    
                    # find which activity falls under a particular time cluster and add them together
                    for end_time_cluster in end_time_clusters:
                         activity_tuple={}                     
                         for activity in res:
                              initial_time=datetime.datetime.strptime(end_time_cluster, "%H:%M")-datetime.timedelta(hours=6)+datetime.timedelta(minutes=1)# get start time for time cluster. We add one minute at the end becuase we want start time to begin with 0 minutes
                              final_time=datetime.datetime.strptime(end_time_cluster, "%H:%M")
                              
                              # now lets get the time from the database and compare if it is within range of start time and end time
                              
                              activity_time=datetime.datetime.strptime(activity.starttimecaptured, "%H:%M")
                              
                              
                              #comparing if start time of an activity is within a specific time cluster 
                              if activity_time>=initial_time and activity_time<final_time:
                                   steps_on_time_clusters[time_space_counter]=steps_on_time_clusters[time_space_counter]+activity.stepscounter #add all the time that belong to one cluster
                                   
                         #print steps_on_time_clusters[time_space_counter]
                         
                         activity_tuple[key2+"%d"%second_posn]=time_clusters_str[time_space_counter]
                         second_posn=second_posn+1
                                                                                                                                                                                       
                         #activity_tuple[key2+"%d"%second_posn]=activity.starttimecaptured
                         #second_posn=second_posn+1
                                                                                                                                                                                  
                         #activity_tuple[key2+"%d"%second_posn]=activity.endtimecaptured
                         #second_posn=second_posn+1  
                                                                                                                                                                                       
                         activity_tuple[key2+"%d"%second_posn]=steps_on_time_clusters[time_space_counter]
                         second_posn=0 
                         if first_posn<10:
                              key1="R0"
                         else:
                              key1="R"
                                                                                                                                                      
                         activity_tuples[key1+"%d"%first_posn]=activity_tuple
                                                                                                                                                    
                         first_posn=first_posn+1                                
                                              
                         
                         time_space_counter=time_space_counter+1
         
                         
                         
                                      
               session.close() 
               engine.dispose()
               dbconn.close()
               return(json.JSONEncoder().encode(OrderedDict(sorted(activity_tuples.items(), key=lambda t: t[0]))))
               
          except Exception as e:
               session.close()
               engine.dispose()
               dbconn.close() 
               second_posn=0
               #errorcode["error"]=e     
               #return (json.JSONEncoder().encode(errorcode))
               #return errorcode
               activity_tuple[key2+"%d"%second_posn]="%s"%e
               second_posn=second_posn+1
                                                                                                                                                                             
                                                                                                                                                                             
               activity_tuple[key2+"%d"%second_posn]=-1
               second_posn=0 
               if first_posn<10:
                    key1="R0"
               else:
                    key1="R"
                                                                                                                                            
               activity_tuples[key1+"%d"%first_posn]=activity_tuple
                                                                                                                                          
               first_posn=first_posn+1 
               activity_tuple={}
               return(json.JSONEncoder().encode(activity_tuples)) 
Esempio n. 20
0
    def retrieveIndividualBadge(self):

        result = {}

        try:

            varmyjson = {'Day': "Today"}
            myjson = {
                'Fname': 'Dummy',
                'Lname': 'Dummy',
                'Username': self.intermediary_id
            }
            obj = RetrieveIntermediary(myjson)
            res = obj.isAssignedBeneficiary()

            beneficiary_tuple = json.loads(res)
            b_id = beneficiary_tuple["Id"]
            if b_id == None:
                raise ValueError(
                    'This individual is not assigned a beneficiary')

            clickPointsObj = RetrievePoints(varmyjson, self.intermediary_id, 1)
            resclickpoints = clickPointsObj.retrieveIntermediaryClickPoints()
            resclickpoints = json.loads(resclickpoints)

            #clickpoints=int(resclickpoints["points"]/resclickpoints["dates_counter"])
            clickpoints = int(resclickpoints["points"])
            if clickpoints > 18:
                clickpoints = 18

            ressteps = clickPointsObj.getSteps(b_id)
            ressteps = json.loads(ressteps)

            #stepspoints=int(ressteps["steps"]/(100*ressteps["dates_counter"]))

            stepspoints = int(ressteps["steps"])

            if stepspoints > 70000:
                stepspoints = 70000

            badges_urls = []

            if stepspoints >= 70000:
                if clickpoints >= 18:
                    badges.append("Queen")
                    badges_urls.append(
                        "http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/queen.jpeg"
                    )
                else:
                    badges.append("No promotion")

            elif stepspoints >= 63000:
                if clickpoints >= 16:
                    badges.append("Princess")
                    badges_urls.append(
                        "http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/princess.jpeg"
                    )
                else:
                    badges.append("No promotion")
                    badges_urls.append(
                        "http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/duchess.jpeg"
                    )
            elif stepspoints >= 56000:
                if clickpoints >= 14:
                    badges.append("Duchess")
                    badges_urls.append(
                        "http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/duchess.jpeg"
                    )
                else:
                    badges.append("No promotion")
                    badges_urls.append(
                        "http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/grandmaster.jpeg"
                    )
            elif stepspoints >= 49000:
                if clickpoints >= 12:
                    badges.append("Grand Master")
                    badges_urls.append(
                        "http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/grandmaster.jpeg"
                    )
                else:
                    badges.append("No promotion")
                    badges_urls.append(
                        "http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/seniormaster.jpeg"
                    )

            elif stepspoints >= 42000:
                if clickpoints >= 10:
                    badges.append("Senior Master")
                    badges_urls.append(
                        "http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/seniormaster.jpeg"
                    )
                else:
                    badges.append("No promotion")
                    badges_urls.append(
                        "http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/master.jpeg"
                    )
            elif stepspoints >= 31500:
                if clickpoints >= 8:
                    badges.append("Master")
                    badges_urls.append(
                        "http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/master.jpeg"
                    )
                else:
                    badges.append("No promotion")
                    badges_urls.append(
                        "http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/juniormaster.jpeg"
                    )
            if stepspoints >= 21000:
                if clickpoints >= 4:
                    badges.append("Junior Master")
                    badges_urls.append(
                        "http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/juniormaster.jpeg"
                    )
                else:
                    badges.append("No promotion")
                    badges_urls.append(
                        "http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/seniorservant.jpeg"
                    )
            elif stepspoints >= 14000:
                if clickpoints >= 2:
                    badges.append("Senior Servant")
                    badges_urls.append(
                        "http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/seniorservant.jpeg"
                    )
                else:
                    badges.append("No Promotion")
                    badges_urls.append(
                        "http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/servant.jpeg"
                    )
            if stepspoints >= 7000:
                if clickpoints >= 1:
                    badges.append("Servant")
                    badges_urls.append(
                        "http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/servant.jpeg"
                    )
                else:
                    badges.append("No promotion")
                    badges_urls.append(
                        "http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/slave.jpeg"
                    )
            else:
                badges.append("Slave")
                badges_urls.append(
                    "http://ict4d01.cs.uct.ac.za/static/django_facebook/images/badges/slave.jpeg"
                )

            num = randint(2, 49)
            obj = RetrieveSound(num)
            res = obj.retrieveSoundUrl()
            res = json.loads(res)

            sound_url = res["url"]
            result = {
                "R00": {
                    "D0": "Badge Acquired",
                    "D1": badges_urls[0],
                    "D2": sound_url
                }
            }

        except Exception as e:
            message = "An exception was thrown in function retrieveIndividualScore(): %s" % e
            result = {
                "R00": {
                    "D0": message,
                    "D1":
                    "http://ict4d01.cs.uct.ac.za/static/django_facebook/images/nobadge.jpeg",
                    "D2": "Error"
                }
            }

        session.close()
        engine.dispose()
        dbconn.close()

        return (json.JSONEncoder().encode(result))
Esempio n. 21
0
     def get_three_months_steps(self,startdate,enddate):
          
          monthly_activity_tuple={}
          weekly_activity_tuple=None
          activity_tuples={}
          try:
               startTime=datetime.datetime.now()
               month_start_date=startdate
               month_end_date=self.last_day_of_month(startdate)
               
               key1="R"
               key2="F"
               first_posn=0
               second_posn=0

               weeks_iterator=0
               months_iterator=1
               
               total_monthly_steps=0
            
               activity_tuples={} 
               found_data=0
               
                         
               engine=db
               #create a Session
               Session = sessionmaker(bind=engine)
               session = Session()
               
               
               while ((month_start_date>=startdate) and (month_start_date<=enddate)):

                    monthly_activity_tuple={}
                    weekly_activity_tuple=None
                    total_monthly_steps=0
                    weeks_iterator=0

                    #weekly_activity_tuple=json.loads(self.get_monthly_steps(month_start_date,month_end_date))
                    #steps=0
                    res=session.query(func.sum(PhysicalActivity.stepscounter).label("sum_steps")).filter(PhysicalActivity.beneficiary_id==self.b_id).filter(PhysicalActivity.datecaptured>=month_start_date).filter(PhysicalActivity.datecaptured<=month_end_date).order_by(PhysicalActivity.datecaptured).first()
                    
                    if res.sum_steps==None:
                         pass
                    else:
                         total_monthly_steps=int(res.sum_steps)
                         
                    exception_info=""
    
                    if total_monthly_steps > 0:
                         found_data=found_data+1
                    
                    
              
                    
                 
                    
                         
                    #weekly_activity_tuple[key2+"%d"%second_posn]="Week %s"%weeks_iterator
                    monthly_activity_tuple[key2+"%d"%second_posn]="%s"%month_start_date.strftime("%m/%Y")
                    second_posn=second_posn+1
                    months_iterator=months_iterator+1
                    num_days_in_month=self.month_num_days(month_start_date)
                    
                    monthly_activity_tuple[key2+"%d"%second_posn]=total_monthly_steps/num_days_in_month #average
                    
                    
                    if first_posn<10:
                         key1="R0"
                    else:
                         key1="R"
                                                                                                                                                 
                    activity_tuples[key1+"%d"%first_posn]=monthly_activity_tuple
                    
                    first_posn=first_posn+1
                    
                    
                    month_start_date=month_end_date+datetime.timedelta(days=1)# move to the begining of next month
                    month_end_date=self.last_day_of_month(month_start_date)# move to the end of next month 
                    
 
                    
                    #if(month_end_date>enddate):
                    #     week_end_date=enddate#for the next iteration     
                    
                    

               
               
               session.close()
               engine.dispose()
               dbconn.close()

               if(found_data>0):
                    return(json.JSONEncoder().encode(OrderedDict(sorted(activity_tuples.items(), key=lambda t: t[0]))))
               else:
               
                    #errorcode["error"]=-4
                    activity_tuples={}
                    first_posn=0
                    monthly_activity_tuple[key2+"%d"%second_posn]="No month"
                    second_posn=second_posn+1
                                                                                                                                                                                  
                                                                                                                                                                                  
                    monthly_activity_tuple[key2+"%d"%second_posn]=-4
                    second_posn=0 
                    if first_posn<10:
                         key1="R0"
                    else:
                         key1="R"
                                                                                                                                                 
                    activity_tuples[key1+"%d"%first_posn]=monthly_activity_tuple
                                                                                                                                   
                    first_posn=first_posn+1 
                    activity_tuple={}
                    return(json.JSONEncoder().encode(OrderedDict(sorted(activity_tuples.items(), key=lambda t: t[0]))))
                    
               
          except Exception as e:
              
               session.close()
               engine.dispose()
               dbconn.close()

               second_posn=0 
               monthly_activity_tuple[key2+"%d"%second_posn]="%s"%e
               second_posn=second_posn+1
                                                                                                                                                                             
                                                                                                                                                                             
               monthly_activity_tuple[key2+"%d"%second_posn]=-1
               second_posn=0 
               if first_posn<10:
                    key1="R0"
               else:
                    key1="R"
                                                                                                                                            
               activity_tuples[key1+"%d"%first_posn]=monthly_activity_tuple
                                                                                                                                          
               first_posn=first_posn+1 
               weekly_activity_tuple={}
               return(json.JSONEncoder().encode(activity_tuples))
Esempio n. 22
0
    def getSteps(self, beneficiary_id):

        try:
            engine = db
            #create a Session
            Session = sessionmaker(bind=engine)
            session = Session()
            #if self.last_date_specified==1:
            #    day=self.myjson["Day"]
            #    if day == "Today":
            #        day=datetime.date.today()
            #    res=session.query(func.sum(PhysicalActivity.stepscounter).label("sum_steps")).filter(PhysicalActivity.beneficiary_id==beneficiary_id).filter(PhysicalActivity.datecaptured<=day).first()

            #else:
            currentdate = datetime.date.today()

            #get the date for the first day of this week
            day_of_week = currentdate.weekday()
            week_start_date = currentdate - datetime.timedelta(
                days=day_of_week)

            res = session.query(
                func.sum(PhysicalActivity.stepscounter).label("sum_steps")
            ).filter(PhysicalActivity.beneficiary_id == beneficiary_id).filter(
                PhysicalActivity.datecaptured >= week_start_date).filter(
                    PhysicalActivity.datecaptured <= currentdate).first()

            if res.sum_steps == None:
                sum_steps = 0
            else:
                sum_steps = int(res.sum_steps)
            result = {}
            result["steps"] = sum_steps

            #comment code for counting the number of days
            '''
            if self.last_date_specified==1:
                res=session.query(func.min(PhysicalActivity.datecaptured).label("min_date")).filter(PhysicalActivity.beneficiary_id==beneficiary_id).filter(PhysicalActivity.datecaptured<=day).first()
            else: 
                res=session.query(func.min(PhysicalActivity.datecaptured).label("min_date")).filter(PhysicalActivity.beneficiary_id==beneficiary_id).first()
            
            min_date=res.min_date 

            

            if self.last_date_specified==1:
                max_date=self.myjson["Day"]
                if max_date=="Today":
                    max_date=datetime.date.today()
                else:
                    max_date=datetime.datetime.strptime(max_date , '%Y-%m-%d').date()
            else:
                max_date=datetime.date.today()

            
            if min_date is None:
                dates_difference=1
            else:
                delta=max_date-min_date
                dates_difference=delta.days+1
                if min_date>max_date:
                    dates_difference=1
        
            result["dates_counter"]=dates_difference
            '''

        except Exception as e:
            print "Exception thrown in function getSteps(): %s" % e
            result["steps"] = 0
            result["dates_counter"] = 1

        #self.steps=sum_steps
        session.close()
        engine.dispose()
        dbconn.close()

        return (json.JSONEncoder().encode(result))