Skip to main content
Website Multi Invoice Payment — A build-to-order Odoo customer-portal extension that lets your customers select and pay sever — 1/1Illustrative preview

A build-to-order Odoo customer-portal extension that lets your customers select and pay several open invoices in

a single bulk checkout. ECOSIRE scopes, builds, installs, and supports it for Odoo 17.0, 18.0, and 19.0.

What is Website Multi Invoice Payment?

A build-to-order Odoo customer-portal extension that lets your customers select and pay several open invoices in a single bulk checkout. ECOSIRE scopes, builds, installs, and supports it for Odoo 17.0, 18.0, and 19.0. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.

Key Features

Bulk-selection UI on the portal `/my/invoices` list via inherited QWeb templates, with per-row checkboxes and a 'select all eligible' toggle
Live selected-total field computed from `amount_residual` with `@api.depends`, updating client-side as the customer checks and unchecks invoices
Eligible-invoice domain filtered to `move_type in ('out_invoice','out_refund')` and `payment_state in ('not_paid','partial')` so only genuinely payable documents appear
Single 'Pay selected' action that assembles the chosen `account.move` set into one payment intent handed to the native `payment` engine
Reuses your existing `payment.provider` acquirers (Stripe, wire, and others already configured) — no bespoke gateway integration
Automatic post-payment reconciliation matching the received amount against each selected invoice through Odoo's standard flow
Optional partial-allocation policy (oldest-invoice-first or pro-rata) when a single received amount must be split across the selection
Portal record rules and `ir.model.access.csv` enforcing that a partner only ever sees and pays invoices within their own commercial entity
Multi-currency guardrail that blocks mixing incompatible currencies in one payment and messages the customer clearly
Confirmation and receipt wired into the standard `mail.template` system, itemizing every invoice covered by the bulk payment
JSON-RPC / XML-RPC exposure of the bulk-pay result for headless storefronts, mobile apps, or external portals
Idempotency and double-submit protection so a re-clicked or retried payment cannot create duplicate `account.payment` records
Theme-safe template inheritance (extends, never replaces) so existing website and portal customizations remain intact
Supports Odoo 17.0, 18.0, and 19.0 with controller/template differences handled per series, on both Community and Enterprise

Built to order, done for you

No DIY setup — a working app, built, installed and supported by ECOSIRE.

  1. 1

    You order

    Start with a one-time build price. We scope it with you at kickoff.

  2. 2

    We build & install

    ECOSIRE builds, configures and installs it on your Odoo.

  3. 3

    Go live + support

    You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.

Technical Specifications

Odoo Compatibility
Odoo 17, Odoo 18, Odoo 19
Editions
Enterprise & Community
License
Licence confirmation required
Python Requirement
Python 3.10+
Database
PostgreSQL 12+

About this Product

Every finance team running Odoo eventually hits the same friction: a customer with ten open invoices has to open the portal, click into each invoice separately, and run ten individual online payments. That means ten payment-provider transaction fees, ten account.payment records to reconcile, ten confirmation emails, and a frustrated customer who abandons half the payments midway. Out of the box the Odoo portal is built around the single-invoice view (/my/invoices/<id>) — the payment and account_payment flows key each transaction to one account.move, so there is no native "select several invoices and pay the combined balance at once" experience on the website. Teams work around it with manual bank transfers and spreadsheet chasing, which is exactly the reconciliation drag Odoo was supposed to eliminate.

This is what we build for you. Website Multi Invoice Payment is a portal extension that adds a bulk-selection layer over the customer's list of posted, unpaid account.move records. We inherit the portal account controller (PortalAccount / http.Controller) so the logged-in customer sees checkboxes plus a live "selected total" that we compute from amount_residual, scoped by move_type in ('out_invoice','out_refund') and payment_state in ('not_paid','partial') and filtered by the portal record rules so a partner only ever sees their own documents. A single "Pay selected" action assembles the chosen invoices into one payment intent and hands it to Odoo's standard payment engine, so the money moves through whichever acquirers you already have configured (payment.provider) with no bespoke gateway code. On success we generate the payment, post it, and let Odoo's reconciliation match it against each selected account.move — optionally splitting a single received amount across invoices oldest-first when a partial-allocation policy is requested.

Technically, the module ships as a proper addon: a __manifest__.py declaring dependencies on account, account_payment, payment, portal, and website; new/extended models with @api.depends compute fields for the running selection total and eligible-invoice domain; QWeb templates that extend the existing portal invoice list rather than replacing it (so your theme and any other portal customizations survive); and ir.model.access.csv plus record rules that keep the multi-select strictly inside the requesting partner's commercial entity. We wire the confirmation and receipt into the standard mail templates, expose the bulk-pay result over the JSON-RPC/XML-RPC layer for any headless or app integration you run, and cover both Community (manual/wire acquirers) and Enterprise (full electronic-payment acquirers, follow-up automation) so the feature behaves correctly on your edition. Everything is delivered against your pinned series — 17.0, 18.0, or 19.0 — with the controller and template inheritance adjusted for the API differences between them.

Because this is build-to-order, nothing is pre-listed for instant download: after a short scoping call we confirm the exact selection rules, allocation policy, and acquirer set, then build, test on a staging clone of your database, and install to production. Typical delivery is one working week from confirmed scope. Pricing starts from $999 (indicative, single-company base scope); multi-company deployments, additional payment acquirers or currencies, partial-allocation logic, and localization or e-invoice reconciliation requirements increase the quoted scope — you receive a fixed quote after the scoping call, never a surprise invoice.

