def get_previous_work_shift(self,cr,uid,a_datetime): ''' 获取给定时间所在班次的上一个班次 :param a_datetime datetiem 要判定的日期 :return dict 班次信息 ''' matched_config = None the_shift = self.get_work_shift(cr,uid,a_datetime) ids = self.search(cr,uid,[('start_time','<',the_shift['start_time'])],order = 'start_time DESC',limit = 1) #如果找到设置信息 if ids: matched_config = self.read(cr,uid,ids[0]) else: last_ids = self.search(cr,uid,[],order = 'start_time DESC',limit = 1) matched_config = self.read(cr,uid,last_ids[0]) matched_config['start_datetime'] = ktv_helper.float_time_to_datetime(matched_config['start_time'],base_datetime = a_datetime) matched_config['end_datetime'] = ktv_helper.float_time_to_datetime(matched_config['end_time'],base_datetime = a_datetime) if matched_config['start_time'] > matched_config['end_time']: matched_config['end_datetime'] = matched_config['end_datetime'] + timedelta(days = 1) #如果前班日期大于a_datetime,则向前退1天 if matched_config['start_datetime'] > a_datetime: matched_config['start_datetime'] = matched_config['start_datetime'] - timedelta(days = 1) matched_config['end_datetime'] = matched_config['end_datetime'] - timedelta(days = 1) return matched_config
def construct_config_array(c): config_datetime_from = ktv_helper.float_time_to_datetime(c['time_from']) config_datetime_to = ktv_helper.float_time_to_datetime(c['time_to']) #如果config_datetime_to < config_datetime_from,则config_datetime_to + 1 day if config_datetime_to < config_datetime_from: config_datetime_to = config_datetime_to + timedelta(days = 1) #先形成时间顺序的数组 #FIXME 此处要求在设置时间时,必须是连续的 return { 'datetime_from' : config_datetime_from, 'datetime_to' : config_datetime_to, 'hourly_fee' : c['hourly_fee'], 'hourly_discount' : c['hourly_discount'], }
def get_time_range(self,cr,uid,base_datetime = datetime.now()): ''' 获取给定时间的营业时间 默认取当日营业时间 :param base_datetime datetime 给定营业时间点 :return tuple(start_datetime,end_datetime) ''' id = self.search(cr,uid,[])[0] open_datetime = ktv_helper.float_time_to_datetime(self.browse(cr,uid,id).open_time,base_datetime) close_datetime = open_datetime + timedelta(days = 1) return (open_datetime,close_datetime)
def get_active_configs(self,cr,uid,room_type_id): ''' 获取当前有效的买断设置信息 :params integer room_type_id 包厢类型id :return array 符合条件的买断信息数组 ''' ret = [] #1 获取所有买断信息,并逐个进行判断 ids = self.search(cr,uid,[("room_type_id",'=',room_type_id)]) configs = self.browse(cr,uid,ids) #2 判断当日买断是否启用 context_now = ktv_helper.user_context_now(self,cr,uid) #判断是周几 weekday_str = ktv_helper.weekday_str(context_now.weekday()) #判断特殊日设置 s_day_ids = self.pool.get('ktv.buffet_config_special_day').search(cr,uid,[("room_type_id",'=',room_type_id)]) s_days = self.pool.get('ktv.buffet_config_special_day').read(cr,uid,s_day_ids,['room_type_id','special_day']) s_days_list = [s_day['special_day'] for s_day in s_days] #买断起止时间 #time_from 当前时间 #time_to 买断结束时间 #如果当日是特殊日,则直接返回所有买断设置 in_sp_day = datetime.today() in s_days_list #根据设置的星期是否有效来得到返回的设置 for c in configs: buyout_enable = getattr(c,weekday_str + '_buyout_enable',False) in_time_range = ktv_helper.utc_time_between(c.time_from,c.time_to,datetime.now()) time_from = datetime.now() time_to = ktv_helper.float_time_to_datetime(c.time_to) #判断时间设置是否跨天 if time_to < time_from: time_to = time_to + timedelta(days = 1) if (in_sp_day and in_time_range) or (buyout_enable and in_time_range): buyout_fee = getattr(c,weekday_str + "_buyout_fee",0.0) child_buyout_fee = getattr(c,weekday_str + "_child_buyout_fee",0.0) if in_sp_day: buyout_fee = getattr(c,"special_day_buyout_fee") child_buyout_fee = getattr(c,"special_day_child_buyout_fee") ret.append({ "id" : c.id, "room_type_id" : c.room_type_id.id, "name" : getattr(c,"name"), #起始时间是当前时间 "time_from" : time_from.strftime('%Y-%m-%d %H:%M:%S'), "time_to" : time_to.strftime('%Y-%m-%d %H:%M:%S'), "is_member" : getattr(c,'is_member'), "buyout_fee" : buyout_fee, "child_buyout_fee" : buyout_fee, #计算实际买断分钟数量 "buyout_time" : ktv_helper.float_time_minutes_delta(c.time_from,c.time_to), }) return ret
def get_work_shift(self,cr,uid,a_datetime): ''' 获取给定时间所在班次 :param a_datetime datetime 当前日期 :return dict 班次信息 ''' ret = None ids = self.search(cr,uid,[]) for c in self.read(cr,uid,ids): if ktv_helper.utc_time_between(c['start_time'],c['end_time'],a_datetime): ret = c ret['start_datetime'] = ktv_helper.float_time_to_datetime(ret['start_time'],base_datetime = a_datetime) ret['end_datetime'] = ktv_helper.float_time_to_datetime(ret['end_time'],base_datetime = a_datetime) if ret['start_time'] > ret['end_time']: ret['end_datetime'] = ret['end_datetime'] + timedelta(days = 1) return ret
def get_previous_work_shift(self, cr, uid, a_datetime): ''' 获取给定时间所在班次的上一个班次 :param a_datetime datetiem 要判定的日期 :return dict 班次信息 ''' matched_config = None the_shift = self.get_work_shift(cr, uid, a_datetime) ids = self.search(cr, uid, [('start_time', '<', the_shift['start_time'])], order='start_time DESC', limit=1) #如果找到设置信息 if ids: matched_config = self.read(cr, uid, ids[0]) else: last_ids = self.search(cr, uid, [], order='start_time DESC', limit=1) matched_config = self.read(cr, uid, last_ids[0]) matched_config['start_datetime'] = ktv_helper.float_time_to_datetime( matched_config['start_time'], base_datetime=a_datetime) matched_config['end_datetime'] = ktv_helper.float_time_to_datetime( matched_config['end_time'], base_datetime=a_datetime) if matched_config['start_time'] > matched_config['end_time']: matched_config['end_datetime'] = matched_config[ 'end_datetime'] + timedelta(days=1) #如果前班日期大于a_datetime,则向前退1天 if matched_config['start_datetime'] > a_datetime: matched_config['start_datetime'] = matched_config[ 'start_datetime'] - timedelta(days=1) matched_config['end_datetime'] = matched_config[ 'end_datetime'] - timedelta(days=1) return matched_config
def get_work_shift(self, cr, uid, a_datetime): ''' 获取给定时间所在班次 :param a_datetime datetime 当前日期 :return dict 班次信息 ''' ret = None ids = self.search(cr, uid, []) for c in self.read(cr, uid, ids): if ktv_helper.utc_time_between(c['start_time'], c['end_time'], a_datetime): ret = c ret['start_datetime'] = ktv_helper.float_time_to_datetime( ret['start_time'], base_datetime=a_datetime) ret['end_datetime'] = ktv_helper.float_time_to_datetime( ret['end_time'], base_datetime=a_datetime) if ret['start_time'] > ret['end_time']: ret['end_datetime'] = ret['end_datetime'] + timedelta(days=1) return ret
def get_active_configs(self, cr, uid, room_type_id): ''' 获取当前有效的买断设置信息 :params integer room_type_id 包厢类型id :params integer buyout_config_id 买断设置id :return array 符合条件的买断信息数组 ''' ret = [] #1 获取所有买断信息,并逐个进行判断 ids = self.search(cr, uid, [("room_type_id", '=', room_type_id)]) configs = self.browse(cr, uid, ids) #2 判断当日买断是否启用 context_now = ktv_helper.user_context_now(self, cr, uid) #判断是周几 weekday_str = ktv_helper.weekday_str(context_now.weekday()) #判断特殊日设置 s_day_ids = self.pool.get('ktv.buyout_config_special_day').search( cr, uid, [("room_type_id", '=', room_type_id)]) s_days = self.pool.get('ktv.buyout_config_special_day').read( cr, uid, s_day_ids, ['room_type_id', 'special_day']) s_days_list = [s_day['special_day'] for s_day in s_days] #买断起止时间 #time_from 当前时间 #time_to 买断结束时间 #如果当日是特殊日,则直接返回所有买断设置 in_sp_day = datetime.today() in s_days_list #根据设置的星期是否有效来得到返回的设置 for c in configs: buyout_enable = getattr(c, weekday_str + '_buyout_enable', False) in_time_range = ktv_helper.utc_time_between( c.time_from, c.time_to, datetime.now()) time_from = datetime.now() time_to = ktv_helper.float_time_to_datetime(c.time_to) #判断时间设置是否跨天 if time_to < time_from: time_to = time_to + timedelta(days=1) if (in_sp_day and in_time_range) or (buyout_enable and in_time_range): buyout_fee = getattr(c, weekday_str + "_buyout_fee", 0.0) if in_sp_day: buyout_fee = getattr(c, "special_day_buyout_fee") ret.append({ "id": c.id, "room_type_id": c.room_type_id.id, "name": getattr(c, "name"), #起始时间是当前时间 "time_from": ktv_helper.strftime(time_from), "time_to": ktv_helper.strftime(time_to), "is_member": getattr(c, 'is_member'), "buyout_fee": buyout_fee, #计算实际买断分钟数量 "buyout_time": ktv_helper.timedelta_minutes(time_from, time_to), }) return ret