如何在odoo中创建范围日期?

时间:2015-10-23 02:08:31

标签: python odoo openerp-8

我创建脚本来计算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

我希望剪切简单脚本的脚本。有人有想法吗?

1 个答案:

答案 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 comparisonsif/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"