Odoo - Как сравнить сохраненные даты перед проверкой

Я работаю над модулем бронирования конференц-залов на 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)

заранее спасибо


person Blkwtch    schedule 13.02.2016    source источник
comment
Вы хотите сравнить поля start_date и end_date в вашем случае?   -  person DASADIYA CHAITANYA    schedule 14.02.2016


Ответы (1)


Я смог сделать это таким образом, чтобы я мог сравнить каждую дату записей, которые у меня уже есть, с текущей записью, которую я собираюсь вставить.

@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")
person Blkwtch    schedule 23.02.2016