| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
eCommerce (website_sale)
• Invoicing (account) • Discuss (mail) • Inventory (stock) • Website (website) |
| Lines of code | 474 |
| Technical Name |
cold_dry_delivery |
| License | OPL-1 |
| Versions | 17.0 18.0 19.0 |
❄️ Cold & Dry Delivery Split
Automatically separate cold-chain and standard-dry shipments inside Odoo 17 — from eCommerce checkout to warehouse dispatch.
Many businesses sell both ❄️ Cold (refrigerated / frozen) and 🌿 Dry (ambient / standard) products. When a customer orders both in a single cart, the default Odoo delivery flow breaks down — you cannot ship frozen goods and ambient goods with the same carrier on the same truck.
Cold & Dry Delivery Split solves this end-to-end: it tags products and carriers, filters the checkout automatically, computes separate delivery costs for ⚡ Mixed orders, and splits the warehouse picking into two independent shipments upon order confirmation. Works for both eCommerce orders and Sales orders.
- Product Type Labeling Tag every product as Cold (temperature-controlled) or Dry (standard ambient). Visible on the product form and list view.
- Carrier Type Classification Mark each delivery carrier as Cold or Dry. The checkout and order logic use this to route shipments correctly.
- Smart Carrier Filtering At checkout, only matching carriers are shown: Cold for cold-only carts, Dry for dry-only, all for mixed carts.
- Automatic Mixed-Order Handling Mixed carts get two automatic delivery lines — one Cold, one Dry — with separate costs from default carriers.
- Picking Split on Confirmation On confirmation, one stock picking is automatically split into a Cold picking and a Dry picking, each with its carrier.
- Default Carrier Configuration Set preferred Cold and Dry default carriers once under Inventory → Settings → Cold/Dry Delivery.
- Visual Indicators Color-coded badges and banners on the cart, checkout, and backend sale order — instantly see Cold, Dry, or Mixed.
- Sales Orders Support Backend Sales orders show the Cold/Dry/Mixed badge and warning banner, with the same automatic picking split.
- Graceful Fallback If no default carrier is configured, falls back to the first published carrier of each type automatically.
Customer Adds Products to Cart
Products are tagged as Cold ❄️ or Dry 🌿. The cart shows badges next to each product name and a warning banner if the cart is mixed.
Checkout — Carrier Filtering
Cold-only carts → only Cold carriers shown.
Dry-only carts → only Dry carriers shown.
Mixed carts → all carriers shown (or automatic assignment for defaults).
Checkout — Delivery Cost Breakdown
For mixed orders, the delivery step shows a read-only breakdown with the Cold shipment cost and the Dry shipment cost separately, plus a combined total. No carrier radio-button selection is shown — everything is automatic.
Order Confirmation
The standard Odoo picking is created. For mixed orders, the module immediately splits it: Cold moves → new Cold picking, Dry moves → original picking. Each picking is assigned the correct carrier.
Warehouse Dispatch
Two independent outbound pickings are ready in the warehouse — one for the cold-chain carrier, one for the dry carrier. Each can be processed and shipped independently.
🏷️ Tag Your Products
- Open any product in Inventory → Products or Sales → Products
- Find the Product Type field
- Select Cold or Dry (default is Dry)
🚚 Tag Your Carriers
- Go to Inventory → Configuration → Delivery Methods
- Open a carrier and set the Carrier Type
- Choose Cold or Dry
⚙️ Set Default Carriers
- Go to Inventory → Configuration → Settings
- Scroll to Cold/Dry Delivery
- Select your Default Cold Carrier and Default Dry Carrier
- Click Save
✅ You're Ready
- Mixed eCommerce & Sales orders are handled automatically
- No further configuration required
- Fallback to first published carrier if defaults are not set
| Module | Purpose |
|---|---|
delivery
|
Base delivery carrier model and rate computation |
sale
|
Sales order model, order confirmation flow |
sale_stock
|
Links sales orders to stock pickings |
website_sale
|
eCommerce checkout flow and cart templates |
| Technical Name |
cold_dry_delivery
|
| Version | 17.0.1.0.0 |
| Odoo Compatibility | Odoo 17 (Community & Enterprise) |
| Category | Inventory / Delivery |
| License | OPL-1 |
| Price | $30.00 USD |
| Author | Morphix Co. |
| Support | morphixthecompany@gmail.com |
Cold & Dry Delivery Split
Overview
Cold & Dry Delivery Split (cold_dry_delivery) is an Odoo 17 module that adds full cold-chain and dry-delivery separation to the eCommerce checkout flow, Sales orders, and warehouse operations.
It solves the common logistics problem of a single customer order containing products that require different storage and transport conditions (e.g., frozen goods and ambient goods), by automatically splitting the order into two distinct shipments — each routed to the correct carrier.
Purpose
Many businesses that sell both refrigerated and ambient products face operational challenges when processing mixed orders:
- A single picking cannot be shipped by two different carriers
- Customers must not manually deal with the logistics of two carriers
- The delivery cost for each shipment type must be presented transparently
This module handles all of this automatically, from the product page through checkout to warehouse dispatch.
Architecture
The module extends four core Odoo models and overrides two eCommerce controller methods:
| Component | Role |
|---|---|
| product.template | Adds a Cold / Dry type field to every product |
| delivery.carrier | Classifies each carrier as Cold or Dry |
| sale.order | Computes order type, filters available carriers, and splits pickings on confirmation |
| res.config.settings | Stores the default Cold and Dry carrier selections as system parameters |
| WebsiteSaleColdDry (controller) | Customises the eCommerce checkout flow for mixed orders |
Models
product.template
Every product is classified as either Cold (requires refrigeration / temperature-controlled transport) or Dry (standard ambient, the default). This classification is the source of truth for all downstream carrier filtering and picking split logic.
delivery.carrier
Each delivery carrier is marked as either Cold or Dry. The field is named cold_dry_type to avoid collision with Odoo's built-in delivery_type field. This classification controls which carriers appear at checkout and which carrier is assigned to each picking after a split.
sale.order
A computed field determines whether the order is Cold-only, Dry-only, or Mixed, based on the product types present in the order lines (delivery lines are excluded from this check).
The following logic is applied:
- All products are Cold → order type is Cold
- All products are Dry → order type is Dry
- Products of both types → order type is Mixed
Carrier filtering: Only carriers matching the order type are shown at checkout. Mixed orders show all carriers or apply automatic assignment using the configured defaults.
Rate computation for mixed orders: Both the default Cold carrier and the default Dry carrier are fetched from settings. A delivery line is created for each, with the computed rate. The customer sees a combined cost breakdown rather than a carrier selection.
Picking split on confirmation: After a mixed order is confirmed, the outbound stock picking is inspected. Cold-product moves are separated into a new picking. The original picking retains the Dry moves. Each picking is then assigned the appropriate carrier.
Carrier assignment logic after split:
- If the customer selected a Cold carrier at checkout → the Cold picking receives that carrier; the Dry picking receives the default Dry carrier from settings.
- Otherwise → the Dry picking receives the selected or default Dry carrier; the Cold picking receives the default Cold carrier from settings.
res.config.settings
Two system parameters are stored:
- Default Cold Carrier — the carrier automatically assigned to the Cold shipment in a mixed order.
- Default Dry Carrier — the carrier automatically assigned to the Dry shipment in a mixed order.
Both are restricted by domain to carriers of the matching type. If no default is configured, the module falls back to the first published carrier of each type.
Controllers
The eCommerce controller is extended to handle mixed orders at the checkout delivery step:
Checkout payment page: For mixed orders, both delivery lines are created automatically and the standard carrier radio-button selection is suppressed. The website template renders a read-only breakdown showing the Cold and Dry shipment costs and a combined total instead.
For pure orders, the standard checkout behavior is unchanged.
Google Analytics tracking: The core tracking method assumes a single delivery line. For mixed orders (which have two delivery lines), the delivery costs are summed before being passed to the parent tracking method.
Views & Frontend
Backend Views
- Products
- A Cold / Dry type field is added to the product form and list view.
- Delivery Carriers
- A Cold / Dry type field (displayed as radio buttons) is added to the carrier form and list view.
- Sale Orders
- A color-coded badge indicates the order type: blue for Cold, green for Dry, yellow for Mixed. An alert banner is shown on mixed orders warning that the order will be split into two separate shipments on confirmation.
- Inventory Settings
- A dedicated Cold/Dry Delivery section is added after the Shipping block, containing the Default Cold Carrier and Default Dry Carrier selection fields.
eCommerce Templates
Cart page: A warning banner is displayed at the top of the cart when the order is mixed. Each product line shows a Cold or Dry badge next to the product name.
Cart delivery cost: Mixed orders display separate delivery cost rows for the Cold and Dry shipments. Pure orders display a single standard delivery cost row.
Checkout delivery step: Mixed orders replace the carrier selection block with an automatic breakdown panel listing each shipment type, its cost, and the combined total. Pure orders use the standard carrier selection.
Order Flow
The following describes the end-to-end flow for a mixed order:
- The customer adds both Cold and Dry products to the cart. Badges and a warning banner are shown.
- At the checkout shipping address step, all carriers are available (since the order is mixed).
- At the checkout delivery step, the controller auto-creates two delivery lines using the default Cold and Dry carriers. The customer sees a cost breakdown with no manual carrier selection.
- On order confirmation, the standard outbound picking is split: Cold moves go to a new picking, Dry moves remain in the original. Each picking is assigned its correct carrier.
- Two independent outbound pickings are ready in the warehouse for dispatch via their respective carriers.
Configuration Reference
| Setting | Location |
|---|---|
| Default Cold Carrier | Inventory → Settings → Cold/Dry Delivery → Default Cold Carrier |
| Default Dry Carrier | Inventory → Settings → Cold/Dry Delivery → Default Dry Carrier |
Note
If no default carrier is configured, the module falls back to the first published carrier of the matching type. It is strongly recommended to configure defaults explicitly.
Logging
The module records the following events at DEBUG level under the cold_dry_delivery logger:
- The carrier selected or assigned for each Cold and Dry shipment
- When a picking split is triggered and the names of the resulting pickings
Compatibility
- Odoo Version: 17.0 (Community or Enterprise)
- Sales Orders: Fully supported — Cold/Dry/Mixed badge and warning banner on the order form; picking split on confirmation
- eCommerce: Requires the website_sale module (standard Odoo eCommerce)
Module Metadata
| Key | Value |
| Technical Name | cold_dry_delivery |
| Version | 17.0.1.0.0 |
| Author | Morphix Co. (morphixthecompany@gmail.com) |
| License | OPL-1 |
| Price | $30.00 USD |
| Category | Inventory / Delivery |
Support & Contact
For questions or support, contact: morphixthecompany@gmail.com
HTML Description: static/description/index.html
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module