[IMP] sale: Take into account sales order date for sequence

**Steps to reproduce**

* Define "Sales Order" sequence for using date ranges checking "Use subsequences per date_range".
* Change sequence prefix to "SO/%(year)s/".
* Create a sales order with order date in 2020 (a different year than current one).

**Current behavior**

Got a sales order with 2019 (current year) number.

**Expected behavior**

Got a sales order with 2020 number.

X-original-commit: 20baf00d07868a83cd73a13a6141bc0d36c85c44
This commit is contained in:
Pedro M. Baeza
2019-10-11 09:14:27 +00:00
committed by fw-bot
parent dcca8ae272
commit 9927b012ec
2 changed files with 20 additions and 2 deletions
+6 -2
View File
@@ -408,10 +408,14 @@ class SaleOrder(models.Model):
@api.model
def create(self, vals):
if vals.get('name', _('New')) == _('New'):
seq_date = None
if 'date_order' in vals:
seq_date = fields.Datetime.context_timestamp(self, fields.Datetime.to_datetime(vals['date_order']))
if 'company_id' in vals:
vals['name'] = self.env['ir.sequence'].with_context(force_company=vals['company_id']).next_by_code('sale.order') or _('New')
vals['name'] = self.env['ir.sequence'].with_context(force_company=vals['company_id']).next_by_code(
'sale.order', sequence_date=seq_date) or _('New')
else:
vals['name'] = self.env['ir.sequence'].next_by_code('sale.order') or _('New')
vals['name'] = self.env['ir.sequence'].next_by_code('sale.order', sequence_date=seq_date) or _('New')
# Makes sure partner_invoice_id', 'partner_shipping_id' and 'pricelist_id' are defined
if any(f not in vals for f in ['partner_invoice_id', 'partner_shipping_id', 'pricelist_id']):
+14
View File
@@ -140,6 +140,20 @@ class TestSaleOrder(TestCommonSaleNoChart):
self.assertEqual(invoice3.amount_total, 8 * self.product_map['serv_order'].list_price, 'Sale: second invoice total amount is wrong')
self.assertTrue(self.sale_order.invoice_status == 'invoiced', 'Sale: SO status after invoicing everything (including the upsel) should be "invoiced"')
def test_sale_sequence(self):
self.env['ir.sequence'].search([
('code', '=', 'sale.order'),
]).write({
'use_date_range': True, 'prefix': 'SO/%(range_year)s/',
})
sale_order = self.sale_order.copy({'date_order': '2019-01-01'})
self.assertTrue(sale_order.name.startswith('SO/2019/'))
sale_order = self.sale_order.copy({'date_order': '2020-01-01'})
self.assertTrue(sale_order.name.startswith('SO/2020/'))
# In EU/BXL tz, this is actually already 01/01/2020
sale_order = self.sale_order.with_context(tz='Europe/Brussels').copy({'date_order': '2019-12-31 23:30:00'})
self.assertTrue(sale_order.name.startswith('SO/2020/'))
def test_unlink_cancel(self):
""" Test deleting and cancelling sales orders depending on their state and on the user's rights """
# SO in state 'draft' can be deleted