# Changelog - Website Sale Aplicoop ## [18.0.1.4.0] - 2026-02-22 ### Added - **Product Blacklist Feature**: New exclusion system for group orders - New field: `excluded_product_ids` (Many2many to product.product) - Blacklist has absolute priority over all inclusion sources (product_ids, category_ids, supplier_ids) - Model method: Updated `_get_products_for_group_order()` with blacklist filter - Comprehensive test suite in `test_product_discovery.py` (TestProductBlacklist class) ### Changed - **UI Improvements**: Renamed "Associations" section to "Catálogo de Productos" for better user clarity - New subsection: "Productos Incluidos" (whitelist: suppliers, categories, direct products) - New subsection: "Productos Excluidos" (blacklist: explicit exclusions) - Updated help texts for all inclusion fields - Complete Spanish and Euskera translations - **Product Discovery Logic**: - `_get_products_for_group_order()` now applies `excluded_product_ids` filter at the end - Products in blacklist never appear, regardless of inclusion source - `_compute_available_products_count()` now depends on `excluded_product_ids` - Detailed logging for excluded product count ### Technical Details - New M2M relation: `group_order_excluded_product_rel` (separate from whitelist relations) - Blacklist filter uses set subtraction: `products = products - order.excluded_product_ids` - All tests validate absolute priority: direct products, category products, supplier products, and multi-source products all respect blacklist ### Use Case - Admin selects a category with 100 products → adds to category_ids - Admin identifies 5 unwanted products → adds to excluded_product_ids - Result: 95 products available in the order - Workflow: Bulk inclusion via categories/suppliers + fine-grained exclusion via blacklist ## [18.0.1.3.0] - 2026-02-16 ### Added - **Lazy Loading Feature**: Configurable product pagination for significantly faster page loads - New Settings: `Enable Lazy Loading`, `Products Per Page` - New endpoint: `GET /eskaera//load-page?page=N` - JavaScript method: `_attachLoadMoreListener()` - Model method: `group_order._get_products_paginated()` - **Configuration Parameters**: - `website_sale_aplicoop.lazy_loading_enabled` (Boolean, default: True) - `website_sale_aplicoop.products_per_page` (Integer, default: 20) - **Frontend Components**: - New template: `eskaera_shop_products` (reusable for initial page + AJAX) - Load More button with pagination controls - Spinner during AJAX load ("Loading..." state) - Event listener re-attachment for dynamically loaded products - **Documentation**: - Complete lazy loading guide: `docs/LAZY_LOADING.md` - Configuration examples - Troubleshooting section - Performance metrics ### Changed - Template `eskaera_shop`: - Products grid now has `id="products-grid"` - Calls reusable `eskaera_shop_products` template - Conditional "Load More" button display - JavaScript `website_sale.js`: - `_attachEventListeners()` now calls `_attachLoadMoreListener()` - Re-attaches listeners after AJAX loads new products - README.md: - Added lazy loading feature to features list - Added version 18.0.1.3.0 to changelog ### Performance Impact - **Initial page load**: 10-20s → 500-800ms (20x faster) - **Product DOM size**: 1000 elements → 20 elements (initial) - **Subsequent page loads**: 200-400ms via AJAX - **Price calculation**: Only for visible products (reduced from 1000+ to 20) ### Technical Details - Zero-impact if lazy loading disabled - Transparent pagination (no URL changes) - Maintains cart synchronization - Compatible with existing search/filter - No changes to pricing logic or validation --- ## [18.0.1.2.0] - 2026-02-02 ### Added - Improved UI elements in cart and checkout ### Fixed - Pickup date calculation (was adding extra week) - Delivery date display on order pages ### Changed - Cart styling: 2x text size, larger icons - Checkout button: Enhanced visibility --- ## [18.0.1.0.0] - 2024-12-20 ### Added - Initial release of Website Sale Aplicoop - Group order management system - Multi-language support (ES, PT, GL, CA, EU, FR, IT) - Member management and tracking - Order state machine (draft → confirmed → collected → invoiced → completed) - Separate shopping carts per group order - Cutoff and pickup date validation - Integration with OCA ecosystem (pricing, taxes, etc.)