Odoo - 如何比较验证前的存储日期

时间:2016-02-13 20:23:23

标签: postgresql openerp odoo-8

我正在Odoo的会议室预订模块上工作 我试图将我关于插入的日期与我在数据库中的日期进行比较。 我尝试了search(),browse()函数我也尝试迭代记录集但它总是指向我即将插入的记录。 我正在考虑通过SQL查询来执行它,但我找不到存储数据的表名。

这是类定义:

class Reservation(models.Model):
    _name = 'module001.reservation'

    name = fields.Char(String="Reservation Number", required=True)
    start_date = fields.Datetime(default=fields.Date.today)
    room_number = fields.Many2one('module001.room', ondelete='cascade', string="Room", required=True)
    reserved_for = fields.Many2one('res.partner', string="Reserved for ")
    end_date = fields.Datetime(string="End Date", store=True)

提前谢谢

1 个答案:

答案 0 :(得分:0)

我能够以这种方式完成它,所以我可以将我已经记录的每个日期与我即将插入的当前记录进行比较

@api.multi
@api.constrains('start_date', 'end_date', 'name')
def _check_date(self):
    envir = self.env['tt.reservation'].search([('id', '!=', self.id)])
    for record in envir:
        start_self = datetime.datetime.strptime(self.start_date, "%Y-%m-%d %H:%M:%S")
        end_self = datetime.datetime.strptime(self.end_date, "%Y-%m-%d %H:%M:%S")
        start_rec = datetime.datetime.strptime(record.start_date, "%Y-%m-%d %H:%M:%S")
        end_rec = datetime.datetime.strptime(record.end_date, "%Y-%m-%d %H:%M:%S")

#verification de la diponibilite de la salle
        if self.room_id == record.room_id:
            if start_self.date() == start_rec.date() and start_self.date() == end_rec.date():
                if ((start_self.time() > start_rec.time() and start_self.time() < end_rec.time()) or (end_self.time() > start_rec.time() and end_self.time() < end_rec.time()) or (start_self.time() <= start_rec.time() and end_self.time() >= end_rec.time())):
                    raise exceptions.ValidationError("Salle occupée")