1
|
1 |
|
import logging |
2
|
|
|
|
3
|
1 |
|
from .models import Payment, PaymentsDetails, SatCFDI |
4
|
1 |
|
from .. import iterate |
5
|
|
|
|
6
|
1 |
|
logger = logging.getLogger(__name__) |
7
|
|
|
|
8
|
|
|
|
9
|
1 |
|
def format_head(cfdi): |
10
|
1 |
|
return str(cfdi["TipoDeComprobante"]) + " " + cfdi["Version"] + "\n" + \ |
11
|
|
|
str(cfdi.uuid) + "\n- " + cfdi.name |
12
|
|
|
|
13
|
|
|
|
14
|
1 |
|
def format_head_pre(cfdi): |
15
|
|
|
return str(cfdi["TipoDeComprobante"]) + " " + cfdi["Version"] + "\n" + \ |
16
|
|
|
"*" + cfdi["Serie"] + cfdi["Folio"] |
17
|
|
|
|
18
|
|
|
|
19
|
1 |
|
def format_fecha(cfdi): |
20
|
1 |
|
return str(cfdi["Fecha"]) + "\n" + cfdi["LugarExpedicion"].code + "\n" + str(cfdi["Receptor"]["UsoCFDI"]) |
21
|
|
|
|
22
|
|
|
|
23
|
1 |
|
def format_emisor(cfdi): |
24
|
1 |
|
emisor = cfdi["Emisor"] |
25
|
1 |
|
return emisor["Nombre"] + "\n" + emisor["Rfc"] + "\n" + str(emisor["RegimenFiscal"]) |
26
|
|
|
|
27
|
|
|
|
28
|
1 |
|
def format_receptor(cfdi): |
29
|
1 |
|
receptor = cfdi["Receptor"] |
30
|
1 |
|
return receptor.get("Nombre", "") + "\n" + receptor["Rfc"] + " - " + receptor.get("DomicilioFiscalReceptor", "") + "\n" + str(receptor.get("RegimenFiscalReceptor", "")) |
31
|
|
|
|
32
|
|
|
|
33
|
1 |
|
def format_forma_pago(cfdi): |
34
|
1 |
|
return str(cfdi.get("FormaPago")) + "\n" + \ |
35
|
|
|
str(cfdi.get("MetodoPago")) + "\n" + \ |
36
|
|
|
str(cfdi["Moneda"]) |
37
|
|
|
|
38
|
|
|
|
39
|
1 |
|
def format_forma_pago_dr(payment: Payment): |
40
|
1 |
|
if payment.pago is None: |
41
|
1 |
|
return format_forma_pago(payment.comprobante) |
42
|
|
|
|
43
|
1 |
|
return str(payment.pago["FormaDePagoP"]) + "\n" + \ |
44
|
|
|
str(payment.docto_relacionado.get("MetodoDePagoDR")) + "\n" + \ |
45
|
|
|
str(payment.docto_relacionado["MonedaDR"]) |
46
|
|
|
|
47
|
|
|
|
48
|
1 |
|
def format_fecha_pago(payment: PaymentsDetails): |
49
|
1 |
|
if payment.pago: |
50
|
1 |
|
return payment.pago["FechaPago"] |
51
|
|
|
|
52
|
1 |
|
def_pagado = payment.comprobante.saldo_pendiente == 0 |
53
|
1 |
|
if def_pagado: |
54
|
1 |
|
return payment.comprobante["Fecha"] |
55
|
|
|
else: |
56
|
|
|
return "Pendiente" |
57
|
|
|
|
58
|
|
|
|
59
|
1 |
|
def format_estado_cfdi(cfdi: SatCFDI): |
60
|
1 |
|
estatus = cfdi.consulta_estado() |
61
|
1 |
|
if not estatus: |
62
|
1 |
|
return "" |
63
|
|
|
|
64
|
|
|
return ( |
65
|
|
|
(estatus["Estado"] or "") + "\n" + |
66
|
|
|
(estatus["EsCancelable"] or "") + "\n" + |
67
|
|
|
(estatus["EstatusCancelacion"] or "") |
68
|
|
|
) |
69
|
|
|
|
70
|
|
|
|
71
|
1 |
|
def format_pagos(cfdi: SatCFDI): |
72
|
1 |
|
if cfdi["TipoDeComprobante"] == "P": |
73
|
1 |
|
for pago in cfdi["Complemento"]["Pagos"]["Pago"]: |
74
|
1 |
|
response = "" |
75
|
1 |
|
for doc_rel in pago.get("DoctoRelacionado", []): |
76
|
1 |
|
response += doc_rel["IdDocumento"] + '\n' + \ |
77
|
|
|
'- ' + doc_rel.get("Serie", "") + doc_rel.get("Folio", "") + '\n' |
78
|
1 |
|
return response[:-1] |
79
|
|
|
|
80
|
1 |
|
if cfdi["TipoDeComprobante"] == "I": |
81
|
1 |
|
payment_complements = cfdi.payments |
82
|
1 |
|
if payment_complements: |
83
|
1 |
|
response = "" |
84
|
1 |
|
for p in payment_complements: |
85
|
1 |
|
response += str(p.comprobante.uuid) + '\n' + \ |
86
|
|
|
'- ' + p.comprobante.name + '\n' |
87
|
1 |
|
return response[:-1] |
88
|
|
|
|
89
|
|
|
|
90
|
1 |
|
def format_relaciones(cfdi: SatCFDI): |
91
|
1 |
|
response = [] |
92
|
|
|
|
93
|
1 |
|
for rel in iterate(cfdi.get("CfdiRelacionados")): |
94
|
|
|
response.append(str(rel["TipoRelacion"])) |
95
|
|
|
for uuid in rel["CfdiRelacionado"]: |
96
|
|
|
response.append(str(uuid)) |
97
|
|
|
|
98
|
1 |
|
for c in cfdi.relations: |
99
|
|
|
response.append(str(c.cfdi_relacionados["TipoRelacion"])) |
100
|
|
|
response.append(str(c.comprobante.uuid)) |
101
|
|
|
response.append(str("- " + c.comprobante.name)) |
102
|
|
|
|
103
|
1 |
|
return "\n".join(response) |
104
|
|
|
|
105
|
|
|
|
106
|
1 |
|
def format_conceptos(cfdi): |
107
|
|
|
return "\n".join([str(c["ClaveProdServ"]) + "\n- " + c['Descripcion'] for c in cfdi["Conceptos"]]) |
108
|
|
|
|