2
2
3
3
from lxml import etree
4
4
5
- from erpbrasil .assinatura .assinatura import Assinatura
6
- from erpbrasil .base .fiscal .edoc import ChaveEdoc
7
5
from erpbrasil .edoc .edoc import DocumentoEletronico
8
- from erpbrasil .transmissao import TransmissaoSOAP
9
6
10
7
from .resposta import analisar_retorno_raw
11
8
@@ -191,20 +188,22 @@ class CTe(DocumentoEletronico):
191
188
_consulta_documento_antes_de_enviar = True
192
189
_maximo_tentativas_consulta_recibo = 5
193
190
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
+ )
204
203
205
204
def status_servico (self ):
206
205
raiz = TconsStatServ (
207
- tpAmb = self ._ambiente , cUF = SIGLA_ESTADO [ self ._uf ] , versao = self ._versao
206
+ tpAmb = self .ambiente , cUF = self .uf , versao = self .versao
208
207
)
209
208
return self ._post (
210
209
raiz = raiz ,
@@ -214,7 +213,7 @@ def status_servico(self):
214
213
)
215
214
216
215
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 )
218
217
return self ._post (
219
218
raiz = raiz ,
220
219
url = self ._search_url ("CTeConsultaV4" ),
@@ -223,10 +222,11 @@ def consulta_documento(self, chave):
223
222
)
224
223
225
224
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 )
228
227
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 )
230
230
xml_envio_etree .append (etree .fromstring (xml_assinado ))
231
231
return self ._post (
232
232
raiz = xml_envio_etree ,
@@ -246,55 +246,39 @@ def cancela_documento(self, doc_numero, justificativa):
246
246
classe = RetEventoCte ,
247
247
)
248
248
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
-
270
249
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 :
273
257
return MG_PRODUCAO [service ]
274
258
else :
275
259
return MG_HOMOLOGACAO [service ]
276
- elif self . _uf == "MS" :
277
- if self ._ambiente == 1 :
260
+ elif sigla == "MS" :
261
+ if self .ambiente == 1 :
278
262
return MS_PRODUCAO [service ]
279
263
else :
280
264
return MS_HOMOLOGACAO [service ]
281
- elif self . _uf == "MT" :
282
- if self ._ambiente == 1 :
265
+ elif sigla == "MT" :
266
+ if self .ambiente == 1 :
283
267
return MT_PRODUCAO [service ]
284
268
else :
285
269
return MT_HOMOLOGACAO [service ]
286
- elif self . _uf == "PR" :
287
- if self ._ambiente == 1 :
270
+ elif sigla == "PR" :
271
+ if self .ambiente == 1 :
288
272
return PR_PRODUCAO [service ]
289
273
else :
290
274
return PR_HOMOLOGACAO [service ]
291
- elif self . _uf == " SVSP" :
292
- if self ._ambiente == 1 :
275
+ elif sigla in SVSP :
276
+ if self .ambiente == 1 :
293
277
return SVSP_PRODUCAO [service ]
294
278
else :
295
279
return SVSP_HOMOLOGACAO [service ]
296
- elif self . _uf == " SVRS" :
297
- if self ._ambiente == 1 :
280
+ elif sigla in SVRS :
281
+ if self .ambiente == 1 :
298
282
return SVRS_PRODUCAO [service ]
299
283
else :
300
284
return SVRS_HOMOLOGACAO [service ]
@@ -308,3 +292,6 @@ def _post(self, raiz, url, operacao, classe):
308
292
with self ._transmissao .cliente (url ):
309
293
retorno = self ._transmissao .enviar (operacao , xml_etree )
310
294
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