Germany mailing list archives

germany@odoo-community.org

Avatar

Technische Frage

by
markus.mitsch
- 25/05/2021 10:21:08

Hallo zusammen,

ich baue seit einiger Zeit an einem odoo-System um Bestellungen und ihre Kostenstellen zu dokumentieren. Dort bin ich auf ein Problem gestoßen. Der Code sieht vereinfacht ungefähr so aus:

 

class Order(models.Model):

order_line = fields.One2Many('order.line', ...

cost_center_line = fields.One2Many('cost_center_line', ...

amount_total = fields.Monetary(store=True, compute='_compute_amount')

amount_cost_center = fields.Monetary(store=True, compute='_compute_cost_center_amount')

 

@api.depends('order_line.price_total')

def _compute_amount(self):

for rec in self:

amount = 0.0

for line in rec.order_line:

amount += line.price_total

rec.amount_total = amount

 

@api.depends('cost_center_line.amount')

def _compute_cost_center_amount(self):

for rec in self:

amount = 0.0

for line in rec.cost_center_line:

amount += line.amount

rec.amount_cost_center = amount

 

@api.constrains('amount_total','amount_cost_center')

def _constrains_amount(self):

for rec in self:

if rec.amount_total != rec.amount.cost_center:

raise ValidationError('...')

 

Das Problem tritt auf, wenn eine Order bereits gespeichert ist und noch einmal bearbeitet wird.

Wird eine Kostenstelle oder ein Produkt entfernt und die verbleibenden Werte angeglichen, löst der Constraint aus, weil die compute-Felder den gelöschten Posten aus irgend einem Grund immer noch dazurechnen.

 

Ich bin schon länger auf der Suche nach Unterstützung, hatte aber bisher kein Glück.

 

Viele Grüße

Markus Mitsch