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