| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Discuss (mail) |
| Lines of code | 125 |
| Technical Name |
portal_invoice_partial_payment |
| License | OPL-1 |
| Website | https://sjr.ie |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Discuss (mail) |
| Lines of code | 125 |
| Technical Name |
portal_invoice_partial_payment |
| License | OPL-1 |
| Website | https://sjr.ie |
Portal Invoice Partial Payment
Portal Invoice Partial Payment.
About
This module extends the standard customer portal invoice payment flow with a flexible partial-payment option.
Features
Manual amount on portal invoice payment
Adds a Pay a different amount option to the standard
customer portal invoice payment modal
(account_payment.portal_invoice_payment).
-
Always visible whenever the payment modal renders a payment form
— both with the Installment /
Full Amount tabs (when an installment plan applies)
and with the single full-amount summary (no installment, no payment
terms, or any other case where the standard modal falls back to the
t-elsebranch). Users do not need a payment term to be selected to choose a custom amount. -
Skipped only on the
company_mismatchbranch, where payment cannot proceed regardless. -
When enabled, the customer types any positive amount up to the current
outstanding balance (
amount_residual). - The chosen value replaces the amount that would otherwise be inferred from the active tab before the payment transaction is created.
-
Client-side validation enforces
0 < amount <= amount_due; any invalid input blocks submission with an inline error message. - Existing full / installment / down-payment flows are unchanged when the toggle is off.
Implementation notes
-
Pure XML + JS feature: no controllers, models, or other Python files
are added (only the standard
__manifest__.pyand__init__.pyremain). -
Reuses Odoo's standard
/invoice/transaction/<id>route. Server-side amount validation continues to be performed by the core payment flow.
Configuration
No configuration is required. Once the module is installed (or upgraded), the new option appears automatically on the portal invoice payment modal for all posted customer invoices with an open residual.
Testing & UAT
Run against a posted customer invoice with an open residual, using the
portal Pay Now modal in an incognito window (Stripe
test card 4242 4242 4242 4242, 3DS 000000 if
prompted).
Functional
- F1 — Toggle visibility (with installments). On an invoice that triggers the Installment / Full tabs, the Pay a different amount checkbox appears alongside the tabs.
- F1b — Toggle visibility (no installments). On an invoice with no payment term and no installment plan, the checkbox appears next to the single full-amount summary.
- F2 — Default behaviour. With the toggle off, payment uses the full residual (or active tab amount) as before.
-
F3 — Manual partial. Toggle on, enter an
amount below the residual; transaction succeeds, invoice
payment_statebecomespartial, andamount_residualdecreases by the manual amount. -
F4 — Manual full. Toggle on, enter the exact
residual; transaction succeeds and
payment_statebecomespaid.
Guardrails
-
G1 — Zero blocked. Empty value or
0is rejected client-side with an inline error. - G2 — Negative blocked. Negative values are rejected client-side with an inline error.
- G3 — Over-residual blocked. Values greater than the residual are rejected client-side with an inline error.
- G4 — Recovery. After any blocked attempt, correcting the value to a valid amount allows submission to succeed.
Regression
- R1 — Installment flow. Installment / Full tabs continue to switch the submitted amount as before when the manual toggle is off.
- R2 — Single-amount flow. Non-installment invoices still submit the full residual when the manual toggle is off.
- R3 — Down-payment / sales-led flows. Deposit and remainder invoices continue to behave identically; no change to existing down-payment paths.
See README.rst in the module for the full checklist.
Module
| Name | Portal Invoice Partial Payment |
|---|---|
| Version | 19.0.0.1.1 |
| Category | Accounting |
| Author | SJR Nebula |
| Maintainer | SJR Nebula |
| Website | https://sjr.ie |
| Support | info@sjr.ie |
| License | OPL-1 |
| Depends |
account, account_payment,
portal
|
| Summary | Portal Invoice Partial Payment. |
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