示例#1
0
    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)")
示例#2
0
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)
示例#3
0
 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')
示例#4
0
 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')
示例#5
0
 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")
示例#6
0
    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}')
示例#7
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:
        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, ))
示例#8
0
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
示例#9
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, {})
示例#10
0
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
示例#11
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)
示例#13
0
# 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