Issues (158)

satcfdi/create/cancela/cancelacion.py (1 issue)

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
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