Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法使用Odoo 11获取薪资规则中的日期对象_Python_Odoo_Odoo 11 - Fatal编程技术网

Python 无法使用Odoo 11获取薪资规则中的日期对象

Python 无法使用Odoo 11获取薪资规则中的日期对象,python,odoo,odoo-11,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_

我试图定义一个工资规则,该规则将根据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
对象,则可以同时获取月份和年份。我猜
paysslip.date\u to
应该是一个字符串,然后再执行
str(paysslip.date\u 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
library。如果您收到的日期对象是字符串格式,请使用其方法,使用以下函数将其转换为正确的格式

timeFormattedObject = timeObject.strftime("%Y-%m-%d %H:%M:%S")
timeFormattedObject = datetime.strptime(timeFormattedObject ,DEFAULT_SERVER_DATETIME_FORMAT)
yearValue = timeFormattedObject.year 
要获取该对象的年份,请使用以下函数

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

我在payslip.name中找到了月份。然后我简单地尝试了该月是否在该payslip名称中,但在这个解决方案中,我们必须强制用户不要更改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

但是Odoo不允许我导入datetime库。@HassanALi不能在文件顶部写入
导入datetime
?您是否仅仅因为导入
datetime
或执行
字段.Date.from_string
方法而出错?在Odoo at salary规则中,我们只执行可用对象。对不起,我不明白你想告诉我什么。我猜您是在一个
*.py
文件中编写Python代码,因此,如果您在类之外的文件顶部编写,
import datetime
应该可以工作。请查看或odoo date方法。您的代码可能会工作,但您的编程很糟糕。我在那里使用的是odoo可用对象。那里有直接的python模块。如果一年是闰年,你的代码就会失败,这就是为什么python中的time、datetime等库做得很好,比如@ChesuCr说,“你编程不好”。事实上,我从来没有使用过工资规则。我很好奇,你在哪里可以使用这些工资规则?它们与安全规则不同吗?看起来有一个特殊的沙盒,你只能使用一些功能。您可以在这些规则中使用对象
时间
?那可能对你有帮助不,我不能在那里用物体时间。Odoo提供了一组我们只能使用的对象。很抱歉,这不能在Odoo上实现。这适用于python文件。我已经实施了它。你能详细说明一下,它是怎么不起作用的吗?对我来说,我扩展了(继承)hr.employee对象,并调用了我需要的任何方法