2015-09-07 2 views
0

В системе есть система с одинарным шрифтом с модулем расписания (самодельным). Как это работает: рабочий пришел - время прибытия написано в расписании - все хорошо. Но есть проблема: сотрудники, ответственные за создание таких записей, используют разные временные форматы: некоторые из них используют стандартный HH: MM (например, 10:30), а некоторые из них используют десятые HH: T (например, 10,5, что означает те же 10:30 или даже 10.125 (10:08)), поэтому мне пришлось сделать функцию конвертации.Обновление табличных полей

Работа выполнена, это работает, но я уверен, что есть способ ее оптимизировать. По крайней мере, последняя его часть.

@api.one 
def time_button (self): 
    def ftohhmm(a): 
     if a: 
      a = re.sub(',' , '.' , a) 
      if (re.search ('^\-?\d+((,|\.)\d+)?$',a) >= 0): 
      if float(a) <24: 
       a = float(a) * 60 
       minutes = a%60 
       hours = a/60 
       if int(round(minutes)) < 10: 
        return str(int(hours))+":0"+str(int(round(minutes))) 
       else: 
        return str(int(hours))+":"+str(int(round(minutes))) 
     return a 
    if self.format: 
     for i in self.ids_string: 
      i.hours1=ftohhmm(i.hours1) 
      i.hours2=ftohhmm(i.hours2) 
      i.hours3=ftohhmm(i.hours3) 
      i.hours4=ftohhmm(i.hours4) 
      i.hours5=ftohhmm(i.hours5) 
      i.hours6=ftohhmm(i.hours6) 
      i.hours7=ftohhmm(i.hours7) 
      i.hours8=ftohhmm(i.hours8) 
      i.hours9=ftohhmm(i.hours9) 
      i.hours10=ftohhmm(i.hours10) 
      i.hours11=ftohhmm(i.hours11) 
      i.hours12=ftohhmm(i.hours12) 
      i.hours13=ftohhmm(i.hours13) 
      i.hours14=ftohhmm(i.hours14) 
      i.hours15=ftohhmm(i.hours15) 
      i.hours16=ftohhmm(i.hours16) 
      i.hours17=ftohhmm(i.hours17) 
      i.hours18=ftohhmm(i.hours18) 
      i.hours19=ftohhmm(i.hours19) 
      i.hours20=ftohhmm(i.hours20) 
      i.hours21=ftohhmm(i.hours21) 
      i.hours22=ftohhmm(i.hours22) 
      i.hours23=ftohhmm(i.hours23) 
      i.hours24=ftohhmm(i.hours24) 
      i.hours25=ftohhmm(i.hours25) 
      i.hours26=ftohhmm(i.hours26) 
      i.hours27=ftohhmm(i.hours27) 
      i.hours28=ftohhmm(i.hours28) 
      i.hours29=ftohhmm(i.hours29) 
      i.hours30=ftohhmm(i.hours30) 
      i.hours31=ftohhmm(i.hours31) 

Hours1-31 - это столбцы на каждый день. Строки для рабочих. Клетки на перекрестках содержат точное время, когда пришел работник.

Любой совет, как оптимизировать его, было бы здорово. Благодаря!

+0

Пожалуйста, введите код, удалив проводной '<------>'. – luoluo

+0

Yup, заметил, что сразу после его опубликования. Совершено сейчас. – Scraggesh

ответ

1
for i in self.ids_string: 
    for j in range(1, 32): 
     if hasattr(i, "hours%s" % j): 
      a = getattr(i, "hours%s" % j) 
      setattr(i, "hours%s" %j, ftohhmm(a)) 

Возможно, этот ответ является вашей потребностью.

+0

Спасибо, что отлично вписывается. Кроме того, у меня есть другое предложение в другой теме, попробовал и, похоже, это работает. Собираюсь опубликовать его здесь, чтобы кто-то мог найти его полезным когда-нибудь. 'для J в диапазоне (1, 32):. ч = 'ч {0}' формат (к) SetAttr (I, ч, ftohhmm (GetAttr (я, часы)))' – Scraggesh

+0

, если 31 - это день, вы должны быть уверены, какой день существует. В каком-то месяце нет 31 дня. – xiaohen

+0

Ну, это всего лишь календарь, основанный на календаре, поэтому я бы сказал, что единственная угроза заключается в том, что сотрудники добавляют время в неправильную ячейку (выходной или выходной), и я надеюсь, что они не настолько безрассудные, но .. Это может быть лучше ограничить его в любом случае. Спасибо за идею. – Scraggesh