- [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
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:
- Refactoring de
product_main_seller- Eliminación de campo alias innecesario - Lazy Loading v18.0.1.3.0 - Mejora de rendimiento de 10-20s → 500-800ms
- Template Rendering Fixes v18.0.1.3.1 - Solución definitiva para errores QWeb
- 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_iddirectamente - 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:
-
Date Calculation Logic:
- Corregido cálculo de
cutoff_date: Changeddays_ahead <= 0todays_ahead < 0 - Permite que cutoff_date sea el mismo día que hoy
- Agregado
store=Trueendelivery_datepara persistencia
- Corregido cálculo de
-
Constraints & Validations:
- Nueva constraint
_check_cutoff_before_pickup - Valida que pickup_day >= cutoff_day en órdenes semanales
- Previene configuraciones inválidas
- Nueva constraint
-
Cron Job Automático:
- Nuevo
_cron_update_datesque recalcula fechas diariamente - Asegura que las fechas computadas permanezcan actuales
- Nuevo
-
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_installydate_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 templateeskaera_shop_productswebsite_sale_aplicoop/static/js/- JavaScript para AJAX y event handling
Documentación:
- LAZY_LOADING.md - Documentación técnica completa
- LAZY_LOADING_QUICK_START.md - Guía rápida
- UPGRADE_INSTRUCTIONS_v18.0.1.3.0.md - Pasos de actualizació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:
- FINAL_SOLUTION_SUMMARY.md - Análisis completo
- QWEB_BEST_PRACTICES.md - Mejores prácticas
Para Developers: Este es el patrón recomendado para todos los templates complejos:
- Preparar datos en el controller
- Pasar dict simple al template
- 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 fixesREADME.md- Información sobre v18.0.1.3.1 y lazy loadingproduct_main_seller/README.md- Actualizado sindefault_supplier_iddocs/README.md- Nuevo índice de documentación de fixeswebsite_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:
- Código que usa
default_supplier_iddeproduct_main_seller - Lógica en templates (especialmente en website_sale_aplicoop)
- Configuración de lazy loading si tienes instancia personalizada
📞 Para Más Detalles
- Refactoring product_main_seller: Ver commit
ed048c8 - Lazy loading: Ver docs/LAZY_LOADING.md
- Template fixes: Ver docs/FINAL_SOLUTION_SUMMARY.md
- Date calculations: Ver website_sale_aplicoop/README.md
Última actualización: 2026-02-18 Versión Actual: 18.0.1.3.1 Status: ✅ Production Ready