Esempio n. 1
0
  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
Esempio n. 2
0
 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'],
         }
Esempio n. 3
0
 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)
Esempio n. 4
0
    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
Esempio n. 5
0
  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
Esempio n. 6
0
    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
Esempio n. 7
0
    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
Esempio n. 8
0
    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