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