addons-cm/docs/RECENT_CHANGES.md
snt fee8ec9c45 [DOC] Actualizar documentación y instrucciones con cambios recientes (v18.0.1.3.1)
- [FIX] Actualizar copilot-instructions.md con nuevas secciones:
  * QWeb Template Best Practices (patrón crítico para templates complejos)
  * Eskaera System mejorado con info de lazy loading v18.0.1.3.0+
  * QWeb Template Errors en Common Issues & Solutions
  * Recent Changes Summary (actualizado a 2026-02-18)

- [ADD] Nuevo documento docs/RECENT_CHANGES.md:
  * Timeline completo de cambios (Feb 2-18, 2026)
  * 4 secciones principales de cambios documentados
  * Impacto y acciones requeridas por developers
  * Referencias cruzadas a documentación técnica

- [UPD] README.md principal:
  * website_sale_aplicoop actualizado a v18.0.1.3.1
  * Mención de fixes críticos de v18.0.1.3.1
  * Referencias a FINAL_SOLUTION_SUMMARY.md

- [REF] product_main_seller/README.md:
  * Removidas referencias obsoletas a default_supplier_id
  * Documentación actualizada para usar main_seller_id
  * Simplificada sección de Computation Logic

- [UPD] docs/README.md:
  * Nueva sección "Cambios Recientes"
  * Reorganizado índice de documentación de template fixes
  * Mejorada estructura de secciones de troubleshooting

Cambios Documentados:
 Refactoring product_main_seller (18 Feb) - Removido campo alias
 v18.0.1.3.1 Fixes (16 Feb) - Date calculations y template rendering
 v18.0.1.3.0 Lazy Loading (12 Feb) - Performance improvement 95%
 Template Logic Refactoring (Feb 2-16) - QWeb best practices

+438 líneas de documentación nueva/actualizada
2026-02-18 18:37:43 +01:00

8 KiB

Cambios Recientes del Proyecto

Última actualización: 18 de febrero de 2026

Resumen Ejecutivo

El proyecto ha recibido importantes mejoras en rendimiento, arquitectura y estabilidad durante febrero de 2026:

  1. Refactoring de product_main_seller - Eliminación de campo alias innecesario
  2. Lazy Loading v18.0.1.3.0 - Mejora de rendimiento de 10-20s → 500-800ms
  3. Template Rendering Fixes v18.0.1.3.1 - Solución definitiva para errores QWeb
  4. Date Calculation Fixes v18.0.1.3.1 - Correcciones críticas en validación de fechas

📅 Timeline de Cambios

18 de Febrero (Hoy)

[REF] product_main_seller: Remover campo alias default_supplier_id

Commit: ed048c8

Cambio: Se eliminó el campo default_supplier_id que era un alias innecesario

Razón:

  • Campo redundante que duplicaba main_seller_id
  • Los addons custom ya usan main_seller_id directamente
  • Evitar crear extensiones innecesarias en addons OCA

Impacto:

  • Código más limpio
  • Menos confusión en arquitectura
  • ⚠️ Revisar cualquier código personalizado que use default_supplier_id

Archivos Afectados:

  • product_main_seller/models/product_template.py - Se removió campo alias

Acción Requerida:

# Actualizar addon en instancia Odoo
docker-compose exec odoo odoo -d odoo -u product_main_seller --stop-after-init

Para Developers:

# ❌ ANTES
product.default_supplier_id  # Alias innecesario

# ✅ AHORA (preferido)
product.main_seller_id  # Campo original

16 de Febrero (v18.0.1.3.1)

[FIX] website_sale_aplicoop: Critical date calculation fixes

Versión: 18.0.1.3.1

Cambios Principales:

  1. Date Calculation Logic:

    • Corregido cálculo de cutoff_date: Changed days_ahead <= 0 to days_ahead < 0
    • Permite que cutoff_date sea el mismo día que hoy
    • Agregado store=True en delivery_date para persistencia
  2. Constraints & Validations:

    • Nueva constraint _check_cutoff_before_pickup
    • Valida que pickup_day >= cutoff_day en órdenes semanales
    • Previene configuraciones inválidas
  3. Cron Job Automático:

    • Nuevo _cron_update_dates que recalcula fechas diariamente
    • Asegura que las fechas computadas permanezcan actuales
  4. UI Improvements:

    • Nueva sección "Calculated Dates" en formulario
    • Muestra readonly cutoff_date, pickup_date, delivery_date
    • Mejor visibilidad de fechas automáticas

Testing:

  • 6 nuevos tests de regresión con tag post_install y date_calculations
  • Validación de todas las combinaciones de días (49 combinaciones)
  • Asegura que cutoff puede ser hoy sin errores

Para Developers:

