diff --git a/addons/lunch/models/lunch_order.py b/addons/lunch/models/lunch_order.py index aba2946efa3..c142b983ba0 100644 --- a/addons/lunch/models/lunch_order.py +++ b/addons/lunch/models/lunch_order.py @@ -82,25 +82,28 @@ class LunchOrder(models.Model): self._cr.execute("""CREATE INDEX IF NOT EXISTS lunch_order_user_product_date ON %s (user_id, product_id, date)""" % self._table) + def _get_topping_ids(self, field, values): + return list(self._fields[field].convert_to_cache(values, self)) + def _extract_toppings(self, values): """ If called in api.multi then it will pop topping_ids_1,2,3 from values """ - topping_1_values = values.get('topping_ids_1', False) - topping_2_values = values.get('topping_ids_2', False) - topping_3_values = values.get('topping_ids_3', False) - if self.ids: - # TODO This is not taking into account all the toppings for each individual order, this is usually not a problem - # since in the interface you usually don't update more than one order at a time but this is a bug nonetheless - topping_1 = values.pop('topping_ids_1')[0][2] if topping_1_values else self[:1].topping_ids_1.ids - topping_2 = values.pop('topping_ids_2')[0][2] if topping_2_values else self[:1].topping_ids_2.ids - topping_3 = values.pop('topping_ids_3')[0][2] if topping_3_values else self[:1].topping_ids_3.ids - else: - topping_1 = values['topping_ids_1'][0][2] if topping_1_values else [] - topping_2 = values['topping_ids_2'][0][2] if topping_2_values else [] - topping_3 = values['topping_ids_3'][0][2] if topping_3_values else [] + topping_ids = [] - return topping_1 + topping_2 + topping_3 + for i in range(1, 4): + topping_field = f'topping_ids_{i}' + topping_values = values.get(topping_field, False) + + if self.ids: + # TODO This is not taking into account all the toppings for each individual order, this is usually not a problem + # since in the interface you usually don't update more than one order at a time but this is a bug nonetheless + topping_ids += self._get_topping_ids(topping_field, values.pop(topping_field)) \ + if topping_values else self[:1][topping_field].ids + else: + topping_ids += self._get_topping_ids(topping_field, topping_values) if topping_values else [] + + return topping_ids @api.constrains('topping_ids_1', 'topping_ids_2', 'topping_ids_3') def _check_topping_quantity(self):