What you get

  • Installable, version-pinned addon source code (17.0, 18.0, or 19.0) with clean `__manifest__.py`, models, controllers, QWeb templates, and security files
  • Installation and configuration on your environment, including acquirer wiring and portal template verification
  • Technical documentation covering module architecture, models, extended controller, security rules, and upgrade notes
  • End-user guide plus a live training session for your finance/portal team
  • Post-go-live support window for defect fixes and configuration questions
  • UAT on a staging clone of your database with a documented rollback plan before production install
  • Git repository handover with full commit history and tag matching your Odoo series
  • Release notes and a short admin runbook for maintaining acquirers and allocation settings

Who this is for

Finance / AR manager on Odoo

Runs accounts receivable in Odoo and is tired of chasing customers who pay invoices one at a time or not at all. Needs bulk portal payment to lift collection rates and cut reconciliation labor.

B2B seller with high invoice volume per customer

Issues many recurring or project invoices to the same partners. Wants customers to clear several outstanding balances in one checkout instead of abandoning a tedious per-invoice flow.

Odoo admin / functional consultant

Owns the internal Odoo instance and its portal theme. Needs a clean, inheritance-based addon that won't clash with existing customizations and ships with docs, security rules, and a rollback plan.

Operations lead in a services or subscription business

Manages a customer portal where clients self-serve. Wants a smoother 'pay everything I owe' experience to reduce support tickets and speed up cash collection.

How Website Multi Invoice Payment Compares

CriterionECOSIRECustom BuildCompetitorOdoo Native
Bulk-pay multiple invoices at onceBuilt as a first-class portal feature, tailored to your rulesPossible but you design and maintain it from scratchMay offer a generic multi-select with fixed behaviorNot available — portal pays one invoice at a time
Fit to your workflow (allocation, currencies, acquirers)Scoped to your exact policy and edition before buildFully custom but dependent on in-house Odoo expertiseFixed feature set; you adapt to its assumptionsNone beyond the standard single-invoice flow
Theme and customization safetyQWeb inheritance, extends not replaces; verified in UATDepends entirely on developer disciplineVaries; some replace templates and cause clashesN/A — no such feature to conflict
Odoo 17/18/19 and Community vs EnterpriseVersion-pinned build for your exact series and editionYou port and test across versions yourselfOften lags new releases or targets one seriesShips with core but without bulk payment
Security and multi-company scoping`ir.model.access.csv` + record rules per your entity modelYou must design and audit access controlsGeneric rules; may not match your company structureStandard portal rules, single-invoice only
Delivery and installationBuilt, tested on staging, installed with rollback planYour team plans, builds, and deploys itSelf-install; support depends on the vendorAlready present, but lacks the capability
Support and ownershipPost-go-live support window + full git repo handoverSelf-supported unless you retain a developerVendor-dependent support and license termsCovered by your Odoo support, feature absent
Total cost of ownershipFixed quote from $999 indicative; predictable scopeUnpredictable dev + maintenance cost over timeLow sticker price but rigid; adaptation costs add upFree but doesn't solve the problem

Frequently Asked Questions about Website Multi Invoice Payment

Is this an existing app I can download and install right now?

No. This is a build-to-order module. ECOSIRE scopes your exact requirements, then builds, tests on staging, and installs it. There is no instant download — you receive source code and a working install tailored to your Odoo series and acquirers.

How long does delivery take?

Typical delivery is one working week from confirmed scope. After the scoping call we lock the selection rules, allocation policy, and acquirer set, then build, run UAT on a staging clone of your database, and install to production. Complex multi-company or localization scopes can extend the timeline, which we state in the quote.

How does pricing and scoping work?

Pricing starts from $999 (indicative, single-company base scope). The exact figure depends on drivers like multi-company setup, extra payment acquirers or currencies, partial-allocation logic, and localization needs. You get a fixed, written quote after a short scoping call — never a surprise invoice.

What about support and updates after go-live?

Every build includes a post-go-live support window for defect fixes and configuration questions, plus a git repository handover so your team owns the code. We can also quote a longer maintenance arrangement or a version upgrade (for example moving the module from 18.0 to 19.0) as a separate scope.

Will it work with my existing payment providers?

Yes. The module reuses your configured `payment.provider` acquirers and hands the combined payment to Odoo's native `payment` engine, so it works with whatever gateways or manual/wire methods you already run. We don't build a bespoke gateway; we build the bulk-selection and reconciliation layer on top of the standard flow.

Does it work on Odoo Community or only Enterprise?

Both. On Community it works with manual and wire acquirers; on Enterprise it additionally covers the full electronic-payment acquirers and follow-up automation. We target your specific edition and series (17.0, 18.0, or 19.0) and adjust controller and template inheritance accordingly.

Will it break my existing portal theme or customizations?

No. We extend the existing portal invoice templates via QWeb inheritance rather than replacing them, and add security via `ir.model.access.csv` and record rules. Existing website theme and portal customizations remain intact, and we verify this during UAT on your staging clone.

Request a quote

Website Multi Invoice Payment

A build-to-order Odoo customer-portal extension that lets your customers select and pay several open invoices in a single bulk checkout. ECOSIRE scopes, builds, installs, and supports it for Odoo 17.0, 18.0, and 19.0.

  • Bulk-selection UI on the portal `/my/invoices` list via inherited QWeb templates, with per-row checkboxes and a 'select all eligible' toggle
  • Live selected-total field computed from `amount_residual` with `@api.depends`, updating client-side as the customer checks and unchecks invoices
  • Eligible-invoice domain filtered to `move_type in ('out_invoice','out_refund')` and `payment_state in ('not_paid','partial')` so only genuinely payable documents appear
  • Single 'Pay selected' action that assembles the chosen `account.move` set into one payment intent handed to the native `payment` engine

Request a Quotation

Tell us about your Website Multi Invoice Payment requirements and we'll send pricing, licensing options and a tailored proposal — usually within one business day.

No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.