From 13b9df6455f0b9c72ac46cbf7fef331e72a8d94f Mon Sep 17 00:00:00 2001 From: David Blanco Bautista Date: Mon, 11 Oct 2021 15:47:49 +0200 Subject: [PATCH] Add wizard for testing subscription recurrence rule issue10707 review365941002 --- 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(+) create mode 100644 view/recurrence_rule_set_test_form.xml create mode 100644 view/recurrence_rule_set_test_result_list.xml diff --git a/CHANGELOG b/CHANGELOG index e113e8e7dd..95cb34e811 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,4 @@ +* Add wizard for testing subscription recurrence rule * Always fill invoice date Version 6.0.0 - 2021-05-03 diff --git a/__init__.py b/__init__.py index e0bd2096e8..b566be0393 100644 --- a/__init__.py +++ b/__init__.py @@ -17,6 +17,8 @@ def register(): configuration.ConfigurationSequence, recurrence.RecurrenceRuleSet, recurrence.RecurrenceRule, + recurrence.TestRecurrenceRuleSetView, + recurrence.TestRecurrenceRuleSetViewResult, service.Service, subscription.Subscription, subscription.Line, @@ -29,6 +31,7 @@ def register(): Pool.register( subscription.CreateLineConsumption, subscription.CreateSubscriptionInvoice, + recurrence.TestRecurrenceRuleSet, party.Replace, party.Erase, module='sale_subscription', type_='wizard') diff --git a/recurrence.py b/recurrence.py index a167083205..9200680f04 100644 --- a/recurrence.py +++ b/recurrence.py @@ -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.i18n import gettext 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 @@ class RecurrenceRule(ModelSQL, ModelView): 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 --git a/recurrence.xml b/recurrence.xml index c220c8efdc..dcff5cb3c7 100644 --- a/recurrence.xml +++ b/recurrence.xml @@ -64,5 +64,32 @@ this repository contains the full copyright notices and license terms. --> tree recurrence_rule_list + + + Test Recurrence Rule + sale.subscription.recurrence.rule.set.test + + + form_action + sale.subscription.recurrence.rule.set,-1 + + + + + + sale.subscription.recurrence.rule.set.test + form + recurrence_rule_set_test_form + + + sale.subscription.recurrence.rule.set.test.result + tree + recurrence_rule_set_test_result_list + diff --git a/view/recurrence_rule_set_test_form.xml b/view/recurrence_rule_set_test_form.xml new file mode 100644 index 0000000000..3a536c3868 --- /dev/null +++ b/view/recurrence_rule_set_test_form.xml @@ -0,0 +1,13 @@ + + +
+