Skip to content

Commit 38c3982

Browse files
authored
Merge pull request #31 from akretion/nfe_4.00
Nfe 4.00 - Odoo 8.0 - OCA
2 parents 37d6462 + 0706ad9 commit 38c3982

File tree

533 files changed

+36165
-20643
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

533 files changed

+36165
-20643
lines changed

pysped/__init__.py

Lines changed: 12 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,16 @@
3939
# <http://www.gnu.org/licenses/>
4040
#
4141

42+
import sys
43+
import locale
44+
45+
if sys.version_info.major == 2:
46+
locale.setlocale(locale.LC_ALL, b'pt_BR.UTF-8')
47+
locale.setlocale(locale.LC_COLLATE, b'pt_BR.UTF-8')
48+
else:
49+
locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8')
50+
locale.setlocale(locale.LC_COLLATE, 'pt_BR.UTF-8')
51+
4252
from pysped.cte.leiaute.canccte_104 import CancCTe as CancCTe_104
4353
from pysped.cte.leiaute.canccte_104 import ProcCancCTe as ProcCancCTe_104
4454
from pysped.cte.leiaute.canccte_104 import RetCancCTe as RetCancCTe_104
@@ -101,74 +111,5 @@
101111
from pysped.nfe.leiaute.nfe_110 import Vol as Vol_110
102112
from pysped.nfe.leiaute.soap_100 import SOAPEnvio as SOAPEnvio_110
103113
from pysped.nfe.leiaute.soap_100 import SOAPRetorno as SOAPRetorno_110
104-
from pysped.nfe.processador_nfe import ProcessadorNFe, DANFE, Certificado
105-
106-
107-
# Pyflakes
108-
109-
Adi_110
110-
Arma_110
111-
CTe_104
112-
CancCTe_104
113-
CancNFe_107
114-
Certificado
115-
ConsCad_101
116-
ConsReciCTe_104
117-
ConsReciNFe_110
118-
ConsSitCTe_104
119-
ConsSitNFe_107
120-
ConsStatServCTe_104
121-
ConsStatServ_107
122-
DANFE
123-
DI_110
124-
Det_110
125-
Dup_104
126-
Dup_110
127-
ESQUEMA_ATUAL
128-
EnviCTe_104
129-
EnviNFe_110
130-
InfNF_104
131-
InfNFe_104
132-
InfOutros_104
133-
InfQ_104
134-
InutCTe_104
135-
InutNFe_107
136-
Lacres_110
137-
Med_110
138-
NFRef_110
139-
NFe_110
140-
ObsCont_104
141-
ObsCont_110
142-
ObsFisco_104
143-
ObsFisco_110
144-
Pass_104
145-
ProcCTe_104
146-
ProcCancCTe_104
147-
ProcCancNFe_107
148-
ProcInutCTe_104
149-
ProcInutNFe_107
150-
ProcNFe_110
151-
ProcRef_110
152-
ProcessadorNFe
153-
ProtCTe_104
154-
ProtNFe_110
155-
Reboque_110
156-
RetCancCTe_104
157-
RetCancNFe_107
158-
RetConsCad_101
159-
RetConsReciCTe_104
160-
RetConsReciNFe_110
161-
RetConsSitCTe_104
162-
RetConsSitNFe_107
163-
RetConsStatServCTe_104
164-
RetConsStatServ_107
165-
RetEnviCTe_104
166-
RetEnviNFe_110
167-
RetInutCTe_104
168-
RetInutNFe_107
169-
SOAPEnvio_104
170-
SOAPEnvio_110
171-
SOAPRetorno_104
172-
SOAPRetorno_110
173-
Vol_110
174-
114+
#from pysped.nfe.processador_nfe import ProcessadorNFe, DANFE, Certificado
115+
from pysped.nfe.processador_nfe import ProcessadorNFe, Certificado

pysped/cte/leiaute/__init__.py

Lines changed: 99 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -47,65 +47,133 @@
4747
#
4848
# Envelopes SOAP
4949
#
50-
from soap_104 import SOAPEnvio as SOAPEnvio_104
51-
from soap_104 import SOAPRetorno as SOAPRetorno_104
50+
from .soap_104 import SOAPEnvio as SOAPEnvio_104
51+
from .soap_104 import SOAPRetorno as SOAPRetorno_104
5252

