0

In odoo 10, I'd like to calculate difference between a field from current record and same field from previous record calcul difference between 2 record

So I use this code

km_parcouru = fields.Float('KM Parcouru', compute='get_km_parcouru', store=True)

@api.multi
@api.depends('odometer')
def get_km_parcouru(self):
    for record in self.sorted(lambda x:x.id):
        prev = self.env['fleet.vehicle.log.fuel'].search([], order='date desc', limit=1)
        prev_record = prev[0]['odometer'] if prev else 0
        record.km_parcouru = record.odometer - prev_record

Can you hellp me?

Thank you

KbiR
  • 4,047
  • 6
  • 37
  • 103
rma_bjr
  • 35
  • 1
  • 8

1 Answers1

0

You can add a domain [('id', '<', record.id)] and the order id desc to get the previous record registered, something like this:

@api.multi
@api.depends('odometer')
def get_km_parcouru(self):
    for record in self:
        prev = self.env['fleet.vehicle.log.fuel'].search([('id', '<', record.id)], order='id desc', limit=1)
        prev_record = prev[0]['odometer'] if prev else 0
        record.km_parcouru = record.odometer - prev_record

I hope this answer can be helpful for you.

UPDATE 15/06/2018

NewId error, its because before you save the record, record.id doesn't exist, you should override create and write method, after this methods been called record.id should exist. And if your compute field doesn't storage in your table maybe its because you add store=true after you used compute attritube, you could delete a column in your table by SQL, and restart your server.

Juan Salcedo
  • 1,598
  • 1
  • 16
  • 28