Descripción
Un cliente autenticado en el portal de adhoc.inc cuya property_product_pricelist es la Pricing2023 - Tarifa Pública ARS (pricelist 73, ARS) ve el precio del producto Consultoría Pre-pago de Horas en 59 USD en lugar de ARS cuando accede desde una IP fuera de Argentina (reproducido con VPN a EE.UU.).
El problema fue relevado en el ticket de helpdesk 116463 (Bugfix, producto Sitio web / E-commerce), con al menos tres clientes afectados: Digital Consultant S.A., Tecnovex S.R.L. y Microelectronica (grupomicro).
Causa raíz
La pricelist 73 (ARS) tiene country_group_ids = [13 "Argentina"], lo que hace que _is_available_in_country('US') devuelva False. Cuando Odoo evalúa las pricelists disponibles para un request con GeoIP = US, excluye la pricelist 73 aunque el usuario esté autenticado y tenga esa pricelist asignada explícitamente en su partner.
La única pricelist del sitio sin restricción geográfica es la 72 (USD), que tiene una regla fija de 59 USD para ese producto y pasa a ser la pricelist activa.
Flujo en website_sale/models/website.py:
_get_current_pricelist()
→ get_pricelist_available() (country_code='US')
→ _get_pl_partner_order()
- GeoIP US: ningún country group lo cubre → no agrega pricelists por geo
- Fallback website pricelists sin country_group_ids → pricelist 72 (USD) ✓
- Partner pricelist 73: _is_available_in_country('US') → False → EXCLUIDA
→ available = [72 (USD)]
→ partner pricelist 73 NOT in available → toma available[0] = 72 (USD)
→ precio del producto en pricelist 72 = 59 USD
Comportamiento esperado
Un cliente autenticado con pricelist ARS asignada debería conservar esa pricelist independientemente de su IP de acceso. La asignación explícita en el partner debería tener precedencia sobre el GeoIP cuando el usuario está identificado.
Impacto
- Clientes argentinos con VPN, viajando al exterior, o con IPs enrutadas fuera de AR ven precios en USD
- El precio mostrado (59 USD) no corresponde al precio comercial ARS pactado en su suscripción
- El issue es silencioso: el cliente puede confirmar la orden en USD sin advertencia
Módulo candidato a corregir
l10n_ar_website_sale_ux (repo ingadhoc/website) es el módulo AR-específico para website_sale. Una opción es que este módulo sobreescriba _get_pl_partner_order para que, cuando el usuario esté autenticado y su pricelist de partner esté disponible en el sitio web (_is_available_on_website), se la incluya siempre en las disponibles sin filtrar por _is_available_in_country.
Reproducción
- Conectarse a adhoc.inc con VPN simulando IP de EE.UU.
- Autenticarse como cliente con
property_product_pricelist = 73 (ARS)
- Navegar al producto Consultoría Pre-pago de Horas
- Precio mostrado: 59 USD (debería ser ARS)
Descripción
Un cliente autenticado en el portal de adhoc.inc cuya
property_product_pricelistes la Pricing2023 - Tarifa Pública ARS (pricelist 73, ARS) ve el precio del producto Consultoría Pre-pago de Horas en 59 USD en lugar de ARS cuando accede desde una IP fuera de Argentina (reproducido con VPN a EE.UU.).El problema fue relevado en el ticket de helpdesk 116463 (Bugfix, producto Sitio web / E-commerce), con al menos tres clientes afectados: Digital Consultant S.A., Tecnovex S.R.L. y Microelectronica (grupomicro).
Causa raíz
La pricelist 73 (ARS) tiene
country_group_ids = [13 "Argentina"], lo que hace que_is_available_in_country('US')devuelvaFalse. Cuando Odoo evalúa las pricelists disponibles para un request con GeoIP = US, excluye la pricelist 73 aunque el usuario esté autenticado y tenga esa pricelist asignada explícitamente en su partner.La única pricelist del sitio sin restricción geográfica es la 72 (USD), que tiene una regla fija de 59 USD para ese producto y pasa a ser la pricelist activa.
Flujo en
website_sale/models/website.py:Comportamiento esperado
Un cliente autenticado con pricelist ARS asignada debería conservar esa pricelist independientemente de su IP de acceso. La asignación explícita en el partner debería tener precedencia sobre el GeoIP cuando el usuario está identificado.
Impacto
Módulo candidato a corregir
l10n_ar_website_sale_ux(repoingadhoc/website) es el módulo AR-específico para website_sale. Una opción es que este módulo sobreescriba_get_pl_partner_orderpara que, cuando el usuario esté autenticado y su pricelist de partner esté disponible en el sitio web (_is_available_on_website), se la incluya siempre en las disponibles sin filtrar por_is_available_in_country.Reproducción
property_product_pricelist = 73 (ARS)