diff options
| author | Pedro M. Baeza <pedro.baeza@tecnativa.com> | 2019-10-02 10:21:09 +0000 |
|---|---|---|
| committer | fw-bot <otis@odoo.com> | 2019-10-11 09:14:27 +0000 |
| commit | 9927b012ec8cb65ee329b7d6c32c7e08e922d0c3 (patch) | |
| tree | e1f56c49189a86dda2f42544634ed363b6b22226 | |
| parent | dcca8ae2727e3c94cc1655a7b8c4c6e736d4f5ec (diff) | |
[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
| -rw-r--r-- | addons/sale/models/sale.py | 8 | ||||
| -rw-r--r-- | addons/sale/tests/test_sale_order.py | 14 |
2 files changed, 20 insertions, 2 deletions
diff --git a/addons/sale/models/sale.py b/addons/sale/models/sale.py index d2a276054d3..bf35fcbc35c 100644 --- a/addons/sale/models/sale.py +++ b/addons/sale/models/sale.py @@ -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']): diff --git a/addons/sale/tests/test_sale_order.py b/addons/sale/tests/test_sale_order.py index c4a8bae0ad3..bb3223b0e7f 100644 --- a/addons/sale/tests/test_sale_order.py +++ b/addons/sale/tests/test_sale_order.py @@ -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 |
