- Create an invoice with a Product X and Post it; - Generate a Credit Note from the invoice; - Reporting > Invoices; - use Pivot Table View; - Enable 'Product Quantity' in Measures; - Filter by 'Invoice #'; - Expand Pivot Table by 'Product'. Before this commit, the products in the credit note had a positive sign, contrary to the untax total that has a negative sign. The issue with this, is when the quantities of the credit notes is added with the quantities of the invoices the total is not coherent with the actual sell products. Now, the product quantity that comes from a credit note has a negative sign. This was already the behaviour in version 11 and 12. opw-2283833 closes odoo/odoo#53931 X-original-commit: 917b2076b77ba3f682b342989c41b7f7d0670ca2 Signed-off-by: Jorge Pinna Puissant (jpp) <jpp@odoo.com>
119 lines
4.5 KiB
Python
119 lines
4.5 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': 1000,
|
|
}),
|
|
(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],
|
|
[1000, 1000, 3],
|
|
[6, 6, 1],
|
|
[-20, -20, -1],
|
|
[-20, -20, -1],
|
|
[-600, -600, -1],
|
|
])
|