diff --git a/addons/purchase/report/purchase_report.py b/addons/purchase/report/purchase_report.py index ca01fb92f5a..e6ef3db5522 100644 --- a/addons/purchase/report/purchase_report.py +++ b/addons/purchase/report/purchase_report.py @@ -34,8 +34,9 @@ class PurchaseReport(models.Model): company_id = fields.Many2one('res.company', 'Company', readonly=True) currency_id = fields.Many2one('res.currency', 'Currency', readonly=True) user_id = fields.Many2one('res.users', 'Purchase Representative', readonly=True) - delay = fields.Float('Days to Confirm', digits=(16, 2), readonly=True, help="Amount of time between purchase approval and order by date.") - delay_pass = fields.Float('Days to Receive', digits=(16, 2), readonly=True, help="Amount of time between date planned and order by date for each purchase order line.") + delay = fields.Float('Days to Confirm', digits=(16, 2), readonly=True, group_operator='avg', help="Amount of time between purchase approval and order by date.") + delay_pass = fields.Float('Days to Receive', digits=(16, 2), readonly=True, group_operator='avg', + help="Amount of time between date planned and order by date for each purchase order line.") avg_days_to_purchase = fields.Float( 'Average Days to Purchase', digits=(16, 2), readonly=True, store=False, # needs store=False to prevent showing up as a 'measure' option help="Amount of time between purchase approval and document creation date. Due to a hack needed to calculate this, \ diff --git a/addons/purchase/tests/test_purchase_order_report.py b/addons/purchase/tests/test_purchase_order_report.py index 8b38611373a..42e78b51873 100644 --- a/addons/purchase/tests/test_purchase_order_report.py +++ b/addons/purchase/tests/test_purchase_order_report.py @@ -3,7 +3,7 @@ from odoo.addons.account.tests.common import AccountTestInvoicingCommon from odoo.tests import Form, tagged -from datetime import datetime +from datetime import datetime, timedelta @tagged('post_install', '-at_install') @@ -66,3 +66,25 @@ class TestPurchaseOrderReport(AccountTestInvoicingCommon): self.assertEqual(res_product2.qty_ordered, 1.0, 'No conversion needed since product_b is already a dozen') # report should show in company currency (amount/rate) = (200/2) self.assertEqual(res_product2.price_total, 100.0, 'Currency conversion is not working') + + def test_01_delay_and_delay_pass(self): + po_form = Form(self.env['purchase.order']) + po_form.partner_id = self.partner_a + po_form.date_order = datetime.now() + timedelta(days=10) + with po_form.order_line.new() as line: + line.product_id = self.product_a + with po_form.order_line.new() as line: + line.product_id = self.product_b + po_form.date_planned = datetime.now() + timedelta(days=15) + po = po_form.save() + + po.button_confirm() + + po.flush() + report = self.env['purchase.report'].read_group( + [('order_id', '=', po.id)], + ['order_id', 'delay', 'delay_pass'], + ['order_id'], + ) + self.assertEqual(round(report[0]['delay']), -10, msg="The PO has been confirmed 10 days in advance") + self.assertEqual(round(report[0]['delay_pass']), 5, msg="There are 5 days between the order date and the planned date")