forked from elmau/empresa-libre
PDF for pays complement
This commit is contained in:
parent
210f50a7d7
commit
f14c1f74d8
|
@ -82,6 +82,7 @@ from settings import (
|
||||||
EXT,
|
EXT,
|
||||||
MXN,
|
MXN,
|
||||||
PATHS,
|
PATHS,
|
||||||
|
PRE_DEFAULT,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -2111,25 +2112,53 @@ def _nomina(doc, data, values, version_cfdi):
|
||||||
return info
|
return info
|
||||||
|
|
||||||
|
|
||||||
|
def _get_info_pays_2(node):
|
||||||
|
pre_pays = PRE_DEFAULT['PAGOS']['PRE']
|
||||||
|
data = CaseInsensitiveDict(node.attrib.copy())
|
||||||
|
|
||||||
|
path = f"{pre_pays}Totales"
|
||||||
|
totales = node.find(path)
|
||||||
|
data.update(CaseInsensitiveDict(totales.attrib.copy()))
|
||||||
|
|
||||||
|
path = f"{pre_pays}Pago"
|
||||||
|
node_pay = node.find(path)
|
||||||
|
data.update(CaseInsensitiveDict(node_pay.attrib.copy()))
|
||||||
|
|
||||||
|
related = []
|
||||||
|
for n in node_pay:
|
||||||
|
attr = CaseInsensitiveDict(n.attrib.copy())
|
||||||
|
if attr:
|
||||||
|
attr['metododepagodr'] = ''
|
||||||
|
related.append(attr)
|
||||||
|
|
||||||
|
data['related'] = related
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
def _cfdipays(doc, data, version):
|
def _cfdipays(doc, data, version):
|
||||||
#todo: Obtener versión de complemento
|
#todo: Obtener versión de complemento
|
||||||
if version == '4.0':
|
if version == '4.0':
|
||||||
node = doc.find(f"{PRE[version]}Complemento/{PRE['pagos20']}Pagos")
|
pre_pays = PRE_DEFAULT['PAGOS']['PRE']
|
||||||
|
path = f"{PRE[version]}Complemento/{pre_pays}Pagos"
|
||||||
|
node = doc.find(path)
|
||||||
else:
|
else:
|
||||||
node = doc.find('{}Complemento/{}Pagos'.format(PRE[version], PRE['pagos']))
|
node = doc.find('{}Complemento/{}Pagos'.format(PRE[version], PRE['pagos']))
|
||||||
|
|
||||||
if node is None:
|
if node is None:
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
info = CaseInsensitiveDict(node.attrib.copy())
|
if version == '4.0':
|
||||||
|
info = _get_info_pays_2(node)
|
||||||
|
else:
|
||||||
|
info = CaseInsensitiveDict(node.attrib.copy())
|
||||||
|
related = []
|
||||||
|
for n1 in node:
|
||||||
|
info.update(CaseInsensitiveDict(n1.attrib.copy()))
|
||||||
|
for n2 in n1:
|
||||||
|
related.append(CaseInsensitiveDict(n2.attrib.copy()))
|
||||||
|
|
||||||
related = []
|
info['related'] = related
|
||||||
for n1 in node:
|
|
||||||
info.update(CaseInsensitiveDict(n1.attrib.copy()))
|
|
||||||
for n2 in n1:
|
|
||||||
related.append(CaseInsensitiveDict(n2.attrib.copy()))
|
|
||||||
|
|
||||||
info['related'] = related
|
|
||||||
|
|
||||||
data['comprobante']['totalenletras'] = to_letters(
|
data['comprobante']['totalenletras'] = to_letters(
|
||||||
float(info['monto']), info['monedap'])
|
float(info['monto']), info['monedap'])
|
||||||
|
|
|
@ -32,9 +32,9 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
from controllers import util
|
from controllers import util
|
||||||
|
|
||||||
from settings import log, COMPANIES, VERSION, PATH_CP, PRE, CURRENT_CFDI, \
|
from settings import log, COMPANIES, VERSION, PATH_CP, PRE, \
|
||||||
INIT_VALUES, DEFAULT_PASSWORD, DECIMALES, IMPUESTOS, DEFAULT_SAT_PRODUCTO, \
|
INIT_VALUES, DEFAULT_PASSWORD, DECIMALES, IMPUESTOS, DEFAULT_SAT_PRODUCTO, \
|
||||||
CANCEL_SIGNATURE, PUBLIC, DEFAULT_SERIE_TICKET, CURRENT_CFDI_NOMINA, \
|
CANCEL_SIGNATURE, PUBLIC, DEFAULT_SERIE_TICKET, \
|
||||||
DEFAULT_SAT_NOMINA, DECIMALES_TAX, TITLE_APP, MV, DECIMALES_PRECIOS, \
|
DEFAULT_SAT_NOMINA, DECIMALES_TAX, TITLE_APP, MV, DECIMALES_PRECIOS, \
|
||||||
DEFAULT_CFDIPAY, CURRENCY_MN
|
DEFAULT_CFDIPAY, CURRENCY_MN
|
||||||
|
|
||||||
|
@ -50,6 +50,7 @@ from settings import (
|
||||||
IS_MV,
|
IS_MV,
|
||||||
MXN,
|
MXN,
|
||||||
PATHS,
|
PATHS,
|
||||||
|
PRE_DEFAULT,
|
||||||
URL,
|
URL,
|
||||||
VALUES_PDF,
|
VALUES_PDF,
|
||||||
VERSION as VERSION_EMPRESA_LIBRE,
|
VERSION as VERSION_EMPRESA_LIBRE,
|
||||||
|
@ -4441,7 +4442,7 @@ class RangosPrecios(BaseModel):
|
||||||
|
|
||||||
class Facturas(BaseModel):
|
class Facturas(BaseModel):
|
||||||
cliente = ForeignKeyField(Socios)
|
cliente = ForeignKeyField(Socios)
|
||||||
version = TextField(default=CURRENT_CFDI)
|
version = TextField(default=PRE_DEFAULT['CFDI']['VERSION'])
|
||||||
serie = TextField(default='')
|
serie = TextField(default='')
|
||||||
folio = BigIntegerField(default=0)
|
folio = BigIntegerField(default=0)
|
||||||
fecha = DateTimeField(default=util.now, formats=['%Y-%m-%d %H:%M:%S'])
|
fecha = DateTimeField(default=util.now, formats=['%Y-%m-%d %H:%M:%S'])
|
||||||
|
@ -6575,7 +6576,7 @@ class PreFacturas(BaseModel):
|
||||||
}
|
}
|
||||||
|
|
||||||
data['comprobante'] = obj
|
data['comprobante'] = obj
|
||||||
data['comprobante']['version'] = CURRENT_CFDI
|
data['comprobante']['version'] = PRE_DEFAULT['CFDI']['VERSION']
|
||||||
data['comprobante']['folio'] = str(data['comprobante']['folio'])
|
data['comprobante']['folio'] = str(data['comprobante']['folio'])
|
||||||
data['comprobante']['seriefolio'] = '{}-{}'.format(
|
data['comprobante']['seriefolio'] = '{}-{}'.format(
|
||||||
data['comprobante']['serie'], data['comprobante']['folio'])
|
data['comprobante']['serie'], data['comprobante']['folio'])
|
||||||
|
@ -9034,7 +9035,7 @@ class Empleados(BaseModel):
|
||||||
|
|
||||||
class CfdiNomina(BaseModel):
|
class CfdiNomina(BaseModel):
|
||||||
empleado = ForeignKeyField(Empleados)
|
empleado = ForeignKeyField(Empleados)
|
||||||
version = TextField(default=CURRENT_CFDI)
|
version = TextField(default=PRE_DEFAULT['CFDI']['VERSION'])
|
||||||
serie = TextField(default='N')
|
serie = TextField(default='N')
|
||||||
folio = IntegerField(default=0)
|
folio = IntegerField(default=0)
|
||||||
fecha = DateTimeField(default=util.now, formats=['%Y-%m-%d %H:%M:%S'])
|
fecha = DateTimeField(default=util.now, formats=['%Y-%m-%d %H:%M:%S'])
|
||||||
|
@ -9075,7 +9076,7 @@ class CfdiNomina(BaseModel):
|
||||||
acuse = TextField(default='')
|
acuse = TextField(default='')
|
||||||
tipo_relacion = TextField(default='')
|
tipo_relacion = TextField(default='')
|
||||||
error = TextField(default='')
|
error = TextField(default='')
|
||||||
version_nomina = TextField(default=CURRENT_CFDI_NOMINA)
|
version_nomina = TextField(default=PRE_DEFAULT['NOMINA']['VERSION'])
|
||||||
registro_patronal = TextField(default='')
|
registro_patronal = TextField(default='')
|
||||||
rfc_patron_origen = TextField(default='')
|
rfc_patron_origen = TextField(default='')
|
||||||
tipo_nomina = ForeignKeyField(SATTipoNomina)
|
tipo_nomina = ForeignKeyField(SATTipoNomina)
|
||||||
|
|
|
@ -128,6 +128,22 @@ if 'win' in sys.platform:
|
||||||
PATH_XMLSEC = os.path.join(PATH_BIN, 'xmlsec.exe')
|
PATH_XMLSEC = os.path.join(PATH_BIN, 'xmlsec.exe')
|
||||||
|
|
||||||
|
|
||||||
|
PRE_DEFAULT = {
|
||||||
|
'CFDI': {'VERSION': '4.0', 'PRE': '{http://www.sat.gob.mx/cfd/4}'},
|
||||||
|
'NOMINA': {'VERSION': '1.2', 'PRE': '{http://www.sat.gob.mx/nomina12}'},
|
||||||
|
'PAGOS': {'VERSION': '2.0', 'PRE': '{http://www.sat.gob.mx/Pagos20}'},
|
||||||
|
'TIBRE': {'VERSION': '1.1', 'PRE': '{http://www.sat.gob.mx/TimbreFiscalDigital}'},
|
||||||
|
}
|
||||||
|
|
||||||
|
pre2 ='{http://www.sat.gob.mx/cfd/2}'
|
||||||
|
pre3 ='{http://www.sat.gob.mx/cfd/3}'
|
||||||
|
PRE_HISTORY = {
|
||||||
|
'CFDI': {'2.0': pre2, '2.2': pre2,
|
||||||
|
'3.0': pre3, '3.2': pre3, '3.3': pre3},
|
||||||
|
'NOMINA': {'1.1': '{http://www.sat.gob.mx/nomina}'},
|
||||||
|
'PAGOS': {'1.0': '{http://www.sat.gob.mx/Pagos}'},
|
||||||
|
}
|
||||||
|
|
||||||
PRE = {
|
PRE = {
|
||||||
'2.0': '{http://www.sat.gob.mx/cfd/2}',
|
'2.0': '{http://www.sat.gob.mx/cfd/2}',
|
||||||
'2.2': '{http://www.sat.gob.mx/cfd/2}',
|
'2.2': '{http://www.sat.gob.mx/cfd/2}',
|
||||||
|
@ -141,14 +157,16 @@ PRE = {
|
||||||
'LOCALES': '{http://www.sat.gob.mx/implocal}',
|
'LOCALES': '{http://www.sat.gob.mx/implocal}',
|
||||||
'NOMINA': {
|
'NOMINA': {
|
||||||
'1.1': '{http://www.sat.gob.mx/nomina}',
|
'1.1': '{http://www.sat.gob.mx/nomina}',
|
||||||
'1.2': '{http://www.sat.gob.mx/nomina12}',
|
|
||||||
},
|
},
|
||||||
'pagos': '{http://www.sat.gob.mx/Pagos}',
|
'PAGOS': {
|
||||||
'pagos20': '{http://www.sat.gob.mx/Pagos20}',
|
'1.0': '{http://www.sat.gob.mx/Pagos}',
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CURRENT_CFDI = '3.3'
|
# To delete
|
||||||
CURRENT_CFDI_NOMINA = '1.2'
|
# ~ CURRENT_CFDI = '4.0'
|
||||||
|
# ~ CURRENT_CFDI_NOMINA = '1.2'
|
||||||
|
|
||||||
DECIMALES = 2
|
DECIMALES = 2
|
||||||
DECIMALES_TAX = 4
|
DECIMALES_TAX = 4
|
||||||
DECIMALES_PRECIOS = 4
|
DECIMALES_PRECIOS = 4
|
||||||
|
|
Loading…
Reference in New Issue