diff --git a/.drone.yml b/.drone.yml index 82ae06b..cae36d8 100644 --- a/.drone.yml +++ b/.drone.yml @@ -14,7 +14,7 @@ pipeline: - pip install tox - tox -e "${TOXENV}-${DATABASE}" volumes: - - cache:/root/.cache + - /var/lib/cache:/root/.cache notify: image: drillster/drone-email from: drone@datalife.com.es diff --git a/ir.py b/ir.py index 58f7793..c0a54f8 100644 --- a/ir.py +++ b/ir.py @@ -56,7 +56,7 @@ class Sequence(metaclass=PoolMeta): if sequence.periods: if not date: cls.raise_user_error('missing_date', sequence.rec_name) - pattern = {} + pattern = sequence._get_period_pattern() for period in sequence.periods: if period.match(pattern): return period.get_id(_lock=_lock) @@ -65,6 +65,9 @@ class Sequence(metaclass=PoolMeta): return super(Sequence, cls).get_id(domain, _lock=_lock) return '' + def _get_period_pattern(self): + return {'date': Transaction().context.get('date')} + class SequencePeriod(ModelSQL, ModelView, MatchMixin): '''Sequence period''' @@ -84,6 +87,8 @@ class SequencePeriod(ModelSQL, ModelView, MatchMixin): }) number_next = fields.Function(number_next_internal, 'get_number_next', 'set_number_next') + prefix = fields.Char('Prefix') + suffix = fields.Char('Suffix') @staticmethod def default_number_next(): @@ -194,9 +199,9 @@ class SequencePeriod(ModelSQL, ModelView, MatchMixin): cursor.execute(*query) date = Transaction().context.get('date') return '%s%s%s' % ( - Sequence._process(self.sequence.prefix, date=date), + Sequence._process(self.prefix or self.sequence.prefix, date=date), self._get_sequence(), - Sequence._process(self.sequence.suffix, date=date), + Sequence._process(self.suffix or self.sequence.suffix, date=date), ) def _get_sequence(self): @@ -218,11 +223,14 @@ class SequencePeriod(ModelSQL, ModelView, MatchMixin): else: raise NotImplementedError() - def match(self, pattern): - date = Transaction().context.get('date') + def match(self, pattern, match_none=False): + pattern = pattern.copy() + date = pattern.get('date') if not date: return False - return self.start_date <= date <= self.end_date + _match = self.start_date <= date <= self.end_date + _ = pattern.pop('date') + return _match and super().match(pattern, match_none=match_none) class SequenceStrict(metaclass=PoolMeta): diff --git a/locale/es.po b/locale/es.po index cf38779..07ffdea 100644 --- a/locale/es.po +++ b/locale/es.po @@ -50,6 +50,14 @@ msgctxt "field:ir.sequence.period,start_date:" msgid "Start date" msgstr "Fecha inicio" +msgctxt "field:ir.sequence.period,prefix:" +msgid "Prefix" +msgstr "Prefijo" + +msgctxt "field:ir.sequence.period,suffix:" +msgid "Suffix" +msgstr "Sufijo" + msgctxt "field:ir.sequence.period,write_date:" msgid "Write Date" msgstr "Fecha de modificación" diff --git a/tests/test_ir_sequence_period.py b/tests/test_ir_sequence_period.py index 53b193a..86af787 100644 --- a/tests/test_ir_sequence_period.py +++ b/tests/test_ir_sequence_period.py @@ -72,8 +72,10 @@ class IrSequencePeriodTestCase(ModuleTestCase): 'sequence': sequence.id, 'start_date': datetime.date(2019, 1, 1), 'end_date': datetime.date(2019, 12, 31), - 'number_next': 40}]) - self.assertEqual(Sequence.get_id(sequence), '2019/40') + 'number_next': 40, + 'suffix': '/XX' + }]) + self.assertEqual(Sequence.get_id(sequence), '2019/40/XX') def suite(): diff --git a/view/sequence_period_form.xml b/view/sequence_period_form.xml index 01a5f22..a7a67a2 100644 --- a/view/sequence_period_form.xml +++ b/view/sequence_period_form.xml @@ -6,6 +6,10 @@