0

我在工资单屏幕中创建了一个名为 caldays 的自定义字段,在这个字段中,我想使用 onchange 函数在 openerpfrom_date和openerp 之间获取天数,to_date 请帮助我提供下面的代码,但我该怎么做onchange function

datej = str(payslip.date_to)

datek = str(payslip.date_from)

dj = datej[-2:]

x=0

new = 0

while (x<=31):

x= x+1

if str(x) == dj or "0"+str(x) == dj:

new= x

dk = datek[-2:]

y=0

old = 0

while (y<=31):

y= y+1

if str(y) == dk or "0"+str(y) == dk:

old= y

caldays = new-old + 1

result = caldays
4

1 回答 1

1

试试这个,这不会。天数,您必须在其中给出两个参数,即 date_from 和 date_to。不要忘记导入(导入日期时间和导入数学),您可以将字段放在 xml 中,

<field name="date_from"  on_change="get_number_of_days(date_from,date_to)"/>
<field name="date_to"  on_change="get_number_of_days(date_from,date_to)"/>
<field name="number_of_days_temp"/>

对于你的 py 文件,

def get_number_of_days(self, date_from, date_to):
    """Returns a float equals to the timedelta between two dates given as string."""
    if (date_to and date_from) and (date_from <= date_to):
        DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S"
        from_dt = datetime.datetime.strptime(date_from, DATETIME_FORMAT)
        to_dt = datetime.datetime.strptime(date_to, DATETIME_FORMAT)
        timedelta = to_dt - from_dt
        diff_day = timedelta.days + float(timedelta.seconds) / 86400
        result['value']['number_of_days_temp'] = round(math.floor(diff_day))+1
    else:
        result['value']['number_of_days_temp'] = 0

    return result

希望这会帮助你。

于 2014-01-31T10:19:13.987 回答