def working(self): """returns true or false depending on whether or not a CO is available at current date and time""" day_of_week = h.current_day(self) if self.start_sim_time <= self.env.now < self.end_sim_time and \ self.input_data['availability'][str(day_of_week)]: for i in range( 0, len(self.input_data['availability'][str(day_of_week)]), 2): start_time = dt.time(*map( int, self.input_data['availability'][str(day_of_week)] [i].split(':'))) end_time = dt.time(*map( int, self.input_data['availability'][str(day_of_week)][ i + 1].split(':'))) start_sim_time = h.make_time_decimal(start_time) + math.floor( self.env.now / 24) * 24 end_sim_time = h.make_time_decimal(end_time) + math.floor( self.env.now / 24) * 24 if start_sim_time <= self.env.now < end_sim_time: return True return False
def adviser_check(self, time): # returns the adviser type that is available at the current time if any for k, v in self.rep.adviser_types.items(): # between the dates if v['start_time'] < time <= v['end_time']: # then between each set of times current_dow = str((self.rep.start_date + dt.timedelta(days=math.floor(time / 24))).weekday()) for i in range(0, len(v['availability'][current_dow]), 2): in_time = h.make_time_decimal(dt.time(*map(int, v['availability'][current_dow][i].split(':')))) out_time = h.make_time_decimal(dt.time(*map(int, v['availability'][current_dow][i+1].split(':')))) if in_time <= self.env.now % 24 < out_time: return k return None