| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
eCommerce (website_sale)
• Discuss (mail) • Invoicing (account) • Inventory (stock) • Website (website) |
| Lines of code | 552 |
| Technical Name |
mnb_multi_warehouse_stock_notification |
| License | OPL-1 |
| Website | https://mnb.ltd |
| Versions | 17.0 18.0 19.0 |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
eCommerce (website_sale)
• Discuss (mail) • Invoicing (account) • Inventory (stock) • Website (website) |
| Lines of code | 552 |
| Technical Name |
mnb_multi_warehouse_stock_notification |
| License | OPL-1 |
| Website | https://mnb.ltd |
| Versions | 17.0 18.0 19.0 |
Stock Alerts by Warehouse
Per-website, per-warehouse back-in-stock notifications for multi-site Odoo shops.
Where standard Odoo falls short
Standard Odoo records a back-in-stock subscription as a plain (product, partner) pair with no website or warehouse dimension. The built-in cron checks availability against an arbitrary warehouse and notifies every subscriber regardless of which site they signed up on. For a single-website shop this is fine. For a multi-website or multi-warehouse setup, it is not enough.
On a shop with two websites and two warehouses, a customer who subscribed on your French site may receive a "back in stock" email checked against your UK warehouse. That warehouse could be empty, or serve a different region entirely. Your customers place orders that cannot be fulfilled, or never hear back about stock they are genuinely waiting for.
What this module adds
Per-website subscriptions
Each "notify me" signup is stored against the website it came from, captured from the live request. No more cross-website confusion.
Per-warehouse availability checks
The cron checks each subscription against its own website's warehouse, so customers are only emailed when their site's warehouse actually has stock.
Audit trail
Every signup is kept as a record with a state (pending, sent, or skipped) and a notified date, so you can see who was told, when, and why anything was skipped.
Retention & cleanup
A weekly job keeps the table tidy: prune resolved alerts past a retention window you set, and optionally prune by product state (archived, not for sale, or unpublished). All optional, configured in Inventory settings.
The full workflow
The customer's flow
1. The product is out of stock, so instead of a buy button the customer sees the standard "notify me when it's back" sign-up.
2. They enter their email and confirm. The subscription is stored against the exact website they signed up on, so the availability check later uses that site's warehouse.
The backend configuration flow
1. In Inventory > Configuration > Settings, set the retention window, choose which alerts to prune by age, and tick which product states should drop a subscription (archived, not for sale, or unpublished). This is the only setup the module needs.
2. Every sign-up is kept as an auditable record: product, customer, website, state (pending / sent / skipped) and notified date, so you can see who was told, when, and why anything was skipped.
3. A weekly scheduled action applies both cleanups (age-based pruning and the unsellable-product rules) so the log stays useful without growing without bound.
How it works
The module introduces a stock.notification model that replaces the
built-in (product, partner) many-to-many. Each row carries the
website the customer subscribed on.
The built-in cron is overridden to process each pending subscription individually: it resolves the warehouse from that subscription's website and only sends the email when that warehouse has free stock. Subscriptions whose warehouse cannot be resolved are marked skipped with a logged reason, so nothing is lost and misconfiguration is visible.
A post-install hook migrates any existing subscriptions automatically. The standard "Notify Me" button on the product page continues to work -- customers sign up the same way they always have.
Configuration
- Install the module. Existing subscriptions are migrated by the post-install hook.
- Make sure each website has its warehouse set: Website > Configuration > Settings > Inventory.
- The "Products: Send Availability Email" scheduled action runs on its existing schedule (Settings > Technical > Automation > Scheduled Actions).
- Review any skipped notifications in Settings > Technical > Logging.
Compatibility
Requires website_sale_stock (included in Odoo Community and Enterprise). Tested on Odoo 17.0, 18.0, and 19.0. Works with both Community and Enterprise editions.
This module overrides the built-in _send_availability_email on
product.product using standard Odoo inheritance. It does not touch
the frontend "Notify Me" button or the email template -- only the availability
check and the subscription record.
Published by Mettle & Byte Ltd. For support, contact the address listed on this page.
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