changeset 69af22d37b1e in modules/sale_subscription:default
details: 
https://hg.tryton.org/modules/sale_subscription?cmd=changeset&node=69af22d37b1e
description:
        Add wizard for testing subscription recurrence rule

        issue10707
        review365941002
diffstat:

 CHANGELOG                                     |   1 +
 __init__.py                                   |   3 +
 recurrence.py                                 |  57 +++++++++++++++++++++++++++
 recurrence.xml                                |  27 ++++++++++++
 view/recurrence_rule_set_test_form.xml        |  13 ++++++
 view/recurrence_rule_set_test_result_list.xml |   6 ++
 6 files changed, 107 insertions(+), 0 deletions(-)

diffs (170 lines):

diff -r aab5e079ba53 -r 69af22d37b1e CHANGELOG
--- a/CHANGELOG Tue Oct 05 13:33:42 2021 +0200
+++ b/CHANGELOG Mon Oct 11 15:47:49 2021 +0200
@@ -1,3 +1,4 @@
+* Add wizard for testing subscription recurrence rule
 * Always fill invoice date
 
 Version 6.0.0 - 2021-05-03
diff -r aab5e079ba53 -r 69af22d37b1e __init__.py
--- a/__init__.py       Tue Oct 05 13:33:42 2021 +0200
+++ b/__init__.py       Mon Oct 11 15:47:49 2021 +0200
@@ -17,6 +17,8 @@
         configuration.ConfigurationSequence,
         recurrence.RecurrenceRuleSet,
         recurrence.RecurrenceRule,
+        recurrence.TestRecurrenceRuleSetView,
+        recurrence.TestRecurrenceRuleSetViewResult,
         service.Service,
         subscription.Subscription,
         subscription.Line,
@@ -29,6 +31,7 @@
     Pool.register(
         subscription.CreateLineConsumption,
         subscription.CreateSubscriptionInvoice,
+        recurrence.TestRecurrenceRuleSet,
         party.Replace,
         party.Erase,
         module='sale_subscription', type_='wizard')
diff -r aab5e079ba53 -r 69af22d37b1e recurrence.py
--- a/recurrence.py     Tue Oct 05 13:33:42 2021 +0200
+++ b/recurrence.py     Mon Oct 11 15:47:49 2021 +0200
@@ -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.
+import datetime as dt
 from dateutil.rrule import MO, TU, WE, TH, FR, SA, SU
 from dateutil.rrule import YEARLY, MONTHLY, WEEKLY, DAILY
 from dateutil.rrule import rrule, rruleset
@@ -8,6 +9,7 @@
 from trytond.model import ModelSQL, ModelView, fields
 from trytond.pool import Pool
 from trytond.transaction import Transaction
+from trytond.wizard import Wizard, StateView, Button
 
 from .exceptions import RecurrenceRuleValidationError
 
@@ -229,3 +231,58 @@
                     recurrence_rule=self.rec_name,
                     exception=exception,
                     **self.__names__(name))) from exception
