changeset 780efc2639b4 in modules/commission:default
details: 
https://hg.tryton.org/modules/commission?cmd=changeset;node=780efc2639b4
description:
        Use the invoice date or payment date for commission date

        issue9643
        review294601002
diffstat:

 CHANGELOG                     |   2 ++
 invoice.py                    |  25 +++++++++++++++++--------
 tests/scenario_commission.rst |  30 +++++++++++++++++++++++++++++-
 3 files changed, 48 insertions(+), 9 deletions(-)

diffs (134 lines):

diff -r 56ae09d29aec -r 780efc2639b4 CHANGELOG
--- a/CHANGELOG Mon Nov 02 15:57:35 2020 +0100
+++ b/CHANGELOG Fri Nov 13 14:02:09 2020 +0100
@@ -1,3 +1,5 @@
+* Use the invoice date or payment date for commission date
+
 Version 5.8.0 - 2020-11-02
 * Bug fixes (see mercurial logs for details)
 * Remove support for Python 3.5
diff -r 56ae09d29aec -r 780efc2639b4 invoice.py
--- a/invoice.py        Mon Nov 02 15:57:35 2020 +0100
+++ b/invoice.py        Fri Nov 13 14:02:09 2020 +0100
@@ -1,5 +1,6 @@
 # This file is part of Tryton.  The COPYRIGHT file at the top level of
 # this repository contains the full copyright notices and license terms.
+from collections import defaultdict
 from trytond.pool import PoolMeta, Pool
 from trytond.model import ModelView, Workflow, fields
 from trytond.pyson import Eval, If, Bool
@@ -62,15 +63,23 @@
 
         super(Invoice, cls).paid(invoices)
 
+        date2commissions = defaultdict(list)
         for sub_invoices in grouped_slice(invoices):
             ids = [i.id for i in sub_invoices]
-            commissions = Commission.search([
-                    ('date', '=', None),
-                    ('origin.invoice', 'in', ids, 'account.invoice.line'),
-                    ])
-            Commission.write(commissions, {
-                    'date': today,
-                    })
+            for commission in Commission.search([
+                        ('date', '=', None),
+                        ('origin.invoice', 'in', ids, 'account.invoice.line'),
+                        ]):
+                date = commission.origin.invoice.reconciled or today
+                date2commissions[date].append(commission)
+        to_write = []
+        for date, commissions in date2commissions.items():
+            to_write.append(commissions)
+            to_write.append({
+                'date': date,
+                })
+        if to_write:
+            Commission.write(*to_write)
 
     @classmethod
     @ModelView.button
@@ -166,7 +175,7 @@
             commission = Commission()
             commission.origin = self
             if plan.commission_method == 'posting':
-                commission.date = today
+                commission.date = self.invoice.invoice_date or today
             commission.agent = agent
             commission.product = plan.commission_product
             commission.amount = amount
diff -r 56ae09d29aec -r 780efc2639b4 tests/scenario_commission.rst
--- a/tests/scenario_commission.rst     Mon Nov 02 15:57:35 2020 +0100
+++ b/tests/scenario_commission.rst     Fri Nov 13 14:02:09 2020 +0100
@@ -16,6 +16,7 @@
     >>> from trytond.modules.account_invoice.tests.tools import \
     ...     set_fiscalyear_invoice_sequences, create_payment_term
     >>> today = datetime.date.today()
+    >>> tomorrow = today + relativedelta(days=1)
 
 Activate modules::
 
@@ -81,6 +82,19 @@
     >>> payment_term = create_payment_term()
     >>> payment_term.save()
 
+Create payment method::
+
+    >>> Journal = Model.get('account.journal')
+    >>> PaymentMethod = Model.get('account.invoice.payment.method')
+    >>> Sequence = Model.get('ir.sequence')
+    >>> journal_cash, = Journal.find([('type', '=', 'cash')])
+    >>> payment_method = PaymentMethod()
+    >>> payment_method.name = 'Cash'
+    >>> payment_method.journal = journal_cash
+    >>> payment_method.credit_account = accounts['cash']
+    >>> payment_method.debit_account = accounts['cash']
+    >>> payment_method.save()
+
 Create agent::
 
     >>> Agent = Model.get('commission.agent')
@@ -124,6 +138,7 @@
     >>> invoice.party = customer
     >>> invoice.payment_term = payment_term
     >>> invoice.agent = agent
+    >>> invoice.invoice_date
     >>> line = invoice.lines.new()
     >>> line.product = product
     >>> line.quantity = 1
@@ -140,6 +155,8 @@
     [Decimal('10.0000'), Decimal('10.0000')]
     >>> [c.invoice_state for c in line.commissions]
     ['', '']
+    >>> [c.date for c in line.commissions]
+    [None, None]
 
 Pending amount for agent::
 
@@ -153,6 +170,18 @@
     >>> principal.pending_amount
     Decimal('10.0000')
 
+Pay invoice::
+
+    >>> pay = Wizard('account.invoice.pay', [invoice])
+    >>> pay.form.payment_method = payment_method
+    >>> pay.form.date = tomorrow
+    >>> pay.execute('choice')
+    >>> pay.state
+    'end'
+    >>> Commission = Model.get('commission')
+    >>> [c.date == tomorrow for c in Commission.find([])]
+    [True, True]
+
 Create commission invoices::
 
     >>> create_invoice = Wizard('commission.create_invoice')
@@ -178,7 +207,6 @@
     >>> invoice.total_amount
     Decimal('10.00')
 
-    >>> Commission = Model.get('commission')
     >>> commissions = Commission.find([])
     >>> [c.invoice_state for c in commissions]
     ['invoiced', 'invoiced']

Reply via email to