Tabby 4 payments message under the product price in Odoo
How the Tabby and Tamara instalment badge under the price works in Odoo: where it shows, why Tabby checks it before go-live, and how it recalculates.
Open a product in your store and look under the price. If the module is set up, there is a small line there: a Tabby logo, "4 interest-free payments of 73.75 SAR", and a Learn more link. For a customer weighing a 295 SAR purchase that line does more work than any banner on the page. It is also the first thing a Tabby reviewer looks for when you ask to go live.
This article explains how that message works in Tabby & Tamara for Odoo: where it appears, what Tabby's own checklist says about it, how the per-payment figure is recalculated when the customer changes quantity or variant, and the few reasons it fails to show. Everything below is taken from the module's code.
What the badge is, and what it is not
The badge is rendered by the module, on your server, as part of the page. It is not an image and not a script loaded from Tabby's servers. Each enabled provider gets one row: the provider's logo, the text "N interest-free payments of X", and a Learn more link that opens a breakdown. Enable Tabby alone and you get one row. Enable Tamara as well and you get two, stacked, each with its own count.
It appears in two places. On the product page the module hooks into Odoo's standard price template and inserts the badge right after the price element, so it sits under the price in any theme that keeps Odoo's price markup. On the cart page it sits inside the cart total block, under the order total.
One detail that matters for review: the badge shows whenever the provider is in any state other than Disabled. Test mode counts. That is deliberate, because Tabby's review happens while you are still on test keys.
Why Tabby looks for it before go-live
Tabby publishes what it expects, so there is no need to guess. Its on-site messaging documentation says the promo belongs near the product price, next to the add to cart button, or below the cart total, and gives the reason plainly: customers who learn about instalments before checkout are more likely to buy. Whether that holds for your catalogue is your call. What matters is that Tabby treats the message as part of the integration, not as decoration.
Its testing checklist for custom integrations is more specific. The storefront items are, in substance: product and cart snippets and pop-ups are present; product snippets show for all products with no amount limit; the cart snippet shows for all amounts and its figure updates when the cart changes; snippets fit a mobile screen as well as a desktop one; and a checkout message appears under the Tabby payment method or matches the approved copy. Tabby's team runs its QA after you finish on your side.
Map those to the module:
- Present on product and cart pages, with a pop-up. The two templates and the Learn more breakdown.
- All products, no amount limit. The template has no threshold logic. Provider enabled and count above zero means every product page gets the badge.
- Cart amount updates. The cart badge is rendered from the order total, inside the block Odoo re-renders from the server whenever the cart changes.
- Fits mobile. The row wraps on narrow screens instead of overflowing.
- Checkout message. Each provider ships with a line shown under it at checkout: "You will be redirected to Tabby to split your payment into interest-free installments." Edit it on the provider form if Tabby asks for specific wording.
An honest caveat. The badge is the module's own rendering, built to cover those items. What an individual reviewer asks for beyond them is between you and your Tabby contact. No module can promise a reviewer's decision; it can only put the right thing on the page.
How the figure is calculated
The badge starts with a number computed on the server, then keeps itself current in the browser.
On the product page
Odoo already knows the price of the combination the customer is looking at, with the pricelist applied. The module divides that by the instalment count and renders the result, so the first figure is right before any script runs.
Then the widget takes over. It reads the price Odoo displays on the page, multiplies it by the number in the quantity box, divides by the count, and rewrites the per-payment figure. It listens to the quantity box and watches the price element itself, so switching to a variant that costs more updates the badge without a reload. Type 3 into the quantity box and "4 payments of 73.75" becomes "4 payments of 221.25". If the widget cannot read the displayed price, for example in a theme that has moved it, it falls back to the server figure.
The figure uses the website currency's symbol, position and decimal places, so a KWD store shows three decimals and a SAR store two.
On the cart page
Here the badge takes the order total, the same number the customer sees as the cart total, and divides it by the count. When the customer changes a quantity, Odoo re-renders the total block from the server and the badge inside it is drawn again with the new total.
What the split does not claim
The module shows an even split, and the same figure for "You pay today". The plan the customer is actually offered is decided by the provider on its hosted checkout page, subject to its approval. That is why the pop-up footer says approval is subject to the provider's terms, and why the badge is a preview, not a contract. If your account offers a different plan from the count you configured, fix the count.
The Learn more pop-up
Learn more opens a breakdown the module builds and controls itself, without depending on the theme's Bootstrap JavaScript. The same widget ships on every supported branch from Odoo 14 to 19. It shows the product price, quantity, provider, number of payments, amount per payment, provider fees shown as zero, the total, what the customer pays today, the final payable amount, and a row of chips, one per payment, with the first highlighted. Its numbers come from the same live quantity and price the badge used, so it never disagrees with what is under the price.
Both ship translated. The Arabic strings live in the module's own translation file, so an Arabic storefront reads "4 دفعات بدون فوائد بقيمة 73.75 ر.س" with no extra work.
Turning it on and choosing the number
Open Payment Providers, then Tabby. Under the credentials there is a group called Storefront Promo with two fields: Show Tabby Promo on Products, on by default, and Tabby Installments, four by default. The Tamara provider has the same pair, with three as the default. Setting a count to zero hides that provider's badge without disabling the provider.
Set the count to the plan your provider account actually offers. The badge makes a promise, and a customer who saw four payments on the product page and is offered three at checkout has a reason to leave. What each count does to the number under the price is worked through in Tabby versus Tamara for an Odoo store.
When the badge does not show, or shows the wrong thing
No badge at all. Check, in order: the provider is not Disabled; Show Promo is on; the count is above zero; the module's assets were loaded after install (upgrade the module once if the page looks unchanged). Then check the theme. The product badge hooks into the element Odoo uses for the price, and a theme that replaces the price template with its own markup removes the hook, and the badge with it.
Badge shows, but never updates. A theme that renders the price outside Odoo's price container leaves the widget on its server fallback, which is right for the page as loaded but does not follow variants. That is a theme fix, not a setting.
Badge shows, but Tabby is missing at checkout. The badge is rendered in the website currency and does not check whether the provider supports it. Checkout does. A store priced outside the six supported currencies shows a badge and no Tabby at checkout. Why that guard exists and how to fix it is in why Tabby disappears from Odoo checkout.
Figure looks wrong. The badge divides the price the page displays, so tax-inclusive display means a tax-inclusive badge. On the cart page it divides the order total, delivery included once a method is set.
Before you ask Tabby to review
Run through this on a test provider, on a phone as well as a laptop:
- Open a product page. Badge under the price, logo visible, figure equals price divided by the count.
- Change the quantity. The figure updates.
- Pick a different variant. The figure updates.
- Click Learn more. The pop-up opens, matches the badge, and closes cleanly.
- Add to cart and open the cart. Badge under the total; change a quantity and watch it follow.
- Go to checkout and select Tabby. The message under the method reads as Tabby expects.
That is the storefront part of the checklist. The rest of a go-live, from keys to the first real order, is in how to add Tabby to Odoo. If you are still choosing a module, the storefront questions to put to any of them are in choosing a Tabby module for Odoo.
Frequently asked
Can I show the Tabby badge only, without Tamara?
Yes. Each provider has its own switch in the Storefront Promo group on its form. Turn off Show Promo on the Tamara provider, or set its instalment count to zero, and Tamara stays available at checkout with no badge on the product page. The same works the other way round.
Does the badge show while the provider is in Test mode?
Yes. The badge shows in any provider state other than Disabled, and Test mode is one of them. That is what you want, because Tabby's review happens on test keys before you switch to live.
Can I change the 4 payments figure to a different number?
Yes, from the Tabby Installments or Tamara Installments field on the provider form. The defaults are four for Tabby and three for Tamara. Set it to the plan your account actually offers, because the badge is a preview and the real plan is decided by the provider on its own checkout page.
Does the badge update when the customer changes quantity or variant?
Yes, on the product page. The widget watches the quantity box and the price element, multiplies the displayed price by the quantity and divides by the count whenever either changes, with no reload. On the cart page the badge is rendered from the order total, and Odoo re-renders that block from the server on every change.
Is this Tabby's official snippet loaded from their site?
No. The module draws the badge and the pop-up itself, on your server, with the provider logo and a figure computed from the price and the count, and loads no script from Tabby or Tamara. It is built to cover the storefront items on Tabby's testing checklist, but anything a particular reviewer asks for beyond that is between you and your Tabby contact.
Why is the badge visible but Tabby missing at checkout?
Usually the currency. The badge is rendered in the website currency and does not check provider support, while checkout hides Tabby and Tamara for any currency outside the six supported ones. Make sure the pricelist currency and the website currency are among them.