Skip to content

Commit de3c03f

Browse files
[RFC] erpbrasil.edoc: cte refactor
1 parent 319921c commit de3c03f

File tree

1 file changed

+38
-51
lines changed

1 file changed

+38
-51
lines changed

src/erpbrasil/edoc/cte.py

+38-51
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@
22

33
from lxml import etree
44

5-
from erpbrasil.assinatura.assinatura import Assinatura
6-
from erpbrasil.base.fiscal.edoc import ChaveEdoc
75
from erpbrasil.edoc.edoc import DocumentoEletronico
8-
from erpbrasil.transmissao import TransmissaoSOAP
96

107
from .resposta import analisar_retorno_raw
118

@@ -191,20 +188,22 @@ class CTe(DocumentoEletronico):
191188
_consulta_documento_antes_de_enviar = True
192189
_maximo_tentativas_consulta_recibo = 5
193190

194-
def __init__(self, config, xml):
195-
self.config = config
196-
self._xml = xml
197-
self._ambiente = self.config # tpAmb
198-
self._uf = self.config # uf
199-
self._versao = 4.00
200-
self._chaveCte = self._gerar_chave(self.config)
201-
self.assinatura = Assinatura(self.config) # self.config.certificado
202-
self.transmissao = TransmissaoSOAP(self.config) # self.config.certificado
203-
super().__init__(self.transmissao)
191+
def __init__(self, transmissao, uf, versao="4.00", ambiente="1", mod="57"):
192+
super().__init__(transmissao)
193+
self.versao = str(versao)
194+
self.ambiente = str(ambiente)
195+
self.uf = int(uf)
196+
self.mod = str(mod)
197+
198+
def _verifica_resposta_envio_sucesso(self, proc_envio):
199+
return (
200+
proc_envio.resposta.cStat
201+
== self._edoc_situacao_arquivo_recebido_com_sucesso
202+
)
204203

205204
def status_servico(self):
206205
raiz = TconsStatServ(
207-
tpAmb=self._ambiente, cUF=SIGLA_ESTADO[self._uf], versao=self._versao
206+
tpAmb=self.ambiente, cUF=self.uf, versao=self.versao
208207
)
209208
return self._post(
210209
raiz=raiz,
@@ -214,7 +213,7 @@ def status_servico(self):
214213
)
215214

216215
def consulta_documento(self, chave):
217-
raiz = TconsSitCte(tpAmb=self._ambiente, chCTe=chave, versao=self._versao)
216+
raiz = TconsSitCte(tpAmb=self.ambiente, chCTe=chave, versao=self.versao)
218217
return self._post(
219218
raiz=raiz,
220219
url=self._search_url("CTeConsultaV4"),
@@ -223,10 +222,11 @@ def consulta_documento(self, chave):
223222
)
224223

225224
def envia_documento(self, edoc):
226-
xml_assinado = self.assina_raiz(edoc, edoc.infCTe.Id)
227-
raiz = Tcte(infCte=edoc, signature=self.assinatura)
225+
xml_assinado = self.assina_raiz(edoc, edoc.infCte.Id)
226+
raiz = Tcte(infCte=edoc, signature=None)
228227
xml_envio_string = raiz.to_xml()
229-
xml_envio_etree = xml_envio_string.from_xml()
228+
xml_envio_bytes = xml_envio_string.encode('utf-8')
229+
xml_envio_etree = etree.fromstring(xml_envio_bytes)
230230
xml_envio_etree.append(etree.fromstring(xml_assinado))
231231
return self._post(
232232
raiz=xml_envio_etree,
@@ -246,55 +246,39 @@ def cancela_documento(self, doc_numero, justificativa):
246246
classe=RetEventoCte,
247247
)
248248

249-
def _gerar_chave(self, edoc):
250-
"""
251-
0 2 6 20 22 25 34 35 43 --> índice
252-
| | | | | | | | |
253-
| | | | | | | | |
254-
CTe 32 1712 32438772000104 57 001 000199075 1 39868226 3
255-
"""
256-
cte = Cte(edoc)
257-
chave = ChaveEdoc()
258-
chave.cUF = cte.InfCte.Ide.cUF
259-
dhEmi = cte.InfCte.Ide.dhEmi
260-
chave.AAMM = dhEmi[2:4] + dhEmi[5:7]
261-
chave.CNPJ = cte.InfCte.Emit.CNPJ
262-
chave.mod = cte.InfCte.Ide.mod
263-
chave.serie = cte.InfCte.Ide.serie
264-
chave.nCT = cte.InfCte.Ide.nCT
265-
chave.tpEmis = cte.InfCte.Ide.tpEmis
266-
chave.cCT = cte.InfCte.Ide.cCT
267-
chave.cDV = cte.InfCte.Ide.cDV
268-
return chave
269-
270249
def _search_url(self, service):
271-
if self._uf == "MG":
272-
if self._ambiente == 1:
250+
sigla = ""
251+
for uf_code, ibge_code in SIGLA_ESTADO.items():
252+
if ibge_code == self.uf:
253+
sigla = uf_code
254+
255+
if sigla == "MG":
256+
if self.ambiente == 1:
273257
return MG_PRODUCAO[service]
274258
else:
275259
return MG_HOMOLOGACAO[service]
276-
elif self._uf == "MS":
277-
if self._ambiente == 1:
260+
elif sigla == "MS":
261+
if self.ambiente == 1:
278262
return MS_PRODUCAO[service]
279263
else:
280264
return MS_HOMOLOGACAO[service]
281-
elif self._uf == "MT":
282-
if self._ambiente == 1:
265+
elif sigla == "MT":
266+
if self.ambiente == 1:
283267
return MT_PRODUCAO[service]
284268
else:
285269
return MT_HOMOLOGACAO[service]
286-
elif self._uf == "PR":
287-
if self._ambiente == 1:
270+
elif sigla == "PR":
271+
if self.ambiente == 1:
288272
return PR_PRODUCAO[service]
289273
else:
290274
return PR_HOMOLOGACAO[service]
291-
elif self._uf == "SVSP":
292-
if self._ambiente == 1:
275+
elif sigla in SVSP:
276+
if self.ambiente == 1:
293277
return SVSP_PRODUCAO[service]
294278
else:
295279
return SVSP_HOMOLOGACAO[service]
296-
elif self._uf == "SVRS":
297-
if self._ambiente == 1:
280+
elif sigla in SVRS:
281+
if self.ambiente == 1:
298282
return SVRS_PRODUCAO[service]
299283
else:
300284
return SVRS_HOMOLOGACAO[service]
@@ -308,3 +292,6 @@ def _post(self, raiz, url, operacao, classe):
308292
with self._transmissao.cliente(url):
309293
retorno = self._transmissao.enviar(operacao, xml_etree)
310294
return analisar_retorno_raw(operacao, raiz, xml_string, retorno, classe)
295+
296+
def get_documento_id(self, edoc):
297+
return edoc.infCte.Id[:3], edoc.infCte.Id[3:]

0 commit comments

Comments
 (0)