From 3db347e79292b1073e778a82bad6060e47c56bf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sat, 1 Sep 2018 01:02:04 +0200 Subject: [PATCH] Improve ModelStorage.copy * Allow callable in copy default * Support dotted notation in copy default * Use setdefault in copy * Copy default when needed * Do not set default state in copy * Use callable and dotted notation in copy default issue5576 issue7648 review72291002 --- invoice.py | 3 ++- sale.py | 25 +++++++++++++------------ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/invoice.py b/invoice.py index eaeb1b75cd..4b9e1f13a3 100644 --- a/invoice.py +++ b/invoice.py @@ -71,7 +71,8 @@ class Invoice(metaclass=PoolMeta): def copy(cls, invoices, default=None): if default is None: default = {} - default = default.copy() + else: + default = default.copy() default.setdefault('sales', None) return super(Invoice, cls).copy(invoices, default=default) diff --git a/sale.py b/sale.py index 2d55f42167..dcbacc67a2 100644 --- a/sale.py +++ b/sale.py @@ -639,13 +639,13 @@ class Sale(Workflow, ModelSQL, ModelView, TaxableMixin): def copy(cls, sales, default=None): if default is None: default = {} - default = default.copy() - default['state'] = 'draft' - default['number'] = None - default['invoice_state'] = 'none' - default['invoices_ignored'] = None - default['moves'] = None - default['shipment_state'] = 'none' + else: + default = default.copy() + default.setdefault('number', None) + default.setdefault('invoice_state', 'none') + default.setdefault('invoices_ignored', None) + default.setdefault('moves', None) + default.setdefault('shipment_state', 'none') default.setdefault('sale_date', None) return super(Sale, cls).copy(sales, default=default) @@ -1505,11 +1505,12 @@ class SaleLine(sequence_ordered(), ModelSQL, ModelView): def copy(cls, lines, default=None): if default is None: default = {} - default = default.copy() - default['moves'] = None - default['moves_ignored'] = None - default['moves_recreated'] = None - default['invoice_lines'] = None + else: + default = default.copy() + default.setdefault('moves', None) + default.setdefault('moves_ignored', None) + default.setdefault('moves_recreated', None) + default.setdefault('invoice_lines', None) return super(SaleLine, cls).copy(lines, default=default)