无法使用Odoo 11在工资规则中获取日期对象

时间:2018-01-08 19:03:22

标签: python odoo odoo-11

我正在尝试定义一个薪水规则,它将在date_to和date_from的基础上计算员工的工资但是在这些对象中。我只能得到几天。通过使用几天,我可以从他们那里得到工作。我无法在那里度过一个月。

datej = str(payslip.date_to)
datek = str(payslip.date_from)
dj = datej[-2:]
dk = datek[-2:]
working_days=dj-dk
one_daySalary=contract.wage/30
salary=working_days*one_daySalary
result = salary

我只能在固定的30天月份的基础上计算工资。

3 个答案:

答案 0 :(得分:2)

如果导入datetime库并将日期转换为datetime个对象,则可以获得月份和年份。我想在你payslip.date_to之前str(payslip.date_to)应该是一个字符串,所以你可以使用Odoo特殊方法来做到这一点:

datej = fields.Date.from_string(payslip.date_to)
datek = fields.Date.from_string(payslip.date_from)

现在您有两个datetime个对象,您可以使用datetime方法获得所需内容。

>>> datej.month
1
>>> datej.year
2018

答案 1 :(得分:0)

在程序之上,import datetime库。如果您收到的日期对象是字符串格式,请使用其方法,使用以下函数将其转换为正确的格式。

timeFormattedObject = timeObject.strftime("%Y-%m-%d %H:%M:%S")
timeFormattedObject = datetime.strptime(timeFormattedObject ,DEFAULT_SERVER_DATETIME_FORMAT)

要获取该对象的年份,请使用以下函数。

yearValue = timeFormattedObject.year 

答案 2 :(得分:0)

我在payslip.name中找到了这个月。然后我简单地尝试了那个月份的工资单名称,但是在这个解决方案中我们必须强制用户不要更改工资单名称模式。我已将payslip名称更改为只读以实现此目的

 datej = str(payslip.date_to)
    datek = str(payslip.date_from)
    dj = int(datej[-2:])
    dk = int(datek[-2:])
    working_days=dj - dk
    month=0
    if "January" in payslip.name: month= 31
    if "February" in payslip.name: month= 28
    if "March" in payslip.name: month= 31
    if "April" in payslip.name: month= 30
    if "May" in payslip.name: month= 31
    if "June" in payslip.name: month= 30
    if "July" in payslip.name: month= 31
    if "August" in payslip.name: month= 31
    if "September" in payslip.name: month= 30
    if "October" in payslip.name: month= 31
    if "November" in payslip.name: month= 30
    if "December" in payslip.name: month= 31
    one_daySalary=contract.wage/month
    salary=one_daySalary*working_days
    result = salary