diff --git a/facho/fe/model/__init__.py b/facho/fe/model/__init__.py index e1d895c..5f6d6a8 100644 --- a/facho/fe/model/__init__.py +++ b/facho/fe/model/__init__.py @@ -111,13 +111,17 @@ class TaxSubTotal(model.Model): tax_amount = fields.Many2One(Amount, name='TaxAmount') tax_category = fields.Many2One(TaxCategory) - percent = fields.Virtual(setter='set_percent') - - def set_percent(self, name, value): - self.tax_category.percent = value - # TODO(bit4bit) hacer variable - self.tax_category.tax_scheme.id = '01' - self.tax_category.tax_scheme.name = 'IVA' + percent = fields.Virtual(setter='set_category') + scheme = fields.Virtual(setter='set_category') + def set_category(self, name, value): + if name == 'percent': + self.tax_category.percent = value + # TODO(bit4bit) hacer variable + self.tax_category.tax_scheme.id = '01' + self.tax_category.tax_scheme.name = 'IVA' + elif name == 'scheme': + self.tax_category.tax_scheme.id = value + class TaxTotal(model.Model): __name__ = 'TaxTotal' @@ -186,6 +190,8 @@ class Invoice(model.Model): lines = fields.One2Many(InvoiceLine) legal_monetary_total = fields.Many2One(LegalMonetaryTotal) + cufe = fields.Virtual() + @fields.on_change(['lines']) def update_legal_monetary_total(self, name, value): for line in self.lines: diff --git a/facho/model/__init__.py b/facho/model/__init__.py index 59b8d55..a6689c2 100644 --- a/facho/model/__init__.py +++ b/facho/model/__init__.py @@ -50,7 +50,9 @@ class ModelBase(object, metaclass=ModelMeta): (fun, on_change_fields) = on_change_fields_for_function() for field in on_change_fields: obj._on_change_fields[field].append(fun) - + + + obj.__setup__() return obj def _set_attribute(self, field, name, value): @@ -141,4 +143,8 @@ class Model(ModelBase): """ return value + def __setup__(self): + """ + Inicializar modelo + """ diff --git a/tests/test_model.py b/tests/test_model.py index 7104920..7dc5ef8 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -506,3 +506,15 @@ def test_field_amount(): assert '' == line.to_xml() + +def test_model_setup(): + class Line(facho.model.Model): + __name__ = 'Line' + + amount = fields.Attribute(name='amount') + + def __setup__(self): + self.amount = 23 + + line = Line() + assert '' == line.to_xml() diff --git a/tests/test_model_invoice.py b/tests/test_model_invoice.py index 79d3604..c7355d9 100644 --- a/tests/test_model_invoice.py +++ b/tests/test_model_invoice.py @@ -36,5 +36,8 @@ def _test_simple_invoice_cufe(): line = invoice.lines.create() line.quantity = 1 line.price = 1_500_000 - subtotal = line.taxtotal.subtotals.create() - subtotal.percent = 19.0 + line_subtotal = line.taxtotal.subtotals.create() + line_subtotal.percent = 19.0 + line.subtotal.scheme = '01' + + assert invoice.cufe == '8bb918b19ba22a694f1da11c643b5e9de39adf60311cf179179e9b33381030bcd4c3c3f156c506ed5908f9276f5bd9b4'