From e2a1b93c7ea7c7d4bb356ac18ea32c86047518cb Mon Sep 17 00:00:00 2001 From: Xavier Codinas Date: Fri, 2 Sep 2016 10:56:01 +0200 Subject: [PATCH] Change days into timedelta overdue issue5718 review30421002 --- CHANGELOG | 2 ++ dunning.py | 29 +++++++++++++++++++++++++--- tests/scenario_account_dunning.rst | 6 +++--- view/dunning_level_form.xml | 4 ++-- view/dunning_level_list.xml | 2 +- view/dunning_level_list_sequence.xml | 2 +- 6 files changed, 35 insertions(+), 10 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 871362ef6b..ebfe91f2f4 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,5 @@ +* Change days into timedelta overdue + Version 4.0.0 - 2016-05-02 * Bug fixes (see mercurial logs for details) * Add Python3 support diff --git a/dunning.py b/dunning.py index b52a2cd968..f4b910751d 100644 --- a/dunning.py +++ b/dunning.py @@ -1,12 +1,14 @@ # 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 +import datetime from sql import Null from sql.conditionals import Case from trytond.model import Model, ModelView, ModelSQL, fields, Unique from trytond.pyson import If, Eval +from trytond import backend from trytond.transaction import Transaction from trytond.wizard import Wizard, StateView, StateAction, StateTransition, \ Button @@ -31,7 +33,28 @@ class Level(ModelSQL, ModelView): sequence = fields.Integer('Sequence') procedure = fields.Many2One('account.dunning.procedure', 'Procedure', required=True, select=True) - days = fields.Integer('Number of Overdue Days') + overdue = fields.TimeDelta('Overdue') + + @classmethod + def __register__(cls, module_name): + TableHandler = backend.get('TableHandler') + cursor = Transaction().connection.cursor() + table = TableHandler(cls, module_name) + sql_table = cls.__table__() + + super(Level, cls).__register__(module_name) + + # Migration from 4.0: change days into timedelta overdue + if table.column_exist('days'): + cursor.execute(*sql_table.select(sql_table.id, sql_table.days, + where=sql_table.days != Null)) + for id_, days in cursor: + overdue = datetime.timedelta(days) + cursor.execute(*sql_table.update( + [sql_table.days_duration], + [overdue], + where=sql_table.id == id_)) + table.drop_column('days') @classmethod def __setup__(cls): @@ -48,8 +71,8 @@ class Level(ModelSQL, ModelView): self.procedure.rec_name) def test(self, line, date): - if self.days is not None: - return (date - line.maturity_date).days >= self.days + if self.overdue is not None: + return (date - line.maturity_date) >= self.overdue _STATES = { 'readonly': Eval('state') != 'draft', diff --git a/tests/scenario_account_dunning.rst b/tests/scenario_account_dunning.rst index 747e0fe23f..f229e8e6f4 100644 --- a/tests/scenario_account_dunning.rst +++ b/tests/scenario_account_dunning.rst @@ -78,13 +78,13 @@ Create dunning procedure:: >>> procedure = Procedure(name='Procedure') >>> level = procedure.levels.new() >>> level.sequence = 1 - >>> level.days = 5 + >>> level.overdue = datetime.timedelta(5) >>> level = procedure.levels.new() >>> level.sequence = 2 - >>> level.days = 20 + >>> level.overdue = datetime.timedelta(20) >>> level = procedure.levels.new() >>> level.sequence = 3 - >>> level.days = 40 + >>> level.overdue = datetime.timedelta(40) >>> procedure.save() Create parties:: diff --git a/view/dunning_level_form.xml b/view/dunning_level_form.xml index e0b2c0e89d..a50b97ccaf 100644 --- a/view/dunning_level_form.xml +++ b/view/dunning_level_form.xml @@ -7,6 +7,6 @@ this repository contains the full copyright notices and license terms. -->