diff --git a/modules/web_shop/message.xml b/modules/web_shop/message.xml
index 8426d012ec..f24b73b8bc 100644
--- a/modules/web_shop/message.xml
+++ b/modules/web_shop/message.xml
@@ -9,8 +9,8 @@ this repository contains the full copyright notices and license terms. -->
To process the sale "%(sale)s" you must select another party instead of the guest "%(party)s".
-
- The web ID on the sale must be unique.
+
+ The web ID on the sale must be unique per shop.
diff --git a/modules/web_shop/sale.py b/modules/web_shop/sale.py
index 2180d4f6fe..95608f0c60 100644
--- a/modules/web_shop/sale.py
+++ b/modules/web_shop/sale.py
@@ -28,10 +28,21 @@ class Sale(metaclass=PoolMeta):
super().__setup__()
t = cls.__table__()
cls._sql_constraints += [
- ('web_id', Exclude(t, (NullIf(t.web_id, ''), Equal)),
- 'web_shop.msg_sale_web_id_unique')
+ ('web_shop_id_unique',
+ Exclude(t,
+ (t.web_shop, Equal),
+ (NullIf(t.web_id, ''), Equal)),
+ 'web_shop.msg_sale_web_shop_id_unique')
]
+ @classmethod
+ def __register__(cls, module):
+ table_h = cls.__table_handler__(module)
+ super().__register__(module)
+
+ # Migration from 7.4: replace web_id constraint by web_shop_id_unique
+ table_h.drop_constraint('web_id')
+
@fields.depends('web_shop', 'web_id')
def on_change_web_shop(self, nbytes=None):
if self.web_shop and not self.web_id: