Group orders are not confirmed until the cutoff date, so draft/sent sale.order lines never generate stock.moves and are invisible to virtual_available. This change makes the shop aware of that demand. - group.order._compute_draft_sale_demand: queries sale.order.line in draft/sent state (mirroring sale_stock forecasted report logic) and returns pending demand per product.id in the product's own UoM. - _get_products_for_group_order: delegates to new _apply_stock_filter_and_sort which excludes storable products whose forecasted net qty (virtual_available − draft demand) <= 0, unless allow_out_of_stock_order. - _compute_stock_ribbons: reads draft_demand_by_product from ORM context so is_out_of_stock / is_low_stock / dynamic_ribbon_id reflect net qty. - Controller: new _prepare_draft_stock_data helper calculates demand once per request, injects context, and builds product_max_qty dict. Applied in eskaera_shop, load_eskaera_page and load_products_ajax. - Template: qty input gets max and data-max-qty from product_max_qty. - JS: blocks add-to-cart if requested quantity exceeds data-max-qty. - Fixes type check: type=='consu' → is_storable=True (Odoo 18 semantics). - 21 new tests in test_forecasted_stock.py covering demand calculation, ribbon logic with context, and group order filtering. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
19 lines
913 B
Python
19 lines
913 B
Python
# Copyright 2025 Criptomart
|
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl)
|
|
|
|
from . import test_group_order # noqa: F401
|
|
from . import test_res_partner # noqa: F401
|
|
from . import test_product_extension # noqa: F401
|
|
from . import test_eskaera_shop # noqa: F401
|
|
from . import test_templates_rendering # noqa: F401
|
|
from . import test_record_rules # noqa: F401
|
|
from . import test_multi_company # noqa: F401
|
|
from . import test_save_order_endpoints # noqa: F401
|
|
from . import test_date_calculations # noqa: F401
|
|
from . import test_phase3_confirm_eskaera # noqa: F401
|
|
from . import test_pricing_with_pricelist # noqa: F401
|
|
from . import test_portal_sale_order_creation # noqa: F401
|
|
from . import test_cron_picking_batch # noqa: F401
|
|
from . import test_group_order_status_endpoint # noqa: F401
|
|
from . import test_home_delivery # noqa: F401
|
|
from . import test_forecasted_stock # noqa: F401
|