- Add excluded_product_ids field for explicit product exclusion - Blacklist has absolute priority over all inclusion sources (product_ids, category_ids, supplier_ids) - Update _get_products_for_group_order() with blacklist filter logic - Rename 'Associations' section to 'Catálogo de Productos' with subsections: * Productos Incluidos (whitelist: suppliers, categories, direct products) * Productos Excluidos (blacklist: explicit exclusions) - Add comprehensive test suite (TestProductBlacklist class with 7 tests) - Add Spanish and Euskera translations - Update available_products_count computation to include excluded_product_ids - Version bump to 18.0.1.4.0 Use case: Bulk inclusion via categories/suppliers + fine-grained exclusion via blacklist Example: Select a category with 100 products, exclude 5 unwanted → 95 available
116 lines
4.4 KiB
Markdown
116 lines
4.4 KiB
Markdown
# 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/<order_id>/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.)
|