From b3922c0fa2c15bb06ad7882ceb01c3cce51b60c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sat, 1 Apr 2017 00:26:23 +0200 Subject: [PATCH] Remove Property fields issue2349 review38261003 --- __init__.py | 2 ++ account.py | 50 ++++++++++---------------------------------------- party.py | 49 ++++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 56 insertions(+), 45 deletions(-) diff --git a/__init__.py b/__init__.py index 0f3c012179..e10ca027dc 100644 --- a/__init__.py +++ b/__init__.py @@ -15,7 +15,9 @@ def register(): CreateDunningStart, ProcessDunningStart, Party, + PartyDunningProcedure, Configuration, + ConfigurationDefaultDunningProcedure, MoveLine, module='account_dunning', type_='model') Pool.register( diff --git a/account.py b/account.py index 0e73d0e387..46b86963a7 100644 --- a/account.py +++ b/account.py @@ -1,54 +1,24 @@ # 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 trytond.pool import Pool, PoolMeta -from trytond.model import fields +from trytond.pool import PoolMeta +from trytond.model import ModelSQL, ValueMixin, fields -__all__ = ['Configuration', 'MoveLine'] +__all__ = ['Configuration', 'ConfigurationDefaultDunningProcedure', 'MoveLine'] +default_dunning_procedure = fields.Many2One( + 'account.dunning.procedure', "Default Dunning Procedure") class Configuration: __metaclass__ = PoolMeta __name__ = 'account.configuration' - default_dunning_procedure = fields.Function(fields.Many2One( - 'account.dunning.procedure', 'Default Dunning Procedure'), - 'get_dunning', setter='set_dunning') + default_dunning_procedure = fields.MultiValue(default_dunning_procedure) - def get_dunning(self, name): - pool = Pool() - Property = pool.get('ir.property') - ModelField = pool.get('ir.model.field') - dunning_field, = ModelField.search([ - ('model.model', '=', 'party.party'), - ('name', '=', name[8:]), - ], limit=1) - properties = Property.search([ - ('field', '=', dunning_field.id), - ('res', '=', None), - ], limit=1) - if properties: - prop, = properties - return prop.value.id - @classmethod - def set_dunning(cls, configurations, name, value): - pool = Pool() - Property = pool.get('ir.property') - ModelField = pool.get('ir.model.field') - dunning_field, = ModelField.search([ - ('model.model', '=', 'party.party'), - ('name', '=', name[8:]), - ], limit=1) - properties = Property.search([ - ('field', '=', dunning_field.id), - ('res', '=', None), - ]) - Property.delete(properties) - if value: - Property.create([{ - 'field': dunning_field.id, - 'value': 'account.dunning.procedure,%s' % value, - }]) +class ConfigurationDefaultDunningProcedure(ModelSQL, ValueMixin): + "Account Configuration Default Dunning Procedure" + __name__ = 'account.configuration.default_dunning_procedure' + default_dunning_procedure = default_dunning_procedure class MoveLine: diff --git a/party.py b/party.py index bbeb986135..80e7343fe7 100644 --- a/party.py +++ b/party.py @@ -1,13 +1,52 @@ # 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 trytond.model import fields -from trytond.pool import PoolMeta +from trytond import backend +from trytond.model import ModelSQL, ValueMixin, fields +from trytond.pool import PoolMeta, Pool +from trytond.tools.multivalue import migrate_property -__all__ = ['Party'] +__all__ = ['Party', 'PartyDunningProcedure'] +dunning_procedure = fields.Many2One( + 'account.dunning.procedure', "Dunning Procedure") class Party: __metaclass__ = PoolMeta __name__ = 'party.party' - dunning_procedure = fields.Property( - fields.Many2One('account.dunning.procedure', 'Dunning Procedure')) + dunning_procedure = fields.MultiValue(dunning_procedure) + dunning_procedures = fields.One2Many( + 'party.party.dunning_procedure', 'party', "Dunning Procedures") + + @classmethod + def default_dunning_procedure(cls, **pattern): + pool = Pool() + Configuration = pool.get('account.configuration') + config = Configuration(1) + dunning_procedure = config.default_dunning_procedure + return dunning_procedure.id if dunning_procedure else None + + +class PartyDunningProcedure(ModelSQL, ValueMixin): + "Party Dunning Procedure" + __name__ = 'party.party.dunning_procedure' + party = fields.Many2One( + 'party.party', "Party", ondelete='CASCADE', select=True) + dunning_procedure = dunning_procedure + + @classmethod + def __register__(cls, module_name): + TableHandler = backend.get('TableHandler') + exist = TableHandler.table_exist(cls._table) + + super(PartyDunningProcedure, cls).__register__(module_name) + + if not exist: + cls._migrate_property([], [], []) + + @classmethod + def _migrate_property(cls, field_names, value_names, fields): + field_names.append('dunning_procedure') + value_names.append('dunning_procedure') + migrate_property( + 'party.party', field_names, cls, value_names, + parent='party', fields=fields)