#!/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