commit
dc68b54f08
|
@ -33,8 +33,10 @@ log = Logger('PAC')
|
||||||
|
|
||||||
class Ecodex(object):
|
class Ecodex(object):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, auth, url):
|
||||||
self.codes = URL['codes']
|
self.auth = auth
|
||||||
|
self.url = url
|
||||||
|
self.codes = self.url['codes']
|
||||||
self.error = ''
|
self.error = ''
|
||||||
self.message = ''
|
self.message = ''
|
||||||
self._transport = Transport(cache=SqliteCache(), timeout=TIMEOUT)
|
self._transport = Transport(cache=SqliteCache(), timeout=TIMEOUT)
|
||||||
|
@ -45,7 +47,7 @@ class Ecodex(object):
|
||||||
self._plugins = [self._history]
|
self._plugins = [self._history]
|
||||||
|
|
||||||
def _get_token(self, rfc):
|
def _get_token(self, rfc):
|
||||||
client = Client(URL['seguridad'],
|
client = Client(self.url['seguridad'],
|
||||||
transport=self._transport, plugins=self._plugins)
|
transport=self._transport, plugins=self._plugins)
|
||||||
try:
|
try:
|
||||||
result = client.service.ObtenerToken(rfc, self._get_epoch())
|
result = client.service.ObtenerToken(rfc, self._get_epoch())
|
||||||
|
@ -54,7 +56,7 @@ class Ecodex(object):
|
||||||
log.error(self.error)
|
log.error(self.error)
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
s = '{}|{}'.format(AUTH['ID'], result.Token)
|
s = '{}|{}'.format(self.auth['ID'], result.Token)
|
||||||
return hashlib.sha1(s.encode()).hexdigest()
|
return hashlib.sha1(s.encode()).hexdigest()
|
||||||
|
|
||||||
def _get_token_rest(self, rfc):
|
def _get_token_rest(self, rfc):
|
||||||
|
@ -99,7 +101,7 @@ class Ecodex(object):
|
||||||
|
|
||||||
def timbra_xml(self, xml):
|
def timbra_xml(self, xml):
|
||||||
data = self._validate_xml(xml)
|
data = self._validate_xml(xml)
|
||||||
client = Client(URL['timbra'],
|
client = Client(self.url['timbra'],
|
||||||
transport=self._transport, plugins=self._plugins)
|
transport=self._transport, plugins=self._plugins)
|
||||||
try:
|
try:
|
||||||
result = client.service.TimbraXML(**data)
|
result = client.service.TimbraXML(**data)
|
||||||
|
@ -260,6 +262,12 @@ class Finkok(object):
|
||||||
except Fault as e:
|
except Fault as e:
|
||||||
self.error = str(e)
|
self.error = str(e)
|
||||||
return
|
return
|
||||||
|
except TransportError as e:
|
||||||
|
if '413' in str(e):
|
||||||
|
self.error = '413<BR><BR><b>Documento muy grande para timbrar</b>'
|
||||||
|
else:
|
||||||
|
self.error = str(e)
|
||||||
|
return
|
||||||
|
|
||||||
return self._check_result(method, result)
|
return self._check_result(method, result)
|
||||||
|
|
||||||
|
|
|
@ -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_XSLT, PATH_XSLTPROC, PATH_OPENSSL, PATH_TEMPLATES, PATH_MEDIA, PRE, \
|
||||||
PATH_XMLSEC, TEMPLATE_CANCEL, DEFAULT_SAT_PRODUCTO, DECIMALES, DIR_FACTURAS
|
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
|
from .configpac import AUTH
|
||||||
|
|
||||||
|
|
||||||
|
@ -554,18 +554,49 @@ def timbra_xml(xml, auth):
|
||||||
|
|
||||||
result = {'ok': True, 'error': ''}
|
result = {'ok': True, 'error': ''}
|
||||||
pac = PAC(auth)
|
pac = PAC(auth)
|
||||||
xml = pac.timbra_xml(xml)
|
new_xml = pac.timbra_xml(xml)
|
||||||
if not xml:
|
if not new_xml:
|
||||||
result['ok'] = False
|
result['ok'] = False
|
||||||
result['error'] = pac.error
|
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['uuid'] = pac.uuid
|
||||||
result['fecha'] = pac.fecha
|
result['fecha'] = pac.fecha
|
||||||
return result
|
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):
|
def get_sat(xml):
|
||||||
from .pac import get_status_sat
|
from .pac import get_status_sat
|
||||||
return get_status_sat(xml)
|
return get_status_sat(xml)
|
||||||
|
@ -1078,6 +1109,7 @@ class LIBO(object):
|
||||||
|
|
||||||
def pdf(self, path, data, ods=False):
|
def pdf(self, path, data, ods=False):
|
||||||
options = {'AsTemplate': True, 'Hidden': True}
|
options = {'AsTemplate': True, 'Hidden': True}
|
||||||
|
log.info('Abrir plantilla...')
|
||||||
self._template = self._doc_open(path, options)
|
self._template = self._doc_open(path, options)
|
||||||
if self._template is None:
|
if self._template is None:
|
||||||
return b''
|
return b''
|
||||||
|
@ -1092,13 +1124,10 @@ class LIBO(object):
|
||||||
_kill(path_ods)
|
_kill(path_ods)
|
||||||
return data
|
return data
|
||||||
|
|
||||||
doc = self._doc_open(path_ods, {'Hidden': True})
|
|
||||||
options = {'FilterName': 'calc_pdf_Export'}
|
options = {'FilterName': 'calc_pdf_Export'}
|
||||||
path_pdf = get_path_temp('.pdf')
|
path_pdf = get_path_temp('.pdf')
|
||||||
doc.storeToURL(self._path_url(path_pdf), self._set_properties(options))
|
self._template.storeToURL(self._path_url(path_pdf), self._set_properties(options))
|
||||||
doc.close(True)
|
|
||||||
self._template.close(True)
|
self._template.close(True)
|
||||||
|
|
||||||
data = self._read(path_pdf)
|
data = self._read(path_pdf)
|
||||||
_kill(path_ods)
|
_kill(path_ods)
|
||||||
_kill(path_pdf)
|
_kill(path_pdf)
|
||||||
|
|
|
@ -8,4 +8,4 @@ threads = 4
|
||||||
py-autoreload = 1
|
py-autoreload = 1
|
||||||
thunder-lock = true
|
thunder-lock = true
|
||||||
static-map = /static=../static
|
static-map = /static=../static
|
||||||
http-timeout = 180
|
http-timeout = 300
|
Loading…
Reference in New Issue