# Ahora es seguro establecer cutoff_date al mismo día
if today == cutoff_day:  # ✅ Funciona correctamente
    # La validación permite esto
    pass

12 de Febrero (v18.0.1.3.0)

[ADD] website_sale_aplicoop: Lazy Loading Implementation

Versión: 18.0.1.3.0

Cambio Mayor: Implementación de lazy loading configurable para productos

Resultados de Rendimiento:

  • Antes: Carga de página = 10-20 segundos (todos los productos)
  • Después:
    • Página 1: 500-800ms (20 productos)
    • Páginas subsecuentes: 200-400ms vía AJAX
    • Mejora: 95% más rápido

Configuración:

Settings > Website > Shop Performance
  [✓] Enable Lazy Loading
  [20] Products Per Page

Características:

  • Botón "Load More" configurable
  • Spinner durante carga
  • Event listeners re-attached en nuevos productos
  • Botón se oculta automáticamente cuando no hay más productos

Archivos Modificados:

  • website_sale_aplicoop/models/group_order.py - Método _get_products_paginated()
  • website_sale_aplicoop/views/website_templates.xml - Nuevo template eskaera_shop_products
  • website_sale_aplicoop/static/js/ - JavaScript para AJAX y event handling

Documentación:


Febrero 2-16 (v18.0.1.2.0 - v18.0.1.3.0)

[FIX] website_sale_aplicoop: Move template logic to controller

Commit: 5721687 - FINAL SOLUTION

Problema:

TypeError: 'NoneType' object is not callable
Template: website_sale_aplicoop.eskaera_shop_products

Causa Raíz: QWeb no puede parsear:

  • Conditionals complejos en t-set
  • Operadores 'or' encadenados en t-attf-*
  • Cadenas profundas de atributos con lógica

Solución: Mover TODA la lógica al controller

# Controller prepara datos limpios
def _prepare_product_display_info(self, product, price_info):
    price = price_info.get(product.id, {}).get('price') or 0.0
    uom = product.uom_id.category_id.name if product.uom_id and product.uom_id.category_id else ''
    return {
        'display_price': float(price),
        'safe_uom_category': uom,
    }

# Template usa acceso simple
# <span t-esc="product_display['display_price']"/>

Documentación:

Para Developers: Este es el patrón recomendado para todos los templates complejos:

  1. Preparar datos en el controller
  2. Pasar dict simple al template
  3. Template solo accede atributos, sin lógica

🎯 Cambios Transversales

Mejoras de Código

Commit Descripción
6fbc7b9 Remover atributos string= redundantes en website_sale_aplicoop
5c89795 Corregir errores de traducción obligatorios (linting)
40ce973 Infinite scroll + search filter integration
dc44ace Agregar configuración ESLint
b15e9bc Aumentar threshold de complejidad ciclomática en flake8

Pruebas

  • Tests de regresión para date calculations (v18.0.1.3.1)
  • Tests de lazy loading (v18.0.1.3.0)
  • Validación de constraints de fechas

📚 Documentación Actualizada

  • .github/copilot-instructions.md - Actualizado con nuevos patrones y fixes
  • README.md - Información sobre v18.0.1.3.1 y lazy loading
  • product_main_seller/README.md - Actualizado sin default_supplier_id
  • docs/README.md - Nuevo índice de documentación de fixes
  • website_sale_aplicoop/README.md - Changelog actualizado

⚠️ Cosas Importantes para Developers

1. Patrón de Templates QWeb

Cambio Crítico: Nunca poner lógica en templates, siempre en controller

# ✅ CORRECTO
def _prepare_data(self):
    return {'price': 100.0, 'name': 'Product'}

# ❌ INCORRECTO (No hagas esto)
# <t t-set="price" t-value="product.list_price or 0"/>

2. Field Names en product_main_seller

Cambio: Use main_seller_id en lugar de default_supplier_id

# ✅ CORRECTO
product.main_seller_id

# ❌ OBSOLETO
product.default_supplier_id  # Ya no existe

3. Lazy Loading Configuration

Si trabajas con website_sale_aplicoop, la configuración está en:

Settings > Website > Shop Performance

No es necesario modificar código, es configurable.

4. Date Calculations en Eskaera

Ahora puedes usar cutoff_date = hoy sin problemas:

# ✅ Ahora funciona
order.cutoff_date = today  # Antes fallaba

🔍 Cambios Detectados pero No Documentados

Verifica si necesitas cambios en:

  1. Código que usa default_supplier_id de product_main_seller
  2. Lógica en templates (especialmente en website_sale_aplicoop)
  3. Configuración de lazy loading si tienes instancia personalizada

📞 Para Más Detalles


Última actualización: 2026-02-18 Versión Actual: 18.0.1.3.1 Status: Production Ready