[FIX] website_sale: currency in line with pricelist selected

Before this fix, inconsistencies arise in the prices displayed in a
multi-currency environment. For example, let's consider these 2
pricelists:
- Public Pricelist, in USD
- Benelux Pricelist, in EUR with 10 % discount

When the Benelux Pricelist is selected, the strikethrough price is in
USD, the price is in EUR, and the currency displayed is $. The reason
is that the pricelist used is stored in request.session, but the
templates are still using the pricelist linked to the partner.

We link website.pricelist_id to the currency stored in request.session,
which is more logical. We also use the currency related to this
pricelist in the templates, which avoids the inconsistencies mentioned.
This commit is contained in:
Nicolas Martinelli
2015-10-29 16:08:10 +01:00
parent 0366ae16a9
commit 1684ae41e7
3 changed files with 28 additions and 21 deletions
+10 -4
View File
@@ -123,10 +123,16 @@ class sale_order(osv.Model):
class website(orm.Model):
_inherit = 'website'
def _get_pricelist_id(self, cr, uid, ids, name, args, context=None):
res = {}
pricelist = self.get_current_pricelist(cr, uid, context=context)
for data in self.browse(cr, uid, ids, context=context):
res[data.id] = pricelist.id
return res
_columns = {
'pricelist_id': fields.related(
'user_id', 'partner_id', 'property_product_pricelist',
type='many2one', relation='product.pricelist', string='Default Pricelist'),
'pricelist_id': fields.function(_get_pricelist_id,\
type='many2one', relation="product.pricelist", string='Default Pricelist'),
'currency_id': fields.related(
'pricelist_id', 'currency_id',
type='many2one', relation='res.currency', string='Default Currency'),
@@ -180,7 +186,7 @@ class website(orm.Model):
"""
isocountry = request.session.geoip and request.session.geoip.get('country_code') or False
pl_ids = self._get_pl(cr, uid, isocountry, show_visible,
request.website.pricelist_id.id,
request.website.user_id.partner_id.property_product_pricelist.id,
request.session.get('website_sale_current_pl'),
request.website.website_pricelist_ids)
return self.pool['product.pricelist'].browse(cr, uid, pl_ids, context=context)
@@ -11,6 +11,7 @@ class TestWebsitePriceList(TransactionCase):
def setUp(self):
super(TestWebsitePriceList, self).setUp()
self.website = self.registry('website').browse(self.cr, self.uid, 1)
self.website.pricelist_id = self.registry('ir.model.data').xmlid_to_res_id(self.cr, self.uid, 'product.list0')
self.patcher = patch('openerp.addons.website_sale.models.sale_order.website.get_pricelist_available', wraps=self._get_pricelist_available)
self.mock_get_pricelist_available = self.patcher.start()
+17 -17
View File
@@ -93,16 +93,16 @@
<del class="text-danger mr8" style="white-space: nowrap;" t-field="product.lst_price" t-field-options='{
"widget": "monetary",
"from_currency": "product.company_id.currency_id",
"display_currency": "user_id.partner_id.property_product_pricelist.currency_id"
"display_currency": "website.currency_id"
}'/>
</t>
<span t-field="product.price" style="white-space: nowrap;" t-field-options='{
"widget": "monetary",
"display_currency": "user_id.partner_id.property_product_pricelist.currency_id"
"display_currency": "website.currency_id"
}'>
</span>
<span itemprop="price" style="display:none;" t-esc="product.price"/>
<span itemprop="priceCurrency" style="display:none;" t-esc="user_id.partner_id.property_product_pricelist.currency_id.name"/>
<span itemprop="priceCurrency" style="display:none;" t-esc="website.currency_id.name"/>
</b>
</div>
</section>
@@ -423,16 +423,16 @@
t-field-options='{
"widget": "monetary",
"from_currency": "product.company_id.currency_id",
"display_currency": "user_id.partner_id.property_product_pricelist.currency_id"
"display_currency": "website.currency_id"
}'/>
<b class="oe_price" style="white-space: nowrap;"
t-field="product.price"
t-field-options='{
"widget": "monetary",
"display_currency": "user_id.partner_id.property_product_pricelist.currency_id"
"display_currency": "website.currency_id"
}'/>
<span itemprop="price" style="display:none;" t-esc="product.price"/>
<span itemprop="priceCurrency" style="display:none;" t-esc="user_id.partner_id.property_product_pricelist.currency_id.name"/>
<span itemprop="priceCurrency" style="display:none;" t-esc="website.currency_id.name"/>
</h4>
<h4 class="css_non_editable_mode_hidden">
<span t-field="product.lst_price"
@@ -456,7 +456,7 @@
<t t-esc="variant_id.price_extra > 0 and '+' or ''"/><span t-field="variant_id.price_extra" style="white-space: nowrap;" t-field-options='{
"widget": "monetary",
"from_currency": "product.company_id.currency_id",
"display_currency": "user_id.partner_id.property_product_pricelist.currency_id"
"display_currency": "website.currency_id"
}'/>
</span>
</label>
@@ -481,7 +481,7 @@
<t t-esc="value_id.price_extra > 0 and '+' or ''"/><span t-field="value_id.price_extra" style="white-space: nowrap;" t-field-options='{
"widget": "monetary",
"from_currency": "product.company_id.currency_id",
"display_currency": "user_id.partner_id.property_product_pricelist.currency_id"
"display_currency": "website.currency_id"
}'/>
</span>
</option>
@@ -501,7 +501,7 @@
<t t-esc="value_id.price_extra > 0 and '+' or ''"/><span t-field="value_id.price_extra" style="white-space: nowrap;" t-field-options='{
"widget": "monetary",
"from_currency": "product.company_id.currency_id",
"display_currency": "user_id.partner_id.property_product_pricelist.currency_id"
"display_currency": "website.currency_id"
}'/>
</span>
</label>
@@ -776,12 +776,12 @@
t-field="line.product_id.lst_price" t-field-options='{
"widget": "monetary",
"from_currency": "line.company_id.currency_id",
"display_currency": "user_id.partner_id.property_product_pricelist.currency_id"
"display_currency": "website.currency_id"
}'/>
<span t-field="line.price_reduce" style="white-space: nowrap;" t-field-options='{
"widget": "monetary",
"from_currency": "website_sale_order.pricelist_id.currency_id",
"display_currency": "user_id.partner_id.property_product_pricelist.currency_id"
"display_currency": "website.currency_id"
}'/>
</td>
</tr>
@@ -898,12 +898,12 @@
t-field="product.lst_price" t-field-options='{
"widget": "monetary",
"from_currency": "product.company_id.currency_id",
"display_currency": "user_id.partner_id.property_product_pricelist.currency_id"
"display_currency": "website.currency_id"
}'/>
</t>
<span t-field="product.price" style="white-space: nowrap;" t-field-options='{
"widget": "monetary",
"display_currency": "user_id.partner_id.property_product_pricelist.currency_id"
"display_currency": "website.currency_id"
}'/>
</td>
<td class="text-center">
@@ -1153,7 +1153,7 @@
<span t-field="line.price_unit" style="white-space: nowrap;" t-field-options='{
"widget": "monetary",
"from_currency": "website_sale_order.pricelist_id.currency_id",
"display_currency": "user_id.partner_id.property_product_pricelist.currency_id"
"display_currency": "website.currency_id"
}'/>
</td>
</tr>
@@ -1394,7 +1394,7 @@
<span t-field="website_sale_order.amount_untaxed" style="white-space: nowrap;" t-field-options='{
"widget": "monetary",
"from_currency": "website_sale_order.pricelist_id.currency_id",
"display_currency": "user_id.partner_id.property_product_pricelist.currency_id"
"display_currency": "website.currency_id"
}'/>
</span>
</div>
@@ -1404,7 +1404,7 @@
<span t-field="website_sale_order.amount_tax" style="white-space: nowrap;" t-field-options='{
"widget": "monetary",
"from_currency": "website_sale_order.pricelist_id.currency_id",
"display_currency": "user_id.partner_id.property_product_pricelist.currency_id"
"display_currency": "website.currency_id"
}'/>
</span>
</div>
@@ -1414,7 +1414,7 @@
<span t-field="website_sale_order.amount_total" style="white-space: nowrap;" t-field-options='{
"widget": "monetary",
"from_currency": "website_sale_order.pricelist_id.currency_id",
"display_currency": "user_id.partner_id.property_product_pricelist.currency_id"
"display_currency": "website.currency_id"
}'/>
</span>
</div>