se adiciona extensions para la dian
FossilOrigin-Name: f5521ddbfb903915de88a26ba5197b67efa1ebfd66337061ee9e3653c59dd217
This commit is contained in:
@@ -2,54 +2,14 @@ import facho.model as model
|
||||
import facho.model.fields as fields
|
||||
import facho.fe.form as form
|
||||
from facho import fe
|
||||
from .common import *
|
||||
from . import dian
|
||||
|
||||
from datetime import date, datetime
|
||||
from collections import defaultdict
|
||||
from copy import copy
|
||||
import hashlib
|
||||
|
||||
class Name(model.Model):
|
||||
__name__ = 'Name'
|
||||
|
||||
class Date(model.Model):
|
||||
__name__ = 'Date'
|
||||
|
||||
def __default_set__(self, value):
|
||||
if isinstance(value, str):
|
||||
return value
|
||||
if isinstance(value, date):
|
||||
return value.isoformat()
|
||||
|
||||
def __str__(self):
|
||||
return str(self._value)
|
||||
|
||||
class Time(model.Model):
|
||||
__name__ = 'Time'
|
||||
|
||||
def __default_set__(self, value):
|
||||
if isinstance(value, str):
|
||||
return value
|
||||
if isinstance(value, date):
|
||||
return value.strftime('%H:%M:%S-05:00')
|
||||
|
||||
def __str__(self):
|
||||
return str(self._value)
|
||||
|
||||
class InvoicePeriod(model.Model):
|
||||
__name__ = 'InvoicePeriod'
|
||||
|
||||
start_date = fields.Many2One(Date, name='StartDate', namespace='cbc')
|
||||
|
||||
end_date = fields.Many2One(Date, name='EndDate', namespace='cbc')
|
||||
|
||||
class ID(model.Model):
|
||||
__name__ = 'ID'
|
||||
|
||||
def __default_get__(self, name, value):
|
||||
return self._value
|
||||
|
||||
def __str__(self):
|
||||
return str(self._value)
|
||||
|
||||
class PartyTaxScheme(model.Model):
|
||||
__name__ = 'PartyTaxScheme'
|
||||
@@ -139,10 +99,10 @@ class TaxCategory(model.Model):
|
||||
class TaxSubTotal(model.Model):
|
||||
__name__ = 'TaxSubTotal'
|
||||
|
||||
taxable_amount = fields.Many2One(Amount, name='TaxableAmount', default=0.00)
|
||||
tax_amount = fields.Many2One(Amount, name='TaxAmount', default=0.00)
|
||||
tax_percent = fields.Many2One(Percent)
|
||||
tax_category = fields.Many2One(TaxCategory)
|
||||
taxable_amount = fields.Many2One(Amount, name='TaxableAmount', namespace='cbc', default=0.00)
|
||||
tax_amount = fields.Many2One(Amount, name='TaxAmount', namespace='cbc', default=0.00)
|
||||
tax_percent = fields.Many2One(Percent, namespace='cbc')
|
||||
tax_category = fields.Many2One(TaxCategory, namespace='cac')
|
||||
|
||||
percent = fields.Virtual(setter='set_category', getter='get_category')
|
||||
scheme = fields.Virtual(setter='set_category', getter='get_category')
|
||||
@@ -266,6 +226,28 @@ class LegalMonetaryTotal(model.Model):
|
||||
def update_payable_amount(self, name, value):
|
||||
self.payable_amount = self.tax_inclusive_amount + self.charge_total_amount
|
||||
|
||||
|
||||
class DIANExtension(model.Model):
|
||||
__name__ = 'UBLExtension'
|
||||
|
||||
_content = fields.Many2One(Element, name='ExtensionContent', namespace='ext')
|
||||
|
||||
dian = fields.Many2One(dian.DianExtensions, name='DianExtensions', namespace='sts')
|
||||
|
||||
def __default_get__(self, name, value):
|
||||
return self.dian
|
||||
|
||||
class UBLExtension(model.Model):
|
||||
__name__ = 'UBLExtension'
|
||||
|
||||
content = fields.Many2One(Element, name='ExtensionContent', namespace='ext', default='')
|
||||
|
||||
class UBLExtensions(model.Model):
|
||||
__name__ = 'UBLExtensions'
|
||||
|
||||
dian = fields.Many2One(DIANExtension, namespace='ext', create=True)
|
||||
extension = fields.Many2One(UBLExtension, namespace='ext', create=True)
|
||||
|
||||
class Invoice(model.Model):
|
||||
__name__ = 'Invoice'
|
||||
__namespace__ = {
|
||||
@@ -277,18 +259,25 @@ class Invoice(model.Model):
|
||||
'xades': 'http://uri.etsi.org/01903/v1.3.2#',
|
||||
'ds': 'http://www.w3.org/2000/09/xmldsig#'
|
||||
}
|
||||
|
||||
|
||||
_ubl_extensions = fields.Many2One(UBLExtensions, namespace='ext')
|
||||
dian = fields.Virtual(getter='get_dian_extension')
|
||||
|
||||
profile_id = fields.Many2One(Element, name='ProfileID', namespace='cbc', default='DIAN 2.1')
|
||||
profile_execute_id = fields.Many2One(Element, name='ProfileExecuteID', namespace='cbc', default='2')
|
||||
|
||||
id = fields.Many2One(ID, namespace='cbc')
|
||||
issue = fields.Virtual(setter='set_issue')
|
||||
issue_date = fields.Many2One(Date, name='IssueDate', namespace='cbc')
|
||||
issue_time = fields.Many2One(Time, name='IssueTime', namespace='cbc')
|
||||
|
||||
period = fields.Many2One(InvoicePeriod, namespace='cac')
|
||||
period = fields.Many2One(Period, name='InvoicePeriod', namespace='cac')
|
||||
|
||||
supplier = fields.Many2One(AccountingSupplierParty, namespace='cac')
|
||||
customer = fields.Many2One(AccountingCustomerParty, namespace='cac')
|
||||
lines = fields.One2Many(InvoiceLine, namespace='cac')
|
||||
legal_monetary_total = fields.Many2One(LegalMonetaryTotal, namespace='cac')
|
||||
lines = fields.One2Many(InvoiceLine, namespace='cac')
|
||||
|
||||
taxtotal_01 = fields.Many2One(TaxTotal)
|
||||
taxtotal_04 = fields.Many2One(TaxTotal)
|
||||
@@ -359,3 +348,6 @@ class Invoice(model.Model):
|
||||
raise ValueError('expected type datetime')
|
||||
self.issue_date = value.date()
|
||||
self.issue_time = value
|
||||
|
||||
def get_dian_extension(self, name, _value):
|
||||
return self._ubl_extensions.dian
|
||||
|
||||
55
facho/fe/model/common.py
Normal file
55
facho/fe/model/common.py
Normal file
@@ -0,0 +1,55 @@
|
||||
import facho.model as model
|
||||
import facho.model.fields as fields
|
||||
|
||||
from datetime import date, datetime
|
||||
|
||||
__all__ = ['Element', 'Name', 'Date', 'Time', 'Period', 'ID']
|
||||
|
||||
class Element(model.Model):
|
||||
"""
|
||||
Lo usuamos para elementos que solo manejan contenido
|
||||
"""
|
||||
__name__ = 'Element'
|
||||
|
||||
class Name(model.Model):
|
||||
__name__ = 'Name'
|
||||
|
||||
class Date(model.Model):
|
||||
__name__ = 'Date'
|
||||
|
||||
def __default_set__(self, value):
|
||||
if isinstance(value, str):
|
||||
return value
|
||||
if isinstance(value, date):
|
||||
return value.isoformat()
|
||||
|
||||
def __str__(self):
|
||||
return str(self._value)
|
||||
|
||||
class Time(model.Model):
|
||||
__name__ = 'Time'
|
||||
|
||||
def __default_set__(self, value):
|
||||
if isinstance(value, str):
|
||||
return value
|
||||
if isinstance(value, date):
|
||||
return value.strftime('%H:%M:%S-05:00')
|
||||
|
||||
def __str__(self):
|
||||
return str(self._value)
|
||||
|
||||
class Period(model.Model):
|
||||
__name__ = 'Period'
|
||||
|
||||
start_date = fields.Many2One(Date, name='StartDate', namespace='cbc')
|
||||
|
||||
end_date = fields.Many2One(Date, name='EndDate', namespace='cbc')
|
||||
|
||||
class ID(model.Model):
|
||||
__name__ = 'ID'
|
||||
|
||||
def __default_get__(self, name, value):
|
||||
return self._value
|
||||
|
||||
def __str__(self):
|
||||
return str(self._value)
|
||||
37
facho/fe/model/dian.py
Normal file
37
facho/fe/model/dian.py
Normal file
@@ -0,0 +1,37 @@
|
||||
import facho.model as model
|
||||
import facho.model.fields as fields
|
||||
from .common import *
|
||||
|
||||
class SoftwareProvider(model.Model):
|
||||
__name__ = 'SoftwareProvider'
|
||||
|
||||
provider_id = fields.Many2One(Element, name='ProviderID', namespace='sts')
|
||||
software_id = fields.Many2One(Element, name='SoftwareID', namespace='sts')
|
||||
|
||||
class InvoiceSource(model.Model):
|
||||
__name__ = 'InvoiceSource'
|
||||
|
||||
identification_code = fields.Many2One(Element, name='IdentificationCode', namespace='sts', default='CO')
|
||||
|
||||
class AuthorizedInvoices(model.Model):
|
||||
__name__ = 'AuthorizedInvoices'
|
||||
|
||||
prefix = fields.Many2One(Element, name='Prefix', namespace='sts')
|
||||
from_range = fields.Many2One(Element, name='From', namespace='sts')
|
||||
to_range = fields.Many2One(Element, name='To', namespace='sts')
|
||||
|
||||
class InvoiceControl(model.Model):
|
||||
__name__ = 'InvoiceControl'
|
||||
|
||||
authorization = fields.Many2One(Element, name='InvoiceAuthorization', namespace='sts')
|
||||
period = fields.Many2One(Period, name='AuthorizationPeriod', namespace='sts')
|
||||
invoices = fields.Many2One(AuthorizedInvoices, namespace='sts')
|
||||
|
||||
class DianExtensions(model.Model):
|
||||
__name__ = 'DianExtensions'
|
||||
|
||||
software_security_code = fields.Many2One(Element, name='SoftwareSecurityCode', namespace='sts')
|
||||
software_provider = fields.Many2One(SoftwareProvider, namespace='sts')
|
||||
source = fields.Many2One(InvoiceSource, namespace='sts')
|
||||
control = fields.Many2One(InvoiceControl, namespace='sts')
|
||||
|
||||
Reference in New Issue
Block a user