[FIX] delivery: remove wrong currency conversion for delivery carrier price

Observed Behaviour

When using a pricelist with a fixed price for all products with a different
currency than the one of the company, adding shipping cost in a sale order
using this pricelist will give a wrong value of the shipping cost

Expect Behaviour

The computed shipping cost added in the sale order should be the same as the
fixed price defined in the pricelist

Reproducibility

This issue can be reproduced using the following steps :
1. Define a pricelist PL1 with a fixed price for all products and a different
currency than the one used in the company (eg fixed price to 15KR)
2. Create a sale order and select PL1 as pricelist
3. Add a product and add a shipping cost

The shipping cost should be the defined fixed price (15KR) but it gives
another value, depending of the company currency

Fix Description

This fix remove a useless currency conversion coming from the fact that since
https://github.com/odoo/odoo/pull/86484 we get the delivery price from the SO
priceliste (using  pricelist.get_product_price) giving us a price that  is
already converted to the correct currency

Related issue/PR

opw-2810506

closes odoo/odoo#88861

X-original-commit: 25e2f403e88172d67ea6ce382ac1e3f5e0e37835
Signed-off-by: Adrien Widart <awt@odoo.com>
Signed-off-by: Hendrickx Anthony (anhe) <anhe@odoo.com>
This commit is contained in:
anhe-odoo
2022-04-15 11:31:59 +02:00
parent 430722daf1
commit c225996bb0
2 changed files with 42 additions and 3 deletions
@@ -279,9 +279,6 @@ class DeliveryCarrier(models.Model):
'error_message': _('Error: this delivery method is not available for this address.'),
'warning_message': False}
price = order.pricelist_id._get_product_price(self.product_id, 1.0)
company = self.company_id or order.company_id or self.env.company
if company.currency_id and company.currency_id != order.currency_id:
price = company.currency_id._convert(price, order.currency_id, company, fields.Date.today())
return {'success': True,
'price': price,
'error_message': False,
@@ -196,3 +196,45 @@ class TestDeliveryCost(common.TransactionCase):
('product_id', '=', self.normal_delivery.product_id.id)])
self.assertEqual(len(line), 1, "Delivery cost hasn't been added to SO")
self.assertEqual(line.price_subtotal, 5.0, "Delivery cost does not correspond to 5.0")
def test_02_delivery_cost_from_different_currency(self):
""" This test aims to validate the use of a pricelist using a different currency to compute the delivery cost in
the case the associated product of the shipping method is defined in the pricelist """
# Create pricelist with a custom price for the standard shipping method
my_pricelist = self.env['product.pricelist'].create({
'name': 'shipping_cost_change',
'item_ids': [(0, 0, {
'compute_price': 'fixed',
'fixed_price': 5,
'applied_on': '0_product_variant',
'product_id': self.normal_delivery.product_id.id,
})],
'currency_id': self.env.ref('base.EUR').id,
})
# Create sales order with Normal Delivery Charges
sale_pricelist_based_delivery_charges = self.SaleOrder.create({
'partner_id': self.partner_18.id,
'pricelist_id': my_pricelist.id,
'order_line': [(0, 0, {
'name': 'PC Assamble + 2GB RAM',
'product_id': self.product_4.id,
'product_uom_qty': 1,
'product_uom': self.product_uom_unit.id,
'price_unit': 750.00,
})],
})
# Add of delivery cost in Sales order
delivery_wizard = Form(self.env['choose.delivery.carrier'].with_context({
'default_order_id': sale_pricelist_based_delivery_charges.id,
'default_carrier_id': self.normal_delivery.id
}))
self.assertEqual(delivery_wizard.delivery_price, 5.0, "Delivery cost does not correspond to 5.0 in wizard")
delivery_wizard.save().button_confirm()
line = self.SaleOrderLine.search([('order_id', '=', sale_pricelist_based_delivery_charges.id),
('product_id', '=', self.normal_delivery.product_id.id)])
self.assertEqual(len(line), 1, "Delivery cost hasn't been added to SO")
self.assertEqual(line.price_subtotal, 5.0, "Delivery cost does not correspond to 5.0")