Current behavior: Invoices report had a wrong average price when invoice had credit note Steps to reproduce: Create a db with accounting Create a customer C and a Product P Create an Invoice for C for 10 pieces of P Create a Credit note for C for 1 P Go to Reporting > Invoice Analysis Open the pivot view, in the Measures, display the Average Price, the Product quantity and the Untaxed Total The Total multiplied by the quantity is not equals to the average. opw-2557420 closes odoo/odoo#81238 X-original-commit: ef26467e288a12571c37d4c133b44f08d99cc702 Signed-off-by: William André (wan) <wan@odoo.com> Signed-off-by: Engels Robin (roen) <roen@odoo.com>
120 lines
4.4 KiB
Python
120 lines
4.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
|
|
from odoo.tests import tagged
|
|
from odoo import fields
|
|
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class TestAccountInvoiceReport(AccountTestInvoicingCommon):
|
|
|
|
@classmethod
|
|
def setUpClass(cls, chart_template_ref=None):
|
|
super().setUpClass(chart_template_ref=chart_template_ref)
|
|
|
|
cls.invoices = cls.env['account.move'].create([
|
|
{
|
|
'move_type': 'out_invoice',
|
|
'partner_id': cls.partner_a.id,
|
|
'invoice_date': fields.Date.from_string('2016-01-01'),
|
|
'currency_id': cls.currency_data['currency'].id,
|
|
'invoice_line_ids': [
|
|
(0, None, {
|
|
'product_id': cls.product_a.id,
|
|
'quantity': 3,
|
|
'price_unit': 750,
|
|
}),
|
|
(0, None, {
|
|
'product_id': cls.product_a.id,
|
|
'quantity': 1,
|
|
'price_unit': 3000,
|
|
}),
|
|
]
|
|
},
|
|
{
|
|
'move_type': 'out_receipt',
|
|
'invoice_date': fields.Date.from_string('2016-01-01'),
|
|
'currency_id': cls.currency_data['currency'].id,
|
|
'invoice_line_ids': [
|
|
(0, None, {
|
|
'product_id': cls.product_a.id,
|
|
'quantity': 1,
|
|
'price_unit': 6000,
|
|
}),
|
|
]
|
|
},
|
|
{
|
|
'move_type': 'out_refund',
|
|
'partner_id': cls.partner_a.id,
|
|
'invoice_date': fields.Date.from_string('2017-01-01'),
|
|
'currency_id': cls.currency_data['currency'].id,
|
|
'invoice_line_ids': [
|
|
(0, None, {
|
|
'product_id': cls.product_a.id,
|
|
'quantity': 1,
|
|
'price_unit': 1200,
|
|
}),
|
|
]
|
|
},
|
|
{
|
|
'move_type': 'in_invoice',
|
|
'partner_id': cls.partner_a.id,
|
|
'invoice_date': fields.Date.from_string('2016-01-01'),
|
|
'currency_id': cls.currency_data['currency'].id,
|
|
'invoice_line_ids': [
|
|
(0, None, {
|
|
'product_id': cls.product_a.id,
|
|
'quantity': 1,
|
|
'price_unit': 60,
|
|
}),
|
|
]
|
|
},
|
|
{
|
|
'move_type': 'in_receipt',
|
|
'partner_id': cls.partner_a.id,
|
|
'invoice_date': fields.Date.from_string('2016-01-01'),
|
|
'currency_id': cls.currency_data['currency'].id,
|
|
'invoice_line_ids': [
|
|
(0, None, {
|
|
'product_id': cls.product_a.id,
|
|
'quantity': 1,
|
|
'price_unit': 60,
|
|
}),
|
|
]
|
|
},
|
|
{
|
|
'move_type': 'in_refund',
|
|
'partner_id': cls.partner_a.id,
|
|
'invoice_date': fields.Date.from_string('2017-01-01'),
|
|
'currency_id': cls.currency_data['currency'].id,
|
|
'invoice_line_ids': [
|
|
(0, None, {
|
|
'product_id': cls.product_a.id,
|
|
'quantity': 1,
|
|
'price_unit': 12,
|
|
}),
|
|
]
|
|
},
|
|
])
|
|
|
|
def assertInvoiceReportValues(self, expected_values_list):
|
|
reports = self.env['account.invoice.report'].search([('company_id', '=', self.company_data['company'].id)], order='price_subtotal DESC, quantity ASC')
|
|
expected_values_dict = [{
|
|
'price_average': vals[0],
|
|
'price_subtotal': vals[1],
|
|
'quantity': vals[2],
|
|
} for vals in expected_values_list]
|
|
|
|
self.assertRecordValues(reports, expected_values_dict)
|
|
|
|
def test_invoice_report_multiple_types(self):
|
|
self.assertInvoiceReportValues([
|
|
#price_average price_subtotal quantity
|
|
[2000, 2000, 1],
|
|
[1000, 1000, 1],
|
|
[250, 750, 3],
|
|
[6, 6, 1],
|
|
[20, -20, -1],
|
|
[20, -20, -1],
|
|
[600, -600, -1],
|
|
])
|