addons-cm/run_price_tests.sh
snt 4d23e98f7b Revertir cambio: eliminar cálculo duplicado de impuestos
El método _get_price() del addon OCA ya maneja correctamente los impuestos
según la configuración de Odoo. El cálculo adicional con compute_all() estaba
duplicando los impuestos cuando price_include estaba activado.

Cambios:
- Eliminado método _compute_price_with_taxes()
- Revertido eskaera_shop() para usar directamente _get_price()
- Revertido add_to_eskaera_cart() para usar directamente _get_price()

El precio mostrado ahora respeta la configuración de impuestos de Odoo
sin duplicación.
2026-02-11 19:54:28 +01:00

156 lines
5.3 KiB
Bash
Executable file

#!/bin/bash
# Script para ejecutar tests de website_sale_aplicoop
echo "=========================================="
echo "Ejecutando tests de website_sale_aplicoop"
echo "=========================================="
# Ejecutar tests específicos de precios
docker-compose exec -T odoo odoo shell -c /etc/odoo/odoo.conf -d odoo << 'PYTHON_SCRIPT'
import logging
_logger = logging.getLogger(__name__)
# Cargar el módulo
env = self.env
# Test 1: Verificar que el método _compute_price_with_taxes existe
print("\n=== Test 1: Verificar método _compute_price_with_taxes ===")
try:
from odoo.addons.website_sale_aplicoop.controllers.website_sale import AplicoopWebsiteSale
controller = AplicoopWebsiteSale()
print("✓ Método _compute_price_with_taxes encontrado")
print(f" Firma: {controller._compute_price_with_taxes.__doc__}")
except Exception as e:
print(f"✗ Error: {e}")
# Test 2: Crear producto con impuesto y verificar cálculo
print("\n=== Test 2: Calcular precio con impuesto 21% ===")
product = None
try:
# Obtener o crear impuesto
tax_21 = env['account.tax'].search([
('amount', '=', 21.0),
('type_tax_use', '=', 'sale'),
('company_id', '=', env.company.id)
], limit=1)
if not tax_21:
# Crear tax group si no existe
country_es = env.ref('base.es', raise_if_not_found=False)
if not country_es:
country_es = env['res.country'].search([('code', '=', 'ES')], limit=1)
tax_group = env['account.tax.group'].search([
('company_id', '=', env.company.id),
('country_id', '=', country_es.id if country_es else False)
], limit=1)
if not tax_group:
tax_group = env['account.tax.group'].create({
'name': 'IVA',
'company_id': env.company.id,
'country_id': country_es.id if country_es else False,
})
'name': 'IVA 21% Test',
'amount': 21.0,
'amount_type': 'percent',
'type_tax_use': 'sale',
'price_include': False,
'company_id': env.company.id,
'country_id': country_es.id if country_es else False,
'tax_group_id': tax_group.id,
})
print(f" Impuesto creado: {tax_21.name}")
else:
print(f" Impuesto encontrado: {tax_21.name}")
# Crear producto de prueba
product = env['product.product'].search([
('name', '=', 'Test Product Tax Calculation')
], limit=1)
if not product:
product = env['product.product'].create({
'name': 'Test Product Tax Calculation',
'list_price': 100.0,
'taxes_id': [(6, 0, [tax_21.id])],
'company_id': env.company.id,
})
print(f" Producto creado: {product.name}")
else:
print(f" Producto encontrado: {product.name}")
# Calcular precio con impuestos
base_price = 100.0
taxes = product.taxes_id.filtered(
lambda t: t.company_id == env.company
)
if taxes:
tax_result = taxes.compute_all(
base_price,
currency=env.company.currency_id,
quantity=1.0,
product=product,
)
price_with_tax = tax_result['total_included']
price_without_tax = tax_result['total_excluded']
print(f" Precio base: {base_price:.2f} €")
print(f" Precio sin impuestos: {price_without_tax:.2f} €")
print(f" Precio con impuestos: {price_with_tax:.2f} €")
print(f" Impuesto aplicado: {price_with_tax - price_without_tax:.2f} €")
if abs(price_with_tax - 121.0) < 0.01:
print("✓ Test PASADO: 100 + 21% = 121.00")
else:
print(f"✗ Test FALLADO: Esperado 121.00, obtenido {price_with_tax:.2f}")
else:
print("✗ Producto sin impuestos configurados")
except Exception as e:
print(f"✗ Error en test: {e}")
import traceback
traceback.print_exc()
# Test 3: Verificar comportamiento de OCA _get_price
print("\n=== Test 3: Verificar OCA _get_price ===")
if product:
try:
pricelist = env['product.pricelist'].search([
('company_id', '=', env.company.id)
], limit=1)
if not pricelist:
pricelist = env['product.pricelist'].create({
'name': 'Test Pricelist',
'company_id': env.company.id,
})
price_info = product._get_price(
qty=1.0,
pricelist=pricelist,
fposition=False,
)
print(f" Precio OCA (value): {price_info.get('value', 0):.2f} €")
print(f" Tax included: {price_info.get('tax_included', False)}")
print(f" Original value: {price_info.get('original_value', 0):.2f} €")
print(f" Discount: {price_info.get('discount', 0):.1f}%")
if abs(price_info['value'] - 100.0) < 0.01:
print("✓ OCA retorna precio base SIN impuestos (esperado)")
else:
print(f"✗ OCA debería retornar 100.0, retornó {price_info['value']:.2f}")
except Exception as e:
print(f"✗ Error en test OCA: {e}")
import traceback
traceback.print_exc()
else:
print("✗ Test 3 omitido: producto no creado en Test 2")
# Hacer commit para que los cambios persistan
env.cr.commit()
PYTHON_SCRIPT