From 3732aea4b884eb3fadec344c877ebc5763bdbb40 Mon Sep 17 00:00:00 2001 From: Camille Spiritus Date: Fri, 26 Nov 2021 15:09:18 +0000 Subject: [PATCH] [IMP] account,sale: move partner_shipping_id field from sale to account The computation of 'partner_shipping_id' is now done using a 'compute' instead of 'onchange'. task-2601934 closes odoo/odoo#78449 Related: odoo/enterprise#22098 Related: odoo/upgrade#3000 Signed-off-by: Laurent Smet --- addons/account/models/account_move.py | 39 +++++++++++++++---- addons/account/models/res_config_settings.py | 3 ++ addons/account/security/account_security.xml | 5 +++ addons/account/views/account_move_views.xml | 3 ++ addons/account/views/report_invoice.xml | 11 +++++- .../views/res_config_settings_views.xml | 12 ++++++ .../data/facturx_templates.xml | 2 +- .../account_edi_facturx/tests/test_facturx.py | 10 ++++- .../l10n_in_sale/views/res_partner_views.xml | 4 +- addons/repair/views/repair_views.xml | 4 +- addons/sale/__manifest__.py | 1 - addons/sale/models/account_move.py | 29 ++------------ addons/sale/models/res_config_settings.py | 1 - .../sale/report/invoice_report_templates.xml | 21 ---------- addons/sale/security/sale_security.xml | 5 --- .../sale/views/res_config_settings_views.xml | 12 ------ addons/sale/views/sale_views.xml | 9 +---- addons/sale_crm/views/partner_views.xml | 4 +- .../test_sale_product_configurator_ui.py | 2 +- .../models/res_config_settings.py | 2 +- addons/website_sale/security/website_sale.xml | 6 +-- addons/website_sale/views/templates.xml | 8 ++-- 22 files changed, 94 insertions(+), 99 deletions(-) delete mode 100644 addons/sale/report/invoice_report_templates.xml diff --git a/addons/account/models/account_move.py b/addons/account/models/account_move.py index 2ac3da5caf0..a2adf6d36ec 100644 --- a/addons/account/models/account_move.py +++ b/addons/account/models/account_move.py @@ -193,6 +193,15 @@ class AccountMove(models.Model): country_code = fields.Char(related='company_id.account_fiscal_country_id.code', readonly=True) user_id = fields.Many2one(string='User', related='invoice_user_id', help='Technical field used to fit the generic behavior in mail templates.') + partner_shipping_id = fields.Many2one( + comodel_name='res.partner', + string='Delivery Address', + readonly=False, + store=True, + domain="['|', ('company_id', '=', False), ('company_id', '=', company_id)]", + help="Delivery address for current invoice.", + compute='_compute_partner_shipping_id', + ) is_move_sent = fields.Boolean( readonly=True, default=False, @@ -502,7 +511,7 @@ class AccountMove(models.Model): self.partner_bank_id = bank_ids and bank_ids[0] # Find the new fiscal position. - delivery_partner = self.env['res.partner'].browse(self._get_invoice_delivery_partner_id()) + delivery_partner = self.partner_shipping_id self.fiscal_position_id = self.env['account.fiscal.position']._get_fiscal_position( self.partner_id, delivery=delivery_partner) self._recompute_dynamic_lines() @@ -591,6 +600,18 @@ class AccountMove(models.Model): move._recompute_dynamic_lines() + @api.onchange('partner_shipping_id', 'company_id') + def _onchange_partner_shipping_id(self): + """ + Trigger the change of fiscal position when the shipping address is modified. + """ + fiscal_position = self.env['account.fiscal.position']\ + .with_company(self.company_id)\ + ._get_fiscal_position(self.partner_id, delivery=self.partner_shipping_id) + + if fiscal_position: + self.fiscal_position_id = fiscal_position + @api.model def _get_tax_grouping_key_from_tax_line(self, tax_line): ''' Create the dictionary based on a tax line that will be used as key to group taxes together. @@ -1131,6 +1152,15 @@ class AccountMove(models.Model): # COMPUTE METHODS # ------------------------------------------------------------------------- + @api.depends('partner_id') + def _compute_partner_shipping_id(self): + for move in self: + if move.is_invoice(include_receipts=True): + addr = move.partner_id.address_get(['delivery']) + move.partner_shipping_id = addr and addr.get('delivery') + else: + move.partner_shipping_id = False + @api.depends('company_id', 'invoice_filter_type_domain') def _compute_suitable_journal_ids(self): for m in self: @@ -2547,13 +2577,6 @@ class AccountMove(models.Model): name += self.name return name + (show_ref and self.ref and ' (%s%s)' % (self.ref[:50], '...' if len(self.ref) > 50 else '') or '') - def _get_invoice_delivery_partner_id(self): - ''' Hook allowing to retrieve the right delivery address depending of installed modules. - :return: A res.partner record's id representing the delivery address. - ''' - self.ensure_one() - return self.partner_id.address_get(['delivery'])['delivery'] - def _get_reconciled_payments(self): """Helper used to retrieve the reconciled payments on this journal entry""" reconciled_lines = self.line_ids.filtered(lambda line: line.account_id.user_type_id.type in ('receivable', 'payable')) diff --git a/addons/account/models/res_config_settings.py b/addons/account/models/res_config_settings.py index 443c6cb9a5a..2bd78b9e15c 100644 --- a/addons/account/models/res_config_settings.py +++ b/addons/account/models/res_config_settings.py @@ -145,6 +145,9 @@ class ResConfigSettings(models.TransientModel): # Technical field to hide country specific fields from accounting configuration country_code = fields.Char(related='company_id.account_fiscal_country_id.code', readonly=True) + # Allows for the use of a different delivery address + group_sale_delivery_address = fields.Boolean("Customer Addresses", implied_group='account.group_delivery_invoice_address') + def set_values(self): super(ResConfigSettings, self).set_values() # install a chart of accounts for the given company (if required) diff --git a/addons/account/security/account_security.xml b/addons/account/security/account_security.xml index d1063c093a5..fc5279f05f8 100644 --- a/addons/account/security/account_security.xml +++ b/addons/account/security/account_security.xml @@ -33,6 +33,11 @@ 7 + + Delivery Address + + + Tax display B2B Show line subtotals without taxes (B2B) diff --git a/addons/account/views/account_move_views.xml b/addons/account/views/account_move_views.xml index dd6b78c1a07..52c398aa599 100644 --- a/addons/account/views/account_move_views.xml +++ b/addons/account/views/account_move_views.xml @@ -775,6 +775,9 @@ 'show_address': 1, 'default_is_company': True, 'show_vat': True}" options='{"always_reload": True, "no_quick_create": True}' attrs="{'invisible': [('move_type', 'not in', ('out_invoice', 'out_refund', 'in_invoice', 'in_refund', 'out_receipt', 'in_receipt'))]}"/> + - - Addresses in Sales Orders - - - A warning can be set on a product or a customer (Sale) diff --git a/addons/sale/views/res_config_settings_views.xml b/addons/sale/views/res_config_settings_views.xml index 1c647c292aa..09eb46b66e0 100644 --- a/addons/sale/views/res_config_settings_views.xml +++ b/addons/sale/views/res_config_settings_views.xml @@ -214,18 +214,6 @@ -
-
- -
-
-
-
diff --git a/addons/sale/views/sale_views.xml b/addons/sale/views/sale_views.xml index 9934a94b906..8f3c246b2b0 100644 --- a/addons/sale/views/sale_views.xml +++ b/addons/sale/views/sale_views.xml @@ -318,8 +318,8 @@ - - + + @@ -1223,11 +1223,6 @@ - - - product.group_discount_per_so_line diff --git a/addons/sale_crm/views/partner_views.xml b/addons/sale_crm/views/partner_views.xml index 78bbc873c34..a43205619dd 100644 --- a/addons/sale_crm/views/partner_views.xml +++ b/addons/sale_crm/views/partner_views.xml @@ -7,10 +7,10 @@ - sale.group_delivery_invoice_address + account.group_delivery_invoice_address - sale.group_delivery_invoice_address + account.group_delivery_invoice_address diff --git a/addons/sale_product_configurator/tests/test_sale_product_configurator_ui.py b/addons/sale_product_configurator/tests/test_sale_product_configurator_ui.py index 0e3ed37f991..a10218797ce 100644 --- a/addons/sale_product_configurator/tests/test_sale_product_configurator_ui.py +++ b/addons/sale_product_configurator/tests/test_sale_product_configurator_ui.py @@ -36,7 +36,7 @@ class TestUi(odoo.tests.HttpCase, TestProductConfiguratorCommon): 'groups_id': [ (4, self.env.ref('product.group_product_variant').id), (4, self.env.ref('product.group_product_pricelist').id), - (4, self.env.ref('sale.group_delivery_invoice_address').id), + (4, self.env.ref('account.group_delivery_invoice_address').id), ], }) diff --git a/addons/website_sale/models/res_config_settings.py b/addons/website_sale/models/res_config_settings.py index 1963ca921f7..c3b76148a98 100644 --- a/addons/website_sale/models/res_config_settings.py +++ b/addons/website_sale/models/res_config_settings.py @@ -17,7 +17,7 @@ class ResConfigSettings(models.TransientModel): ('website', "Delivery methods are selectable on the website: the customer pays for shipping costs"), ], string="Shipping Management") - group_delivery_invoice_address = fields.Boolean(string="Shipping Address", implied_group='sale.group_delivery_invoice_address', group='base.group_portal,base.group_user,base.group_public') + group_delivery_invoice_address = fields.Boolean(string="Shipping Address", implied_group='account.group_delivery_invoice_address', group='base.group_portal,base.group_user,base.group_public') group_show_uom_price = fields.Boolean(default=False, string="Base Unit Price", implied_group="website_sale.group_show_uom_price", group='base.group_portal,base.group_user,base.group_public') module_website_sale_digital = fields.Boolean("Digital Content") diff --git a/addons/website_sale/security/website_sale.xml b/addons/website_sale/security/website_sale.xml index 819db2a9bee..09ecb2312dd 100644 --- a/addons/website_sale/security/website_sale.xml +++ b/addons/website_sale/security/website_sale.xml @@ -22,15 +22,15 @@ - + - + - +