示例#1
0
    def action_post_validate(self):
        super(InvoiceEletronic, self).action_post_validate()
        if self.model not in ('55', '65'):
            return
        chave_dict = {
            'cnpj': re.sub('[^0-9]', '', self.company_id.cnpj_cpf),
            'estado': self.company_id.state_id.ibge_code,
            'emissao': self.data_emissao[2:4] + self.data_emissao[5:7],
            'modelo': self.model,
            'numero': self.numero,
            'serie': self.serie.code.zfill(3),
            'tipo': int(self.tipo_emissao),
            'codigo': "%08d" % self.numero_controle
        }
        self.chave_nfe = gerar_chave(ChaveNFe(**chave_dict))

        cert = self.company_id.with_context({'bin_size': False}).nfe_a1_file
        cert_pfx = base64.decodestring(cert)

        certificado = Certificado(cert_pfx, self.company_id.nfe_a1_password)

        nfe_values = self._prepare_eletronic_invoice_values()
        lote = self._prepare_lote(self.id, nfe_values)

        xml_enviar = xml_autorizar_nfe(certificado, **lote)

        mensagens_erro = valida_nfe(xml_enviar)
        if mensagens_erro:
            raise UserError(mensagens_erro)

        self.xml_to_send = base64.encodestring(xml_enviar.encode('utf-8'))
        self.xml_to_send_name = 'nfse-enviar-%s.xml' % self.numero
示例#2
0
def _generate_nfe_id(**kwargs):
    for item in kwargs['NFes']:
        vals = {
            'cnpj':
            item['infNFe']['emit']['cnpj_cpf'],
            'estado':
            item['infNFe']['ide']['cUF'],
            'emissao':
            '%s%s' % (item['infNFe']['ide']['dhEmi'][2:4],
                      item['infNFe']['ide']['dhEmi'][5:7]),
            'modelo':
            item['infNFe']['ide']['mod'],
            'serie':
            item['infNFe']['ide']['serie'],
            'numero':
            item['infNFe']['ide']['nNF'],
            'tipo':
            item['infNFe']['ide']['tpEmis'],
            'codigo':
            item['infNFe']['ide']['cNF'],
        }
        chave_nfe = ChaveNFe(**vals)
        chave_nfe = gerar_chave(chave_nfe, 'NFe')
        item['infNFe']['Id'] = chave_nfe
        item['infNFe']['ide']['cDV'] = chave_nfe[len(chave_nfe) - 1:]
示例#3
0
    def test_geracao_chave(self):
        chave = ChaveNFe(**self.kwargs)
        str_chave = gerar_chave(chave)
        chave_correta = '52060433009911002506550120000007800267301615'
        self.assertEqual(str_chave, chave_correta,
                         "Geração de chave nf-e incorreta")

        str_chave = gerar_chave(chave, prefix='NFe')
        chave_correta = 'NFe52060433009911002506550120000007800267301615'
        self.assertEqual(str_chave, chave_correta,
                         "Geração de chave nf-e com prefixo incorreta")

        self.assertRaises(Exception, gerar_chave, "Not a ChaveNFe object")
        self.assertRaises(Exception, gerar_chave, "Not a ChaveNFe object")
示例#4
0
 def action_post_validate(self):
     super(InvoiceEletronic, self).action_post_validate()
     for item in self:
         chave_dict = {
             'cnpj': re.sub('[^0-9]', '', item.company_id.cnpj_cpf),
             'estado': item.company_id.state_id.ibge_code,
             'emissao': item.data_emissao[2:4] + item.data_emissao[5:7],
             'modelo': item.model,
             'numero': item.numero,
             'serie': item.serie.code.zfill(3),
             'tipo': 0 if item.tipo_operacao == 'entrada' else 1,
             'codigo': item.numero_controle
         }
         item.chave_nfe = gerar_chave(ChaveNFe(**chave_dict))
示例#5
0
 def action_post_validate(self):
     super(InvoiceEletronic, self).action_post_validate()
     if self.model not in ('55', '65'):
         return
     for item in self:
         chave_dict = {
             'cnpj': re.sub('[^0-9]', '', item.company_id.cnpj_cpf),
             'estado': item.company_id.state_id.ibge_code,
             'emissao': item.data_emissao[2:4] + item.data_emissao[5:7],
             'modelo': item.model,
             'numero': item.numero,
             'serie': item.serie.code.zfill(3),
             'tipo': int(item.tipo_emissao),
             'codigo': "%08d" % item.numero_controle
         }
         item.chave_nfe = gerar_chave(ChaveNFe(**chave_dict))
