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)