Prepare NCF manager for production on Tryton 8.0
Publicar paquete PyPI / publish (push) Successful in 1m17s
Publicar paquete PyPI / publish (push) Successful in 1m17s
This commit is contained in:
+30
-12
@@ -1,18 +1,10 @@
|
||||
# This file is part of ncf_manager module for Tryton. The COPYRIGHT file at the top level of
|
||||
# this repository contains the full copyright notices and license terms.
|
||||
from string import Template
|
||||
import time
|
||||
|
||||
from sql import Literal, For
|
||||
|
||||
from trytond.exceptions import UserError
|
||||
from trytond.model.exceptions import ValidationError
|
||||
from trytond.model import ModelView, ModelSQL, DeactivableMixin, fields, Check
|
||||
from trytond.pyson import Eval, And
|
||||
from trytond.transaction import Transaction
|
||||
from trytond.pool import Pool, PoolMeta
|
||||
from trytond.model import fields
|
||||
from trytond.pyson import Eval
|
||||
from trytond.pool import PoolMeta
|
||||
from trytond.i18n import gettext
|
||||
from trytond import backend
|
||||
|
||||
# Maps sequence_type.name → (prefix, padding)
|
||||
_NCF_TYPE_MAP = {
|
||||
@@ -38,6 +30,7 @@ _NCF_TYPE_MAP = {
|
||||
'Exportación Electrónico': ('E46', 10),
|
||||
'Pagos al Exterior Electrónico': ('E47', 10),
|
||||
}
|
||||
NCF_PREFIXES = tuple(prefix for prefix, _padding in _NCF_TYPE_MAP.values())
|
||||
|
||||
|
||||
class Sequence(metaclass=PoolMeta):
|
||||
@@ -114,8 +107,33 @@ class Sequence(metaclass=PoolMeta):
|
||||
|
||||
@fields.depends('number_next', 'until_number')
|
||||
def on_change_with_remaining_qty(self, name=None):
|
||||
if self.until_number and self.number_next:
|
||||
if self.until_number is not None and self.number_next is not None:
|
||||
return self.until_number - self.number_next + 1
|
||||
|
||||
@classmethod
|
||||
def validate_fields(cls, records, field_names):
|
||||
super().validate_fields(records, field_names)
|
||||
if field_names & {
|
||||
'prefix', 'padding', 'from_number', 'until_number',
|
||||
'number_next'}:
|
||||
for record in records:
|
||||
record._validate_ncf_range()
|
||||
|
||||
def _validate_ncf_range(self):
|
||||
if self.prefix not in NCF_PREFIXES:
|
||||
return
|
||||
expected_padding = 10 if self.prefix.startswith('E') else 8
|
||||
if self.padding != expected_padding:
|
||||
raise UserError(gettext(
|
||||
'ncf_manager.msg_ncf_invalid_padding',
|
||||
padding=expected_padding))
|
||||
if self.from_number is None or self.until_number is None:
|
||||
return
|
||||
if self.from_number < 1 or self.until_number < self.from_number:
|
||||
raise UserError(gettext('ncf_manager.msg_ncf_invalid_range'))
|
||||
if (self.number_next is not None
|
||||
and self.number_next < self.from_number):
|
||||
raise UserError(gettext('ncf_manager.msg_ncf_next_before_range'))
|
||||
|
||||
class SequenceStrict(Sequence):
|
||||
"Sequence Strict"
|
||||
|
||||
Reference in New Issue
Block a user