无法使用 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
我正在尝试定义一个工资规则,该规则将根据 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