addons-cm/website_sale_aplicoop/CHANGELOG.md
snt 75ebb7b907 [ADD] website_sale_aplicoop: Product blacklist feature for group orders
- 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
2026-02-22 20:41:11 +01:00

4.4 KiB

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.)