защита не работает с api.constrains - PullRequest
0 голосов
/ 12 июня 2018

Я хочу запретить делать продукт, если нет "qty_available".Но этот код не работает.

Это работает, только если я изменяю @ api.constrains на @ api.onchange ('move_lines'), но если я делаю это с onchange, все еще есть возможность сохранить запись.

как api.constrains вводит имена, написанные точками, как я могу сделать эту работу

class mrp_production(osv.osv):
    _inherit = 'mrp.production'

 @api.constrains('qty_available', 'move_lines.qty_available')
    def move_lines_check(self):
        for line in self.move_lines:
            if line.qty_available < 1:
                raise ValidationError(_('There is not enough raw material, check Quantity on hand'))

ОБНОВЛЕНИЕ цели

Итак, еще раз цель состоит в том, чтобы сделать предупреждениепоявляются, если нет сырья, из которого можно изготовить продукт (мы не можем изготовить его из ничего), и, если материалов недостаточно, не может быть продукта.

1 Ответ

0 голосов
/ 21 июня 2018

Пожалуйста, добавьте приведенное ниже ограничение к модели mrp.production , чтобы ограничить сохранение заказа на производство, если сырья недостаточно для производства.

from openerp import api
from openerp.exceptions import Warning
@api.one
@api.constrains('move_lines','bom_id')
def _check_product_stock_availability(self):
    if self.move_lines:
        for move in self.move_lines:
            qty_available = move.product_id.with_context(location=move.location_id.id).qty_available
            if qty_available < move.product_uom_qty:
                raise Warning(_('There is not enough raw material, check Quantity on hand.'))
    elif self.bom_id:
        factor = self.product_uom._compute_qty(self.product_uom.id,self.product_qty, self.bom_id.product_uom.id)
        result, result2 = self.bom_id._bom_explode(self.bom_id,self.product_id, factor / self.bom_id.product_qty, None, routing_id=self.routing_id.id)
        product_obj = self.env['product.product']
        for line in result:
            qty_available = product_obj.browse(line.get('product_id')).with_context(location=self.location_src_id.id).qty_available
            #qty_available = line.product_id.with_context(location=self.location_src_id.id).qty_available
            if qty_available < line.get('product_qty'):
                raise Warning(_('There is not enough raw material, check Quantity on hand for products in BOM.'))
...