+
+
+class TestRecurrenceRuleSet(Wizard):
+    "Test Subscription Recurrence Rule Set"
+    __name__ = 'sale.subscription.recurrence.rule.set.test'
+    start_state = 'test'
+    test = StateView(
+        'sale.subscription.recurrence.rule.set.test',
+        'sale_subscription.recurrence_rule_set_test_view_form',
+        [Button("Close", 'end', 'tryton-close', default=True)])
+
+    def default_test(self, fields):
+        default = {}
+        if(self.model and self.model.__name__
+                == 'sale.subscription.recurrence.rule.set'):
+            if self.record:
+                default['recurrence'] = self.record.id
+        return default
+
+
+class TestRecurrenceRuleSetView(ModelView):
+    "Test Subscription Recurrence Rule Set"
+    __name__ = 'sale.subscription.recurrence.rule.set.test'
+    recurrence = fields.Many2One(
+        'sale.subscription.recurrence.rule.set',
+        "Subscription Recurrence", required=True)
+    start_date = fields.Date("Start Date", required=True)
+    count = fields.Integer("Count", required=True,
+        help="Used to determine how many occurences to compute.")
+    result = fields.One2Many(
+        'sale.subscription.recurrence.rule.set.test.result',
+        None, "Result", readonly=True)
+
+    @classmethod
+    def default_start_date(cls):
+        return Pool().get('ir.date').today()
+
+    @fields.depends('recurrence', 'start_date', 'count', 'result')
+    def on_change_with_result(self):
+        pool = Pool()
+        Result = pool.get('sale.subscription.recurrence.rule.set.test.result')
+        result = []
+        if self.recurrence and self.start_date and self.count:
+            rruleset = self.recurrence.rruleset(self.start_date)
+            datetime = dt.datetime.combine(self.start_date, dt.time())
+            for date in rruleset.xafter(datetime, self.count, inc=True):
+                result.append(Result(date=date.date()))
+        self.result = result
+        return self._changed_values.get('result', [])
+
+
+class TestRecurrenceRuleSetViewResult(ModelView):
+    "Test Subscription Recurrence Rule Set Result"
+    __name__ = 'sale.subscription.recurrence.rule.set.test.result'
+    date = fields.Date("Date", readonly=True)
diff -r aab5e079ba53 -r 69af22d37b1e recurrence.xml
--- a/recurrence.xml    Tue Oct 05 13:33:42 2021 +0200
+++ b/recurrence.xml    Mon Oct 11 15:47:49 2021 +0200
@@ -64,5 +64,32 @@
             <field name="type">tree</field>
             <field name="name">recurrence_rule_list</field>
         </record>
+
+        <record model="ir.action.wizard" id="wizard_recurrence_test">
+            <field name="name">Test Recurrence Rule</field>
+            <field 
name="wiz_name">sale.subscription.recurrence.rule.set.test</field>
+        </record>
+        <record model="ir.action.keyword"
+            id="wizard_recurrence_test_keyword1">
+            <field name="keyword">form_action</field>
+            <field 
name="model">sale.subscription.recurrence.rule.set,-1</field>
+            <field name="action" ref="wizard_recurrence_test"/>
+        </record>
+        <menuitem
+            parent="menu_configuration"
+            action="wizard_recurrence_test"
+            sequence="90"
+            id="menu_recurrence_test"/>
+
+        <record model="ir.ui.view" id="recurrence_rule_set_test_view_form">
+            <field 
name="model">sale.subscription.recurrence.rule.set.test</field>
+            <field name="type">form</field>
+            <field name="name">recurrence_rule_set_test_form</field>
+        </record>
+        <record model="ir.ui.view" 
id="recurrence_rule_set_test_result_view_list">
+            <field 
name="model">sale.subscription.recurrence.rule.set.test.result</field>
+            <field name="type">tree</field>
+            <field name="name">recurrence_rule_set_test_result_list</field>
+        </record>
     </data>
 </tryton>
diff -r aab5e079ba53 -r 69af22d37b1e view/recurrence_rule_set_test_form.xml
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/view/recurrence_rule_set_test_form.xml    Mon Oct 11 15:47:49 2021 +0200
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<form cursor="recurrence">
+    <label name="recurrence"/>
+    <field name="recurrence" colspan="3"/>
+    <label name="start_date"/>
+    <field name="start_date"/>
+    <label name="count"/>
+    <field name="count"/>
+
+    <field name="result" mode="tree" colspan="4"/>
+</form>
\ No newline at end of file
diff -r aab5e079ba53 -r 69af22d37b1e 
view/recurrence_rule_set_test_result_list.xml
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/view/recurrence_rule_set_test_result_list.xml     Mon Oct 11 15:47:49 
2021 +0200
@@ -0,0 +1,6 @@
+<?xml version="1.0"?>
+<!-- This file is part of Tryton.  The COPYRIGHT file at the top level of
+this repository contains the full copyright notices and license terms. -->
+<tree>
+    <field name="date" expand="1"/>
+</tree>
\ No newline at end of file

Reply via email to