details:   https://code.tryton.org/tryton/commit/d0bfff557793
branch:    default
user:      Cédric Krier <[email protected]>
date:      Fri Sep 04 22:11:11 2026 +0200
description:
        Permit the selection of companies for which to create invoices and 
consumptions for subscriptions

        Closes #15068
diffstat:

 modules/sale_subscription/CHANGELOG                                   |   1 +
 modules/sale_subscription/subscription.py                             |  67 
+++++++--
 modules/sale_subscription/view/create_invoice_start_form.xml          |   2 +
 modules/sale_subscription/view/line_consumption_create_start_form.xml |   2 +
 4 files changed, 55 insertions(+), 17 deletions(-)

diffs (160 lines):

diff -r 720da3b22f40 -r d0bfff557793 modules/sale_subscription/CHANGELOG
--- a/modules/sale_subscription/CHANGELOG       Fri Sep 04 22:10:07 2026 +0200
+++ b/modules/sale_subscription/CHANGELOG       Fri Sep 04 22:11:11 2026 +0200
@@ -1,3 +1,4 @@
+* Permit the selection of companies for which to create invoices and 
consumptions
 
 Version 8.0.0 - 2026-04-20
 --------------------------
diff -r 720da3b22f40 -r d0bfff557793 modules/sale_subscription/subscription.py
--- a/modules/sale_subscription/subscription.py Fri Sep 04 22:10:07 2026 +0200
+++ b/modules/sale_subscription/subscription.py Fri Sep 04 22:11:11 2026 +0200
@@ -18,7 +18,7 @@
 from trytond.pool import Pool
 from trytond.pyson import Bool, Eval, If
 from trytond.tools import firstline, sortable_values
-from trytond.transaction import Transaction
+from trytond.transaction import Transaction, check_access
 from trytond.wizard import (
     Button, StateAction, StateTransition, StateView, Wizard)
 
@@ -430,17 +430,16 @@
 
         if date is None:
             date = Date.today()
-        company_id = Transaction().context.get('company', -1)
 
-        consumptions = Consumption.search([
-                ('invoice_line', '=', None),
-                ('line.subscription.next_invoice_date', '<=', date),
-                ('line.subscription.state', 'in', ['running', 'closed']),
-                ('line.subscription.company', '=', company_id),
-                ],
-            order=[
-                ('line.subscription.id', 'DESC'),
-                ])
+        with check_access():
+            consumptions = Consumption.search([
+                    ('invoice_line', '=', None),
+                    ('line.subscription.next_invoice_date', '<=', date),
+                    ('line.subscription.state', 'in', ['running', 'closed']),
+                    ],
+                order=[
+                    ('line.subscription.id', 'DESC'),
+                    ])
 
         def keyfunc(consumption):
             return consumption.line.subscription
@@ -471,10 +470,10 @@
 
         Invoice.update_taxes(all_invoices)
 
-        subscriptions = cls.search([
-                ('next_invoice_date', '<=', date),
-                ('company', '=', company_id),
-                ])
+        with check_access():
+            subscriptions = cls.search([
+                    ('next_invoice_date', '<=', date),
+                    ])
         for subscription in subscriptions:
             if subscription.state == 'running':
                 while subscription.next_invoice_date <= date:
@@ -959,7 +958,14 @@
     def do_create_(self, action):
         pool = Pool()
         Line = pool.get('sale.subscription.line')
-        Line.generate_consumption(date=self.start.date)
+        User = pool.get('res.user')
+        transaction = Transaction()
+
+        companies = {c.id for c in self.start.companies}
+        companies &= set(User.get_companies())
+
+        with transaction.set_context(_companies=companies):
+            Line.generate_consumption(date=self.start.date)
         return action, {}
 
     def transition_create_(self):
@@ -970,6 +976,12 @@
     __name__ = 'sale.subscription.line.consumption.create.start'
 
     date = fields.Date("Date")
+    companies = fields.Many2Many(
+        'company.company', None, None, "Companies", required=True,
+        domain=[
+            ('id', 'in', Eval('context', {}).get('companies', [])),
+            ],
+        help="Limit to subscription lines from these companies.")
 
     @classmethod
     def default_date(cls):
@@ -977,6 +989,10 @@
         Date = pool.get('ir.date')
         return Date.today()
 
+    @classmethod
+    def default_companies(cls):
+        return Transaction().context.get('companies')
+
 
 class CreateSubscriptionInvoice(Wizard):
     __name__ = 'sale.subscription.create_invoice'
@@ -991,7 +1007,14 @@
     def transition_create_(self):
         pool = Pool()
         Subscription = pool.get('sale.subscription')
-        Subscription.generate_invoice(date=self.start.date)
+        User = pool.get('res.user')
+        transaction = Transaction()
+
+        companies = {c.id for c in self.start.companies}
+        companies &= set(User.get_companies())
+
+        with transaction.set_context(_companies=companies):
+            Subscription.generate_invoice(date=self.start.date)
         return 'end'
 
 
@@ -999,9 +1022,19 @@
     __name__ = 'sale.subscription.create_invoice.start'
 
     date = fields.Date("Date")
+    companies = fields.Many2Many(
+        'company.company', None, None, "Companies", required=True,
+        domain=[
+            ('id', 'in', Eval('context', {}).get('companies', [])),
+            ],
+        help="Limit to subscription lines from these companies.")
 
     @classmethod
     def default_date(cls):
         pool = Pool()
         Date = pool.get('ir.date')
         return Date.today()
+
+    @classmethod
+    def default_companies(cls):
+        return Transaction().context.get('companies')
diff -r 720da3b22f40 -r d0bfff557793 
modules/sale_subscription/view/create_invoice_start_form.xml
--- a/modules/sale_subscription/view/create_invoice_start_form.xml      Fri Sep 
04 22:10:07 2026 +0200
+++ b/modules/sale_subscription/view/create_invoice_start_form.xml      Fri Sep 
04 22:11:11 2026 +0200
@@ -6,5 +6,7 @@
     <group col="2" xexpand="1" id="create_date">
         <label string="Create Subscription Invoices for date" id="create"/>
         <field name="date"/>
+
+        <field name="companies" colspan="2"/>
     </group>
 </form>
diff -r 720da3b22f40 -r d0bfff557793 
modules/sale_subscription/view/line_consumption_create_start_form.xml
--- a/modules/sale_subscription/view/line_consumption_create_start_form.xml     
Fri Sep 04 22:10:07 2026 +0200
+++ b/modules/sale_subscription/view/line_consumption_create_start_form.xml     
Fri Sep 04 22:11:11 2026 +0200
@@ -7,5 +7,7 @@
         <label string="Create Subscription Line Consumptions for date"
             id="create"/>
         <field name="date"/>
+
+        <field name="companies" colspan="2"/>
     </group>
 </form>

Reply via email to