From 7db7b3ef04ead8e5c8e6ff81fafe8c582c082ee9 Mon Sep 17 00:00:00 2001 From: rhe-odoo Date: Mon, 3 Apr 2023 08:23:54 +0000 Subject: [PATCH] [FIX] pos_sale: show correct shipping address When creating a quotation in the sales app with a different shipping address, this is not shown on the invoice report from the point of sale. Before it was always using the pos order partner address. Now we check if the sale order had a different shipping address before setting the address on the report. closes odoo/odoo#117603 Task-id: 3258679 X-original-commit: f12abb338501a745716480e055e9a8d33229bb0c Signed-off-by: Joseph Caburnay (jcb) --- addons/pos_sale/models/pos_order.py | 7 +++++-- addons/pos_sale/tests/test_pos_sale_report.py | 20 +++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/addons/pos_sale/models/pos_order.py b/addons/pos_sale/models/pos_order.py index ac4d1864243..3a8300834c6 100644 --- a/addons/pos_sale/models/pos_order.py +++ b/addons/pos_sale/models/pos_order.py @@ -31,9 +31,12 @@ class PosOrder(models.Model): def _prepare_invoice_vals(self): invoice_vals = super(PosOrder, self)._prepare_invoice_vals() invoice_vals['team_id'] = self.crm_team_id.id - addr = self.partner_id.address_get(['delivery']) - invoice_vals['partner_shipping_id'] = addr['delivery'] sale_orders = self.lines.mapped('sale_order_origin_id') + if sale_orders and (sale_orders.partner_invoice_id.id != sale_orders.partner_shipping_id.id): + invoice_vals['partner_shipping_id'] = sale_orders.partner_shipping_id.id + else: + addr = self.partner_id.address_get(['delivery']) + invoice_vals['partner_shipping_id'] = addr['delivery'] if sale_orders and sale_orders[0].payment_term_id: invoice_vals['invoice_payment_term_id'] = sale_orders[0].payment_term_id.id, return invoice_vals diff --git a/addons/pos_sale/tests/test_pos_sale_report.py b/addons/pos_sale/tests/test_pos_sale_report.py index 776112b1eae..a9e5464bcff 100644 --- a/addons/pos_sale/tests/test_pos_sale_report.py +++ b/addons/pos_sale/tests/test_pos_sale_report.py @@ -80,3 +80,23 @@ class TestPoSSaleReport(TestPoSCommon): report = self.env['sale.report'].sudo().search([('product_id', '=', product_2.id)], order='id', limit=1) self.assertEqual(report.weight, 6) self.assertEqual(report.weight, 6) + + def test_different_shipping_address(self): + product_0 = self.create_product('Product 0', self.categ_basic, 0.0, 0.0) + sale_order = self.env['sale.order'].create({ + 'partner_id': self.env.ref('base.res_partner_1').id, + 'partner_shipping_id': self.env.ref('base.res_partner_2').id, + 'order_line': [(0, 0, { + 'product_id': product_0.id, + })], + }) + self.open_new_session() + + data = self.create_ui_order_data([(product_0, 1)], self.env.ref('base.res_partner_1'), True) + data['data']['lines'][0][2]['sale_order_origin_id'] = sale_order.read()[0] + data['data']['lines'][0][2]['sale_order_line_id'] = sale_order.order_line[0].read()[0] + order_ids = self.env['pos.order'].create_from_ui([data]) + + move_id = self.env['account.move'].browse(order_ids[0]['account_move']) + self.assertEqual(move_id.partner_id.id, self.env.ref('base.res_partner_1').id) + self.assertEqual(move_id.partner_shipping_id.id, self.env.ref('base.res_partner_2').id)