示例#6
0
    def action_post_validate(self):
        super(InvoiceEletronic, self).action_post_validate()
        if self.model not in ('55', '65'):
            return
        chave_dict = {
            'cnpj': re.sub('[^0-9]', '', self.company_id.cnpj_cpf),
            'estado': self.company_id.state_id.ibge_code,
            'emissao': self.data_emissao[2:4] + self.data_emissao[5:7],
            'modelo': self.model,
            'numero': self.numero,
            'serie': self.serie.code.zfill(3),
            'tipo': int(self.tipo_emissao),
            'codigo': "%08d" % self.numero_controle
        }
        self.chave_nfe = gerar_chave(ChaveNFe(**chave_dict))

        cert = self.company_id.with_context({'bin_size': False}).nfe_a1_file
        cert_pfx = base64.decodestring(cert)

        certificado = Certificado(cert_pfx, self.company_id.nfe_a1_password)

        nfe_values = self._prepare_eletronic_invoice_values()

        lote = self._prepare_lote(self.id, nfe_values)
        xml_enviar = xml_autorizar_nfe(certificado, **lote)
        # _logger.info("============================xml_enviar before===========================%s", xml_enviar)
        # xml_enviar1 = xml_enviar.split('<dest>')[0]
        # xml_enviar2 = xml_enviar.split('<dest>')[1]
        # if self.ind_dest == '3':
        #    xml_enviar = xml_enviar1+'<dest><idEstrangeiro>'+re.sub('[^0-9]', '', self.partner_id.cnpj_cpf or '')+'</idEstrangeiro>'+xml_enviar2 if self.partner_id.cnpj_cpf else xml_enviar1+'<dest><idEstrangeiro/>'+xml_enviar2
        #    _logger.info("========================xml_enviar after===========================%s", xml_enviar)

        mensagens_erro = valida_nfe(xml_enviar)
        _logger.info(
            "========================mensagens_erro===========================%s",
            mensagens_erro)
        if mensagens_erro:
            raise UserError(mensagens_erro)

        self.xml_to_send = base64.encodestring(xml_enviar.encode('utf-8'))
        self.xml_to_send_name = 'nfse-enviar-%s.xml' % self.numero
        _logger.info(
            "========================self.xml_to_send_name===========================%s",
            self.xml_to_send_name)
示例#7
0
def _generate_nfe_id(**kwargs):
    for item in kwargs["NFes"]:
        vals = {
            "cnpj": item["infNFe"]["emit"]["cnpj_cpf"],
            "estado": item["infNFe"]["ide"]["cUF"],
            "emissao": "%s%s"
            % (
                item["infNFe"]["ide"]["dhEmi"][2:4],
                item["infNFe"]["ide"]["dhEmi"][5:7],
            ),
            "modelo": item["infNFe"]["ide"]["mod"],
            "serie": item["infNFe"]["ide"]["serie"],
            "numero": item["infNFe"]["ide"]["nNF"],
            "tipo": item["infNFe"]["ide"]["tpEmis"],
            "codigo": item["infNFe"]["ide"]["cNF"],
        }
        chave_nfe = ChaveNFe(**vals)
        chave_nfe = gerar_chave(chave_nfe, "NFe")
        item["infNFe"]["Id"] = chave_nfe
        item["infNFe"]["ide"]["cDV"] = chave_nfe[len(chave_nfe) - 1 :]
示例#8
0
    def action_post_validate(self):
        chave_dict = {
            'cnpj': re.sub('[^0-9]', '', self.company_id.l10n_br_cnpj_cpf),
            'estado': self.company_id.state_id.l10n_br_ibge_code,
            'emissao': self.data_emissao.strftime("%y%m"),
            'modelo': '55' if self.model == 'nfe' else '65',
            'numero': self.numero,
            'serie': self.serie_documento.zfill(3),
            'tipo': int(self.tipo_emissao),
            'codigo': "%08d" % self.numero_controle
        }
        self.chave_nfe = gerar_chave(ChaveNFe(**chave_dict))

        cert = self.company_id.with_context({
            'bin_size': False
        }).l10n_br_certificate
        cert_pfx = base64.decodestring(cert)

        certificado = Certificado(cert_pfx,
                                  self.company_id.l10n_br_cert_password)

        nfe_values = self._prepare_eletronic_invoice_values()

        lote = self._prepare_lote(self.id, nfe_values)

        xml_enviar = xml_autorizar_nfe(certificado, **lote)

        mensagens_erro = valida_nfe(xml_enviar)
        if mensagens_erro:
            raise UserError(mensagens_erro)

        self.sudo().write({
            'xml_to_send':
            base64.encodestring(xml_enviar.encode('utf-8')),
            'xml_to_send_name':
            'nfe-enviar-%s.xml' % self.numero,
        })