5353
#
5454
# Emissão de CT-e
5555
#
56-
from cte_104 import CTe as CTe_104
57-
from cte_104 import InfNF as InfNF_104
58-
from cte_104 import InfNFe as InfNFe_104
59-
from cte_104 import InfOutros as InfOutros_104
60-
from cte_104 import Pass as Pass_104
61-
from cte_104 import ObsCont as ObsCont_104
62-
from cte_104 import ObsFisco as ObsFisco_104
63-
from cte_104 import InfQ as InfQ_104
64-
#from cte_104 import ContQt as ContQt_104
65-
#from cte_104 import Seg as Seg_104
66-
#from cte_104 import Peri as Peri_104
67-
#from cte_104 import VeicNovos as VeicNovos_104
68-
from cte_104 import Dup as Dup_104
56+
from .cte_104 import CTe as CTe_104
57+
from .cte_104 import InfNF as InfNF_104
58+
from .cte_104 import InfNFe as InfNFe_104
59+
from .cte_104 import InfOutros as InfOutros_104
60+
from .cte_104 import Pass as Pass_104
61+
from .cte_104 import ObsCont as ObsCont_104
62+
from .cte_104 import ObsFisco as ObsFisco_104
63+
from .cte_104 import InfQ as InfQ_104
64+
#from .cte_104 import ContQt as ContQt_104
65+
#from .cte_104 import Seg as Seg_104
66+
#from .cte_104 import Peri as Peri_104
67+
#from .cte_104 import VeicNovos as VeicNovos_104
68+
from .cte_104 import Dup as Dup_104
6969

7070
#
7171
# Envio de lote de CT-e
7272
#
73-
from envicte_104 import EnviCTe as EnviCTe_104
74-
from envicte_104 import RetEnviCTe as RetEnviCTe_104
73+
from .envicte_104 import EnviCTe as EnviCTe_104
74+
from .envicte_104 import RetEnviCTe as RetEnviCTe_104
7575

7676
#
7777
# Consulta do recibo do lote de CT-e
7878
#
79-
from consrecicte_104 import ConsReciCTe as ConsReciCTe_104
80-
from consrecicte_104 import RetConsReciCTe as RetConsReciCTe_104
81-
from consrecicte_104 import ProtCTe as ProtCTe_104
82-
from consrecicte_104 import ProcCTe as ProcCTe_104
79+
from .consrecicte_104 import ConsReciCTe as ConsReciCTe_104
80+
from .consrecicte_104 import RetConsReciCTe as RetConsReciCTe_104
81+
from .consrecicte_104 import ProtCTe as ProtCTe_104
82+
from .consrecicte_104 import ProcCTe as ProcCTe_104
8383

8484
#
8585
# Cancelamento de CT-e
8686
#
87-
from canccte_104 import CancCTe as CancCTe_104
88-
from canccte_104 import RetCancCTe as RetCancCTe_104
89-
from canccte_104 import ProcCancCTe as ProcCancCTe_104
87+
from .canccte_104 import CancCTe as CancCTe_104
88+
from .canccte_104 import RetCancCTe as RetCancCTe_104
89+
from .canccte_104 import ProcCancCTe as ProcCancCTe_104
9090

9191
#
9292
# Inutilização de CT-e
9393
#
94-
from inutcte_104 import InutCTe as InutCTe_104
95-
from inutcte_104 import RetInutCTe as RetInutCTe_104
96-
from inutcte_104 import ProcInutCTe as ProcInutCTe_104
94+
from .inutcte_104 import InutCTe as InutCTe_104
95+
from .inutcte_104 import RetInutCTe as RetInutCTe_104
96+
from .inutcte_104 import ProcInutCTe as ProcInutCTe_104
9797

9898
#
9999
# Consulta a situação de CT-e
100100
#
101-
from conssitcte_104 import ConsSitCTe as ConsSitCTe_104
102-
from conssitcte_104 import RetConsSitCTe as RetConsSitCTe_104
101+
from .conssitcte_104 import ConsSitCTe as ConsSitCTe_104
102+
from .conssitcte_104 import RetConsSitCTe as RetConsSitCTe_104
103103

