Как вызвать исключение, если тот же продукт выбирает в on2many в odoo8

Haii frds...

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

В строке заказа на продажу -> Order_line, когда я выбрал один продукт, например Book&pen

В другой раз, когда я выбираю один и тот же продукт (книга и ручка), одновременно возникает исключение. это возможно, когда я сохраняю заказ на продажу, это вызывает ошибку. Но хочу это одновременно..

S.NO Продукт Кол-во УОМ

1 [FINAL-0001] GDFB-H-035-XL 1,0000

2 [FINAL-0001] GDFB-H-035-XL 1,0000

Пожалуйста, помогите мне решить эту проблему...... Заранее спасибо...

1 ответ



Вы можете сделать это двумя способами, в модели sale.order.line:

  1. используя @api.constrains декоратор.
  2. переопределение функций записи / создания.

Вот пример кода для каждого способа:

  1. С @api.constrains:
    from openerp.exceptions import ValidationError
        @api.constrains('product_id')
        def constr(self):
            a=0
            for rec in self.order_id.order_line:
                if (rec.product_id.id == self.product_id.id) and (rec.id !=  self.id):
                    a=a+1
            if a > 1:
                raise ValidationError(u"Duplicate lines \nthis line already exist!\ncheck your lines again please!")
  1. С переопределением функций записи / создания:
@api.multi
def write(self,vals):
    if 'product_id' in vals :
        prod = self.env['product.product'].browse([vals.get('product_id')])
    else:
        prod = self.product_id

    for line in self.env['sale.order'].browse([self.order_id.id]).order_line:
        if (prod.id == line.product_id.id) and line.id !=  self.id:
            raise ValidationError(u"Duplicate lines \nthis line already exist!\ncheck your lines again please!")
    return super(sale_order_line,self).write(vals)

@api.model
def create(self,vals):
    for line in self.env['sale.order'].browse([vals['order_id']]).order_line:
        if (vals.get('product_id') == line.product_id.id) and line.id !=  self.id:
            raise ValidationError(u"Duplicate lines \nthis line already exist!\ncheck your lines again please!")
    return super(sale_order_line,self).create(vals)


Спасибо Вам за Ваш вопрос
С наилучшими пожеланиями.

Другие вопросы по тегам