diff options
| author | Denis Ledoux <dle@odoo.com> | 2016-01-27 18:25:08 +0100 |
|---|---|---|
| committer | Denis Ledoux <dle@odoo.com> | 2016-01-27 19:10:09 +0100 |
| commit | a2d3d4d449acbd1c07d2a2ec1935193eabaaefcb (patch) | |
| tree | 65588311e23ffc026bfab9298140875c0017b3a7 | |
| parent | 3fcb70e3149546ccec7c9621a523841cef0c0ddb (diff) | |
[FIX] ir_sequence: `range_` actually uses the range start date
In a sequence, `range_year` is supposed to be the year
of the range beginning date:
```
When subsequences per date range are used,
you can prefix variables with 'range_' to use
the beginning of the range instead of the current date,
e.g. %(range_year)s instead of %(year)s.
```
Therefore, for a sequence with ranges configured as:
- 20150701 to 20160630
- 20160701 to 20170630
An invoice confirmed on 20160101 must have `2015`
as year when using `range_year`, and not `2016`.
If you would like the invoice effective date,
you must then use `year`, instead.
We add the `current_%` keys as well,
in case some users absolutely want the
`now` date instead of the effective date,
but it doesn't make much sense in the context
of accounting.
Besides, outside the context of the accounting,
`year`, `month`, `date` etc is the `now` date.
opw-649487
| -rw-r--r-- | openerp/addons/base/ir/ir_sequence.py | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/openerp/addons/base/ir/ir_sequence.py b/openerp/addons/base/ir/ir_sequence.py index ebd8ab0ee3e..2a0f3ab47b7 100644 --- a/openerp/addons/base/ir/ir_sequence.py +++ b/openerp/addons/base/ir/ir_sequence.py @@ -194,19 +194,21 @@ class ir_sequence(models.Model): return '' def _interpolation_dict(): - now = datetime.now(pytz.timezone(self.env.context.get('tz') or 'UTC')) + now = range_date = effective_date = datetime.now(pytz.timezone(self.env.context.get('tz') or 'UTC')) if self.env.context.get('ir_sequence_date'): - t = datetime.strptime(self.env.context.get('ir_sequence_date'), '%Y-%m-%d') - else: - t = now + effective_date = datetime.strptime(self.env.context.get('ir_sequence_date'), '%Y-%m-%d') + if self.env.context.get('ir_sequence_date_range'): + range_date = datetime.strptime(self.env.context.get('ir_sequence_date_range'), '%Y-%m-%d') + sequences = { 'year': '%Y', 'month': '%m', 'day': '%d', 'y': '%y', 'doy': '%j', 'woy': '%W', 'weekday': '%w', 'h24': '%H', 'h12': '%I', 'min': '%M', 'sec': '%S' } res = {} for key, sequence in sequences.iteritems(): - res[key] = now.strftime(sequence) - res['range_' + key] = t.strftime(sequence) + res[key] = effective_date.strftime(sequence) + res['range_' + key] = range_date.strftime(sequence) + res['current_' + key] = now.strftime(sequence) return res @@ -248,7 +250,7 @@ class ir_sequence(models.Model): seq_date = self.env['ir.sequence.date_range'].search([('sequence_id', '=', self.id), ('date_from', '<=', dt), ('date_to', '>=', dt)], limit=1) if not seq_date: seq_date = self._create_date_range_seq(dt) - return seq_date._next() + return seq_date.with_context(ir_sequence_date_range=seq_date.date_from)._next() @api.multi def next_by_id(self): |