104104
#
105105
# Consulta a situação do serviço
106106
#
107-
from consstatserv_104 import ConsStatServCTe as ConsStatServCTe_104
108-
from consstatserv_104 import RetConsStatServCTe as RetConsStatServCTe_104
107+
from .consstatserv_104 import ConsStatServCTe as ConsStatServCTe_104
108+
from .consstatserv_104 import RetConsStatServCTe as RetConsStatServCTe_104
109+
110+
111+
ESQUEMA_ATUAL_VERSAO_300 = u'PL_CTe_300'
112+
113+
#Envelopes SOAP
114+
from .soap_300 import SOAPEnvio as SOAPEnvio_300
115+
from .soap_300 import SOAPRetorno as SOAPRetorno_300
116+
117+
# Emissão de CT-e 3.00
118+
from .cte_300 import CTe as CTe_300
119+
from .cte_300 import InfQ as InfQ_300
120+
from .cte_300 import InfNF as InfNF_300
121+
from .cte_300 import InfNFe as InfNFe_300
122+
from .cte_300 import InfOutros as InfOutros_300
123+
from .cte_300 import VeicNovos as VeicNovos_300
124+
from .cte_300 import Comp as Comp_300
125+
from .cte_300 import Pass as Pass_300
126+
from .cte_300 import ObsCont as ObsCont_300
127+
from .cte_300 import ObsFisco as ObsFisco_300
128+
from .cte_300 import AutXML as AutXML_300
129+
from .cte_300 import InfCTeMultimodal as InfCTeMultimodal_300
130+
from .cte_300 import Dup as Dup_300
131+
from .cte_300 import IdDocAnt as IdDocAnt_300
132+
from .cte_300 import IdDocAntPap as IdDocAntPap_300
133+
from .cte_300 import IdDocAntEle as IdDocAntEle_300
134+
from .cte_300 import EmitDocAnt as EmitDocAnt_300
135+
from .cte_300 import InfUnidCarga as InfUnidCarga_300
136+
from .cte_300 import InfUnidTransp as InfUnidTransp_300
137+
from .cte_300 import LacUnidTransp as LacUnidTransp_300
138+
from .cte_300 import LacUnidCarga as LacUnidCarga_300
139+
140+
# Envio e retorno eventos
141+
from .proceventocte_300 import EventoCTe as EventoCTe_300
142+
from .proceventocte_300 import RetEventoCTe as RetEventoCTe_300
143+
from .proceventocte_300 import ProcEventoCTe as ProcEventoCTe_300
144+
145+
# Eventos
146+
from .eventoscte_300 import EvCancCTe as EvCancCTe_300
147+
from .eventoscte_300 import EvEPECCTe as EvEPECCTe_300
148+
from .eventoscte_300 import EvRegMultimodal as EvRegMultimodal_300
149+
from .eventoscte_300 import EvCCeCTe as EvCCeCTe_300
150+
from .eventoscte_300 import InfCorrecao as InfCorrecao_300
151+
from .eventoscte_300 import EvPrestDesacordo as EvPrestDesacordo_300
152+
from .eventoscte_300 import EvGTV as EvGTV_300
153+
154+
# Consulta status servico
155+
from .consstatserv_300 import ConsStatServCTe as ConsStatServCTe_300
156+
from .consstatserv_300 import RetConsStatServCTe as RetConsStatServCTe_300
157+
158+
# Consulta a situação de CT-e
159+
from .conssitcte_300 import ConsSitCTe as ConsSitCTe_300
160+
from .conssitcte_300 import RetConsSitCTe as RetConsSitCTe_300
161+
162+
163+
# Envio de lote de CT-e
164+
from .envicte_300 import EnviCTe as EnviCTe_300
165+
from .envicte_300 import RetEnviCTe as RetEnviCTe_300
166+
167+
# Consulta do recibo do lote de CT-e
168+
from .consrecicte_300 import ConsReciCTe as ConsReciCTe_300
169+
from .consrecicte_300 import RetConsReciCTe as RetConsReciCTe_300
170+
from .consrecicte_300 import ProtCTe as ProtCTe_300
171+
from .consrecicte_300 import ProcCTe as ProcCTe_300
172+
173+
# Inutilização de ct-e
174+
from .inutcte_300 import InutCTe as InutCTe_300
175+
from .inutcte_300 import RetInutCTe as RetInutCTe_300
176+
from .inutcte_300 import ProcInutCTe as ProcInutCTe_300
109177

110178
# Pyflakes
111179

