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

Unable to fetch date object at salary rules using 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天计算工资。

如果导入 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

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

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

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

yearValue = timeFormattedObject.year 

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

 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