Как вызвать исключение, если тот же продукт выбирает в 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:
- используя @api.constrains декоратор.
- переопределение функций записи / создания.
Вот пример кода для каждого способа:
- С @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!")
- С переопределением функций записи / создания:
@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)
Спасибо Вам за Ваш вопрос
С наилучшими пожеланиями.