示例#9
0
    def test_chave_nfe(self):
        chave = ChaveNFe(**self.kwargs)
        with self.assertRaises(AssertionError) as cm:
            chave.cnpj = ''
            chave.validar()
        chave.cnpj = '1234567891011'
        self.assertEqual('CNPJ necessário para criar chave NF-e',
                         str(cm.exception),
                         'Validação da chave nf-e incorreta')

        with self.assertRaises(AssertionError) as cm:
            chave.estado = ''
            chave.validar()
        chave.estado = '42'
        self.assertEqual('Estado necessário para criar chave NF-e',
                         str(cm.exception),
                         'Validação da chave nf-e incorreta')

        with self.assertRaises(AssertionError) as cm:
            chave.emissao = ''
            chave.validar()
        chave.emissao = '0'
        self.assertEqual('Emissão necessário para criar chave NF-e',
                         str(cm.exception),
                         'Validação da chave nf-e incorreta')

        with self.assertRaises(AssertionError) as cm:
            chave.modelo = ''
            chave.validar()
        chave.modelo = '55'
        self.assertEqual('Modelo necessário para criar chave NF-e',
                         str(cm.exception),
                         'Validação da chave nf-e incorreta')

        with self.assertRaises(AssertionError) as cm:
            chave.serie = ''
            chave.validar()
        chave.serie = '012'
        self.assertEqual('Série necessária para criar chave NF-e',
                         str(cm.exception),
                         'Validação da chave nf-e incorreta')

        with self.assertRaises(AssertionError) as cm:
            chave.numero = ''
            chave.validar()
        chave.numero = '000000780'
        self.assertEqual('Número necessário para criar chave NF-e',
                         str(cm.exception),
                         'Validação da chave nf-e incorreta')

        with self.assertRaises(AssertionError) as cm:
            chave.tipo = ''
            chave.validar()
        chave.tipo = '42'
        self.assertEqual('Tipo necessário para criar chave NF-e',
                         str(cm.exception),
                         'Validação da chave nf-e incorreta')

        with self.assertRaises(AssertionError) as cm:
            chave.codigo = ''
            chave.validar()
        self.assertEqual('Código necessário para criar chave NF-e',
                         str(cm.exception),
                         'Validação da chave nf-e incorreta')
示例#10
0
    def test_chave_nfe(self):
        chave = ChaveNFe(**self.kwargs)
        with self.assertRaises(AssertionError) as cm:
            chave.cnpj = ""
            chave.validar()
        chave.cnpj = "1234567891011"
        self.assertEqual(
            "CNPJ necessário para criar chave NF-e",
            str(cm.exception),
            "Validação da chave nf-e incorreta",
        )

        with self.assertRaises(AssertionError) as cm:
            chave.estado = ""
            chave.validar()
        chave.estado = "42"
        self.assertEqual(
            "Estado necessário para criar chave NF-e",
            str(cm.exception),
            "Validação da chave nf-e incorreta",
        )

        with self.assertRaises(AssertionError) as cm:
            chave.emissao = ""
            chave.validar()
        chave.emissao = "0"
        self.assertEqual(
            "Emissão necessário para criar chave NF-e",
            str(cm.exception),
            "Validação da chave nf-e incorreta",
        )

        with self.assertRaises(AssertionError) as cm:
            chave.modelo = ""
            chave.validar()
        chave.modelo = "55"
        self.assertEqual(
            "Modelo necessário para criar chave NF-e",
            str(cm.exception),
            "Validação da chave nf-e incorreta",
        )

        with self.assertRaises(AssertionError) as cm:
            chave.serie = ""
            chave.validar()
        chave.serie = "012"
        self.assertEqual(
            "Série necessária para criar chave NF-e",
            str(cm.exception),
            "Validação da chave nf-e incorreta",
        )

        with self.assertRaises(AssertionError) as cm:
            chave.numero = ""
            chave.validar()
        chave.numero = "000000780"
        self.assertEqual(
            "Número necessário para criar chave NF-e",
            str(cm.exception),
            "Validação da chave nf-e incorreta",
        )

        with self.assertRaises(AssertionError) as cm:
            chave.tipo = ""
            chave.validar()
        chave.tipo = "42"
        self.assertEqual(
            "Tipo necessário para criar chave NF-e",
            str(cm.exception),
            "Validação da chave nf-e incorreta",
        )

        with self.assertRaises(AssertionError) as cm:
            chave.codigo = ""
            chave.validar()
        self.assertEqual(
            "Código necessário para criar chave NF-e",
            str(cm.exception),
            "Validação da chave nf-e incorreta",
        )