pysped/cte/leiaute/canccte_300.py

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# -*- coding: utf-8 -*-
2+
3+
from pysped.xml_sped import *
4+
from pysped.cte.leiaute import ESQUEMA_ATUAL_VERSAO_300 as ESQUEMA_ATUAL
5+
import os
6+
7+
DIRNAME = os.path.dirname(__file__)
8+
9+
10+
class InfCancRecebido(XMLNFe):
11+
def __init__(self):
12+
super(InfCancRecebido, self).__init__()
13+
self.Id = TagCaracter(nome='infCanc' , codigo='CR03' , tamanho=[17, 17] , raiz='//retCancCTe', namespace=NAMESPACE_CTE, propriedade='Id', obrigatorio=False)
14+
self.tpAmb = TagInteiro(nome='tpAmb' , codigo='CR05' , tamanho=[1, 1, 1] , raiz='//retCancCTe/infCanc', namespace=NAMESPACE_CTE, valor=2)
15+
self.verAplic = TagCaracter(nome='verAplic', codigo='CR06' , tamanho=[1, 20] , raiz='//retCancCTe/infCanc', namespace=NAMESPACE_CTE)
16+
self.cStat = TagCaracter(nome='cStat' , codigo='CR07' , tamanho=[3, 3, 3] , raiz='//retCancCTe/infCanc', namespace=NAMESPACE_CTE)
17+
self.xMotivo = TagCaracter(nome='xMotivo' , codigo='CR08' , tamanho=[1, 255] , raiz='//retCancCTe/infCanc', namespace=NAMESPACE_CTE)
18+
self.cUF = TagInteiro(nome='cUF' , codigo='CR08a', tamanho=[2, 2, 2] , raiz='//retCancCTe/infCanc', namespace=NAMESPACE_CTE)
19+
self.chCTe = TagCaracter(nome='chCTe' , codigo='CR09' , tamanho=[44, 44, 44], raiz='//retcancCTe/infCanc', namespace=NAMESPACE_CTE, obrigatorio=False)
20+
self.dhRecbto = TagDataHora(nome='dhRecbto', codigo='CR10' , raiz='//retCancCTe/infCanc', namespace=NAMESPACE_CTE, obrigatorio=False)
21+
self.nProt = TagCaracter(nome='nProt' , codigo='CR11' , tamanho=[15, 15, 15], raiz='//retCancCTe/infCanc', namespace=NAMESPACE_CTE, obrigatorio=False)
22+
23+
def get_xml(self):
24+
xml = XMLNFe.get_xml(self)
25+
26+
if self.Id.xml:
27+
xml += self.Id.xml
28+
else:
29+
xml += '<infCanc>'
30+
31+
xml += self.tpAmb.xml
32+
xml += self.verAplic.xml
33+
xml += self.cStat.xml
34+
xml += self.xMotivo.xml
35+
xml += self.cUF.xml
36+
xml += self.chCTe.xml
37+
xml += self.dhRecbto.xml
38+
xml += self.nProt.xml
39+
xml += '</infCanc>'
40+
return xml
41+
42+
def set_xml(self, arquivo):
43+
if self._le_xml(arquivo):
44+
self.Id.xml = arquivo
45+
self.tpAmb.xml = arquivo
46+
self.verAplic.xml = arquivo
47+
self.cStat.xml = arquivo
48+
self.xMotivo.xml = arquivo
49+
self.cUF.xml = arquivo
50+
self.chCTe.xml = arquivo
51+
self.dhRecbto.xml = arquivo
52+
self.nProt.xml = arquivo
53+
54+
xml = property(get_xml, set_xml)
55+
56+
57+
class RetCancCTe(XMLNFe):
58+
def __init__(self):
59+
super(RetCancCTe, self).__init__()
60+
self.versao = TagDecimal(nome='retCancCTe', codigo='CR01', propriedade='versao', namespace=NAMESPACE_CTE, valor='1.04', raiz='/')
61+
self.infCanc = InfCancRecebido()
62+
self.Signature = Signature()
63+
self.caminho_esquema = os.path.join(DIRNAME, 'schema', 'PL_CTe_104c/')
64+
self.arquivo_esquema = 'retCancCTe_v1.04.xsd'
65+
66+
def get_xml(self):
67+
xml = XMLNFe.get_xml(self)
68+
xml += ABERTURA
69+
xml += self.versao.xml
70+
xml += self.infCanc.xml
71+
72+
if len(self.Signature.URI) and (self.Signature.URI.strip() != '#'):
73+
xml += self.Signature.xml
74+
75+
xml += '</retCancCTe>'
76+
return xml
77+
78+
def set_xml(self, arquivo):
79+
if self._le_xml(arquivo):
80+
self.infCanc.xml = arquivo
81+
self.Signature.xml = self._le_noh('//retCancCTe/sig:Signature')
82+
83+
xml = property(get_xml, set_xml)
84+
85+
def protocolo_formatado(self):
86+
if not self.infCanc.nProt.valor:
87+
return ''
88+
89+
formatado = self.infCanc.nProt.valor
90+
formatado += ' - '
91+
formatado += self.infCanc.dhRecbto.formato_danfe()
92+
return formatado

pysped/cte/leiaute/consrecicte_104.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
TagDataHora, TagDecimal, TagInteiro, XMLNFe)
4646
from pysped.cte.leiaute import ESQUEMA_ATUAL_VERSAO_104 as ESQUEMA_ATUAL
4747
import os
48-
from cte_104 import CTe
48+
from .cte_104 import CTe
4949

5050

5151
DIRNAME = os.path.dirname(__file__)
@@ -153,7 +153,6 @@ def set_xml(self, arquivo):
153153
# por isso, a raiz dele não pode ser assumida como sendo sempre o grupo
154154
# protCTe
155155
#
156-
print('aqui:', self._le_noh('//protCTe/infProt', ns=NAMESPACE_CTE))
157156
self.infProt.xml = self._le_noh('//protCTe/infProt', ns=NAMESPACE_CTE)
158157
self.Signature.xml = self._le_noh('//protCTe/sig:Signature')
159158

0 commit comments

Comments
 (0)