Invoice Partial Payment Reconciliation
by Odoo DevHouse https://apps.odoo.com/apps/modules/browse?author=Odoo%20DevHouse$ 99.01
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Discuss (mail) |
| Lines of code | 370 |
| Technical Name |
partial_payment_reconciliation_dh |
| License | OPL-1 |
| Website | https://apps.odoo.com/apps/modules/browse?author=Odoo%20DevHouse |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Invoicing (account)
• Discuss (mail) |
| Lines of code | 370 |
| Technical Name |
partial_payment_reconciliation_dh |
| License | OPL-1 |
| Website | https://apps.odoo.com/apps/modules/browse?author=Odoo%20DevHouse |
Invoice Partial Payment Reconciliation
Register exact partial payments for customer invoices and vendor bills - single or multiple at once - with optional write-off for the remaining balance. Full control over every dollar.
In standard Odoo Accounting, the Pay button opens the payment wizard which defaults to the full outstanding amount. While the amount field is editable, the workflow is designed around full settlement and lacks visibility into the per-invoice breakdown when paying several invoices at once.
This creates friction for real-world payment scenarios:
- Customer pays a fixed instalment - e.g. 40% deposit on a large project invoice
- Partial settlement with write-off - accept $800 in full and waive the remaining $200 as a discount
- Multiple invoices, different partial amounts - pay $5,000 against Invoice A and $3,000 against Invoice B in one session
- Vendor pre-payment - pay part of a supplier bill now and schedule the rest for later
- Bad-debt write-off on partial - collect what's recoverable and write off the unrecoverable portion to a dedicated account
This module adds a "Partial Payment" button to every posted customer invoice and vendor bill. Clicking it opens a dedicated wizard that lists all selected invoices/bills with their full amount, amount due, and an editable Amount To Pay field per line. Enter any partial amount, choose whether to keep the difference open or write it off to an account, then click Validate. The module creates the payment entries, posts them, and reconciles each payment with its invoice automatically. The invoice status updates to In Payment (or Partial after bank reconciliation) and the payment is linked to the invoice for full traceability.
- Per-Invoice Amount To Pay: Set a precise partial amount for each invoice - not just a single lump sum
- Customer Invoices & Vendor Bills: Works identically for both AR and AP documents
- Single & Multi-Invoice Wizard: Process one invoice or select many from the list view - all handled in one wizard session
- Keep Open Option: Leave the remainder as an outstanding credit/debit balance for future settlement
- Write-Off Option: Post the payment difference directly to any GL account and mark the invoice as fully paid
- Payment Difference Visibility: Wizard shows the difference per invoice in real time as you type
- Standard Journal & Date: Choose the payment journal and date - fully compatible with Odoo's bank reconciliation
- Automatic Reconciliation: Each payment is created, posted, and reconciled with the invoice's receivable/payable lines automatically
- Payment Status Update: After payment the invoice shows In Payment (pending bank reconciliation) or Partial (Community) status, with the payment linked via the Payments smart button
- Community & Enterprise: Pure server-side implementation - no JavaScript required, works on both editions
Step 1 - Customer Invoice List
Navigate to Accounting -> Customers -> Invoices. You can open a single invoice or select multiple invoices to pay partially in one session.
Step 2 - Open a Posted Invoice
Open any posted invoice with a Not Paid or Partial payment status. The full invoice details are shown - customer, lines, totals and amount due.
Step 3 - Click "Partial Payment"
The new Partial Payment button appears in the action bar alongside the standard Pay button. It is visible only for posted invoices/bills that are not yet fully paid.
Step 4 - Wizard Opens with Full Amount Pre-filled
The Register Partial Payment wizard opens. It shows the invoice with its Invoice Amount, Amount Due, and Amount To Pay (defaulting to the full outstanding amount). Payment details - journal, date, and memo - are on the left.
Step 5 - Enter the Partial Amount
Click on the Amount To Pay cell and type the exact partial amount you want to collect. The Payment Difference column updates instantly. The total payment amount in the Summary panel also reflects the new value.
Step 6a - Payment Difference: Keep Open
When a difference exists, the Payment Difference section appears below the invoice lines. Selecting Keep Open records a partial payment - the invoice remains open with the remaining balance as an outstanding credit/debit that can be settled later.
Step 6b - Payment Difference: Mark as Fully Paid (Write-Off)
Selecting Mark as Fully Paid reveals the write-off fields. Choose the GL account to post the difference (e.g. bad debt expense, early payment discount) and a label for the journal entry. The remaining balance is written off and the invoice is marked as fully paid.
Step 7 - Validate the Payment
Click Validate to confirm. The module creates the payment journal entry, posts it, and reconciles it with the invoice's receivable line - all in one step.
Step 8 - Payment Record Created
After validation, Odoo navigates to the newly created payment form. You can see the payment amount, journal, date, and the partner - ready for bank reconciliation in the usual way.
Step 9 - Invoice Shows Payment Status
Back on the invoice, the status updates to reflect the registered payment. In Odoo 18 with the Accounting module, the invoice shows an In Payment ribbon until the payment is bank-reconciled. The Payments smart button at the top links to the payment record. The invoice remains open and the remaining balance can be settled at any time.
Step 10 - Invoice Remains Open for Further Payments
The invoice stays open - the full Amount Due is displayed and the invoice is still accessible for additional payments. Click the Payments smart button at the top to review all payments registered against this invoice. You can apply further partial payments (or a full payment) at any time until the invoice is fully settled.
Vendor Bills List
The same workflow applies to Accounting -> Vendors -> Bills. Select one or more unpaid vendor bills.
Partial Payment Button on Vendor Bill
Open any posted, unpaid vendor bill. The Partial Payment button appears in the action bar - identical placement to the customer invoice. Click it to open the wizard.
Vendor Bill Partial Payment Wizard
The wizard opens for the vendor bill. The payment direction is automatically set to outbound (sending money). Enter the amount to pay this vendor now and validate - the remaining outstanding debit balance is kept for the next payment run.
Select Multiple Invoices in the List
In the invoice list view, tick the checkboxes of two or more invoices for the same partner. The action bar updates to show the selected count.
Open via Action Menu
Click the Action menu (â gear icon) in the list control panel and select Register Partial Payment. This opens the same wizard for all selected invoices at once.
Multi-Invoice Wizard
The wizard populates a row for each selected invoice. Each row shows the Invoice Amount, Amount Due, and its own editable Amount To Pay field. You can set a different partial amount per invoice. The Total Payment Amount in the summary updates as you edit.
Different Partial Amounts per Invoice
Enter individual partial amounts per invoice line. Each gets its own Payment Difference calculated live. Validate once to create all payments simultaneously - one payment record per invoice, each automatically reconciled.
Installation & Configuration
- Install the Module: Copy the
partial_payment_reconciliation_dhfolder to your Odoo addons path - Update App List: Go to Apps -> Update App List
- Install: Search for Invoice Partial Payment Reconciliation and click Install
- No Additional Configuration: The module works immediately after installation - no settings to configure
- Test: Open any posted, unpaid customer invoice or vendor bill and click the new Partial Payment button
Requirements: Odoo 18.0 · account module · Accounting user group
(account.group_account_invoice)
Step 1 - Navigate to the Invoice or Bill
Go to Accounting -> Customers -> Invoices (or Vendors -> Bills for vendor bills). Open a posted invoice whose payment status is Not Paid or Partial.
Step 2 - Click "Partial Payment"
Click the Partial Payment button in the action bar. The wizard opens pre-loaded with the invoice and its full outstanding amount in Amount To Pay.
Step 3 - Set Payment Details
- Journal: Select the bank or cash journal for the payment
- Payment Date: Set the effective date of the payment
- Memo: Optional reference for the payment journal entry
- Currency: Shown in multi-currency setups; defaults to the invoice currency
Step 4 - Enter the Partial Amount
Click the Amount To Pay cell in the invoice row and type the exact amount to collect. The Payment Difference column updates in real time showing what remains. The amount must be greater than zero and cannot exceed the Amount Due.
Step 5 - Choose How to Handle the Difference
When a payment difference exists, the Payment Difference section appears:
- Keep Open - Records a partial payment. The invoice stays open with the remaining balance as an outstanding credit/debit. Future payments (full or partial) can be applied later.
- Mark as Fully Paid - Writes off the difference. Choose a GL account (e.g. bad debt, discount given) and a journal item label. The invoice is fully reconciled and closed.
Step 6 - Validate
Click Validate. For each invoice line, the module:
- Creates an
account.paymentrecord for the partial amount - Posts the payment (generates the journal entry)
- Reconciles the payment's receivable/payable line with the invoice's matching line
- If write-off is selected, adds a write-off entry to fully close the invoice
After validation, Odoo opens the created payment record.
Tips for Multi-Invoice Payments
- Select invoices for the same partner in the list view before opening the wizard
- Use the Action -> Register Partial Payment menu item from the list view
- Each invoice row in the wizard has its own editable Amount To Pay - set them independently
- Validate once to create all payments in a single operation
Validations Applied
- Only posted invoices or bills are accepted (draft/cancelled are rejected)
- Documents must be Not Paid or Partial - already paid invoices are excluded
- Cannot mix customer and vendor documents in one session
- All selected documents must belong to the same partner
- Amount To Pay must be > 0 and ⤠Amount Due per invoice
Deposit & Instalment Plans
Collect a 30% deposit on invoice creation, then 70% on delivery. Each payment is recorded and reconciled as a separate partial payment.
Early Payment Discounts
Accept 98% of the invoice as full settlement for early payment. Pay the discounted amount and write off the 2% to a discount expense account.
Bad Debt Write-Off
Recover $600 of a $1,000 invoice and write the remaining $400 off to a bad debt expense account. Invoice is closed in one step.
Bulk Vendor Pre-Payment
Select multiple vendor bills, pay each a different partial amount in one wizard session to match the cash available for the payment run.
Customer Dispute Settlement
Customer disputes $200 on a $1,500 invoice. Accept $1,300 as full settlement and write off the $200 to a dispute resolution account.
Progressive Project Billing
Issue a single project invoice for the full scope and receive payments milestone by milestone, each recorded as a partial settlement.
Accurate Cash Forecasting
Each partial payment is immediately reflected in the AR/AP aging report - your cash flow forecast stays accurate even for instalment-based collections.
Clean Audit Trail
Every partial payment creates a proper journal entry and reconciliation record. Auditors can trace each payment back to the source invoice with full detail.
Flexible Write-Off Management
Post payment differences to any GL account - bad debt expense, discount given, rounding differences - without creating manual journal entries.
Efficiency - Batch Processing
Process partial payments for multiple invoices in one session instead of opening each invoice individually. Ideal for weekly payment run workflows.
Need Assistance or Have a Feature Request?
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