changeset 61edd07e8886 in modules/account:default
details: https://hg.tryton.org/modules/account?cmd=changeset;node=61edd07e8886
description:
Add start/end date to tax rule line
issue9505
review317981002
diffstat:
CHANGELOG | 1 +
tax.py | 18 ++++++++++
tests/test_account.py | 64 ++++++++++++++++++++++++++++++++++++
view/tax_rule_line_form.xml | 4 ++
view/tax_rule_line_template_form.xml | 4 ++
view/tax_rule_line_template_tree.xml | 2 +
view/tax_rule_line_tree.xml | 2 +
view/tax_rule_line_tree_sequence.xml | 2 +
8 files changed, 97 insertions(+), 0 deletions(-)
diffs (198 lines):
diff -r b35bb47628f6 -r 61edd07e8886 CHANGELOG
--- a/CHANGELOG Tue Aug 25 18:04:50 2020 +0200
+++ b/CHANGELOG Sat Sep 05 22:12:11 2020 +0200
@@ -1,3 +1,4 @@
+* Add start/end date to tax rule line
* Test for lines to reconcile before showing the next account
Version 5.6.0 - 2020-05-04
diff -r b35bb47628f6 -r 61edd07e8886 tax.py
--- a/tax.py Tue Aug 25 18:04:50 2020 +0200
+++ b/tax.py Sat Sep 05 22:12:11 2020 +0200
@@ -1418,6 +1418,8 @@
__name__ = 'account.tax.rule.line.template'
rule = fields.Many2One('account.tax.rule.template', 'Rule', required=True,
ondelete='CASCADE')
+ start_date = fields.Date("Starting Date")
+ end_date = fields.Date("Ending Date")
group = fields.Many2One('account.tax.group', 'Tax Group',
ondelete='RESTRICT')
origin_tax = fields.Many2One('account.tax.template', 'Original Tax',
@@ -1469,6 +1471,10 @@
Set values for tax rule line creation.
'''
res = {}
+ if not rule_line or rule_line.start_date != self.start_date:
+ res['start_date'] = self.start_date
+ if not rule_line or rule_line.end_date != self.end_date:
+ res['end_date'] = self.end_date
if not rule_line or rule_line.group != self.group:
res['group'] = self.group.id if self.group else None
if not rule_line or rule_line.sequence != self.sequence:
@@ -1532,6 +1538,8 @@
}
rule = fields.Many2One('account.tax.rule', 'Rule', required=True,
select=True, ondelete='CASCADE', states=_states)
+ start_date = fields.Date("Starting Date")
+ end_date = fields.Date("Ending Date")
group = fields.Many2One('account.tax.group', 'Tax Group',
ondelete='RESTRICT', states=_states)
origin_tax = fields.Many2One('account.tax', 'Original Tax',
@@ -1597,9 +1605,19 @@
return super(TaxRuleLine, cls).copy(lines, default=default)
def match(self, pattern):
+ pool = Pool()
+ Date = pool.get('ir.date')
+ with Transaction().set_context(company=self.rule.company.id):
+ today = Date.today()
+ pattern = pattern.copy()
if 'group' in pattern and not self.group:
if pattern['group']:
return False
+ date = pattern.pop('date', None) or today
+ if self.start_date and date < self.start_date:
+ return False
+ if self.end_date and date > self.end_date:
+ return False
return super(TaxRuleLine, self).match(pattern)
def get_taxes(self, origin_tax):
diff -r b35bb47628f6 -r 61edd07e8886 tests/test_account.py
--- a/tests/test_account.py Tue Aug 25 18:04:50 2020 +0200
+++ b/tests/test_account.py Sat Sep 05 22:12:11 2020 +0200
@@ -1287,6 +1287,70 @@
self.assertListEqual(tax_rule.apply(tax, {}), [target_tax.id])
@with_transaction()
+ def test_tax_rule_start_date(self):
+ "Test tax rule start date"
+ pool = Pool()
+ TaxRule = pool.get('account.tax.rule')
+ Tax = pool.get('account.tax')
+ Date = pool.get('ir.date')
+
+ today = Date.today()
+ yesterday = today - datetime.timedelta(days=1)
+ tomorrow = today + datetime.timedelta(days=1)
+ company = create_company()
+ with set_company(company):
+ create_chart(company, tax=True)
+ tax, = Tax.search([])
+ target_tax, = Tax.copy([tax])
+
+ tax_rule, = TaxRule.create([{
+ 'name': "Test",
+ 'kind': 'both',
+ 'lines': [('create', [{
+ 'start_date': today,
+ 'tax': target_tax.id,
+ }])],
+ }])
+
+ self.assertListEqual(tax_rule.apply(tax, {}), [target_tax.id])
+ self.assertListEqual(
+ tax_rule.apply(tax, {'date': yesterday}), [tax.id])
+ self.assertListEqual(
+ tax_rule.apply(tax, {'date': tomorrow}), [target_tax.id])
+
+ @with_transaction()
+ def test_tax_rule_end_date(self):
+ "Test tax rule end date"
+ pool = Pool()
+ TaxRule = pool.get('account.tax.rule')
+ Tax = pool.get('account.tax')
+ Date = pool.get('ir.date')
+
+ today = Date.today()
+ yesterday = today - datetime.timedelta(days=1)
+ tomorrow = today + datetime.timedelta(days=1)
+ company = create_company()
+ with set_company(company):
+ create_chart(company, tax=True)
+ tax, = Tax.search([])
+ target_tax, = Tax.copy([tax])
+
+ tax_rule, = TaxRule.create([{
+ 'name': "Test",
+ 'kind': 'both',
+ 'lines': [('create', [{
+ 'end_date': today,
+ 'tax': target_tax.id,
+ }])],
+ }])
+
+ self.assertListEqual(tax_rule.apply(tax, {}), [target_tax.id])
+ self.assertListEqual(
+ tax_rule.apply(tax, {'date': yesterday}), [target_tax.id])
+ self.assertListEqual(
+ tax_rule.apply(tax, {'date': tomorrow}), [tax.id])
+
+ @with_transaction()
def test_tax_rule_keep_origin(self):
"Test tax rule keeps origin"
pool = Pool()
diff -r b35bb47628f6 -r 61edd07e8886 view/tax_rule_line_form.xml
--- a/view/tax_rule_line_form.xml Tue Aug 25 18:04:50 2020 +0200
+++ b/view/tax_rule_line_form.xml Sat Sep 05 22:12:11 2020 +0200
@@ -6,6 +6,10 @@
<field name="rule"/>
<label name="template_override"/>
<field name="template_override"/>
+ <label name="start_date"/>
+ <field name="start_date"/>
+ <label name="end_date"/>
+ <field name="end_date"/>
<label name="group"/>
<field name="group"/>
<label name="origin_tax"/>
diff -r b35bb47628f6 -r 61edd07e8886 view/tax_rule_line_template_form.xml
--- a/view/tax_rule_line_template_form.xml Tue Aug 25 18:04:50 2020 +0200
+++ b/view/tax_rule_line_template_form.xml Sat Sep 05 22:12:11 2020 +0200
@@ -5,6 +5,10 @@
<label name="rule"/>
<field name="rule"/>
<newline/>
+ <label name="start_date"/>
+ <field name="start_date"/>
+ <label name="end_date"/>
+ <field name="end_date"/>
<label name="group"/>
<field name="group"/>
<label name="origin_tax"/>
diff -r b35bb47628f6 -r 61edd07e8886 view/tax_rule_line_template_tree.xml
--- a/view/tax_rule_line_template_tree.xml Tue Aug 25 18:04:50 2020 +0200
+++ b/view/tax_rule_line_template_tree.xml Sat Sep 05 22:12:11 2020 +0200
@@ -3,6 +3,8 @@
this repository contains the full copyright notices and license terms. -->
<tree>
<field name="rule" expand="2"/>
+ <field name="start_date"/>
+ <field name="end_date"/>
<field name="group"/>
<field name="origin_tax" expand="2"/>
<field name="tax" expand="2"/>
diff -r b35bb47628f6 -r 61edd07e8886 view/tax_rule_line_tree.xml
--- a/view/tax_rule_line_tree.xml Tue Aug 25 18:04:50 2020 +0200
+++ b/view/tax_rule_line_tree.xml Sat Sep 05 22:12:11 2020 +0200
@@ -3,6 +3,8 @@
this repository contains the full copyright notices and license terms. -->
<tree>
<field name="rule" expand="2"/>
+ <field name="start_date"/>
+ <field name="end_date"/>
<field name="group"/>
<field name="origin_tax" expand="2"/>
<field name="tax" expand="2"/>
diff -r b35bb47628f6 -r 61edd07e8886 view/tax_rule_line_tree_sequence.xml
--- a/view/tax_rule_line_tree_sequence.xml Tue Aug 25 18:04:50 2020 +0200
+++ b/view/tax_rule_line_tree_sequence.xml Sat Sep 05 22:12:11 2020 +0200
@@ -2,6 +2,8 @@
<!-- 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 sequence="sequence">
+ <field name="start_date"/>
+ <field name="end_date"/>
<field name="group"/>
<field name="origin_tax" expand="2"/>
<field name="tax" expand="2"/>