facho/fe/fe.py(DianXMLExtensionInvoiceAuthorization): nueva extension para adicionar InvoiceAuthorization segun resolucion de facturacion

FossilOrigin-Name: d56e34d90366bc5063650569b8933a2b1575e759e71c8b3445a983eb16ec93c0
This commit is contained in:
bit4bit@riseup.net 2020-06-11 20:37:16 +00:00
parent 45ca3517aa
commit be9d1a37d5
3 changed files with 44 additions and 0 deletions

View File

@ -3,4 +3,5 @@ from .fe import NAMESPACES
from .fe import DianXMLExtensionSigner
from .fe import DianXMLExtensionSoftwareSecurityCode
from .fe import DianXMLExtensionCUFE
from .fe import DianXMLExtensionInvoiceAuthorization
from .fe import DianZIP

View File

@ -217,7 +217,37 @@ class DianXMLExtensionSigner(FachoXMLExtension):
return (dian_path, [signature])
class DianXMLExtensionInvoiceAuthorization(FachoXMLExtension):
# RESOLUCION 0004: pagina 106
def __init__(self, authorization: str,
period_startdate: datetime, period_enddate: datetime,
prefix: str, from_: int, to: int):
self.authorization = authorization
self.period_startdate = period_startdate
self.period_enddate = period_enddate
self.prefix = prefix
self.from_ = from_
self.to = to
def build(self, fexml):
fexml.set_element('/fe:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sts:DianExtensions/sts:InvoiceSource/cbc:IdentificationCode', 'CO')
invoice_control = fexml.fragment('/fe:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sts:DianExtensions/sts:InvoiceControl')
invoice_control.set_element('/sts:InvoiceControl/sts:InvoiceAuthorization', self.authorization)
invoice_control.set_element('/sts:InvoiceControl/sts:AuthorizationPeriod/cbc:StartDate',
self.period_startdate.strftime('%Y-%m-%d'))
invoice_control.set_element('/sts:InvoiceControl/sts:AuthorizationPeriod/cbc:EndDate',
self.period_enddate.strftime('%Y-%m-%d'))
invoice_control.set_element('/sts:InvoiceControl/sts:AuthorizedInvoices/sts:Prefix',
self.prefix)
invoice_control.set_element('/sts:InvoiceControl/sts:AuthorizedInvoices/sts:From',
self.from_)
invoice_control.set_element('/sts:InvoiceControl/sts:AuthorizedInvoices/sts:To',
self.to)
return '', []
class DianZIP:
# RESOLUCION 0001: pagina 540

View File

@ -2,6 +2,7 @@
# -*- coding: utf-8 -*-
# This file is part of facho. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from datetime import datetime
import pytest
from facho import fe
@ -53,3 +54,15 @@ def test_dian_extension_software_security_code():
xml.add_extension(security_code)
content = xml.get_element_text('/fe:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sts:DianExtensions/sts:SoftwareSecurityCode')
assert content is not None
def test_dian_extension_invoice_authorization():
invoice_authorization = '18762002346472'
inv_auth_ext = fe.DianXMLExtensionInvoiceAuthorization(invoice_authorization,
datetime(2017, 2, 23),
datetime(2019, 8, 23),
'MD', 100001, 174999)
xml = fe.FeXML('Invoice',
'http://www.dian.gov.co/contratos/facturaelectronica/v1')
xml.add_extension(inv_auth_ext)
auth = xml.get_element_text('/fe:Invoice/ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sts:DianExtensions/sts:InvoiceControl/sts:InvoiceAuthorization')
assert auth == invoice_authorization