If you sell in more than one currency and publish fixed prices in each — think MSRP lists, dealer catalogs, or B2B price sheets — you’ve probably noticed that Dolibarr’s native multi-currency module doesn’t quite account for this. It’s built around a conversion model: set your base price, apply an exchange rate, and the foreign-currency number falls where the math lands.
That works for a lot of businesses. But not for ones that set deliberate, stable prices in each market.
I built a module to bridge that gap. It’s free, open source, and available now.
GitHub: zacharymelo/doli-multicurrency-fixedprice
The Gap in Native Multi-Currency
Dolibarr’s multi-currency module is solid for what it does. You enable currencies, set or auto-update exchange rates, and your invoices, proposals, and orders render in the correct denomination. The conversion math is reliable and the dual-currency totals are useful for accounting.
But there’s an assumption baked in: the foreign-currency price is always a derived value. Your base-currency price is the source of truth, the rate is applied, and whatever number comes out the other end is what the customer sees.
For businesses that publish fixed prices across currencies, this creates friction. You don’t want your USD price to wiggle every time the rate updates. You’ve set your number, you’ve printed it in your catalog, and you expect it to show up exactly as entered when your team builds a quote or invoice.
Without a fixed-price mechanism, the options are:
- Manually override every line item on every foreign-currency document
- Disable rate auto-updates and accept stale conversion data
- Maintain a spreadsheet alongside your ERP and hope nobody fat-fingers a number
None of these are real workflows. They’re workarounds — and they introduce exactly the kind of errors an ERP is supposed to prevent.
What This Module Does
Multi-Currency Fixed Prices for MSRP with Deviation Warnings adds a fixed-price table to Dolibarr at the product/variant level. You define the exact price you want for each product in each currency. Then the module handles the rest.
Fixed price insertion via back-calculation
When a product is added to an invoice, proposal, or sales order in a foreign currency, the module looks up the fixed price for that currency. Rather than overriding the multi-currency system, it works with it — back-calculating what the base-currency unit price needs to be so that Dolibarr’s own conversion logic arrives at your intended fixed price.
This means the native multi-currency module stays fully active. Your documents still show proper dual-currency totals. Your accounting data stays consistent. The module simply ensures the customer-facing number is the one you deliberately set, not whatever the rate happened to produce that day.
Deviation warnings
Exchange rates move. Your fixed prices don’t (until you decide to update them). Over time, the gap between what the rate would calculate and what you’ve fixed can grow — and at some point, it matters.
The module includes a configurable deviation threshold. Set it to whatever tolerance makes sense for your business — 3%, 5%, 10%. When a user adds a product to a document and the spread between the rate-calculated price and the fixed price exceeds that threshold, a native Dolibarr alert fires in the interface.
This doesn’t block the action or force a price change. It surfaces the information contextually, right when someone is working with that product, so your team can make an informed decision about whether it’s time to revisit pricing.
What It Doesn’t Do
A few deliberate boundaries:
- It doesn’t modify the core multi-currency module. This is a standalone module that hooks into Dolibarr’s existing event and object system. No core patches, no forked files.
- It doesn’t automate price adjustments. The deviation warning tells you there’s drift. Acting on it is a business decision.
- It doesn’t replace rate tracking. You still want live or regularly updated rates for accounting accuracy. This module just decouples the customer-facing price from the rate-derived price.
Who This Is For
Any Dolibarr user who:
- Publishes product prices in more than one currency
- Needs those prices to stay fixed regardless of rate fluctuations
- Wants to monitor when rates drift far enough from fixed prices to warrant a review
- Sells B2B with price lists, catalogs, or distributor agreements where price stability matters
The common thread is businesses operating across currency borders where the customer expectation is a known, stable number — not a live-calculated conversion.
Installation
Drop it into your Dolibarr custom directory, enable it in the module list, and configure your fixed prices and deviation threshold in the module’s setup page. It works alongside the native multi-currency module with no conflicts.
Full details are in the repo: github.com/zacharymelo/doli-multicurrency-fixedprice
Why Free
Dolibarr is open source. The community around it is one of the things that makes it viable for small and mid-sized businesses that can’t justify the cost of a proprietary ERP. This module scratches an itch I had, and the problem is generic enough that it’ll be useful to others. Releasing it free felt like the right move.
If you’re using it and find issues or have ideas, open a GitHub issue or drop a note on the Dolibarr forum thread. I’d also love to see fixed multi-currency pricing become a native feature someday — the UX patterns are already there in Dolibarr’s product and currency screens, and extending the data model to support per-currency fixed prices feels like a natural evolution.