se extracion confirmacion de habilitacion de la dian a configuration

This commit is contained in:
Jovany Leandro G.C 2020-06-03 12:00:19 -05:00
parent 85df85d355
commit 5776a972ca
3 changed files with 24 additions and 16 deletions

View File

@ -9,6 +9,7 @@ class Configuration(
'Facho Configuration'
__name__ = 'account_invoice_facho.configuration'
dian_fe_habilitacion = fields.MultiValue(fields.Boolean('Habilitacion'))
dian_fe_key= fields.MultiValue(fields.Char('Dian FE KEY'))
dian_fe_llave_publica = fields.MultiValue(fields.Char('Publica PCKS#12'))
dian_fe_llave_privada = fields.MultiValue(fields.Char('Privada PCKS#12'))
@ -31,6 +32,7 @@ class ConfigurationDianFECompany(ModelSQL, CompanyValueMixin):
configuration = fields.Many2One('account_invoice_facho.configuration', 'Configuration',
required=True, ondelete='CASCADE')
dian_fe_habilitacion = fields.Boolean('Habilitacion')
dian_fe_key = fields.Char('Dian key')
dian_fe_llave_publica = fields.Char('Publica PCKS#12')
dian_fe_llave_privada = fields.Char('Publica PCKS#12')

View File

@ -181,8 +181,10 @@ class Invoice(metaclass=PoolMeta):
return client.request(request)
def fe_update_status(self):
config = Pool().get('account_invoice_facho.configuration')(1)
req = dian.GetStatusZip
if self.fe_habilitacion:
if config.dian_fe_habilitacion:
req = dian.Habilitacion.GetStatusZip
resp = self.do_dian_request(req(trackId = self.fe_delivery_trackid))
@ -200,34 +202,36 @@ class Invoice(metaclass=PoolMeta):
params['fe_delivery_checked_at'] = datetime.now()
self.write([self], params)
def fe_delivery_test(self):
config = Pool().get('account_invoice_facho.configuration')(1)
if self.fe_delivery_state not in ['queued', 'draft']:
return
facho_invoice = self.tofacho()
def _dian_zip_io(self, facho_invoice):
xml_invoice = form.DIANInvoiceXML(facho_invoice)
zipdata = io.BytesIO()
with fe.DianZIP(zipdata) as dianzip:
dianzip.add_invoice_xml(facho_invoice.invoice_ident, str(xml_invoice))
zipdata.seek(0)
return zipdata
def do_fe_delivery(self):
config = Pool().get('account_invoice_facho.configuration')(1)
if self.fe_delivery_state not in ['queued', 'draft']:
return
facho_invoice = self.tofacho()
req = dian.SendBillAsync
filename = 'invoice_%s' % (facho_invoice.invoice_ident)
res = self.do_dian_request(dian.Habilitacion.SendTestSetAsync(
filename, zipdata.read(),
config.dian_fe_test_setid
))
args = [filename, self._dian_zip_io(facho_invoice).read()]
if config.dian_fe_habilitacion:
req = dian.Habilitacion.SendTestSetAsync
args.append(config.dian_fe_test_setid)
res = self.do_dian_request(req(*args))
if not res.ZipKey:
raise UserError(str(res))
self._force_write({'fe_delivery_state': 'delivered',
'fe_delivery_trackid': res.ZipKey})
def fe_process(self):
if self.fe_habilitacion:
# TODO forzar facturas contabilidadas
self.fe_delivery_test()
self.do_fe_delivery()
@classmethod
def fe_delivery(cls):

View File

@ -1,5 +1,7 @@
<?xml version="1.0"?>
<form>
<label name="dian_fe_habilitacion"/>
<field name="dian_fe_habilitacion"/>
<label name="dian_fe_key"/>
<field name="dian_fe_key"/>
<label name="dian_fe_NITProveedorTecnologico"/>