From 5776a972caf37f8030fc7d19638c9fbed85cf315 Mon Sep 17 00:00:00 2001 From: "Jovany Leandro G.C" Date: Wed, 3 Jun 2020 12:00:19 -0500 Subject: [PATCH] se extracion confirmacion de habilitacion de la dian a configuration --- configuration.py | 2 ++ invoice.py | 36 ++++++++++++++++++++---------------- view/configuration_form.xml | 2 ++ 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/configuration.py b/configuration.py index 6a43b4d..8d5e1c5 100644 --- a/configuration.py +++ b/configuration.py @@ -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') diff --git a/invoice.py b/invoice.py index 61d9443..48fb8ed 100644 --- a/invoice.py +++ b/invoice.py @@ -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): diff --git a/view/configuration_form.xml b/view/configuration_form.xml index c8dbb56..ac813f4 100644 --- a/view/configuration_form.xml +++ b/view/configuration_form.xml @@ -1,5 +1,7 @@
+