# -*- coding: utf-8 -*- from odoo.addons.account.tests.common import AccountTestInvoicingCommon from odoo.exceptions import UserError from odoo.tests import tagged @tagged('post_install', '-at_install') class TestAccountPaymentRegister(AccountTestInvoicingCommon): @classmethod def setUpClass(cls, chart_template_ref=None): super().setUpClass(chart_template_ref=chart_template_ref) cls.currency_data_3 = cls.setup_multi_currency_data({ 'name': "Umbrella", 'symbol': '☂', 'currency_unit_label': "Umbrella", 'currency_subunit_label': "Broken Umbrella", }, rate2017=0.01) cls.payment_debit_account_id = cls.company_data['default_journal_bank'].payment_debit_account_id.copy() cls.payment_credit_account_id = cls.company_data['default_journal_bank'].payment_credit_account_id.copy() cls.custom_payment_method_in = cls.env['account.payment.method'].create({ 'name': 'custom_payment_method_in', 'code': 'CUSTOMIN', 'payment_type': 'inbound', }) cls.manual_payment_method_in = cls.env.ref('account.account_payment_method_manual_in') cls.custom_payment_method_out = cls.env['account.payment.method'].create({ 'name': 'custom_payment_method_out', 'code': 'CUSTOMOUT', 'payment_type': 'outbound', }) cls.manual_payment_method_out = cls.env.ref('account.account_payment_method_manual_out') cls.company_data['default_journal_bank'].write({ 'payment_debit_account_id': cls.payment_debit_account_id.id, 'payment_credit_account_id': cls.payment_credit_account_id.id, 'inbound_payment_method_ids': [(6, 0, ( cls.manual_payment_method_in.id, cls.custom_payment_method_in.id, ))], 'outbound_payment_method_ids': [(6, 0, ( cls.env.ref('account.account_payment_method_manual_out').id, cls.custom_payment_method_out.id, cls.manual_payment_method_out.id, ))], }) # Customer invoices sharing the same batch. cls.out_invoice_1 = cls.env['account.move'].create({ 'move_type': 'out_invoice', 'date': '2017-01-01', 'invoice_date': '2017-01-01', 'partner_id': cls.partner_a.id, 'currency_id': cls.currency_data['currency'].id, 'invoice_line_ids': [(0, 0, {'product_id': cls.product_a.id, 'price_unit': 1000.0})], }) cls.out_invoice_2 = cls.env['account.move'].create({ 'move_type': 'out_invoice', 'date': '2017-01-01', 'invoice_date': '2017-01-01', 'partner_id': cls.partner_a.id, 'currency_id': cls.currency_data['currency'].id, 'invoice_line_ids': [(0, 0, {'product_id': cls.product_a.id, 'price_unit': 2000.0})], }) cls.out_invoice_3 = cls.env['account.move'].create({ 'move_type': 'out_invoice', 'date': '2017-01-01', 'invoice_date': '2017-01-01', 'partner_id': cls.partner_a.id, 'invoice_line_ids': [(0, 0, {'product_id': cls.product_a.id, 'price_unit': 12.01})], }) cls.out_invoice_4 = cls.env['account.move'].create({ 'move_type': 'out_invoice', 'date': '2017-01-01', 'invoice_date': '2017-01-01', 'partner_id': cls.partner_a.id, 'invoice_line_ids': [(0, 0, {'product_id': cls.product_a.id, 'price_unit': 11.99})], }) (cls.out_invoice_1 + cls.out_invoice_2 + cls.out_invoice_3 + cls.out_invoice_4).action_post() # Vendor bills, in_invoice_1 + in_invoice_2 are sharing the same batch but not in_invoice_3. cls.in_invoice_1 = cls.env['account.move'].create({ 'move_type': 'in_invoice', 'date': '2017-01-01', 'invoice_date': '2017-01-01', 'partner_id': cls.partner_a.id, 'invoice_line_ids': [(0, 0, {'product_id': cls.product_a.id, 'price_unit': 1000.0})], }) cls.in_invoice_2 = cls.env['account.move'].create({ 'move_type': 'in_invoice', 'date': '2017-01-01', 'invoice_date': '2017-01-01', 'partner_id': cls.partner_a.id, 'invoice_line_ids': [(0, 0, {'product_id': cls.product_a.id, 'price_unit': 2000.0})], }) cls.in_invoice_3 = cls.env['account.move'].create({ 'move_type': 'in_invoice', 'date': '2017-01-01', 'invoice_date': '2017-01-01', 'partner_id': cls.partner_b.id, 'currency_id': cls.currency_data['currency'].id, 'invoice_line_ids': [(0, 0, {'product_id': cls.product_a.id, 'price_unit': 3000.0})], }) (cls.in_invoice_1 + cls.in_invoice_2 + cls.in_invoice_3).action_post() def test_register_payment_single_batch_grouped_keep_open_lower_amount(self): ''' Pay 800.0 with 'open' as payment difference handling on two customer invoices (1000 + 2000). ''' active_ids = (self.out_invoice_1 + self.out_invoice_2).ids payments = self.env['account.payment.register'].with_context(active_model='account.move', active_ids=active_ids).create({ 'amount': 800.0, 'group_payment': True, 'payment_difference_handling': 'open', 'currency_id': self.currency_data['currency'].id, 'payment_method_id': self.custom_payment_method_in.id, })._create_payments() self.assertRecordValues(payments, [{ 'ref': 'INV/2017/01/0001 INV/2017/01/0002', 'payment_method_id': self.custom_payment_method_in.id, }]) self.assertRecordValues(payments.line_ids.sorted('balance'), [ # Receivable line: { 'debit': 0.0, 'credit': 400.0, 'currency_id': self.currency_data['currency'].id, 'amount_currency': -800.0, 'reconciled': True, }, # Liquidity line: { 'debit': 400.0, 'credit': 0.0, 'currency_id': self.currency_data['currency'].id, 'amount_currency': 800.0, 'reconciled': False, }, ]) def test_register_payment_single_batch_grouped_keep_open_higher_amount(self): ''' Pay 3100.0 with 'open' as payment difference handling on two customer invoices (1000 + 2000). ''' active_ids = (self.out_invoice_1 + self.out_invoice_2).ids payments = self.env['account.payment.register'].with_context(active_model='account.move', active_ids=active_ids).create({ 'amount': 3100.0, 'group_payment': True, 'payment_difference_handling': 'open', 'currency_id': self.currency_data['currency'].id, 'payment_method_id': self.custom_payment_method_in.id, })._create_payments() self.assertRecordValues(payments, [{ 'ref': 'INV/2017/01/0001 INV/2017/01/0002', 'payment_method_id': self.custom_payment_method_in.id, }]) self.assertRecordValues(payments.line_ids.sorted('balance'), [ # Receivable line: { 'debit': 0.0, 'credit': 1550.0, 'currency_id': self.currency_data['currency'].id, 'amount_currency': -3100.0, 'reconciled': False, }, # Liquidity line: { 'debit': 1550.0, 'credit': 0.0, 'currency_id': self.currency_data['currency'].id, 'amount_currency': 3100.0, 'reconciled': False, }, ]) def test_register_payment_single_batch_grouped_writeoff_lower_amount_debit(self): ''' Pay 800.0 with 'reconcile' as payment difference handling on two customer invoices (1000 + 2000). ''' active_ids = (self.out_invoice_1 + self.out_invoice_2).ids payments = self.env['account.payment.register'].with_context(active_model='account.move', active_ids=active_ids).create({ 'amount': 800.0, 'group_payment': True, 'payment_difference_handling': 'reconcile', 'writeoff_account_id': self.company_data['default_account_revenue'].id, 'writeoff_label': 'writeoff', 'payment_method_id': self.custom_payment_method_in.id, })._create_payments() self.assertRecordValues(payments, [{ 'ref': 'INV/2017/01/0001 INV/2017/01/0002', 'payment_method_id': self.custom_payment_method_in.id, }]) self.assertRecordValues(payments.line_ids.sorted('balance'), [ # Receivable line: { 'debit': 0.0, 'credit': 1500.0, 'currency_id': self.currency_data['currency'].id, 'amount_currency': -3000.0, 'reconciled': True, }, # Liquidity line: { 'debit': 400.0, 'credit': 0.0, 'currency_id': self.currency_data['currency'].id, 'amount_currency': 800.0, 'reconciled': False, }, # Writeoff line: { 'debit': 1100.0, 'credit': 0.0, 'currency_id': self.currency_data['currency'].id, 'amount_currency': 2200.0, 'reconciled': False, }, ]) def test_register_payment_single_batch_grouped_writeoff_higher_amount_debit(self): ''' Pay 3100.0 with 'reconcile' as payment difference handling on two customer invoices (1000 + 2000). ''' active_ids = (self.out_invoice_1 + self.out_invoice_2).ids payments = self.env['account.payment.register'].with_context(active_model='account.move', active_ids=active_ids).create({ 'amount': 3100.0, 'group_payment': True, 'payment_difference_handling': 'reconcile', 'writeoff_account_id': self.company_data['default_account_revenue'].id, 'writeoff_label': 'writeoff', 'payment_method_id': self.custom_payment_method_in.id, })._create_payments() self.assertRecordValues(payments, [{ 'ref': 'INV/2017/01/0001 INV/2017/01/0002', 'payment_method_id': self.custom_payment_method_in.id, }]) self.assertRecordValues(payments.line_ids.sorted('balance'), [ # Receivable line: { 'debit': 0.0, 'credit': 1500.0, 'currency_id': self.currency_data['currency'].id, 'amount_currency': -3000.0, 'reconciled': True, }, # Writeoff line: { 'debit': 0.0, 'credit': 50.0, 'currency_id': self.currency_data['currency'].id, 'amount_currency': -100.0, 'reconciled': False, }, # Liquidity line: { 'debit': 1550.0, 'credit': 0.0, 'currency_id': self.currency_data['currency'].id, 'amount_currency': 3100.0, 'reconciled': False, }, ]) def test_register_payment_single_batch_grouped_writeoff_lower_amount_credit(self): ''' Pay 800.0 with 'reconcile' as payment difference handling on two vendor billes (1000 + 2000). ''' active_ids = (self.in_invoice_1 + self.in_invoice_2).ids payments = self.env['account.payment.register'].with_context(active_model='account.move', active_ids=active_ids).create({ 'amount': 800.0, 'group_payment': True, 'payment_difference_handling': 'reconcile', 'writeoff_account_id': self.company_data['default_account_revenue'].id, 'writeoff_label': 'writeoff', 'payment_method_id': self.custom_payment_method_in.id, })._create_payments() self.assertRecordValues(payments, [{ 'ref': 'BILL/2017/01/0001 BILL/2017/01/0002', 'payment_method_id': self.custom_payment_method_in.id, }]) self.assertRecordValues(payments.line_ids.sorted('balance'), [ # Writeoff line: { 'debit': 0.0, 'credit': 2200.0, 'currency_id': self.company_data['currency'].id, 'amount_currency': -2200.0, 'reconciled': False, }, # Liquidity line: { 'debit': 0.0, 'credit': 800.0, 'currency_id': self.company_data['currency'].id, 'amount_currency': -800.0, 'reconciled': False, }, # Payable line: { 'debit': 3000.0, 'credit': 0.0, 'currency_id': self.company_data['currency'].id, 'amount_currency': 3000.0, 'reconciled': True, }, ]) def test_register_payment_single_batch_grouped_writeoff_higher_amount_credit(self): ''' Pay 3100.0 with 'reconcile' as payment difference handling on two vendor billes (1000 + 2000). ''' active_ids = (self.in_invoice_1 + self.in_invoice_2).ids payments = self.env['account.payment.register'].with_context(active_model='account.move', active_ids=active_ids).create({ 'amount': 3100.0, 'group_payment': True, 'payment_difference_handling': 'reconcile', 'writeoff_account_id': self.company_data['default_account_revenue'].id, 'writeoff_label': 'writeoff', 'payment_method_id': self.custom_payment_method_in.id, })._create_payments() self.assertRecordValues(payments, [{ 'ref': 'BILL/2017/01/0001 BILL/2017/01/0002', 'payment_method_id': self.custom_payment_method_in.id, }]) self.assertRecordValues(payments.line_ids.sorted('balance'), [ # Liquidity line: { 'debit': 0.0, 'credit': 3100.0, 'currency_id': self.company_data['currency'].id, 'amount_currency': -3100.0, 'reconciled': False, }, # Writeoff line: { 'debit': 100.0, 'credit': 0.0, 'currency_id': self.company_data['currency'].id, 'amount_currency': 100.0, 'reconciled': False, }, # Payable line: { 'debit': 3000.0, 'credit': 0.0, 'currency_id': self.company_data['currency'].id, 'amount_currency': 3000.0, 'reconciled': True, }, ]) def test_register_payment_single_batch_not_grouped(self): ''' Choose to pay two customer invoices with separated payments (1000 + 2000). ''' active_ids = (self.out_invoice_1 + self.out_invoice_2).ids payments = self.env['account.payment.register'].with_context(active_model='account.move', active_ids=active_ids).create({ 'group_payment': False, })._create_payments() self.assertRecordValues(payments, [ { 'ref': 'INV/2017/01/0001', 'payment_method_id': self.manual_payment_method_in.id, }, { 'ref': 'INV/2017/01/0002', 'payment_method_id': self.manual_payment_method_in.id, }, ]) self.assertRecordValues(payments[0].line_ids.sorted('balance') + payments[1].line_ids.sorted('balance'), [ # == Payment 1: to pay out_invoice_1 == # Receivable line: { 'debit': 0.0, 'credit': 500.0, 'currency_id': self.currency_data['currency'].id, 'amount_currency': -1000.0, 'reconciled': True, }, # Liquidity line: { 'debit': 500.0, 'credit': 0.0, 'currency_id': self.currency_data['currency'].id, 'amount_currency': 1000.0, 'reconciled': False, }, # == Payment 2: to pay out_invoice_2 == # Receivable line: { 'debit': 0.0, 'credit': 1000.0, 'currency_id': self.currency_data['currency'].id, 'amount_currency': -2000.0, 'reconciled': True, }, # Liquidity line: { 'debit': 1000.0, 'credit': 0.0, 'currency_id': self.currency_data['currency'].id, 'amount_currency': 2000.0, 'reconciled': False, }, ]) def test_register_payment_multi_batches_grouped(self): ''' Choose to pay multiple batches, one with two customer invoices (1000 + 2000) and one with a vendor bill of 600, by grouping payments. ''' active_ids = (self.in_invoice_1 + self.in_invoice_2 + self.in_invoice_3).ids payments = self.env['account.payment.register'].with_context(active_model='account.move', active_ids=active_ids).create({ 'group_payment': True, })._create_payments() self.assertRecordValues(payments, [ { 'ref': 'BILL/2017/01/0001 BILL/2017/01/0002', 'payment_method_id': self.manual_payment_method_out.id, }, { 'ref': 'BILL/2017/01/0003', 'payment_method_id': self.manual_payment_method_out.id, }, ]) self.assertRecordValues(payments[0].line_ids.sorted('balance') + payments[1].line_ids.sorted('balance'), [ # == Payment 1: to pay in_invoice_1 & in_invoice_2 == # Liquidity line: { 'debit': 0.0, 'credit': 3000.0, 'currency_id': self.company_data['currency'].id, 'amount_currency': -3000.0, 'reconciled': False, }, # Payable line: { 'debit': 3000.0, 'credit': 0.0, 'currency_id': self.company_data['currency'].id, 'amount_currency': 3000.0, 'reconciled': True, }, # == Payment 2: to pay in_invoice_3 == # Liquidity line: { 'debit': 0.0, 'credit': 1500.0, 'currency_id': self.currency_data['currency'].id, 'amount_currency': -3000.0, 'reconciled': False, }, # Payable line: { 'debit': 1500.0, 'credit': 0.0, 'currency_id': self.currency_data['currency'].id, 'amount_currency': 3000.0, 'reconciled': True, }, ]) def test_register_payment_multi_batches_not_grouped(self): ''' Choose to pay multiple batches, one with two customer invoices (1000 + 2000) and one with a vendor bill of 600, by splitting payments. ''' active_ids = (self.in_invoice_1 + self.in_invoice_2 + self.in_invoice_3).ids payments = self.env['account.payment.register'].with_context(active_model='account.move', active_ids=active_ids).create({ 'group_payment': False, })._create_payments() self.assertRecordValues(payments, [ { 'ref': 'BILL/2017/01/0001', 'payment_method_id': self.manual_payment_method_out.id, }, { 'ref': 'BILL/2017/01/0002', 'payment_method_id': self.manual_payment_method_out.id, }, { 'ref': 'BILL/2017/01/0003', 'payment_method_id': self.manual_payment_method_out.id, }, ]) self.assertRecordValues(payments[0].line_ids.sorted('balance') + payments[1].line_ids.sorted('balance') + payments[2].line_ids.sorted('balance'), [ # == Payment 1: to pay in_invoice_1 == # Liquidity line: { 'debit': 0.0, 'credit': 1000.0, 'currency_id': self.company_data['currency'].id, 'amount_currency': -1000.0, 'reconciled': False, }, # Payable line: { 'debit': 1000.0, 'credit': 0.0, 'currency_id': self.company_data['currency'].id, 'amount_currency': 1000.0, 'reconciled': True, }, # == Payment 2: to pay in_invoice_2 == # Liquidity line: { 'debit': 0.0, 'credit': 2000.0, 'currency_id': self.company_data['currency'].id, 'amount_currency': -2000.0, 'reconciled': False, }, # Payable line: { 'debit': 2000.0, 'credit': 0.0, 'currency_id': self.company_data['currency'].id, 'amount_currency': 2000.0, 'reconciled': True, }, # == Payment 3: to pay in_invoice_3 == # Liquidity line: { 'debit': 0.0, 'credit': 1500.0, 'currency_id': self.currency_data['currency'].id, 'amount_currency': -3000.0, 'reconciled': False, }, # Payable line: { 'debit': 1500.0, 'credit': 0.0, 'currency_id': self.currency_data['currency'].id, 'amount_currency': 3000.0, 'reconciled': True, }, ]) def test_register_payment_constraints(self): # Test to register a payment for a draft journal entry. self.out_invoice_1.button_draft() with self.assertRaises(UserError), self.cr.savepoint(): self.env['account.payment.register']\ .with_context(active_model='account.move', active_ids=self.out_invoice_1.ids)\ .create({}) # Test to register a payment for an already fully reconciled journal entry. self.env['account.payment.register']\ .with_context(active_model='account.move', active_ids=self.out_invoice_2.ids)\ .create({})\ ._create_payments() with self.assertRaises(UserError), self.cr.savepoint(): self.env['account.payment.register']\ .with_context(active_model='account.move', active_ids=self.out_invoice_2.ids)\ .create({}) def test_register_payment_multi_currency_rounding_issue_positive_delta(self): ''' When registering a payment using a different currency than the invoice one, the invoice must be fully paid at the end whatever the currency rate. ''' payment = self.env['account.payment.register']\ .with_context(active_model='account.move', active_ids=self.out_invoice_3.ids)\ .create({ 'currency_id': self.currency_data_3['currency'].id, 'amount': 0.12, })\ ._create_payments() self.assertRecordValues(payment.line_ids.sorted('balance'), [ # Receivable line: { 'debit': 0.0, 'credit': 12.01, 'currency_id': self.currency_data_3['currency'].id, 'amount_currency': -0.12, 'reconciled': True, }, # Liquidity line: { 'debit': 12.01, 'credit': 0.0, 'currency_id': self.currency_data_3['currency'].id, 'amount_currency': 0.12, 'reconciled': False, }, ]) def test_register_payment_multi_currency_rounding_issue_negative_delta(self): ''' When registering a payment using a different currency than the invoice one, the invoice must be fully paid at the end whatever the currency rate. ''' payment = self.env['account.payment.register']\ .with_context(active_model='account.move', active_ids=self.out_invoice_4.ids)\ .create({ 'currency_id': self.currency_data_3['currency'].id, 'amount': 0.12, })\ ._create_payments() self.assertRecordValues(payment.line_ids.sorted('balance'), [ # Receivable line: { 'debit': 0.0, 'credit': 11.99, 'currency_id': self.currency_data_3['currency'].id, 'amount_currency': -0.12, 'reconciled': True, }, # Liquidity line: { 'debit': 11.99, 'credit': 0.0, 'currency_id': self.currency_data_3['currency'].id, 'amount_currency': 0.12, 'reconciled': False, }, ]) def test_register_payment_multi_currency_rounding_issue_writeoff_lower_amount_keep_open(self): payment = self.env['account.payment.register']\ .with_context(active_model='account.move', active_ids=self.out_invoice_3.ids)\ .create({ 'currency_id': self.currency_data_3['currency'].id, 'amount': 0.08, 'payment_difference_handling': 'open', })\ ._create_payments() self.assertRecordValues(payment.line_ids.sorted('balance'), [ # Receivable line: { 'debit': 0.0, 'credit': 8.0, 'currency_id': self.currency_data_3['currency'].id, 'amount_currency': -0.08, 'reconciled': True, }, # Liquidity line: { 'debit': 8.0, 'credit': 0.0, 'currency_id': self.currency_data_3['currency'].id, 'amount_currency': 0.08, 'reconciled': False, }, ]) def test_register_payment_multi_currency_rounding_issue_writeoff_lower_amount_reconcile_positive_delta(self): payment = self.env['account.payment.register']\ .with_context(active_model='account.move', active_ids=self.out_invoice_3.ids)\ .create({ 'currency_id': self.currency_data_3['currency'].id, 'amount': 0.08, 'payment_difference_handling': 'reconcile', 'writeoff_account_id': self.company_data['default_account_revenue'].id, 'writeoff_label': 'writeoff', })\ ._create_payments() self.assertRecordValues(payment.line_ids.sorted('balance'), [ # Receivable line: { 'debit': 0.0, 'credit': 12.01, 'currency_id': self.currency_data_3['currency'].id, 'amount_currency': -0.12, 'reconciled': True, }, # Write-off line: { 'debit': 4.0, 'credit': 0.0, 'currency_id': self.currency_data_3['currency'].id, 'amount_currency': 0.04, 'reconciled': False, }, # Liquidity line: { 'debit': 8.01, 'credit': 0.0, 'currency_id': self.currency_data_3['currency'].id, 'amount_currency': 0.08, 'reconciled': False, }, ]) def test_register_payment_multi_currency_rounding_issue_writeoff_lower_amount_reconcile_negative_delta(self): payment = self.env['account.payment.register']\ .with_context(active_model='account.move', active_ids=self.out_invoice_4.ids)\ .create({ 'currency_id': self.currency_data_3['currency'].id, 'amount': 0.08, 'payment_difference_handling': 'reconcile', 'writeoff_account_id': self.company_data['default_account_revenue'].id, 'writeoff_label': 'writeoff', })\ ._create_payments() self.assertRecordValues(payment.line_ids.sorted('balance'), [ # Receivable line: { 'debit': 0.0, 'credit': 11.99, 'currency_id': self.currency_data_3['currency'].id, 'amount_currency': -0.12, 'reconciled': True, }, # Write-off line: { 'debit': 4.0, 'credit': 0.0, 'currency_id': self.currency_data_3['currency'].id, 'amount_currency': 0.04, 'reconciled': False, }, # Liquidity line: { 'debit': 7.99, 'credit': 0.0, 'currency_id': self.currency_data_3['currency'].id, 'amount_currency': 0.08, 'reconciled': False, }, ]) def test_register_payment_multi_currency_rounding_issue_writeoff_higher_amount_reconcile_positive_delta(self): payment = self.env['account.payment.register']\ .with_context(active_model='account.move', active_ids=self.out_invoice_3.ids)\ .create({ 'currency_id': self.currency_data_3['currency'].id, 'amount': 0.16, 'payment_difference_handling': 'reconcile', 'writeoff_account_id': self.company_data['default_account_revenue'].id, 'writeoff_label': 'writeoff', })\ ._create_payments() self.assertRecordValues(payment.line_ids.sorted('balance'), [ # Receivable line: { 'debit': 0.0, 'credit': 12.01, 'currency_id': self.currency_data_3['currency'].id, 'amount_currency': -0.12, 'reconciled': True, }, # Write-off line: { 'debit': 0.0, 'credit': 4.0, 'currency_id': self.currency_data_3['currency'].id, 'amount_currency': -0.04, 'reconciled': False, }, # Liquidity line: { 'debit': 16.01, 'credit': 0.0, 'currency_id': self.currency_data_3['currency'].id, 'amount_currency': 0.16, 'reconciled': False, }, ]) def test_register_payment_multi_currency_rounding_issue_writeoff_higher_amount_reconcile_negative_delta(self): payment = self.env['account.payment.register']\ .with_context(active_model='account.move', active_ids=self.out_invoice_4.ids)\ .create({ 'currency_id': self.currency_data_3['currency'].id, 'amount': 0.16, 'payment_difference_handling': 'reconcile', 'writeoff_account_id': self.company_data['default_account_revenue'].id, 'writeoff_label': 'writeoff', })\ ._create_payments() self.assertRecordValues(payment.line_ids.sorted('balance'), [ # Receivable line: { 'debit': 0.0, 'credit': 11.99, 'currency_id': self.currency_data_3['currency'].id, 'amount_currency': -0.12, 'reconciled': True, }, # Write-off line: { 'debit': 0.0, 'credit': 4.0, 'currency_id': self.currency_data_3['currency'].id, 'amount_currency': -0.04, 'reconciled': False, }, # Liquidity line: { 'debit': 15.99, 'credit': 0.0, 'currency_id': self.currency_data_3['currency'].id, 'amount_currency': 0.16, 'reconciled': False, }, ])