summaryrefslogtreecommitdiff
path: root/odoo/addons/base/models/ir_sequence.py
diff options
context:
space:
mode:
Diffstat (limited to 'odoo/addons/base/models/ir_sequence.py')
-rw-r--r--odoo/addons/base/models/ir_sequence.py24
1 files changed, 11 insertions, 13 deletions
diff --git a/odoo/addons/base/models/ir_sequence.py b/odoo/addons/base/models/ir_sequence.py
index 1fb8bf87e25..01caf67a001 100644
--- a/odoo/addons/base/models/ir_sequence.py
+++ b/odoo/addons/base/models/ir_sequence.py
@@ -190,16 +190,16 @@ class IrSequence(models.Model):
number_next = _update_nogap(self, self.number_increment)
return self.get_next_char(number_next)
- def _get_prefix_suffix(self):
+ def _get_prefix_suffix(self, date=None, date_range=None):
def _interpolate(s, d):
return (s % d) if s else ''
def _interpolation_dict():
now = range_date = effective_date = datetime.now(pytz.timezone(self._context.get('tz') or 'UTC'))
- if self._context.get('ir_sequence_date'):
- effective_date = fields.Datetime.from_string(self._context.get('ir_sequence_date'))
- if self._context.get('ir_sequence_date_range'):
- range_date = fields.Datetime.from_string(self._context.get('ir_sequence_date_range'))
+ if date or self._context.get('ir_sequence_date'):
+ effective_date = fields.Datetime.from_string(date or self._context.get('ir_sequence_date'))
+ if date_range or self._context.get('ir_sequence_date_range'):
+ range_date = fields.Datetime.from_string(date_range or self._context.get('ir_sequence_date_range'))
sequences = {
'year': '%Y', 'month': '%m', 'day': '%d', 'y': '%y', 'doy': '%j', 'woy': '%W',
@@ -242,27 +242,25 @@ class IrSequence(models.Model):
})
return seq_date_range
- def _next(self):
+ def _next(self, sequence_date=None):
""" Returns the next number in the preferred sequence in all the ones given in self."""
if not self.use_date_range:
return self._next_do()
# date mode
- dt = fields.Date.today()
- if self._context.get('ir_sequence_date'):
- dt = self._context.get('ir_sequence_date')
+ dt = sequence_date or self._context.get('ir_sequence_date', fields.Date.today())
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.with_context(ir_sequence_date_range=seq_date.date_from)._next()
@api.multi
- def next_by_id(self):
+ def next_by_id(self, sequence_date=None):
""" Draw an interpolated string using the specified sequence."""
self.check_access_rights('read')
- return self._next()
+ return self._next(sequence_date=sequence_date)
@api.model
- def next_by_code(self, sequence_code):
+ def next_by_code(self, sequence_code, sequence_date=None):
""" Draw an interpolated string using a sequence with the requested code.
If several sequences with the correct code are available to the user
(multi-company cases), the one from the user's current company will
@@ -283,7 +281,7 @@ class IrSequence(models.Model):
_logger.debug("No ir.sequence has been found for code '%s'. Please make sure a sequence is set for current company." % sequence_code)
return False
seq_id = seq_ids[0]
- return seq_id._next()
+ return seq_id._next(sequence_date=sequence_date)
@api.model
def get_id(self, sequence_code_or_id, code_or_id='id'):