diff --git a/source/app/controllers/pac.py b/source/app/controllers/pac.py
index fd6321d..33f3a08 100644
--- a/source/app/controllers/pac.py
+++ b/source/app/controllers/pac.py
@@ -33,8 +33,10 @@ log = Logger('PAC')
class Ecodex(object):
- def __init__(self):
- self.codes = URL['codes']
+ def __init__(self, auth, url):
+ self.auth = auth
+ self.url = url
+ self.codes = self.url['codes']
self.error = ''
self.message = ''
self._transport = Transport(cache=SqliteCache(), timeout=TIMEOUT)
@@ -45,7 +47,7 @@ class Ecodex(object):
self._plugins = [self._history]
def _get_token(self, rfc):
- client = Client(URL['seguridad'],
+ client = Client(self.url['seguridad'],
transport=self._transport, plugins=self._plugins)
try:
result = client.service.ObtenerToken(rfc, self._get_epoch())
@@ -54,7 +56,7 @@ class Ecodex(object):
log.error(self.error)
return ''
- s = '{}|{}'.format(AUTH['ID'], result.Token)
+ s = '{}|{}'.format(self.auth['ID'], result.Token)
return hashlib.sha1(s.encode()).hexdigest()
def _get_token_rest(self, rfc):
@@ -99,7 +101,7 @@ class Ecodex(object):
def timbra_xml(self, xml):
data = self._validate_xml(xml)
- client = Client(URL['timbra'],
+ client = Client(self.url['timbra'],
transport=self._transport, plugins=self._plugins)
try:
result = client.service.TimbraXML(**data)
@@ -260,6 +262,12 @@ class Finkok(object):
except Fault as e:
self.error = str(e)
return
+ except TransportError as e:
+ if '413' in str(e):
+ self.error = '413
Documento muy grande para timbrar'
+ else:
+ self.error = str(e)
+ return
return self._check_result(method, result)
diff --git a/source/app/controllers/util.py b/source/app/controllers/util.py
index eea83ce..ddd9f40 100644
--- a/source/app/controllers/util.py
+++ b/source/app/controllers/util.py
@@ -42,7 +42,7 @@ from settings import DEBUG, MV, log, template_lookup, COMPANIES, DB_SAT, \
PATH_XSLT, PATH_XSLTPROC, PATH_OPENSSL, PATH_TEMPLATES, PATH_MEDIA, PRE, \
PATH_XMLSEC, TEMPLATE_CANCEL, DEFAULT_SAT_PRODUCTO, DECIMALES, DIR_FACTURAS
-from settings import SEAFILE_SERVER, USAR_TOKEN, API
+from settings import DEBUG, SEAFILE_SERVER, USAR_TOKEN, API
from .configpac import AUTH
@@ -554,18 +554,49 @@ def timbra_xml(xml, auth):
result = {'ok': True, 'error': ''}
pac = PAC(auth)
- xml = pac.timbra_xml(xml)
- if not xml:
+ new_xml = pac.timbra_xml(xml)
+ if not new_xml:
result['ok'] = False
result['error'] = pac.error
- return result
+ if pac.error.startswith('413'):
+ return _ecodex_timbra_xml(xml)
+ else:
+ return result
- result['xml'] = xml
+ result['xml'] = new_xml
result['uuid'] = pac.uuid
result['fecha'] = pac.fecha
return result
+def _get_uuid_fecha(xml):
+ doc = parse_xml(xml)
+ version = doc.attrib['Version']
+ node = doc.find('{}Complemento/{}TimbreFiscalDigital'.format(
+ PRE[version], PRE['TIMBRE']))
+ return node.attrib['UUID'], node.attrib['FechaTimbrado']
+
+
+def _ecodex_timbra_xml(xml):
+ from .pac import Ecodex as PAC
+ from .configpac import ecodex
+
+ auth, url = ecodex(DEBUG)
+
+ pac = PAC(auth, url)
+ xml = pac.timbra_xml(xml)
+ if xml:
+ data = {'ok': True, 'error': ''}
+ data['xml'] = xml
+ uuid, fecha = _get_uuid_fecha(xml)
+ data['uuid'] = uuid
+ data['fecha'] = fecha
+ return data
+
+ msg = pac.error
+ return {'ok': False, 'error': msg}
+
+
def get_sat(xml):
from .pac import get_status_sat
return get_status_sat(xml)
@@ -1078,6 +1109,7 @@ class LIBO(object):
def pdf(self, path, data, ods=False):
options = {'AsTemplate': True, 'Hidden': True}
+ log.info('Abrir plantilla...')
self._template = self._doc_open(path, options)
if self._template is None:
return b''
@@ -1092,13 +1124,10 @@ class LIBO(object):
_kill(path_ods)
return data
- doc = self._doc_open(path_ods, {'Hidden': True})
options = {'FilterName': 'calc_pdf_Export'}
path_pdf = get_path_temp('.pdf')
- doc.storeToURL(self._path_url(path_pdf), self._set_properties(options))
- doc.close(True)
+ self._template.storeToURL(self._path_url(path_pdf), self._set_properties(options))
self._template.close(True)
-
data = self._read(path_pdf)
_kill(path_ods)
_kill(path_pdf)
diff --git a/source/app/main_debug.ini b/source/app/main_debug.ini
index 2196794..e6090c5 100644
--- a/source/app/main_debug.ini
+++ b/source/app/main_debug.ini
@@ -8,4 +8,4 @@ threads = 4
py-autoreload = 1
thunder-lock = true
static-map = /static=../static
-http-timeout = 180
\ No newline at end of file
+http-timeout = 300
\ No newline at end of file