def test_import_in_nfe_dry_run(self): hooks.register_hook( self.env, "l10n_br_nfe", "odoo.addons.l10n_br_nfe_spec.models.v4_00.leiauteNFe", ) res_items = ( "..", "tests", "nfe", "v4_00", "leiauteNFe", "35180834128745000152550010000474281920007498-nfe.xml", ) resource_path = "/".join(res_items) nfe_stream = pkg_resources.resource_stream(nfelib.__name__, resource_path) nfe_binding = nfe_sub.parse(nfe_stream, silence=True) nfe = (self.env["nfe.40.infnfe"].with_context(tracking_disable=True, edoc_type="in", lang="pt_BR").build( nfe_binding.infNFe, dry_run=True)) assert isinstance(nfe.id, NewId) self.assertEqual(nfe.partner_id.name, "Alimentos Ltda.") self.assertEqual(nfe.line_ids[0].product_id.name, "QUINOA 100G (2X50G)")
def danfe_view(xml_file): print(xml_file) stream_xml = io.StringIO("some initial text data") nota = parser.parse(xml_file, silence=True) parser.export(nota, stream=stream_xml) dados_do_xml = stream_xml.getvalue() return render_template('danfe.html', dados_do_xml=dados_do_xml)
def test_import_nfe1(self): res_items = ('..', 'tests', 'nfe', 'v4_00', 'leiauteNFe', '26180812984794000154550010000016871192213339-nfe.xml') resource_path = "/".join(res_items) nfe_stream = pkg_resources.resource_stream(nfelib.__name__, resource_path) nfe_binding = nfe_sub.parse(nfe_stream, silence=True) nfe = self.env["nfe.40.infnfe"].build_fake(nfe_binding.infNFe, create=False) self.assertEqual(nfe.nfe40_emit.nfe40_CNPJ, "75335849000115") self.assertEqual(len(nfe.nfe40_det), 3) self.assertEqual(nfe.nfe40_det[0].nfe40_prod.nfe40_cProd, '880945')
def test_import_nfe2(self): res_items = ('..', 'tests', 'nfe', 'v4_00', 'leiauteNFe', '35180803102452000172550010000476491552806942-nfe.xml') resource_path = "/".join(res_items) nfe_stream = pkg_resources.resource_stream(nfelib.__name__, resource_path) nfe_binding = nfe_sub.parse(nfe_stream, silence=True) nfe = self.env["nfe.40.infnfe"].build_fake(nfe_binding.infNFe, create=False) self.assertEqual(nfe.nfe40_emit.nfe40_CNPJ, "34128745000152") self.assertEqual(len(nfe.nfe40_det), 16) self.assertEqual(nfe.nfe40_det[0].nfe40_prod.nfe40_cProd, '1094')
def test_import_all_nfes(self): path = os.path.join(l10n_br_nfe.__path__[0], 'tests', 'nfe', 'v4_00', 'leiauteNFe') for filename in os.listdir(path): _logger.info(filename, dir(self.env["nfe.40.infnfe"])) obj = nfe_sub.parse('%s/%s' % ( path, filename, )) _logger.info(obj.infNFe) try: nfe = self.env["nfe.40.infnfe"].build(obj.infNFe) _logger.info(nfe.nfe40_emit.nfe40_CNPJ) except ValidationError: _logger.info("NF-e already imported by hooks")
def load_data_from_xml(self, xml): try: # vamos importar o XML da nota e transforma-lo em objeto Python: nota = parser.parse(xml, silence=True) self.xml_valido = nota.infNFe is not None if not self.xml_valido: logger.error(f'Xml ({xml}) não contem tag: infNFe') return self.xml_file = xml self.NF = str(nota.infNFe.ide.nNF) self.serie = str(nota.infNFe.ide.serie) self.data_emissao = str(nota.infNFe.ide.dhEmi)[:10] self.operacao = str(nota.infNFe.ide.natOp).upper() cnpj = '' cpf = '' if int(nota.infNFe.ide.tpNF) == 0: self.tpNF = 'Entrada' self.razao_social = str(nota.infNFe.emit.xNome).upper() if nota.infNFe.emit.CPF is not None: cpf = str(nota.infNFe.emit.CPF) else: cnpj = str(nota.infNFe.emit.CNPJ) else: self.tpNF = 'Saída' #1 self.razao_social = str(nota.infNFe.dest.xNome).upper() if nota.infNFe.dest.CPF is not None: cpf = str(nota.infNFe.dest.CPF) else: cnpj = str(nota.infNFe.dest.CNPJ) self.cnpj_cpf = cpf if cnpj: self.cnpj_cpf = "%s.%s.%s/%s-%s" % ( cnpj[0:2], cnpj[2:5], cnpj[5:8], cnpj[8:12], cnpj[12:14]) self.total = str(nota.infNFe.total.ICMSTot.vNF) self.chave = str(nota.infNFe.Id[3:]) except Exception as e: logger.error(f'Erro ao ler arquivo xml ({xml}): {e}')
def post_init_hook(cr, registry): env = api.Environment(cr, SUPERUSER_ID, {}) hooks.register_hook( env, "l10n_br_nfe", "odoo.addons.l10n_br_nfe_spec.models.v4_00.leiauteNFe") hooks.post_init_hook( cr, registry, "l10n_br_nfe", "odoo.addons.l10n_br_nfe_spec.models.v4_00.leiauteNFe", ) cr.execute("select demo from ir_module_module where name='l10n_br_nfe';") is_demo = cr.fetchone()[0] if is_demo: res_items = ( "..", "tests", "nfe", "v4_00", "leiauteNFe", "35180834128745000152550010000474491454651420-nfe.xml", ) resource_path = "/".join(res_items) nfe_stream = pkg_resources.resource_stream(nfelib.__name__, resource_path) # nfe_stream = pkg_resources.resource_stream('nfelib', # '../tests/nfe/v4_00/leiauteNFe/35180803102452000172550010000474491454651420-nfe.xml') nfe_binding = nfe_sub.parse(nfe_stream, silence=True) document_number = nfe_binding.infNFe.ide.nNF existing_nfes = env["l10n_br_fiscal.document"].search([ ("document_number", "=", document_number) ]) try: existing_nfes.unlink() nfe = (env["nfe.40.infnfe"].with_context(tracking_disable=True, edoc_type="in", lang="pt_BR").build( nfe_binding.infNFe)) _logger.info(nfe.nfe40_emit.nfe40_CNPJ) except ValidationError: _logger.info("NF-e already %s imported by hooks" % (document_number, ))
def test_in_out_leiauteNFe(): path = 'tests/nfe/v4_00/leiauteNFe' for filename in os.listdir(path): # primeiro filtramos a root tag e a possivel assinatura: subtree = nfe_sub.parsexml_('%s/%s' % (path, filename,)) inputfile = 'tests/input.xml' subtree.write(inputfile, encoding='utf-8') # agora vamos importar o XML da nota e transforma-lo em objeto Python: obj = nfe_sub.parse(inputfile)#'%s/%s' % (path, filename,)) # agora podemos trabalhar em cima do objeto e fazer operaçoes como: obj.infNFe.emit.CNPJ outputfile = 'tests/output.xml' with open(outputfile, 'w') as f: nfe_sub.export(obj, nfeProc=False, stream=f) diff = main.diff_files(inputfile, outputfile) print(diff) assert len(diff) == 0
def post_init_hook(cr, registry): env = api.Environment(cr, SUPERUSER_ID, {}) hooks.register_hook( env, 'l10n_br_nfe', 'odoo.addons.l10n_br_nfe_spec.models.v4_00.leiauteNFe') hooks.post_init_hook( cr, registry, 'l10n_br_nfe', 'odoo.addons.l10n_br_nfe_spec.models.v4_00.leiauteNFe') cr.execute("select demo from ir_module_module where name='l10n_br_nfe';") is_demo = cr.fetchone()[0] if is_demo: path = os.path.join(l10n_br_nfe.__path__[0], 'tests', 'nfe', 'v4_00', 'leiauteNFe') for filename in os.listdir(path): obj = nfe_sub.parse('%s/%s' % ( path, filename, )) # print(filename, obj.infNFe) env["nfe.40.infnfe"].build(obj.infNFe, {})
def test_in_out(): path = 'tests/nfe/v4_00' for filename in os.listdir(path): subtree = parser.parsexml_('%s/%s' % ( path, filename, )) inputfile = 'tests/input.xml' subtree.write(inputfile, encoding='utf-8') # agora vamos importar o XML da nota e transforma-lo em objeto Python: nota = parser.parse(inputfile) #'%s/%s' % (path, filename,)) # agora podemos trabalhar em cima do objeto e fazer operaçoes como: nota.infNFe.emit.CNPJ filename = 'tests/output.xml' with open(filename, 'w') as f: parser.export(nota, nfeProc=False, stream=f) diff = main.diff_files('tests/input.xml', 'tests/output.xml') print(diff) assert len(diff) == 0
def test_import_in_nfe(self): hooks.register_hook( self.env, "l10n_br_nfe", "odoo.addons.l10n_br_nfe_spec.models.v4_00.leiauteNFe", ) res_items = ( "..", "tests", "nfe", "v4_00", "leiauteNFe", "35180834128745000152550010000474281920007498-nfe.xml", ) resource_path = "/".join(res_items) nfe_stream = pkg_resources.resource_stream(nfelib.__name__, resource_path) nfe_binding = nfe_sub.parse(nfe_stream, silence=True) nfe = (self.env["nfe.40.infnfe"].with_context(tracking_disable=True, edoc_type="in", lang="pt_BR").build( nfe_binding.infNFe)) assert isinstance(nfe.id, int) self.assertEqual(type(nfe)._name, "l10n_br_fiscal.document") # here we check that emit and enderEmit # are now the supplier data (partner_id) self.assertEqual(nfe.partner_id.name, "Alimentos Ltda.") self.assertEqual(nfe.partner_id.cnpj_cpf, "34.128.745/0001-52") # this tests the _extract_related_values method for related values: self.assertEqual(nfe.partner_id.legal_name, "Alimentos Ltda.") # enderDest self.assertEqual(nfe.partner_id.street_name, "Rua Fonseca") # related xLgr self.assertEqual(nfe.partner_id.zip, "13877123") # related CEP self.assertEqual(nfe.partner_id.city_id.name, "São João da Boa Vista") # now we check that company_id is unchanged self.assertEqual(nfe.company_id.name, "Sua Empresa") # lines data self.assertEqual(len(nfe.line_ids), 6) self.assertEqual(nfe.line_ids[0].quantity, 6) self.assertEqual(nfe.line_ids[0].price_unit, 7.16) self.assertEqual(nfe.line_ids[0].fiscal_price, 7.16) # impostos self.assertEqual(nfe.line_ids[0].icms_base_type, "0") self.assertEqual(nfe.line_ids[0].icms_cst_id.code, "00") self.assertEqual(nfe.line_ids[0].icms_base, 50.60) self.assertEqual(nfe.line_ids[0].icms_value, 6.07) self.assertEqual(nfe.line_ids[0].ipi_value, 0) # products self.assertEqual(nfe.line_ids[0].nfe40_nItem, "1") self.assertEqual(nfe.line_ids[0].product_id.name, "QUINOA 100G (2X50G)") self.assertEqual(nfe.line_ids[0].product_id.barcode, "7897846902086") self.assertEqual(nfe.line_ids[0].product_id.ncm_id.name[0:14], "Trigo mourisco") self.assertEqual(nfe.line_ids[0].product_id.ncm_id.code, "1008.50.90") self.assertEqual(nfe.line_ids[1].product_id.name, "QUINOA VEGETAIS 100G (2X50G)") self.assertEqual(nfe.line_ids[2].product_id.name, "QUINOA PICANTE 100G (2X50G)")
credenciais = janelaCredenciais.getCredenciais() conexao = conectaBanco(credenciais['host'], credenciais['nomeBanco'], credenciais['usuario'], credenciais['senha'], credenciais['porta']) sg.popup(f'Selecione os arquivos de nota fiscal eletrônica que deseja inserir num banco de dados.') caminho_arquivos = escolheArquivos() inseridos = list() errosNaConversao = list() errosNaInsercao = list() for file in caminho_arquivos: try: nota = parser.parse(file) except: errosNaConversao.append(file) continue assinaturaInvoices = assinatura_sql("invoices") valoresInvoices = adiciona_valores_invoices(file,nota,conexao) sqlInvoices = f'{assinaturaInvoices} {valoresInvoices}' assinaturaItems = assinatura_sql("items") valoresItems = adiciona_valores_items(nota) sqlItems = f'{assinaturaItems} {valoresItems}' try: insereBanco(conexao,sqlInvoices) insereBanco(conexao,sqlItems) inseridos.append(nota.infNFe.Id)
# processo = nova_nfe.download_notas(cnpj=cnpj,lista_chaves=lista_chaves,key=info_certificado['key'],cert=info_certificado['cert'], versao=u'3.10', ambiente=2, estado=u'SP', contingencia=False) #https://nfe.fazenda.sp.gov.br/ #http://nfe.fazenda.mg.gov.br/nfe2/services/NFeConsultaProtocolo4 /ws/nfeconsulta2.asmx # con = HTTPSConnection(u'http://nfe.fazenda.mg.gov.br/nfe2/services/NFeConsultaProtocolo4', key_file=info_certificado['key'], cert_file=info_certificado['cert']) # con.request(u'POST', u'/' + u'/nfe2/services/NFeConsultaProtocolo4', self._soap_envio.xml.encode(u'utf-8'), self._soap_envio.header) # resp = con.getresponse() # print('Status: ' + processo.resposta.cStat.valor) # print('Motivo: ' + processo.resposta.xMotivo.valor) # print('Razao: ' + processo.resposta.reason) for file in glob.glob('*.xml', recursive=True): print(file) arquivo = file nota = parser.parse(arquivo) # print(nota.infNFe.ide.cNF) x = nota.infNFe # print(nota.infNFe.transp.vol.Vol) codAcesso = x.Id.replace("NFe", "") listProduto = [] class Produto: cPro = 0.0 xProd = '' NCM = 0.0 CEST = 0.0 CFOP = 0.0