我创建脚本来计算odoo中的范围日期。我的代码看起来很长,这是我的代码:
def dateinformation(self):
fmt = '%Y-%m-%d'
fmt1 = '%d'
if self.selection_date:
fromdt = self.selection_date
plan = self.nursery_plandate
conv_fromdt = datetime.strptime(str(fromdt),fmt)
conv_plan = datetime.strptime(str(plan),fmt)
d3 = conv_fromdt.month
d4 = conv_plan.month
d5 = conv_fromdt.day
d6 = conv_fromdt.day
和这个脚本来创建范围:
if conv_fromdt and d4 :
if d3 == d4:
if d5 == d6 :
self.nursery_information = '2'#pass
if d5 > d6 + 1:
self.nursery_information='2'
elif d5 > d6 + 2:
self.nursery_information='2'
elif d5 > d6 + 3:
self.nursery_information='2'
elif d5 > d6 + 4:
self.nursery_information='2'
elif d5 > d6 + 5:
self.nursery_information='2'
elif d5 > d6 + 6:
self.nursery_information='2'
elif d5 > d6 + 7:
self.nursery_information='2'
else :
self.nursery_information='1'#late
if d5 > d6 - 1:
self.nursery_information='2'
elif d5 > d6 - 2:
self.nursery_information='2'
elif d5 > d6 - 3:
self.nursery_information='2'
elif d5 > d6 - 4:
self.nursery_information='2'
elif d5 > d6 - 5:
self.nursery_information='2'
elif d5 > d6 - 6:
self.nursery_information='2'
elif d5 > d6 - 7:
self.nursery_information='2'
else :
self.nursery_information='0'#untimely
我希望剪切简单脚本的脚本。有人有想法吗?
答案 0 :(得分:0)
第一件事是拥有正确类型的字段。
如果这些字段仅包含给定日期(但不包含小时/秒),则可以使用fields.Date
类型的字段。
如果您需要在此字段中使用其他功能,则此帖子的以下内容也适用于fields.Datetime
类型,因此您也可以使用它。
在字段中使用这两种类型之一后,计算日差异非常容易,您需要(除非已经完成)导入文件顶部的fields file:
from openerp import fields
然后在您的方法中,您只需使用from_string
中的fields.Date
方法,Odoo documentation中对此进行了解释:
static from_string(value)
将ORM
value
转换为date
值。
因此,只有这样的代码,我们在两个日期之间有一天的差异:
time_delta = fields.Date.from_string(self.selection_date) - fields.Date.from_string(self.nursery_plandate)
day_difference = time_delta.days
剩下的就是使用基本的python comparisons和if
/elif
/else
statments。
例如:
if 0 <= day_difference < 70:
print "pass here when the day difference is between 0 and 69 (included)"
elif day_difference > -20:
print "or pass here when the day difference is between -19 and -1 (included)"
else:
print "otherwise (so less than -19 or more than 69) pass here"