changeset 7a20a31b7662 in modules/sale_promotion_coupon:default
details: 
https://hg.tryton.org/modules/sale_promotion_coupon?cmd=changeset&node=7a20a31b7662
description:
        Support many parties to count coupon

        issue11385
        review380731002
diffstat:

 CHANGELOG |   2 ++
 sale.py   |  22 +++++++++++++++++++---
 2 files changed, 21 insertions(+), 3 deletions(-)

diffs (59 lines):

diff -r fdfd810c38ad -r 7a20a31b7662 CHANGELOG
--- a/CHANGELOG Mon May 02 17:44:28 2022 +0200
+++ b/CHANGELOG Sun Jul 17 19:09:16 2022 +0200
@@ -1,3 +1,5 @@
+* Support many parties to count coupon
+
 Version 6.4.0 - 2022-05-02
 * Bug fixes (see mercurial logs for details)
 * Add support for Python 3.10
diff -r fdfd810c38ad -r 7a20a31b7662 sale.py
--- a/sale.py   Mon May 02 17:44:28 2022 +0200
+++ b/sale.py   Sun Jul 17 19:09:16 2022 +0200
@@ -92,6 +92,8 @@
         sale_number = Sale_Number.__table__()
         context = Transaction().context
         party = context.get('party')
+        if isinstance(party, int):
+            party = [party]
 
         query = (table
             .join(sale_number, 'LEFT',
@@ -101,7 +103,7 @@
         if party:
             query = query.join(sale, 'LEFT',
                 condition=(sale_number.sale == sale.id)
-                & (sale.party == party))
+                & (sale.party.in_(party)))
             active = Case(
                 ((coupon.number_of_use > 0) & (coupon.per_party),
                     Count(sale.id) < coupon.number_of_use),
@@ -182,12 +184,26 @@
             ('coupon.promotion.company', '=', Eval('company', -1)),
             ],
         context={
-            'party': Eval('party', -1),
+            'party': Eval('coupon_parties', []),
             },
         states={
             'readonly': Eval('state') != 'draft',
             },
-        depends={'party'})
+        depends={'coupon_parties'})
+    coupon_parties = fields.Function(fields.Many2Many(
+            'party.party', None, None, "Coupon Parties"),
+        'on_change_with_coupon_parties')
+
+    @fields.depends(methods=['_coupon_parties'])
+    def on_change_with_coupon_parties(self, name=None):
+        return [p.id for p in self._coupon_parties()]
+
+    @fields.depends('party')
+    def _coupon_parties(self):
+        parties = set()
+        if self.party:
+            parties.add(self.party)
+        return parties
 
     @classmethod
     @ModelView.button

Reply via email to