Use UNION for 'Or'-ed domain with subqueries broken domains ['OR', [(), ()]]
Since #10658 (closed), fail sale_promotion_coupon and web_shop_vue_storefront scenario test in case that domains of the kind ['OR', [(), ()]]
File "/home/raimon/projectes/nandev/nancore/trytond/trytond/modules/sale_promotion_coupon/tests/scenario_sale_promotion_coupon.rst", line 68, in scenario_sale_promotion_coupon.rst
Failed example:
promotion.save()
Exception raised:
Traceback (most recent call last):
File "/usr/lib/python3.7/doctest.py", line 1329, in __run
compileflags, 1), test.globs)
File "<doctest scenario_sale_promotion_coupon.rst[38]>", line 1, in <module>
promotion.save()
File "/home/raimon/projectes/nandev/nancore/proteus/proteus/__init__.py", line 102, in newfunc
return self.func(owner, [instance], *args, **kwargs)
File "/home/raimon/projectes/nandev/nancore/proteus/proteus/__init__.py", line 847, in save
ids = proxy.create(values, context)
File "/home/raimon/projectes/nandev/nancore/proteus/proteus/config.py", line 188, in __call__
result = rpc.result(meth(*args, **kwargs))
File "/home/raimon/projectes/nandev/nancore/trytond/trytond/model/modelsql.py", line 159, in wrapper
return func(cls, *args, **kwargs)
File "/home/raimon/projectes/nandev/nancore/trytond/trytond/model/modelsql.py", line 670, in create
field.set(cls, fname, *fargs)
File "/home/raimon/projectes/nandev/nancore/trytond/trytond/model/fields/one2many.py", line 260, in set
Target.create(to_create)
File "/home/raimon/projectes/nandev/nancore/trytond/trytond/model/modelsql.py", line 159, in wrapper
return func(cls, *args, **kwargs)
File "/home/raimon/projectes/nandev/nancore/trytond/trytond/model/modelsql.py", line 670, in create
field.set(cls, fname, *fargs)
File "/home/raimon/projectes/nandev/nancore/trytond/trytond/model/fields/one2many.py", line 260, in set
Target.create(to_create)
File "/home/raimon/projectes/nandev/nancore/trytond/trytond/model/modelsql.py", line 159, in wrapper
return func(cls, *args, **kwargs)
File "/home/raimon/projectes/nandev/nancore/trytond/trytond/model/modelsql.py", line 677, in create
cls._validate(sub_records)
File "/home/raimon/projectes/nandev/nancore/trytond/trytond/model/modelstorage.py", line 85, in wrapper
return func(*args, **kwargs)
File "/home/raimon/projectes/nandev/nancore/trytond/trytond/model/modelstorage.py", line 1429, in _validate
cls.validate(records)
File "/home/raimon/projectes/nandev/nancore/trytond/trytond/modules/sale_promotion_coupon/sale.py", line 150, in validate
cls.check_unique(numbers)
File "/home/raimon/projectes/nandev/nancore/trytond/trytond/modules/sale_promotion_coupon/sale.py", line 171, in check_unique
numbers=numbers))
trytond.modules.sale_promotion_coupon.exceptions.DuplicateError: The coupons numbered "CODE10" are duplicated. -
Debug the domain is:
> /home/raimon/projectes/nandev/nancore/trytond/trytond/modules/sale_promotion_coupon/sale.py(166)check_unique()
-> if duplicates:
(Pdb) duplicates
[Pool().get('sale.promotion.coupon.number')(1)]
(Pdb) numbers
[Pool().get('sale.promotion.coupon.number')(1)]
(Pdb) numbers[0].number
'CODE10'
(Pdb) domain
['OR', [('number', '=', 'CODE10'), ('id', '!=', 1), ('coupon.promotion.company', '=', 1)]]
(Pdb) cls.search([])
[Pool().get('sale.promotion.coupon.number')(1)]