Cancelacion.__init__()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 34
Code Lines 21

Duplication

Lines 34
Ratio 100 %

Code Coverage

Tests 5
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 21
nop 4
dl 34
loc 34
ccs 5
cts 5
cp 1
crap 1
rs 9.376
c 0
b 0
f 0
1 1
from collections.abc import Sequence
2 1
from datetime import datetime
3
4 1
from .. import Signer
5 1
from ..w3.signature import signature_c14n_sha1
6 1
from ...utils import ScalarMap
7 1
from ...xelement import XElement
8
9
10 1
class Folio(ScalarMap):
11
    """
12
    http://cancelacfd.sat.gob.mx
13
    Folio fiscal (UUID) a ser cancelado.
14
    """
15
16 1
    def __init__(
17
            self,
18
            uuid: str,
19
            motivo: str,
20
            folio_sustitucion: str = None,
21
    ):
22
        """
23
        Folio fiscal (UUID) a ser cancelado.
24
        
25
        :param uuid: UUID generado en la operación de timbrado del comprobante solicitado.
26
        :param motivo: Clave del motivo de cancelación del comprobante.
27
        :param folio_sustitucion: Atributo condicional que representa al UUID que sustituye al folio fiscal cancelado. Es requerido cuando la clave del motivo de cancelación es 01.
28
        """
29
30 1
        super().__init__({
31
            'UUID': uuid,
32
            'Motivo': motivo,
33
            'FolioSustitucion': folio_sustitucion,
34
        })
35
36
37 1 View Code Duplication
class Cancelacion(XElement):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
38
    """
39
    Elemento raíz para realizar una solicitud de cancelación de CFDI.
40
    """
41 1
    tag = '{http://cancelacfd.sat.gob.mx}Cancelacion'
42
43 1
    def __init__(
44
            self,
45
            emisor: Signer,
46
            folios: Folio | Sequence[Folio | dict],
47
            fecha: datetime = None
48
    ):
49
        """
50
        Elemento raíz para realizar una solicitud de cancelación de CFDI.
51
        
52
        :param emisor: Atributo requerido para expresar el RFC del emisor del (os) CFDI a cancelar.
53
        :param fecha: Atributo requerido para expresar la fecha de la operación.
54
        :param folios: Colección de folios fiscales (UUID) a ser cancelados.
55
        """
56 1
        super().__init__({
57
            'RfcEmisor': emisor.rfc,
58
            'Fecha': fecha or datetime.now(),
59
            'Folios': folios,
60
        })
61 1
        self["_nsmap"] = {
62
            None: "http://cancelacfd.sat.gob.mx",
63
            "xsd": "http://www.w3.org/2001/XMLSchema",
64
            "xsi": "http://www.w3.org/2001/XMLSchema-instance"
65
        }
66
67 1
        sig = signature_c14n_sha1(
68
            signer=emisor,
69
            element=self.to_xml(),
70
            nsmap={
71
                None: 'http://www.w3.org/2000/09/xmldsig#',
72
                "xsd": "http://www.w3.org/2001/XMLSchema",
73
                "xsi": "http://www.w3.org/2001/XMLSchema-instance",
74
            }
75
        )
76 1
        self['Signature'] = sig
77
78