**Steps to reproduce** * Define "Purchase Order" sequence for using date ranges checking "Use subsequences per date_range". * Change sequence prefix to "PO/%(year)s/". * Create a purchase order with order date in 2020 (a different year than current one). **Current behavior** Got a purchase order with 2019 (current year) number. **Expected behavior** Got a purchase order with 2020 number. closes odoo/odoo#38468 X-original-commit: ce423e6adb6659a1d5885bad158c59b882cb4565 Signed-off-by: Damien Bouvy (dbo) <dbo@odoo.com>
118 lines
5.2 KiB
Python
118 lines
5.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from datetime import timedelta
|
|
|
|
from odoo.tests.common import SavepointCase
|
|
from odoo.tests import Form
|
|
|
|
|
|
class TestPurchase(SavepointCase):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super(TestPurchase, cls).setUpClass()
|
|
cls.product_consu = cls.env['product.product'].create({
|
|
'name': 'Product A',
|
|
'type': 'consu',
|
|
})
|
|
cls.product_consu2 = cls.env['product.product'].create({
|
|
'name': 'Product B',
|
|
'type': 'consu',
|
|
})
|
|
cls.vendor = cls.env['res.partner'].create({'name': 'vendor1'})
|
|
cls.uom_unit = cls.env.ref('uom.product_uom_unit')
|
|
|
|
def test_date_planned_1(self):
|
|
"""Set a date planned on a PO, see that it is set on the PO lines. Try to edit the date
|
|
planned of the PO line, see that it is not possible. Unset the date planned on the PO and
|
|
edit the date planned on the PO lines. Validate the PO and see that it isn't possible to
|
|
set the date planned on the PO nor on the PO lines.
|
|
"""
|
|
po = Form(self.env['purchase.order'])
|
|
po.partner_id = self.vendor
|
|
with po.order_line.new() as po_line:
|
|
po_line.product_id = self.product_consu
|
|
po_line.product_qty = 1
|
|
po_line.price_unit = 100
|
|
with po.order_line.new() as po_line:
|
|
po_line.product_id = self.product_consu2
|
|
po_line.product_qty = 10
|
|
po_line.price_unit = 200
|
|
po = po.save()
|
|
|
|
# Check there is no date planned on the PO and the same date planned on both PO lines.
|
|
self.assertEqual(po.date_planned, False)
|
|
self.assertNotEqual(po.order_line[0].date_planned, False)
|
|
self.assertAlmostEqual(po.order_line[0].date_planned, po.order_line[1].date_planned, delta=timedelta(seconds=10))
|
|
|
|
orig_date_planned = po.order_line[0].date_planned
|
|
|
|
# Set a date planned on a PO, see that it is set on the PO lines.
|
|
new_date_planned = orig_date_planned + timedelta(hours=1)
|
|
po.date_planned = new_date_planned
|
|
self.assertAlmostEqual(po.order_line[0].date_planned, new_date_planned, delta=timedelta(seconds=10))
|
|
self.assertAlmostEqual(po.order_line[1].date_planned, new_date_planned, delta=timedelta(seconds=10))
|
|
|
|
# Try to edit the date planned of the PO line, see that it is not possible
|
|
po = Form(po)
|
|
with self.assertRaises(AssertionError):
|
|
po.order_line.edit(0).date_planned = orig_date_planned
|
|
with self.assertRaises(AssertionError):
|
|
po.order_line.edit(1).date_planned = orig_date_planned
|
|
po = po.save()
|
|
|
|
self.assertAlmostEqual(po.order_line[0].date_planned, new_date_planned, delta=timedelta(seconds=10))
|
|
self.assertAlmostEqual(po.order_line[1].date_planned, new_date_planned, delta=timedelta(seconds=10))
|
|
|
|
# Unset the date planned on the PO and edit the date planned on the PO line.
|
|
po = Form(po)
|
|
po.date_planned = False
|
|
with po.order_line.edit(0) as po_line:
|
|
po_line.date_planned = orig_date_planned
|
|
with po.order_line.edit(1) as po_line:
|
|
po_line.date_planned = orig_date_planned
|
|
po = po.save()
|
|
|
|
self.assertAlmostEqual(po.order_line[0].date_planned, orig_date_planned, delta=timedelta(seconds=10))
|
|
self.assertAlmostEqual(po.order_line[1].date_planned, orig_date_planned, delta=timedelta(seconds=10))
|
|
|
|
# Validate the PO and see that it isn't possible to set the date planned on the PO
|
|
# nor on the PO lines.
|
|
po.button_confirm()
|
|
po.button_done()
|
|
|
|
po = Form(po)
|
|
with self.assertRaises(AssertionError):
|
|
po.date_planned = new_date_planned
|
|
with self.assertRaises(AssertionError):
|
|
with po.order_line.edit(0) as po_line:
|
|
po_line.date_planned = orig_date_planned
|
|
with self.assertRaises(AssertionError):
|
|
with po.order_line.edit(1) as po_line:
|
|
po_line.date_planned = orig_date_planned
|
|
po.save()
|
|
|
|
def test_purchase_order_sequence(self):
|
|
PurchaseOrder = self.env['purchase.order'].with_context(tracking_disable=True)
|
|
company = self.env.user.company_id
|
|
self.env['ir.sequence'].search([
|
|
('code', '=', 'purchase.order'),
|
|
]).write({
|
|
'use_date_range': True, 'prefix': 'PO/%(range_year)s/',
|
|
})
|
|
vals = {
|
|
'partner_id': self.vendor.id,
|
|
'company_id': company.id,
|
|
'currency_id': company.currency_id.id,
|
|
'date_order': '2019-01-01',
|
|
}
|
|
purchase_order = PurchaseOrder.create(vals.copy())
|
|
self.assertTrue(purchase_order.name.startswith('PO/2019/'))
|
|
vals['date_order'] = '2020-01-01'
|
|
purchase_order = PurchaseOrder.create(vals.copy())
|
|
self.assertTrue(purchase_order.name.startswith('PO/2020/'))
|
|
# In EU/BXL tz, this is actually already 01/01/2020
|
|
vals['date_order'] = '2019-12-31 23:30:00'
|
|
purchase_order = PurchaseOrder.with_context(tz='Europe/Brussels').create(vals.copy())
|
|
self.assertTrue(purchase_order.name.startswith('PO/2020/'))
|