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.
This commit is contained in:
parent
3cb0af6a7b
commit
4d23e98f7b
30 changed files with 3611 additions and 1004 deletions
156
run_price_tests.sh
Executable file
156
run_price_tests.sh
Executable file
|
|
@ -0,0 +1,156 @@
|
|||
#!/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
|
||||
Loading…
Add table
Add a link
Reference in a new issue