OdooWiki OCA HUB

Sale Order Blanket Order

sale_order_blanket_order folder_open OCA/sale-blanket open_in_new
Uncategorised License: AGPL-3

This module extends the functionality of Sale Order to support Blanket Order and Call-off Order.

Blanket Order

A Blanket Order is a standard sales order with the following specific features:

  • Type: Classified as "Blanket Order".
  • Defined Duration: Includes a validity period (end date).
  • Payment Terms: Allows selection of preferred terms (e.g., 90 days end of month, upon delivery, etc.).
  • Invoicing Policy: Can be based on product settings or the order itself.
  • Stock Reservation: Allows advance reservation of sold quantities.
  • Handling Unfulfilled Quantities: Provides options for dealing with undelivered quantities upon order expiration.
  • Prices are calculated based on existing rules since it is a standard sales order type.

The blanket order serves as the central element triggering stock management and invoicing mechanisms.

Stock Management Delivered quantities are tracked on the sales order lines as with regular sales orders. By default, the stock is not reserved upon confirmation of the blanket order. This is achieved by using the OCA module sale_manual_delivery. As a result, the stock will be reserved only when a call-off order is created for the quantity to be delivered.

In some cases, you may want to reserve stock upon confirmation of the blanket order. This can be achieved by using the OCA module sale_order_blanket_order_stock_prebook. This module extends the functionality of Sale Blanket Order to support the reservation of stock for future consumption by call-off orders. The reservation is done at the time of the blanket order confirmation for a consumption starting at the validity start date of the blanket order. This behavior can be configured on the blanket order.

Invoicing

Standard invoicing policies apply (e.g., invoice on order or on delivery). Payment terms are configurable per order. Prepayment can be enforced by configuring the invoicing policy at the order level using the OCA module sale_invoice_policy.

Consumption Management

A wizard will be available on the blanket order to initiate a delivery. It allows users to select products and quantities for delivery. This action creates a Call-off Order linked to the blanket order.

Call-off Order

A Call-off Order is a standard sales order with these specific characteristics:

  • Type: Classified as "Call-off Order".
  • Linked to Blanket Order: Only includes products from the blanket order.
  • Delivery Release: Enables the release of reserved stock for delivery.
  • No Invoicing or Stock Management: These are handled via the linked blanket order.

Stock Management

No delivery is generated directly from the call-off order.

It triggers:

  • Release of the reserved quantity in the blanket order.
  • Adjustment of stock reservations for the remaining quantities.

Standard Sales Orders

To support existing workflows (e.g., e-commerce), call-off orders can be generated transparently from standard sales orders based on product and availability:

Entire orders may be converted into call-off orders if all products are linked to a blanket order. Mixed orders split call-off items into a new call-off order, with both confirmed within the available quantities of the blanket order.

auto_awesome What this module does

AI-generated from the code · Odoo 18.0

Adds blanket (framework) sales orders with a validity period and call-off orders that draw quantities from them, controlling stock reservation, pricing and what happens when the blanket order expires.

This module lets a salesperson create a third kind of sales order, a Blanket Order, alongside normal orders and Call-off Orders. A blanket order has a validity start and end date, and the products and quantities a customer may order over that period.

  • On a blanket order you set a reservation strategy (stock is reserved at call-off) and an end-of-life strategy: either release the reservation or automatically deliver the remaining quantity when the period ends.
  • Call-off orders are linked to a blanket order and can only be created for the same customer and delivery address, within the blanket order's validity dates, and only once the blanket order is confirmed.
  • A call-off line must match a product on the blanket order and cannot exceed the quantity still available; its price is forced to zero.
  • A product cannot normally sit on two blanket orders with overlapping periods, unless the product is flagged to allow overlap.
  • A 'Deliver Remaining' button opens a wizard to create a call-off order for what is left; a scheduled job finalizes expired blanket orders.
  • A company setting can automatically move order lines that match a blanket order into a new call-off order when a sales order is confirmed.

It adds Blanket Orders and Call-off Orders menus/actions, a call-off counter on the blanket order, and touches sale.order, sale.order.line, stock.move, product.template and company settings.

Models and fields (9)
  • sale.order · extends an existing modelorder_type, blanket_order_id (Blanket Order), call_off_order_ids (Call-off Orders), blanket_eol_strategy, call_off_order_count (Call-off Order Count), show_deliver_remaining, blanket_order_id_domain (Blanket Order Domain), blanket_strict_packaging (Strict Packaging ?), blanket_validity_end_date (Validity End Date), blanket_validity_start_date (Validity Start Date), blanket_need_to_be_finalized (Need to be Finalized), blanket_reservation_strategy (Reservation Strategy), is_blanket_eol_strategy_editable, create_call_off_from_so_if_possible, is_blanket_reservation_strategy_editable
  • stock.move · extends an existing modelcall_off_sale_line_id
  • stock.rule · extends an existing model
  • res.company · extends an existing modelcreate_call_off_from_so_if_possible (Create Call-Off from SO if possible)
  • sale.order.line · extends an existing modelorder_type, blanket_line_id (Blanket Order Line), blanket_move_ids (Stock Moves on Blanket Order), blanket_order_id, call_off_line_ids (Call-off Order Lines), call_off_remaining_qty (Quantity remaining for Call-off), blanket_strict_packaging (Strict Packaging), blanket_validity_end_date (Validity End Date), blanket_validity_start_date (Validity Start Date)
  • product.template · extends an existing modelallow_blanket_order_overlap
  • res.config.settings · extends an existing modelcreate_call_off_from_so_if_possible (Create Call-Off from SO if possible)
  • sale.order.deliver.remaining.wizard · new modelorder_id (Order), wizard_line_ids (Products to Deliver)
  • sale.order.deliver.remaining.wizard.line · new modelwizard_id (Wizard), product_id (Product), qty_to_deliver (Quantity to Deliver), sale_order_line_id (Sale Order Line), product_packaging_id (Packaging), call_off_remaining_qty (Remaining Quantity)

Text generated by AI (DeepSeek) from reading the Odoo 18.0 code on GitHub; it may contain mistakes, so check the code before deciding. The module is very large and only part of the code was read. View the code on GitHub

Availability by version

Reviewed: 2026-11-03
Confirmed (verified in repository and branch) Estimated (unverified) No information

Confirmation status: 2 confirmed, 7 with no information of 9 versions.

Sources · Odoo 16.0

Confirmed on 2026-11-03 in branch 16.0 of OCA/sale-blanket.

terminal Installation and usage

OCA documentation · Odoo 18.0

By default, the automatic creation of call-off orders from normal sale orders containing products part of a blanket order is disabled. To enable this feature, you need to go into the sales settings and enable the option "Create Call-Off from SO if possible".

No verified information in OCA: Installation, Configuration.

info

Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.