se adiciona extensions para la dian

FossilOrigin-Name: f5521ddbfb903915de88a26ba5197b67efa1ebfd66337061ee9e3653c59dd217
This commit is contained in:
bit4bit
2021-08-08 22:00:08 +00:00
parent 088fa9e6e0
commit 64b312a432
9 changed files with 251 additions and 52 deletions

View File

@@ -0,0 +1,31 @@
from .field import Field
from collections import defaultdict
import facho.fe.form as form
class Amount(Field):
def __init__(self, name=None, default=None, precision=6):
self.field_name = name
self.values = {}
self.default = default
self.precision = precision
def __get__(self, model, cls):
if model is None:
return self
assert self.name is not None
self.__init_value(model)
model._set_field(self.name, self)
return self.values[model]
def __set__(self, model, value):
assert self.name is not None
self.__init_value(model)
model._set_field(self.name, self)
self.values[model] = form.Amount(value, precision=self.precision)
self._changed_field(model, self.name, value)
def __init_value(self, model):
if model not in self.values:
self.values[model] = form.Amount(self.default or 0)

View File

@@ -2,7 +2,7 @@ from .field import Field
from collections import defaultdict
class Many2One(Field):
def __init__(self, model, name=None, setter=None, namespace=None, default=None, virtual=False):
def __init__(self, model, name=None, setter=None, namespace=None, default=None, virtual=False, create=False):
self.model = model
self.setter = setter
self.namespace = namespace
@@ -10,7 +10,8 @@ class Many2One(Field):
self.default = default
self.virtual = virtual
self.relations = defaultdict(dict)
self.create = create
def __get__(self, inst, cls):
if inst is None:
return self

View File

@@ -0,0 +1,45 @@
from .field import Field
# Un campo virtual
# no participa del renderizado
# pero puede interactura con este
class Virtual(Field):
def __init__(self,
setter=None,
getter='bob',
default=None,
update_internal=False):
self.default = default
self.setter = setter
self.getter = getter
self.values = {}
self.update_internal = update_internal
self.virtual = True
def __get__(self, inst, cls):
if inst is None:
return self
assert self.name is not None
value = self.default
try:
value = self.values[inst]
except KeyError:
pass
try:
self.values[inst] = getattr(inst, self.getter)(self.name, value)
except AttributeError:
self.values[inst] = value
return self.values[inst]
def __set__(self, inst, value):
if self.update_internal:
inst._value = value
if self.setter is None:
self.values[inst] = value
else:
self.values[inst] = self._call(inst, self.setter, self.name, value)
self._changed_field(inst, self.name, value)