diff --git a/facho/facho.py b/facho/facho.py index b1bc2f8..02e70a0 100644 --- a/facho/facho.py +++ b/facho/facho.py @@ -258,7 +258,7 @@ class FachoXML: xpath = self.fragment_prefix + self._path_xpath_for(xpath) elem = self.builder.xpath(self.root, xpath) if elem is None: - raise ValueError('xpath %s invalid' % (xpath)) + raise AttributeError('xpath %s invalid' % (xpath)) text = self.builder.get_text(elem) return format_(text) diff --git a/facho/fe/model/__init__.py b/facho/fe/model/__init__.py index 5bc5be3..061890d 100644 --- a/facho/fe/model/__init__.py +++ b/facho/fe/model/__init__.py @@ -11,6 +11,12 @@ from copy import copy import hashlib + +class PhysicalLocation(model.Model): + __name__ = 'PhysicalLocation' + + address = fields.Many2One(Address, namespace='cac') + class PartyTaxScheme(model.Model): __name__ = 'PartyTaxScheme' @@ -20,11 +26,12 @@ class PartyTaxScheme(model.Model): class Party(model.Model): __name__ = 'Party' - id = fields.Virtual(setter='set_id') + id = fields.Virtual(setter='_on_set_id') tax_scheme = fields.Many2One(PartyTaxScheme, namespace='cac') - - def set_id(self, name, value): + location = fields.Many2One(PhysicalLocation, namespace='cac') + + def _on_set_id(self, name, value): self.tax_scheme.company_id = value return value @@ -256,6 +263,7 @@ class Invoice(model.Model): __namespace__ = fe.NAMESPACES _ubl_extensions = fields.Many2One(UBLExtensions, namespace='ext') + # nos interesa el acceso solo los atributos de la DIAN dian = fields.Virtual(getter='get_dian_extension') profile_id = fields.Many2One(Element, name='ProfileID', namespace='cbc', default='DIAN 2.1') diff --git a/facho/fe/model/common.py b/facho/fe/model/common.py index 6234537..c79a780 100644 --- a/facho/fe/model/common.py +++ b/facho/fe/model/common.py @@ -3,14 +3,14 @@ import facho.model.fields as fields from datetime import date, datetime -__all__ = ['Element', 'Name', 'Date', 'Time', 'Period', 'ID'] +__all__ = ['Element', 'Name', 'Date', 'Time', 'Period', 'ID', 'Address', 'Country'] class Element(model.Model): """ Lo usuamos para elementos que solo manejan contenido """ __name__ = 'Element' - + class Name(model.Model): __name__ = 'Name' @@ -53,3 +53,21 @@ class ID(model.Model): def __str__(self): return str(self._value) + + +class Country(model.Model): + __name__ = 'Country' + + name = fields.Many2One(Element, name='Name', namespace='cbc') + +class Address(model.Model): + __name__ = 'Address' + + #DIAN 1.7.-2020: FAJ08 + #DIAN 1.7.-2020: CAJ09 + id = fields.Many2One(Element, name='ID', namespace='cbc') + + #DIAN 1.7.-2020: FAJ09 + #DIAN 1.7.-2020: CAJ10 + city = fields.Many2One(Element, name='CityName', namespace='cbc') +