Passed
Push — main ( 7d89fc...51c54c )
by Sat CFDI
06:05
created

satcfdi.accounting.formatters   A

Complexity

Total Complexity 25

Size/Duplication

Total Lines 108
Duplicated Lines 0 %

Test Coverage

Coverage 85.25%

Importance

Changes 0
Metric Value
eloc 73
dl 0
loc 108
ccs 52
cts 61
cp 0.8525
rs 10
c 0
b 0
f 0
wmc 25

12 Functions

Rating   Name   Duplication   Size   Complexity  
A format_conceptos() 0 2 1
B format_pagos() 0 17 7
A format_relaciones() 0 14 4
A format_forma_pago() 0 4 1
A format_fecha_pago() 0 9 3
A format_head() 0 3 1
A format_fecha() 0 2 1
A format_receptor() 0 3 1
A format_head_pre() 0 3 1
A format_estado_cfdi() 0 9 2
A format_forma_pago_dr() 0 7 2
A format_emisor() 0 3 1
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