se adiciona extensions para la dian
FossilOrigin-Name: f5521ddbfb903915de88a26ba5197b67efa1ebfd66337061ee9e3653c59dd217
This commit is contained in:
@@ -45,7 +45,9 @@ class ModelBase(object, metaclass=ModelMeta):
|
||||
if isinstance(v, fields.Attribute) or isinstance(v, fields.Many2One) or isinstance(v, fields.Function) or isinstance(v, fields.Amount):
|
||||
if hasattr(v, 'default') and v.default is not None:
|
||||
setattr(obj, key, v.default)
|
||||
|
||||
if hasattr(v, 'create') and v.create == True:
|
||||
setattr(obj, key, '')
|
||||
|
||||
# register callbacks for changes
|
||||
(fun, on_change_fields) = on_change_fields_for_function()
|
||||
for field in on_change_fields:
|
||||
|
||||
31
facho/model/fields/amount.py
Normal file
31
facho/model/fields/amount.py
Normal 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)
|
||||
@@ -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
|
||||
|
||||
45
facho/model/fields/virtual.py
Normal file
45
facho/model/fields/virtual.py
Normal 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)
|
||||
Reference in New Issue
Block a user