Help

1

how i can Prevent selecting the same product in order line in odoo 12cc?

Avatar
Usman

please correct me where i'm wrong / or suggest me best way to achieve my goal ...

in xml

```

<field name="ssr_line" on_change="onchange_product(ssr_line)">

```

in python 


```

class ssr_line(models.Model):

 _name="ssr.line"
def onchange_product(self, order_line): 

 mylist = [] 

 if order_line != []: 

 for line in order_line: 

 for loop in line: 

if isinstance(loop, dict): 

mylist.append(loop['product_id']) 

 if len(mylist) != len(set(mylist)): raise exceptions.ValidationError('Product Should be Unique') 

 return True

```

nathig happen no error no out put no result

correct me or sugeest me othe way 

Avatar
Discard
3 Answers
3

From onchange, you cannot raise exception or it won't stop the flow. 

Better to check the duplicate products on save button (create / write method) and display the duplicate product name in the exception message.

Avatar
Discard
1
Avatar
Ankit H Gandhi(AHG)
Best Answer

Dear Usman,

To check exist the same Product in the line level.

from odoo import models, fields, api
from odoo.exceptions import ValidationError


class PurchaseOrder(models.Model):
_inherit = "purchase.order"

@api.multi
@api.constrains('order_line')
def _check_exist_product_in_line(self):
for purchase in self:
exist_product_list = []
for line in purchase.order_line:
if line.product_id.id in exist_product_list:
raise ValidationError(_('Product should be one per line.'))
exist_product_list.append(line.product_id.id)

Hope this code help you

Best Thanks,

Ankit H Gandhi.

1 Comment
Avatar
Discard
Avatar
Usman
-

great

1
Avatar
Niyas Raphy
Best Answer

Hi,

You can use the unique constrains for this, please see my previous answer for the similar question: How to Prevent selecting the same value in one2many field in odoo 10?


Thanks

1 Comment
Avatar
Discard
Avatar
Usman
-

i use this solution ... thanks @Niyas