PDF for pays complement

This commit is contained in:
el Mau 2023-01-02 22:59:39 -06:00
parent 210f50a7d7
commit f14c1f74d8
3 changed files with 68 additions and 20 deletions

View File

@ -82,6 +82,7 @@ from settings import (
EXT,
MXN,
PATHS,
PRE_DEFAULT,
)
@ -2111,25 +2112,53 @@ def _nomina(doc, data, values, version_cfdi):
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):
#todo: Obtener versión de complemento
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:
node = doc.find('{}Complemento/{}Pagos'.format(PRE[version], PRE['pagos']))
if node is None:
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 = []
for n1 in node:
info.update(CaseInsensitiveDict(n1.attrib.copy()))
for n2 in n1:
related.append(CaseInsensitiveDict(n2.attrib.copy()))
info['related'] = related
info['related'] = related
data['comprobante']['totalenletras'] = to_letters(
float(info['monto']), info['monedap'])

View File

@ -32,9 +32,9 @@ if __name__ == '__main__':
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, \
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_CFDIPAY, CURRENCY_MN
@ -50,6 +50,7 @@ from settings import (
IS_MV,
MXN,
PATHS,
PRE_DEFAULT,
URL,
VALUES_PDF,
VERSION as VERSION_EMPRESA_LIBRE,
@ -4441,7 +4442,7 @@ class RangosPrecios(BaseModel):
class Facturas(BaseModel):
cliente = ForeignKeyField(Socios)
version = TextField(default=CURRENT_CFDI)
version = TextField(default=PRE_DEFAULT['CFDI']['VERSION'])
serie = TextField(default='')
folio = BigIntegerField(default=0)
fecha = DateTimeField(default=util.now, formats=['%Y-%m-%d %H:%M:%S'])
@ -6575,7 +6576,7 @@ class PreFacturas(BaseModel):
}
data['comprobante'] = obj
data['comprobante']['version'] = CURRENT_CFDI
data['comprobante']['version'] = PRE_DEFAULT['CFDI']['VERSION']
data['comprobante']['folio'] = str(data['comprobante']['folio'])
data['comprobante']['seriefolio'] = '{}-{}'.format(
data['comprobante']['serie'], data['comprobante']['folio'])
@ -9034,7 +9035,7 @@ class Empleados(BaseModel):
class CfdiNomina(BaseModel):
empleado = ForeignKeyField(Empleados)
version = TextField(default=CURRENT_CFDI)
version = TextField(default=PRE_DEFAULT['CFDI']['VERSION'])
serie = TextField(default='N')
folio = IntegerField(default=0)
fecha = DateTimeField(default=util.now, formats=['%Y-%m-%d %H:%M:%S'])
@ -9075,7 +9076,7 @@ class CfdiNomina(BaseModel):
acuse = TextField(default='')
tipo_relacion = TextField(default='')
error = TextField(default='')
version_nomina = TextField(default=CURRENT_CFDI_NOMINA)
version_nomina = TextField(default=PRE_DEFAULT['NOMINA']['VERSION'])
registro_patronal = TextField(default='')
rfc_patron_origen = TextField(default='')
tipo_nomina = ForeignKeyField(SATTipoNomina)

View File

@ -128,6 +128,22 @@ if 'win' in sys.platform:
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 = {
'2.0': '{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}',
'NOMINA': {
'1.1': '{http://www.sat.gob.mx/nomina}',
'1.2': '{http://www.sat.gob.mx/nomina12}',
},
'pagos': '{http://www.sat.gob.mx/Pagos}',
'pagos20': '{http://www.sat.gob.mx/Pagos20}',
'PAGOS': {
'1.0': '{http://www.sat.gob.mx/Pagos}',
}
}
CURRENT_CFDI = '3.3'
CURRENT_CFDI_NOMINA = '1.2'
# To delete
# ~ CURRENT_CFDI = '4.0'
# ~ CURRENT_CFDI_NOMINA = '1.2'
DECIMALES = 2
DECIMALES_TAX = 4
DECIMALES_PRECIOS = 4