Odoo is the world's easiest all-in-one management software. It includes hundreds of business apps:
CRM | e-Commerce | Accounting | Inventory | PoS | Project management | MRP | etc.
I have the following scenario :
Let say a customer has an invoice of 50$. We register a payment of 100$ (maybe for a future invoice next month) and want to do a partial reconcile with the invoice so that the remaining of 50$ gets in the partner receivable balance (we could do another partial reconcile next month).
When the partial rencocile is done, the balance of the invoice is 0$ but it is not marked as paid because the test_paid() method checks that all move_lines have a reconcile_id set. But in this scenario, the move_lines have a partial_reconcile_id set. The invoice would be marked as paid only when we fully reconcile the credit amount of 100$ (the next month), but I would want that it is immediately marked as paid.
Do you know the reason why the invoice is still in the open state ? I thought of overriding the test_paid method to add a check that if balance is zero and all move_lines have a partial_reconcile_id, then it should go to paid state. But then I wondered why it is not working like that by default ? Would you suggest another way of doing this ?
I beleive you started wrong way initially. When u have an invoice=50$ and a customer pays 100$, this invoice is and should be fully recondiled as its full amount is paid, another 50$ is an advance payment for future invoices, which means that in Customer Payment Document, when u register this 100$ payment, 50$ invoice will be reconciled and u get difference amount=50$. You should choose the option: "Reconcile the payment balance" and choose the account from accounts list: "Advanced Payments Liability"(Or else u call it). What happens is that u will have the liability of 50$ created to the customer in terms of received advance payment. So the journal Entries will be:
Debit: Bank - 100$. Credit: 1. Account Receivable - 50$ 2. Advance Payment Liability - 50$.
Next time u sell smth to this customer, suppose 60$ so that he has to pay only 10$ more, when u open customer payment document, u will see this 50$ payable in it. U click on reconcile bulean of this 50$ and register the 10$ payment, what happens is: 50$ avance is reconciled and 10$ payment is registered. Journal entries will be as wollows:
Debit: 1. Bank-10$ 2. Advance Payment Liability - 50$. Credit: Account Receivable - 60$.
I think this info might help you.