A rule-based promotions and discount engine for Odoo Point of Sale — BOGO, mix-and-match, happy-hour, bundles and quantity-tiered pricing that auto-apply the best eligible offer at the register. Built, installed and supported by ECOSIRE for your Odoo 17, 18 or 19. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $249.00 USD; request a quote for a scoped proposal.

A rule-based promotions and discount engine for Odoo Point of Sale — BOGO, mix-and-match, happy-hour, bundles and quantity-tiered pricing that auto-apply the best eligible offer at the register. Built, installed and supported by ECOSIRE for your Odoo 17, 18 or 19.
现在无需付款。此操作会向我们的团队发送报价请求——我们会通过邮件跟进价格和后续步骤。
Retail and F&B operators live and die by promotions, but the moment your offers get real — buy-2-get-1 on a specific category, a happy hour that only runs 4-7pm on weekdays, a mix-and-match "any 3 for the price of 2," a lunch bundle priced below the sum of its parts — Odoo's native tooling starts to fight you. Community POS ships basic price lists and a manual per-line discount button; even Enterprise's loyalty/promotions programs cover coupons and simple reward tiers but leave gaps around time-windowed pricing, category-scoped BOGO, deterministic "best offer wins" resolution, and clean stacking rules. The result is cashiers punching manual discounts (which nobody audits), promos that don't stop at their end time, and margin quietly leaking at the register.
`promotion.rule` model storing trigger conditions, time windows, rewards and stacking flags as structured records — no hard-coded offers
Buy-X-get-Y (BOGO) with the reward scoped to a specific product or entire `product.category`, including 'cheapest line free' resolution
Mix-and-match promotions ('any 3 for the price of 2') evaluated across eligible lines rather than single products
Time-windowed happy-hour pricing with a day-of-week mask plus start/end times, evaluated against POS session time
Quantity-tiered discounts (e.g. 5% at 3 units, 10% at 6) computed per line via `@api.depends` on order quantities
Category-level percentage or fixed-amount discounts driven by `product.category` membership
This is a build-to-order module ECOSIRE develops and installs on your instance. At its core is a promotion.rule model (models.Model) that stores each offer as structured data: trigger conditions (product, product.category, minimum quantity, minimum subtotal), a time window (day-of-week mask plus start/end times for happy-hour), a reward definition (percentage, fixed amount, free-line, or override price for BOGO/bundle), and stacking flags. Eligibility is evaluated against the live order using computed fields (@api.depends on order lines and quantities), and a resolver applies the single best-value promotion — or the allowed combination when your stacking rules permit — so two competing offers never double-discount by accident. Everything runs inside the POS session so it works offline and re-syncs, with the reward reflected as an explicit discount line the receipt and Z-report can account for.
Technically, the module is a normal Odoo addon: a __manifest__.py declaring dependencies on point_of_sale (and pos_loyalty where we extend rather than replace it), server-side Python models plus OWL/JS extensions to the POS front-end so promotions apply on the screen in real time, and QWeb receipt templates updated to print the applied offer name and savings. Access is locked down with ir.model.access.csv and record rules so only managers create or edit rules while cashiers only consume them; an optional automated action (ir.cron/base automation) can auto-activate and expire seasonal campaigns by date. Because promotions are ordinary records, they're fully reachable over Odoo's XML-RPC/JSON-RPC API for reporting or external campaign tools. We build for your exact edition — Community or Enterprise — and target Odoo 17.0, 18.0 or 19.0, matching the POS framework version you actually run.
Delivery is build-to-order, not an instant download. It starts with a short scoping call where we capture your promotion types, category structure, stacking policy and edge cases (loyalty interaction, refunds, split payments), then we confirm scope and price in writing. From confirmed scope, typical delivery is 2 to 4 weeks: we develop against a staging copy of your database, run UAT with your real product catalog, hand over installable source and a git repository, train your managers and cashiers, and stand by through a post-go-live support window. No fabricated benchmarks or borrowed testimonials — just a module engineered to your promotion rules and your Odoo version.
Runs frequent category-scoped BOGO and mix-and-match offers across several outlets and needs promotions applied consistently and auditably at every register, not via manual cashier discounts.
Needs reliable time-windowed pricing that turns on and off automatically for happy hours and daypart deals, printed clearly on receipts, without staff having to remember to switch price lists.
Designs the offer calendar and stacking policy and wants a single place to define rules, control which promotions combine, and expire campaigns by date without developer help.
Owns the instance and cares about clean security via record rules, edition/version compatibility, source and git handover, and API access to promotion data for reporting.
在 ecosire.com 上购买许可证并从您的帐户仪表板下载 POS Promotions & Discount Engine 模块 ZIP。
将 ZIP 解压到服务器上的 Odoo 自定义插件文件夹中(或通过“应用程序”>“从 Odoo.sh / runbot 上的文件安装”上传)。
激活开发者模式,打开应用程序,单击更新应用程序列表,搜索 POS Promotions & Discount Engine,然后按安装。
打开新菜单,粘贴您的 ECOSIRE 许可证密钥,连接任何外部凭据(Shopify、Amazon、Stripe 等),然后保存。
运行内置连接测试,同步前 10 条记录,并安排定期 cron。如果出现任何问题,请联系支持人员。
| 标准 | 伊科西尔 | 定制建造 | 竞争对手 | 奥杜本机 |
|---|---|---|---|---|
| BOGO / mix-and-match | Category-scoped BOGO and mix-and-match built to your rules | Possible but you specify and test every case yourself | Often single-product BOGO only, limited category logic | |
| Happy-hour / time windows | Day-of-week mask + start/end times, auto on/off | Buildable, but scheduling logic is on you | Rarely time-windowed; needs manual price-list swaps | |
| Best-offer resolution | Deterministic resolver applies the single best-value offer | You design and validate the tie-break logic | Often first-match or manual selection | |
| Stacking control | Exclusive / additive / priority rules you define | Fully custom but unspecified until you build it | Limited or all-or-nothing stacking | |
| Edition & version fit | Built for your exact edition and Odoo 17/18/19 | Depends on your team's version expertise | May lag new Odoo releases or edition gaps | |
| Security & audit | Record rules + explicit discount lines on receipts/Z-report | You implement access rules and audit trail | Varies; audit trail often shallow | |
| Support & handover | Source + git repo, training, post-go-live support window | Only what your team documents | Vendor support tiers, no bespoke fit | |
| Total effort to you | Scope call, then we build/UAT/train — 2-4 weeks | Full dev, QA and maintenance burden in-house | Install fast but bend your process to the module |
This is a build-to-order module. After a short scoping call we confirm your promotion types, stacking policy and edge cases in writing; from that confirmed scope, typical delivery is 2 to 4 weeks. We develop and UAT on a staging copy of your database before go-live.
Every engagement includes a post-go-live support window for defect fixes and configuration adjustments. Because you receive the full source and git repository, the module is yours to maintain; we also quote version-upgrade work (e.g. moving from Odoo 17 to 18/19) or new promotion types as a follow-on scope.
We build for your exact edition. On Community we implement the promotions engine directly on `point_of_sale`; on Enterprise we can extend and interoperate with the existing `pos_loyalty`/promotions programs rather than duplicating them. We confirm which approach fits during scoping.
Yes. The resolver evaluates all eligible rules against the live order and auto-applies the single best-value offer, so cashiers don't choose or key in manual discounts. Your stacking rules decide whether multiple offers may combine.
Yes. Each rule supports a day-of-week mask plus start and end times, evaluated against the POS session clock, so a happy hour or daypart offer activates and deactivates on its own. An optional automated action can also open and close seasonal campaigns by date.
Odoo 17.0, 18.0 and 19.0. Because the POS front-end framework differs across these versions, we build against the specific version you run and validate on a staging copy before production.
Yes. Promotions and their applied discounts are ordinary Odoo records, reachable over the XML-RPC/JSON-RPC API, and each applied offer is rendered as an explicit discount line so receipts, Z-reports and BI tools can attribute every discount.
A rule-based promotions and discount engine for Odoo Point of Sale — BOGO, mix-and-match, happy-hour, bundles and quantity-tiered pricing that auto-apply the best eligible offer at the register. Built, installed and supported by ECOSIRE for your Odoo 17, 18 or 19.