From 2f8a91c2c9e2dfdf3df07fb75ffd987497b6e615 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Wed, 26 Jun 2019 21:55:46 +0200 Subject: [PATCH] Use SQL CurrentTimestamp to fill numbered_at This ensure the timestamp stored is coherent with the create and write date of the records. As the clock of trytond server can be different from the clock of the database server. issue6460 issue4285 review285241002 --- CHANGELOG | 3 +++ account.py | 50 +++++++++++++++++++++++++++++++++----------------- 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 68a43e5dd7..33d6449d22 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +* Use SQL CurrentTimestamp to fill numbered_at +* Rename open_date into numbered_at + Version 5.2.0 - 2019-05-06 * Bug fixes (see mercurial logs for details) * Add history on payment term line delta diff --git a/account.py b/account.py index ae0fbd3d3a..d238458290 100644 --- a/account.py +++ b/account.py @@ -1,37 +1,53 @@ # 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 +from sql.functions import CurrentTimestamp from trytond.model import ModelView, Workflow, fields from trytond.pool import PoolMeta +from trytond.transaction import Transaction __all__ = ['Invoice'] class Invoice(metaclass=PoolMeta): __name__ = 'account.invoice' - open_date = fields.Timestamp('Open Date') + numbered_at = fields.Timestamp("Numbered At") + + @classmethod + def __register__(cls, module_name): + super().__register__(module_name) + table_h = cls.__table_handler__(module_name) + table = cls.__table__() + cursor = Transaction().connection.cursor() + + # Migration from 5.2: rename open_date into numbered_at + if table_h.column_exist('open_date'): + cursor.execute( + *table.update( + [table.numbered_at], + [table.open_date])) + table_h.drop_column('open_date') @classmethod def __setup__(cls): super(Invoice, cls).__setup__() - cls.party.datetime_field = 'open_date' - if 'open_date' not in cls.party.depends: - cls.party.depends.append('open_date') - cls.invoice_address.datetime_field = 'open_date' - if 'open_date' not in cls.invoice_address.depends: - cls.invoice_address.depends.append('open_date') - cls.payment_term.datetime_field = 'open_date' - if 'open_date' not in cls.payment_term.depends: - cls.payment_term.depends.append('open_date') + cls.party.datetime_field = 'numbered_at' + if 'numbered_at' not in cls.party.depends: + cls.party.depends.append('numbered_at') + cls.invoice_address.datetime_field = 'numbered_at' + if 'numbered_at' not in cls.invoice_address.depends: + cls.invoice_address.depends.append('numbered_at') + cls.payment_term.datetime_field = 'numbered_at' + if 'numbered_at' not in cls.payment_term.depends: + cls.payment_term.depends.append('numbered_at') @classmethod def set_number(cls, invoices): - set_open_date = [i for i in invoices if not i.number] + numbered = [i for i in invoices if not i.number or not i.numbered_at] super(Invoice, cls).set_number(invoices) - if set_open_date: - cls.write(set_open_date, { - 'open_date': datetime.datetime.now(), + if numbered: + cls.write(numbered, { + 'numbered_at': CurrentTimestamp(), }) @classmethod @@ -40,7 +56,7 @@ class Invoice(metaclass=PoolMeta): def draft(cls, invoices): super(Invoice, cls).draft(invoices) cls.write(invoices, { - 'open_date': None, + 'numbered_at': None, }) @classmethod @@ -49,5 +65,5 @@ class Invoice(metaclass=PoolMeta): default = {} else: default = default.copy() - default.setdefault('open_date', None) + default.setdefault('numbered_at', None) return super(Invoice, cls).copy(invoices, default=default)